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
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
29 SQUnsignedInteger refs;
\r
30 struct RefNode *next;
\r
34 void AddRef(SQObject &obj);
\r
35 SQBool Release(SQObject &obj);
\r
36 #ifndef NO_GARBAGE_COLLECTOR
\r
37 void Mark(SQCollectable **chain);
\r
41 RefNode *Get(SQObject &obj,SQHash &mainpos,RefNode **prev,bool add);
\r
42 RefNode *Add(SQHash mainpos,SQObject &obj);
\r
43 void Resize(SQUnsignedInteger size);
\r
44 void AllocNodes(SQUnsignedInteger size);
\r
45 SQUnsignedInteger _numofslots;
\r
46 SQUnsignedInteger _slotused;
\r
47 SQUnsignedInteger _buffersize;
\r
52 #define ADD_STRING(ss,str,len) ss->_stringtable->Add(str,len)
\r
53 #define REMOVE_STRING(ss,bstr) ss->_stringtable->Remove(bstr)
\r
57 struct SQSharedState
\r
63 SQChar* GetScratchPad(SQInteger size);
\r
64 SQInteger GetMetaMethodIdxByName(const SQObjectPtr &name);
\r
65 #ifndef NO_GARBAGE_COLLECTOR
\r
66 SQInteger CollectGarbage(SQVM *vm);
\r
67 static void MarkObject(SQObjectPtr &o,SQCollectable **chain);
\r
69 SQObjectPtrVec *_metamethods;
\r
70 SQObjectPtr _metamethodsmap;
\r
71 SQObjectPtrVec *_systemstrings;
\r
72 SQObjectPtrVec *_types;
\r
73 StringTable *_stringtable;
\r
74 RefTable _refs_table;
\r
75 SQObjectPtr _registry;
\r
76 SQObjectPtr _constructoridx;
\r
77 #ifndef NO_GARBAGE_COLLECTOR
\r
78 SQCollectable *_gc_chain;
\r
80 SQObjectPtr _root_vm;
\r
81 SQObjectPtr _table_default_delegate;
\r
82 static SQRegFunction _table_default_delegate_funcz[];
\r
83 SQObjectPtr _array_default_delegate;
\r
84 static SQRegFunction _array_default_delegate_funcz[];
\r
85 SQObjectPtr _string_default_delegate;
\r
86 static SQRegFunction _string_default_delegate_funcz[];
\r
87 SQObjectPtr _number_default_delegate;
\r
88 static SQRegFunction _number_default_delegate_funcz[];
\r
89 SQObjectPtr _generator_default_delegate;
\r
90 static SQRegFunction _generator_default_delegate_funcz[];
\r
91 SQObjectPtr _closure_default_delegate;
\r
92 static SQRegFunction _closure_default_delegate_funcz[];
\r
93 SQObjectPtr _thread_default_delegate;
\r
94 static SQRegFunction _thread_default_delegate_funcz[];
\r
95 SQObjectPtr _class_default_delegate;
\r
96 static SQRegFunction _class_default_delegate_funcz[];
\r
97 SQObjectPtr _instance_default_delegate;
\r
98 static SQRegFunction _instance_default_delegate_funcz[];
\r
99 SQObjectPtr _weakref_default_delegate;
\r
100 static SQRegFunction _weakref_default_delegate_funcz[];
\r
102 SQCOMPILERERROR _compilererrorhandler;
\r
103 SQPRINTFUNCTION _printfunc;
\r
105 bool _notifyallexceptions;
\r
107 SQChar *_scratchpad;
\r
108 SQInteger _scratchpadsize;
\r
111 #define _sp(s) (_sharedstate->GetScratchPad(s))
\r
112 #define _spval (_sharedstate->GetScratchPad(-1))
\r
114 #define _table_ddel _table(_sharedstate->_table_default_delegate)
\r
115 #define _array_ddel _table(_sharedstate->_array_default_delegate)
\r
116 #define _string_ddel _table(_sharedstate->_string_default_delegate)
\r
117 #define _number_ddel _table(_sharedstate->_number_default_delegate)
\r
118 #define _generator_ddel _table(_sharedstate->_generator_default_delegate)
\r
119 #define _closure_ddel _table(_sharedstate->_closure_default_delegate)
\r
120 #define _thread_ddel _table(_sharedstate->_thread_default_delegate)
\r
121 #define _class_ddel _table(_sharedstate->_class_default_delegate)
\r
122 #define _instance_ddel _table(_sharedstate->_instance_default_delegate)
\r
123 #define _weakref_ddel _table(_sharedstate->_weakref_default_delegate)
\r
125 #ifdef SQUNICODE //rsl REAL STRING LEN
\r
126 #define rsl(l) ((l)<<1)
\r
131 extern SQObjectPtr _null_;
\r
132 extern SQObjectPtr _true_;
\r
133 extern SQObjectPtr _false_;
\r
134 extern SQObjectPtr _one_;
\r
135 extern SQObjectPtr _minusone_;
\r
137 bool CompileTypemask(SQIntVec &res,const SQChar *typemask);
\r
139 void *sq_vm_malloc(SQUnsignedInteger size);
\r
140 void *sq_vm_realloc(void *p,SQUnsignedInteger oldsize,SQUnsignedInteger size);
\r
141 void sq_vm_free(void *p,SQUnsignedInteger size);
\r
142 #endif //_SQSTATE_H_
\r