1 /* see copyright notice in squirrel.h */ 2 #ifndef _SQSTATE_H_ 3 #define _SQSTATE_H_ 4 5 #include "squtils.h" 6 #include "sqobject.h" 7 struct SQString; 8 struct SQTable; 9 //max number of character for a printed number 10 #define NUMBER_MAX_CHAR 50 11 12 struct StringTable 13 { 14 StringTable(); 15 ~StringTable(); 16 //return a string obj if exists 17 //so when there is a table query, if the string doesn't exists in the global state 18 //it cannot be in a table so the result will be always null 19 //SQString *get(const SQChar *news); 20 SQString *Add(const SQChar *,SQInteger len); 21 void Remove(SQString *); 22 private: 23 void Resize(SQInteger size); 24 void AllocNodes(SQInteger size); 25 SQString **_strings; 26 SQUnsignedInteger _numofslots; 27 SQUnsignedInteger _slotused; 28 }; 29 30 #define ADD_STRING(ss,str,len) ss->_stringtable->Add(str,len) 31 #define REMOVE_STRING(ss,bstr) ss->_stringtable->Remove(bstr) 32 33 struct SQObjectPtr; 34 35 struct SQSharedState 36 { 37 SQSharedState(); 38 ~SQSharedState(); 39 void Init(); 40 public: 41 SQChar* GetScratchPad(SQInteger size); 42 SQInteger GetMetaMethodIdxByName(const SQObjectPtr &name); 43 #ifndef NO_GARBAGE_COLLECTOR 44 SQInteger CollectGarbage(SQVM *vm); 45 static void MarkObject(SQObjectPtr &o,SQCollectable **chain); 46 #endif 47 SQObjectPtrVec *_metamethods; 48 SQObjectPtr _metamethodsmap; 49 SQObjectPtrVec *_systemstrings; 50 SQObjectPtrVec *_types; 51 StringTable *_stringtable; 52 SQObjectPtr _refs_table; 53 SQObjectPtr _registry; 54 SQObjectPtr _constructoridx; 55 #ifndef NO_GARBAGE_COLLECTOR 56 SQCollectable *_gc_chain; 57 #endif 58 SQObjectPtr _root_vm; 59 SQObjectPtr _table_default_delegate; 60 static SQRegFunction _table_default_delegate_funcz[]; 61 SQObjectPtr _array_default_delegate; 62 static SQRegFunction _array_default_delegate_funcz[]; 63 SQObjectPtr _string_default_delegate; 64 static SQRegFunction _string_default_delegate_funcz[]; 65 SQObjectPtr _number_default_delegate; 66 static SQRegFunction _number_default_delegate_funcz[]; 67 SQObjectPtr _generator_default_delegate; 68 static SQRegFunction _generator_default_delegate_funcz[]; 69 SQObjectPtr _closure_default_delegate; 70 static SQRegFunction _closure_default_delegate_funcz[]; 71 SQObjectPtr _thread_default_delegate; 72 static SQRegFunction _thread_default_delegate_funcz[]; 73 SQObjectPtr _class_default_delegate; 74 static SQRegFunction _class_default_delegate_funcz[]; 75 SQObjectPtr _instance_default_delegate; 76 static SQRegFunction _instance_default_delegate_funcz[]; 77 SQObjectPtr _weakref_default_delegate; 78 static SQRegFunction _weakref_default_delegate_funcz[]; 79 80 SQCOMPILERERROR _compilererrorhandler; 81 SQPRINTFUNCTION _printfunc; 82 bool _debuginfo; 83 private: 84 SQChar *_scratchpad; 85 SQInteger _scratchpadsize; 86 }; 87 88 #define _sp(s) (_sharedstate->GetScratchPad(s)) 89 #define _spval (_sharedstate->GetScratchPad(-1)) 90 91 #define _table_ddel _table(_sharedstate->_table_default_delegate) 92 #define _array_ddel _table(_sharedstate->_array_default_delegate) 93 #define _string_ddel _table(_sharedstate->_string_default_delegate) 94 #define _number_ddel _table(_sharedstate->_number_default_delegate) 95 #define _generator_ddel _table(_sharedstate->_generator_default_delegate) 96 #define _closure_ddel _table(_sharedstate->_closure_default_delegate) 97 #define _thread_ddel _table(_sharedstate->_thread_default_delegate) 98 #define _class_ddel _table(_sharedstate->_class_default_delegate) 99 #define _instance_ddel _table(_sharedstate->_instance_default_delegate) 100 #define _weakref_ddel _table(_sharedstate->_weakref_default_delegate) 101 102 #ifdef SQUNICODE //rsl REAL STRING LEN 103 #define rsl(l) ((l)<<1) 104 #else 105 #define rsl(l) (l) 106 #endif 107 108 extern SQObjectPtr _null_; 109 extern SQObjectPtr _true_; 110 extern SQObjectPtr _false_; 111 extern SQObjectPtr _one_; 112 extern SQObjectPtr _minusone_; 113 114 bool CompileTypemask(SQIntVec &res,const SQChar *typemask); 115 116 #endif //_SQSTATE_H_ 117