fixed warnings in squirrel
[supertux.git] / src / squirrel / squirrel / sqclass.cpp
index b9dcd9e..11d4095 100644 (file)
-/*\r
-       see copyright notice in squirrel.h\r
-*/\r
-#include "sqpcheader.h"\r
-#include "sqvm.h"\r
-#include "sqtable.h"\r
-#include "sqclass.h"\r
-#include "sqclosure.h"\r
-\r
-SQClass::SQClass(SQSharedState *ss,SQClass *base)\r
-{\r
-       _uiRef=0;\r
-       _base = base;\r
-       _typetag = 0;\r
-       _metamethods.resize(MT_LAST); //size it to max size\r
-       if(_base) {\r
-               _defaultvalues.copy(base->_defaultvalues);\r
-               _methods.copy(base->_methods);\r
-               _metamethods.copy(base->_metamethods);\r
-               __ObjAddRef(_base);\r
-       }\r
-       _members = base?base->_members->Clone() : SQTable::Create(ss,0);\r
-       __ObjAddRef(_members);\r
-       _locked = false;\r
-       INIT_CHAIN();\r
-       ADD_TO_CHAIN(&_sharedstate->_gc_chain, this);\r
-}\r
-\r
-void SQClass::Finalize() { \r
-       _attributes = _null_;\r
-       _defaultvalues.resize(0);\r
-       _methods.resize(0);\r
-       _metamethods.resize(0);\r
-       __ObjRelease(_members);\r
-       if(_base) {\r
-               __ObjRelease(_base);\r
-       }\r
-}\r
-\r
-SQClass::~SQClass()\r
-{\r
-       REMOVE_FROM_CHAIN(&_sharedstate->_gc_chain, this);\r
-       Finalize();\r
-}\r
-\r
-bool SQClass::NewSlot(const SQObjectPtr &key,const SQObjectPtr &val)\r
-{\r
-       SQObjectPtr temp;\r
-       if(_locked) \r
-               return false; //the slot already exists\r
-       if(_members->Get(key,temp) && type(temp) == OT_INTEGER) //overrides the default value\r
-       {\r
-               _defaultvalues[_integer(temp)].val = val;\r
-               return true;\r
-       }\r
-       if(type(val) == OT_CLOSURE || type(val) == OT_NATIVECLOSURE) {\r
-               SQInteger mmidx;\r
-               if((mmidx = _sharedstate->GetMetaMethodIdxByName(key)) != -1) {\r
-                       _metamethods[mmidx] = val;\r
-               } \r
-               else {\r
-                       if(type(temp) == OT_NULL) {\r
-                               SQClassMemeber m;\r
-                               m.val = val;\r
-                               _members->NewSlot(key,SQObjectPtr((SQUserPointer)_methods.size()));\r
-                               _methods.push_back(m);\r
-                       }\r
-                       else {\r
-                               _methods[(int)_userpointer(temp)].val = val;\r
-                       }\r
-               }\r
-               return true;\r
-       }\r
-       SQClassMemeber m;\r
-       m.val = val;\r
-       _members->NewSlot(key,SQObjectPtr((SQInteger)_defaultvalues.size()));\r
-       _defaultvalues.push_back(m);\r
-       return true;\r
-}\r
-\r
-SQInstance *SQClass::CreateInstance()\r
-{\r
-       if(!_locked) Lock();\r
-       return SQInstance::Create(_opt_ss(this),this);\r
-}\r
-\r
-int SQClass::Next(const SQObjectPtr &refpos, SQObjectPtr &outkey, SQObjectPtr &outval)\r
-{\r
-       SQObjectPtr oval;\r
-       int idx = _members->Next(refpos,outkey,oval);\r
-       if(idx != -1) {\r
-               if(type(oval) != OT_INTEGER) {\r
-                       outval = _methods[(int)_userpointer(oval)].val;\r
-               }\r
-               else {\r
-                       outval = _defaultvalues[_integer(oval)].val;\r
-               }\r
-       }\r
-       return idx;\r
-}\r
-\r
-bool SQClass::SetAttributes(const SQObjectPtr &key,const SQObjectPtr &val)\r
-{\r
-       SQObjectPtr idx;\r
-       if(_members->Get(key,idx)) {\r
-               if(type(idx) == OT_INTEGER)\r
-                       _defaultvalues[_integer(idx)].attrs = val;\r
-               else\r
-                       _methods[(int)_userpointer(idx)].attrs = val;\r
-               return true;\r
-       }\r
-       return false;\r
-}\r
-\r
-bool SQClass::GetAttributes(const SQObjectPtr &key,SQObjectPtr &outval)\r
-{\r
-       SQObjectPtr idx;\r
-       if(_members->Get(key,idx)) {\r
-               outval = (type(idx) == OT_INTEGER?_defaultvalues[_integer(idx)].attrs:_methods[(int)_userpointer(idx)].attrs);\r
-               return true;\r
-       }\r
-       return false;\r
-}\r
-\r
-///////////////////////////////////////////////////////////////////////\r
-void SQInstance::Init(SQSharedState *ss)\r
-{\r
-       _uiRef = 0;\r
-       _userpointer = NULL;\r
-       _hook = NULL;\r
-       __ObjAddRef(_class);\r
-       _delegate = _class->_members;\r
-       INIT_CHAIN();\r
-       ADD_TO_CHAIN(&_sharedstate->_gc_chain, this);\r
-}\r
-\r
-SQInstance::SQInstance(SQSharedState *ss, SQClass *c)\r
-{\r
-       _class = c;\r
-       _values.resize(_class->_defaultvalues.size());\r
-       for(unsigned int i = 0; i < _class->_defaultvalues.size(); i++) {\r
-               _values[i] = _class->_defaultvalues[i].val;\r
-       }\r
-       Init(ss);\r
-}\r
-\r
-SQInstance::SQInstance(SQSharedState *ss, SQInstance *i)\r
-{\r
-       _class = i->_class;\r
-       _values.copy(i->_values);\r
-       Init(ss);\r
-}\r
-\r
-void SQInstance::Finalize() \r
-{\r
-       __ObjRelease(_class);\r
-       _values.resize(0);\r
-}\r
-\r
-SQInstance::~SQInstance()\r
-{\r
-       REMOVE_FROM_CHAIN(&_sharedstate->_gc_chain, this);\r
-       Finalize();\r
-}\r
-\r
-bool SQInstance::GetMetaMethod(SQMetaMethod mm,SQObjectPtr &res)\r
-{\r
-       if(type(_class->_metamethods[mm]) != OT_NULL) {\r
-               res = _class->_metamethods[mm];\r
-               return true;\r
-       }\r
-       return false;\r
-}\r
-\r
-bool SQInstance::InstanceOf(SQClass *trg)\r
-{\r
-       SQClass *parent = _class;\r
-       while(parent != NULL) {\r
-               if(parent == trg)\r
-                       return true;\r
-               parent = parent->_base;\r
-       }\r
-       return false;\r
-}\r
+/*
+       see copyright notice in squirrel.h
+*/
+#include "sqpcheader.h"
+#include "sqvm.h"
+#include "sqtable.h"
+#include "sqclass.h"
+#include "sqclosure.h"
+
+SQClass::SQClass(SQSharedState *ss,SQClass *base)
+{
+       _uiRef=0;
+       _base = base;
+       _typetag = 0;
+       _metamethods.resize(MT_LAST); //size it to max size
+       if(_base) {
+               _defaultvalues.copy(base->_defaultvalues);
+               _methods.copy(base->_methods);
+               _metamethods.copy(base->_metamethods);
+               __ObjAddRef(_base);
+       }
+       _members = base?base->_members->Clone() : SQTable::Create(ss,0);
+       __ObjAddRef(_members);
+       _locked = false;
+       INIT_CHAIN();
+       ADD_TO_CHAIN(&_sharedstate->_gc_chain, this);
+}
+
+void SQClass::Finalize() { 
+       _attributes = _null_;
+       _defaultvalues.resize(0);
+       _methods.resize(0);
+       _metamethods.resize(0);
+       __ObjRelease(_members);
+       if(_base) {
+               __ObjRelease(_base);
+       }
+}
+
+SQClass::~SQClass()
+{
+       REMOVE_FROM_CHAIN(&_sharedstate->_gc_chain, this);
+       Finalize();
+}
+
+bool SQClass::NewSlot(const SQObjectPtr &key,const SQObjectPtr &val)
+{
+       SQObjectPtr temp;
+       if(_locked) 
+               return false; //the slot already exists
+       if(_members->Get(key,temp) && type(temp) == OT_INTEGER) //overrides the default value
+       {
+               _defaultvalues[_integer(temp)].val = val;
+               return true;
+       }
+       if(type(val) == OT_CLOSURE || type(val) == OT_NATIVECLOSURE) {
+               SQInteger mmidx;
+               if((mmidx = _sharedstate->GetMetaMethodIdxByName(key)) != -1) {
+                       _metamethods[mmidx] = val;
+               } 
+               else {
+                       if(type(temp) == OT_NULL) {
+                               SQClassMemeber m;
+                               m.val = val;
+                               _members->NewSlot(key,SQObjectPtr((SQUserPointer)_methods.size()));
+                               _methods.push_back(m);
+                       }
+                       else {
+                               _methods[(int)_userpointer(temp)].val = val;
+                       }
+               }
+               return true;
+       }
+       SQClassMemeber m;
+       m.val = val;
+       _members->NewSlot(key,SQObjectPtr((SQInteger)_defaultvalues.size()));
+       _defaultvalues.push_back(m);
+       return true;
+}
+
+SQInstance *SQClass::CreateInstance()
+{
+       if(!_locked) Lock();
+       return SQInstance::Create(_opt_ss(this),this);
+}
+
+int SQClass::Next(const SQObjectPtr &refpos, SQObjectPtr &outkey, SQObjectPtr &outval)
+{
+       SQObjectPtr oval;
+       int idx = _members->Next(refpos,outkey,oval);
+       if(idx != -1) {
+               if(type(oval) != OT_INTEGER) {
+                       outval = _methods[(int)_userpointer(oval)].val;
+               }
+               else {
+                       outval = _defaultvalues[_integer(oval)].val;
+               }
+       }
+       return idx;
+}
+
+bool SQClass::SetAttributes(const SQObjectPtr &key,const SQObjectPtr &val)
+{
+       SQObjectPtr idx;
+       if(_members->Get(key,idx)) {
+               if(type(idx) == OT_INTEGER)
+                       _defaultvalues[_integer(idx)].attrs = val;
+               else
+                       _methods[(int)_userpointer(idx)].attrs = val;
+               return true;
+       }
+       return false;
+}
+
+bool SQClass::GetAttributes(const SQObjectPtr &key,SQObjectPtr &outval)
+{
+       SQObjectPtr idx;
+       if(_members->Get(key,idx)) {
+               outval = (type(idx) == OT_INTEGER?_defaultvalues[_integer(idx)].attrs:_methods[(int)_userpointer(idx)].attrs);
+               return true;
+       }
+       return false;
+}
+
+///////////////////////////////////////////////////////////////////////
+void SQInstance::Init(SQSharedState *ss)
+{
+       _uiRef = 0;
+       _userpointer = NULL;
+       _hook = NULL;
+       __ObjAddRef(_class);
+       _delegate = _class->_members;
+       INIT_CHAIN();
+       ADD_TO_CHAIN(&_sharedstate->_gc_chain, this);
+}
+
+SQInstance::SQInstance(SQSharedState *ss, SQClass *c)
+{
+       _class = c;
+       _values.resize(_class->_defaultvalues.size());
+       for(unsigned int i = 0; i < _class->_defaultvalues.size(); i++) {
+               _values[i] = _class->_defaultvalues[i].val;
+       }
+       Init(ss);
+}
+
+SQInstance::SQInstance(SQSharedState *ss, SQInstance *i)
+{
+       _class = i->_class;
+       _values.copy(i->_values);
+       Init(ss);
+}
+
+void SQInstance::Finalize() 
+{
+       __ObjRelease(_class);
+       _values.resize(0);
+}
+
+SQInstance::~SQInstance()
+{
+       REMOVE_FROM_CHAIN(&_sharedstate->_gc_chain, this);
+       Finalize();
+}
+
+bool SQInstance::GetMetaMethod(SQMetaMethod mm,SQObjectPtr &res)
+{
+       if(type(_class->_metamethods[mm]) != OT_NULL) {
+               res = _class->_metamethods[mm];
+               return true;
+       }
+       return false;
+}
+
+bool SQInstance::InstanceOf(SQClass *trg)
+{
+       SQClass *parent = _class;
+       while(parent != NULL) {
+               if(parent == trg)
+                       return true;
+               parent = parent->_base;
+       }
+       return false;
+}