1 /* see copyright notice in squirrel.h */
\r
6 #include "sqobject.h"
\r
9 //max number of character for a printed number
\r
10 #define NUMBER_MAX_CHAR 50
\r
12 struct SQStringTable
\r
14 SQStringTable(SQSharedState*ss);
\r
16 SQString *Add(const SQChar *,SQInteger len);
\r
17 void Remove(SQString *);
\r
19 void Resize(SQInteger size);
\r
20 void AllocNodes(SQInteger size);
\r
21 SQString **_strings;
\r
22 SQUnsignedInteger _numofslots;
\r
23 SQUnsignedInteger _slotused;
\r
24 SQSharedState *_sharedstate;
\r
30 SQUnsignedInteger refs;
\r
31 struct RefNode *next;
\r
35 void AddRef(SQObject &obj);
\r
36 SQBool Release(SQObject &obj);
\r
37 SQUnsignedInteger GetRefCount(SQObject &obj);
\r
38 #ifndef NO_GARBAGE_COLLECTOR
\r
39 void Mark(SQCollectable **chain);
\r
43 RefNode *Get(SQObject &obj,SQHash &mainpos,RefNode **prev,bool add);
\r
44 RefNode *Add(SQHash mainpos,SQObject &obj);
\r
45 void Resize(SQUnsignedInteger size);
\r
46 void AllocNodes(SQUnsignedInteger size);
\r
47 SQUnsignedInteger _numofslots;
\r
48 SQUnsignedInteger _slotused;
\r
54 #define ADD_STRING(ss,str,len) ss->_stringtable->Add(str,len)
\r
55 #define REMOVE_STRING(ss,bstr) ss->_stringtable->Remove(bstr)
\r
59 struct SQSharedState
\r
65 SQChar* GetScratchPad(SQInteger size);
\r
66 SQInteger GetMetaMethodIdxByName(const SQObjectPtr &name);
\r
67 #ifndef NO_GARBAGE_COLLECTOR
\r
68 SQInteger CollectGarbage(SQVM *vm);
\r
69 void RunMark(SQVM *vm,SQCollectable **tchain);
\r
70 SQInteger ResurrectUnreachable(SQVM *vm);
\r
71 static void MarkObject(SQObjectPtr &o,SQCollectable **chain);
\r
73 SQObjectPtrVec *_metamethods;
\r
74 SQObjectPtr _metamethodsmap;
\r
75 SQObjectPtrVec *_systemstrings;
\r
76 SQObjectPtrVec *_types;
\r
77 SQStringTable *_stringtable;
\r
78 RefTable _refs_table;
\r
79 SQObjectPtr _registry;
\r
80 SQObjectPtr _consts;
\r
81 SQObjectPtr _constructoridx;
\r
82 #ifndef NO_GARBAGE_COLLECTOR
\r
83 SQCollectable *_gc_chain;
\r
85 SQObjectPtr _root_vm;
\r
86 SQObjectPtr _table_default_delegate;
\r
87 static SQRegFunction _table_default_delegate_funcz[];
\r
88 SQObjectPtr _array_default_delegate;
\r
89 static SQRegFunction _array_default_delegate_funcz[];
\r
90 SQObjectPtr _string_default_delegate;
\r
91 static SQRegFunction _string_default_delegate_funcz[];
\r
92 SQObjectPtr _number_default_delegate;
\r
93 static SQRegFunction _number_default_delegate_funcz[];
\r
94 SQObjectPtr _generator_default_delegate;
\r
95 static SQRegFunction _generator_default_delegate_funcz[];
\r
96 SQObjectPtr _closure_default_delegate;
\r
97 static SQRegFunction _closure_default_delegate_funcz[];
\r
98 SQObjectPtr _thread_default_delegate;
\r
99 static SQRegFunction _thread_default_delegate_funcz[];
\r
100 SQObjectPtr _class_default_delegate;
\r
101 static SQRegFunction _class_default_delegate_funcz[];
\r
102 SQObjectPtr _instance_default_delegate;
\r
103 static SQRegFunction _instance_default_delegate_funcz[];
\r
104 SQObjectPtr _weakref_default_delegate;
\r
105 static SQRegFunction _weakref_default_delegate_funcz[];
\r
107 SQCOMPILERERROR _compilererrorhandler;
\r
108 SQPRINTFUNCTION _printfunc;
\r
109 SQPRINTFUNCTION _errorfunc;
\r
111 bool _notifyallexceptions;
\r
113 SQChar *_scratchpad;
\r
114 SQInteger _scratchpadsize;
\r
117 #define _sp(s) (_sharedstate->GetScratchPad(s))
\r
118 #define _spval (_sharedstate->GetScratchPad(-1))
\r
120 #define _table_ddel _table(_sharedstate->_table_default_delegate)
\r
121 #define _array_ddel _table(_sharedstate->_array_default_delegate)
\r
122 #define _string_ddel _table(_sharedstate->_string_default_delegate)
\r
123 #define _number_ddel _table(_sharedstate->_number_default_delegate)
\r
124 #define _generator_ddel _table(_sharedstate->_generator_default_delegate)
\r
125 #define _closure_ddel _table(_sharedstate->_closure_default_delegate)
\r
126 #define _thread_ddel _table(_sharedstate->_thread_default_delegate)
\r
127 #define _class_ddel _table(_sharedstate->_class_default_delegate)
\r
128 #define _instance_ddel _table(_sharedstate->_instance_default_delegate)
\r
129 #define _weakref_ddel _table(_sharedstate->_weakref_default_delegate)
\r
131 #ifdef SQUNICODE //rsl REAL STRING LEN
\r
132 #define rsl(l) ((l)<<1)
\r
137 //extern SQObjectPtr _null_;
\r
139 bool CompileTypemask(SQIntVec &res,const SQChar *typemask);
\r
142 #endif //_SQSTATE_H_
\r