1
#ifndef _SQUIRREL_VM_H_
2
#define _SQUIRREL_VM_H_
6
SquirrelError(const SQChar* s):desc(s){}
10
struct SquirrelVMSys {
12
SquirrelObject * _root;
15
// C::B patch: Add additional initilisation flags
16
enum SquirrelInitFlags
28
friend class SquirrelObject;
29
friend struct SquirrelError;
31
// C::B patch: Add additional initilisation flags
32
static void Init(SquirrelInitFlags flags = sqifAll);
33
static BOOL IsInitialized(){return _VM == NULL?FALSE:TRUE;}
34
static void Shutdown();
35
static void Cleanup();
36
static BOOL Update(); //debugger and maybe GC later
37
static SquirrelObject CompileScript(const SQChar *s);
38
static SquirrelObject CompileBuffer(const SQChar *s,const SQChar * debugInfo=sqT("console_buffer"));
39
static SquirrelObject RunScript(const SquirrelObject &o,SquirrelObject *_this = NULL);
40
static void PrintFunc(HSQUIRRELVM v,const SQChar* s,...);
41
static BOOL BeginCall(const SquirrelObject &func);
42
static BOOL BeginCall(const SquirrelObject &func,SquirrelObject &_this);
43
static void PushParam(const SquirrelObject &o);
44
static void PushParam(const SQChar *s);
45
static void PushParam(SQInteger n);
46
static void PushParam(SQFloat f);
47
static void PushParam(SQUserPointer up);
48
static void PushParamNull();
49
static SquirrelObject EndCall();
50
static SquirrelObject CreateString(const SQChar *s);
51
static SquirrelObject CreateTable();
52
static SquirrelObject CreateArray(SQInteger size);
53
static SquirrelObject CreateInstance(SquirrelObject &oclass); // oclass is an existing class. Create an 'instance' (OT_INSTANCE) of oclass.
54
static SquirrelObject CreateFunction(SQFUNCTION func);
55
static SquirrelObject CreateUserData(SQInteger size);
57
static const SquirrelObject &GetRootTable();
58
static HSQUIRRELVM GetVMPtr() { return _VM; }
61
static void SetVMPtr(HSQUIRRELVM v) {
66
static void GetVMSys(SquirrelVMSys & vmSys) {
71
static void SetVMSys(const SquirrelVMSys & vmSys) {
76
static void PushValue(INT val) {
77
sq_pushinteger(_VM,val);
79
static void PushValue(FLOAT val) {
80
sq_pushfloat(_VM,val);
82
static void PushValue(bool val) { // Compiler treats SQBool as INT.
85
static void PushValue(SQChar * val) {
86
sq_pushstring(_VM,val,-1);
88
static void PushValue(SQUserPointer val) {
89
sq_pushuserpointer(_VM,val);
91
static void PushValue(const SQChar * val) {
92
sq_pushstring(_VM,val,-1);
94
static void PushObject(SquirrelObject & so) {
95
sq_pushobject(_VM,so._o);
97
static void Pop(SQInteger nelemstopop) {
98
sq_pop(_VM,nelemstopop);
100
static void PushRootTable(void);
101
// Create/bind a function on the table currently on the stack.
102
static SquirrelObject CreateFunction(SQFUNCTION func,const SQChar * scriptFuncName,const SQChar * typeMask=0);
103
// Create/bind a function on the table so. typeMask: standard Squirrel types plus: no typemask means no args, "*" means any type of args.
104
static SquirrelObject CreateFunction(SquirrelObject & so,SQFUNCTION func,const SQChar * scriptFuncName,const SQChar * typeMask=0);
105
// Create/bind a function to the root table. typeMask: standard Squirrel types plus: no typemask means no args, "*" means any type of args.
106
static SquirrelObject CreateFunctionGlobal(SQFUNCTION func,const SQChar * scriptFuncName,const SQChar * typeMask=0);
109
static HSQUIRRELVM _VM;
110
static SQInteger _CallState;
111
static SquirrelObject * _root;
115
inline BOOL SquirrelObject::ArrayAppend(T item) {
116
sq_pushobject(SquirrelVM::_VM,GetObjectHandle());
117
SquirrelVM::PushValue(item);
118
BOOL res = sq_arrayappend(SquirrelVM::_VM,-2) == SQ_OK;
119
sq_pop(SquirrelVM::_VM,1);
123
#endif //_SQUIRREL_VM_H_