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
}\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
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
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
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