Update to SQUIRREL 3.0.4
[supertux.git] / external / squirrel / squirrel / sqclass.h
old mode 100755 (executable)
new mode 100644 (file)
index 281b0fa..996a3df
@@ -5,11 +5,6 @@
 struct SQInstance;\r
 \r
 struct SQClassMember {\r
-       SQClassMember(){}\r
-       SQClassMember(const SQClassMember &o) {\r
-               val = o.val;\r
-               attrs = o.attrs;\r
-       }\r
        SQObjectPtr val;\r
        SQObjectPtr attrs;\r
 };\r
@@ -50,6 +45,14 @@ public:
                }\r
                return false;\r
        }\r
+       bool GetConstructor(SQObjectPtr &ctor)\r
+       {\r
+               if(_constructoridx != -1) {\r
+                       ctor = _methods[_constructoridx].val;\r
+                       return true;\r
+               }\r
+               return false;\r
+       }\r
        bool SetAttributes(const SQObjectPtr &key,const SQObjectPtr &val);\r
        bool GetAttributes(const SQObjectPtr &key,SQObjectPtr &outval);\r
        void Lock() { _locked = true; if(_base) _base->Lock(); }\r
@@ -60,6 +63,7 @@ public:
        void Finalize();\r
 #ifndef NO_GARBAGE_COLLECTOR\r
        void Mark(SQCollectable ** );\r
+       SQObjectType GetType() {return OT_CLASS;}\r
 #endif\r
        SQInteger Next(const SQObjectPtr &refpos, SQObjectPtr &outkey, SQObjectPtr &outval);\r
        SQInstance *CreateInstance();\r
@@ -67,16 +71,17 @@ public:
        SQClass *_base;\r
        SQClassMemberVec _defaultvalues;\r
        SQClassMemberVec _methods;\r
-       SQObjectPtrVec _metamethods;\r
+       SQObjectPtr _metamethods[MT_LAST];\r
        SQObjectPtr _attributes;\r
        SQUserPointer _typetag;\r
        SQRELEASEHOOK _hook;\r
        bool _locked;\r
+       SQInteger _constructoridx;\r
        SQInteger _udsize;\r
 };\r
 \r
 #define calcinstancesize(_theclass_) \\r
-       (_theclass_->_udsize + sizeof(SQInstance) + (sizeof(SQObjectPtr)*(_theclass_->_defaultvalues.size()>0?_theclass_->_defaultvalues.size()-1:0)))\r
+       (_theclass_->_udsize + sq_aligning(sizeof(SQInstance) +  (sizeof(SQObjectPtr)*(_theclass_->_defaultvalues.size()>0?_theclass_->_defaultvalues.size()-1:0))))\r
 \r
 struct SQInstance : public SQDelegable \r
 {\r
@@ -138,6 +143,7 @@ public:
        void Finalize();\r
 #ifndef NO_GARBAGE_COLLECTOR \r
        void Mark(SQCollectable ** );\r
+       SQObjectType GetType() {return OT_INSTANCE;}\r
 #endif\r
        bool InstanceOf(SQClass *trg);\r
        bool GetMetaMethod(SQVM *v,SQMetaMethod mm,SQObjectPtr &res);\r