#pragma once #include "vscript/languages/squirrel_re/include/squirrel.h" struct SQTable; struct SQRefCounted { void* vftable; SQInteger uiRef; void* weakRef; // Probably }; struct SQCollectable : public SQRefCounted { SQCollectable* _next; SQCollectable* _prev; SQSharedState* _sharedstate; }; struct SQDelegable : public SQCollectable { SQTable* _delegate; }; enum SQObjectType : int { _RT_NULL = 0x1, _RT_INTEGER = 0x2, _RT_FLOAT = 0x4, _RT_BOOL = 0x8, _RT_STRING = 0x10, _RT_TABLE = 0x20, _RT_ARRAY = 0x40, _RT_USERDATA = 0x80, _RT_CLOSURE = 0x100, _RT_NATIVECLOSURE = 0x200, _RT_GENERATOR = 0x400, OT_USERPOINTER = 0x800, _RT_USERPOINTER = 0x800, _RT_THREAD = 0x1000, _RT_FUNCPROTO = 0x2000, _RT_CLASS = 0x4000, _RT_INSTANCE = 0x8000, _RT_WEAKREF = 0x10000, OT_VECTOR = 0x40000, SQOBJECT_CANBEFALSE = 0x1000000, OT_NULL = 0x1000001, OT_BOOL = 0x1000008, SQOBJECT_DELEGABLE = 0x2000000, SQOBJECT_NUMERIC = 0x4000000, OT_INTEGER = 0x5000002, OT_FLOAT = 0x5000004, SQOBJECT_REF_COUNTED = 0x8000000, OT_STRING = 0x8000010, OT_ARRAY = 0x8000040, OT_CLOSURE = 0x8000100, OT_NATIVECLOSURE = 0x8000200, OT_ASSET = 0x8000400, OT_THREAD = 0x8001000, OT_FUNCPROTO = 0x8002000, OT_CLAAS = 0x8004000, OT_STRUCT = 0x8200000, OT_WEAKREF = 0x8010000, OT_TABLE = 0xA000020, OT_USERDATA = 0xA000080, OT_INSTANCE = 0xA008000, OT_ENTITY = 0xA400000, }; union SQObjectValue { SQString* asString; SQTable* asTable; SQClosure* asClosure; SQFunctionProto* asFuncProto; SQStructDef* asStructDef; long long as64Integer; SQNativeClosure* asNativeClosure; SQArray* asArray; HSQUIRRELVM asThread; float asFloat; int asInteger; SQUserData* asUserdata; SQStructInstance* asStructInstance; }; struct SQObject { SQObjectType _Type; int structNumber; SQObjectValue _VAL; };