Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
sqstate.h
00001 /* see copyright notice in squirrel.h */ 00002 #ifndef _SQSTATE_H_ 00003 #define _SQSTATE_H_ 00004 00005 #include "squtils.h" 00006 #include "sqobject.h" 00007 struct SQString; 00008 struct SQTable; 00009 //max number of character for a printed number 00010 #define NUMBER_MAX_CHAR 50 00011 00012 struct SQStringTable 00013 { 00014 SQStringTable(SQSharedState*ss); 00015 ~SQStringTable(); 00016 SQString *Add(const SQChar *,SQInteger len); 00017 void Remove(SQString *); 00018 private: 00019 void Resize(SQInteger size); 00020 void AllocNodes(SQInteger size); 00021 SQString **_strings; 00022 SQUnsignedInteger _numofslots; 00023 SQUnsignedInteger _slotused; 00024 SQSharedState *_sharedstate; 00025 }; 00026 00027 struct RefTable { 00028 struct RefNode { 00029 SQObjectPtr obj; 00030 SQUnsignedInteger refs; 00031 struct RefNode *next; 00032 }; 00033 RefTable(); 00034 ~RefTable(); 00035 void AddRef(SQObject &obj); 00036 SQBool Release(SQObject &obj); 00037 SQUnsignedInteger GetRefCount(SQObject &obj); 00038 #ifndef NO_GARBAGE_COLLECTOR 00039 void Mark(SQCollectable **chain); 00040 #endif 00041 void Finalize(); 00042 private: 00043 RefNode *Get(SQObject &obj,SQHash &mainpos,RefNode **prev,bool add); 00044 RefNode *Add(SQHash mainpos,SQObject &obj); 00045 void Resize(SQUnsignedInteger size); 00046 void AllocNodes(SQUnsignedInteger size); 00047 SQUnsignedInteger _numofslots; 00048 SQUnsignedInteger _slotused; 00049 RefNode *_nodes; 00050 RefNode *_freelist; 00051 RefNode **_buckets; 00052 }; 00053 00054 #define ADD_STRING(ss,str,len) ss->_stringtable->Add(str,len) 00055 #define REMOVE_STRING(ss,bstr) ss->_stringtable->Remove(bstr) 00056 00057 struct SQObjectPtr; 00058 00059 struct SQSharedState 00060 { 00061 SQSharedState(); 00062 ~SQSharedState(); 00063 void Init(); 00064 public: 00065 SQChar* GetScratchPad(SQInteger size); 00066 SQInteger GetMetaMethodIdxByName(const SQObjectPtr &name); 00067 #ifndef NO_GARBAGE_COLLECTOR 00068 SQInteger CollectGarbage(SQVM *vm); 00069 void RunMark(SQVM *vm,SQCollectable **tchain); 00070 SQInteger ResurrectUnreachable(SQVM *vm); 00071 static void MarkObject(SQObjectPtr &o,SQCollectable **chain); 00072 #endif 00073 SQObjectPtrVec *_metamethods; 00074 SQObjectPtr _metamethodsmap; 00075 SQObjectPtrVec *_systemstrings; 00076 SQObjectPtrVec *_types; 00077 SQStringTable *_stringtable; 00078 RefTable _refs_table; 00079 SQObjectPtr _registry; 00080 SQObjectPtr _consts; 00081 SQObjectPtr _constructoridx; 00082 #ifndef NO_GARBAGE_COLLECTOR 00083 SQCollectable *_gc_chain; 00084 #endif 00085 SQObjectPtr _root_vm; 00086 SQObjectPtr _table_default_delegate; 00087 static SQRegFunction _table_default_delegate_funcz[]; 00088 SQObjectPtr _array_default_delegate; 00089 static SQRegFunction _array_default_delegate_funcz[]; 00090 SQObjectPtr _string_default_delegate; 00091 static SQRegFunction _string_default_delegate_funcz[]; 00092 SQObjectPtr _number_default_delegate; 00093 static SQRegFunction _number_default_delegate_funcz[]; 00094 SQObjectPtr _generator_default_delegate; 00095 static SQRegFunction _generator_default_delegate_funcz[]; 00096 SQObjectPtr _closure_default_delegate; 00097 static SQRegFunction _closure_default_delegate_funcz[]; 00098 SQObjectPtr _thread_default_delegate; 00099 static SQRegFunction _thread_default_delegate_funcz[]; 00100 SQObjectPtr _class_default_delegate; 00101 static SQRegFunction _class_default_delegate_funcz[]; 00102 SQObjectPtr _instance_default_delegate; 00103 static SQRegFunction _instance_default_delegate_funcz[]; 00104 SQObjectPtr _weakref_default_delegate; 00105 static SQRegFunction _weakref_default_delegate_funcz[]; 00106 00107 SQCOMPILERERROR _compilererrorhandler; 00108 SQPRINTFUNCTION _printfunc; 00109 SQPRINTFUNCTION _errorfunc; 00110 bool _debuginfo; 00111 bool _notifyallexceptions; 00112 private: 00113 SQChar *_scratchpad; 00114 SQInteger _scratchpadsize; 00115 }; 00116 00117 #define _sp(s) (_sharedstate->GetScratchPad(s)) 00118 #define _spval (_sharedstate->GetScratchPad(-1)) 00119 00120 #define _table_ddel _table(_sharedstate->_table_default_delegate) 00121 #define _array_ddel _table(_sharedstate->_array_default_delegate) 00122 #define _string_ddel _table(_sharedstate->_string_default_delegate) 00123 #define _number_ddel _table(_sharedstate->_number_default_delegate) 00124 #define _generator_ddel _table(_sharedstate->_generator_default_delegate) 00125 #define _closure_ddel _table(_sharedstate->_closure_default_delegate) 00126 #define _thread_ddel _table(_sharedstate->_thread_default_delegate) 00127 #define _class_ddel _table(_sharedstate->_class_default_delegate) 00128 #define _instance_ddel _table(_sharedstate->_instance_default_delegate) 00129 #define _weakref_ddel _table(_sharedstate->_weakref_default_delegate) 00130 00131 #ifdef SQUNICODE //rsl REAL STRING LEN 00132 #define rsl(l) ((l)<<1) 00133 #else 00134 #define rsl(l) (l) 00135 #endif 00136 00137 //extern SQObjectPtr _null_; 00138 00139 bool CompileTypemask(SQIntVec &res,const SQChar *typemask); 00140 00141 00142 #endif //_SQSTATE_H_
Generated on Tue Jul 12 2022 21:35:49 by
