~ubuntu-branches/ubuntu/hardy/codeblocks/hardy-backports

« back to all changes in this revision

Viewing changes to src/include/scripting/sqplus/SquirrelVM.h

  • Committer: Bazaar Package Importer
  • Author(s): Michael Casadevall
  • Date: 2008-07-17 04:39:23 UTC
  • Revision ID: james.westby@ubuntu.com-20080717043923-gmsy5cwkdjswghkm
Tags: upstream-8.02
ImportĀ upstreamĀ versionĀ 8.02

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#ifndef _SQUIRREL_VM_H_
 
2
#define _SQUIRREL_VM_H_
 
3
 
 
4
struct SquirrelError {
 
5
        SquirrelError();
 
6
        SquirrelError(const SQChar* s):desc(s){}
 
7
        const SQChar *desc;
 
8
};
 
9
 
 
10
struct SquirrelVMSys {
 
11
  HSQUIRRELVM _VM;
 
12
  SquirrelObject * _root;
 
13
};
 
14
 
 
15
// C::B patch: Add additional initilisation flags
 
16
enum SquirrelInitFlags
 
17
{
 
18
    sqifIO     = 0x01,
 
19
    sqifBlob   = 0x02,
 
20
    sqifMath   = 0x04,
 
21
    sqifString = 0x08,
 
22
 
 
23
    sqifAll    = 0xFF
 
24
};
 
25
 
 
26
class SquirrelVM
 
27
{
 
28
        friend class SquirrelObject;
 
29
        friend struct SquirrelError;
 
30
public:
 
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);
 
56
 
 
57
        static const SquirrelObject &GetRootTable();
 
58
        static HSQUIRRELVM GetVMPtr() { return _VM; }
 
59
 
 
60
#if 0
 
61
  static void SetVMPtr(HSQUIRRELVM v) {
 
62
    _VM = v;
 
63
  } // setVMPtr
 
64
#endif
 
65
 
 
66
  static void GetVMSys(SquirrelVMSys & vmSys) {
 
67
    vmSys._VM   = _VM;
 
68
    vmSys._root = _root;
 
69
  } // GetVMSys
 
70
 
 
71
  static void SetVMSys(const SquirrelVMSys & vmSys) {
 
72
    _VM   = vmSys._VM;
 
73
    _root = vmSys._root;
 
74
  } // SetVMSys
 
75
 
 
76
  static void PushValue(INT val) {
 
77
    sq_pushinteger(_VM,val);
 
78
  } // PushValue
 
79
  static void PushValue(FLOAT val) {
 
80
    sq_pushfloat(_VM,val);
 
81
  } // PushValue
 
82
  static void PushValue(bool val) { // Compiler treats SQBool as INT.
 
83
    sq_pushbool(_VM,val);
 
84
  } // PushValue
 
85
  static void PushValue(SQChar * val) {
 
86
    sq_pushstring(_VM,val,-1);
 
87
  } // PushValue
 
88
  static void PushValue(SQUserPointer val) {
 
89
    sq_pushuserpointer(_VM,val);
 
90
  } // PushValue
 
91
  static void PushValue(const SQChar * val) {
 
92
    sq_pushstring(_VM,val,-1);
 
93
  } // PushValue
 
94
  static void PushObject(SquirrelObject & so) {
 
95
    sq_pushobject(_VM,so._o);
 
96
  } // PushObject
 
97
  static void Pop(SQInteger nelemstopop) {
 
98
    sq_pop(_VM,nelemstopop);
 
99
  } // Pop
 
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);
 
107
 
 
108
private:
 
109
        static HSQUIRRELVM _VM;
 
110
        static SQInteger _CallState;
 
111
        static SquirrelObject * _root;
 
112
};
 
113
 
 
114
template<typename T>
 
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);
 
120
  return res;
 
121
} // ArrayAppend
 
122
 
 
123
#endif //_SQUIRREL_VM_H_
 
124