summaryrefslogtreecommitdiffstats
path: root/squirrel_3_0_1_stable/sqplus/SquirrelVM.h
diff options
context:
space:
mode:
Diffstat (limited to 'squirrel_3_0_1_stable/sqplus/SquirrelVM.h')
-rw-r--r--squirrel_3_0_1_stable/sqplus/SquirrelVM.h179
1 files changed, 0 insertions, 179 deletions
diff --git a/squirrel_3_0_1_stable/sqplus/SquirrelVM.h b/squirrel_3_0_1_stable/sqplus/SquirrelVM.h
deleted file mode 100644
index ee66a2b76..000000000
--- a/squirrel_3_0_1_stable/sqplus/SquirrelVM.h
+++ /dev/null
@@ -1,179 +0,0 @@
-#ifndef _SQUIRREL_VM_H_
-#define _SQUIRREL_VM_H_
-
-#include "SquirrelObject.h"
-
-struct SquirrelError {
- SquirrelError();
- SquirrelError(const SQChar* s):desc(s){}
- const SQChar *desc;
-};
-
-// This class can hold a reference to a SquirrelVM. It keeps a Squirrel ref
-// to the VM to protect it from being deleted while held.
-struct SquirrelVMSys {
- SquirrelVMSys() { }
- ~SquirrelVMSys();
-
- void Set( HSQUIRRELVM v );
- void Set( const SquirrelObject& ov );
- void Reset( ){ _vm.Reset(); }
-
- SquirrelVMSys& operator = (HSQUIRRELVM v){ Set(v); return *this; }
- operator HSQUIRRELVM () const;
-
-protected:
- void PushRefVM(HSQUIRRELVM v);
- void PopRefVM();
- SquirrelObject _vm;
- friend class SquirrelVM;
-};
-
-// Notes on creating / destroying SquirrelVM:s:
-//
-// VM:s created through sq_open are special since they create a new
-// SQSharedState. That shared state is later shared by any new thread
-// or friend VM. sq_close can be used for closing VM:s created through
-// sq_open (but not for friend VMs).
-//
-// Using squirrel references in SquirrelVMSys and SquirrelVM, one must
-// make sure that these are all reset if one calls sq_close manually.
-//
-// When there are no more references to a VM, it is destroyed automatically,
-// but the shared state is not! For VM:s created by SquirrelVM, it keeps
-// a list of shared states it has created and will destroy them all on
-// app shutdown.
-
-class SquirrelVM {
- friend class SquirrelObject;
- friend struct SquirrelError;
- friend struct SquirrelVMSys;
-
-public:
- // If a VM is passed as arg here, Init will not alter it. Otherwise
- // a new VM is created and initialized. A squirrel reference is kept
- // while it is the current VM.
- static bool Init( HSQUIRRELVM v=NULL );
-
- // Initialize with an externally created VM, without adding a ref
- // on it. NOTE: This may not be compatible with Set/GetVMSys as
- // we're just working with raw pointers here.
- static bool InitNoRef( HSQUIRRELVM v );
- static BOOL IsInitialized(){return _VM == NULL?FALSE:TRUE;}
-
- static void Release(); // Release ref on VM and reset VM pointer
- static void Shutdown(){ Release(); }
- static void AppFinalShutdown(); // Call when finally shutting down app
-
- static BOOL Update(); //debugger and maybe GC later
-
- static SquirrelObject CompileScript(const SQChar *s);
- static SquirrelObject CompileBuffer(const SQChar *s,const SQChar * debugInfo=_SC("console_buffer"));
- static SquirrelObject RunScript(const SquirrelObject &o,SquirrelObject *_this = NULL);
-
- static void PrintFunc(HSQUIRRELVM v,const SQChar* s,...);
-
- static BOOL BeginCall(const SquirrelObject &func);
- static BOOL BeginCall(const SquirrelObject &func,SquirrelObject &_this);
-
- static void PushParam(const SquirrelObject &o);
- static void PushParam(const SQChar *s);
- static void PushParam(SQInteger n);
- static void PushParam(SQFloat f);
- static void PushParam(SQUserPointer up);
- static void PushParamNull();
-
- static SquirrelObject EndCall();
- static SquirrelObject CreateString(const SQChar *s);
- static SquirrelObject CreateTable();
- static SquirrelObject CreateArray(int size);
- static SquirrelObject CreateInstance(SquirrelObject &oclass); // oclass is an existing class. Create an 'instance' (OT_INSTANCE) of oclass.
- static SquirrelObject CreateFunction(SQFUNCTION func);
- static SquirrelObject CreateUserData(int size);
-
- static const SquirrelObject &GetRootTable();
- static HSQUIRRELVM GetVMPtr() { return _VM; }
-
- // The sandbox VM ptr is one which cannot access functions bound with
- // SqPlus. It is suitable for running non-trusted scripts that can only
- // access basic functionality.
- static void SetSandboxVMPtr(HSQUIRRELVM v) {
- _sandboxVM = v;
- } // SetSandboxVMPtr
-
- static HSQUIRRELVM GetSandboxVMPtr() {
- return _sandboxVM;
- } // GetSandboxVMPtr
-
- static void GetVMSys(SquirrelVMSys & vmSys) {
- vmSys.Set( _vm );
- } // GetVMSys
-
- static void SetVMSys(const SquirrelVMSys & vmSys) {
- Release();
- HSQUIRRELVM v = (HSQUIRRELVM)vmSys;
- if( v )
- Init( v );
- } // SetVMSys
-
- static void PushValue(INT val) {
- sq_pushinteger(_VM,val);
- } // PushValue
- static void PushValue(FLOAT val) {
- sq_pushfloat(_VM,val);
- } // PushValue
- static void PushValue(bool val) { // Compiler treats SQBool as INT.
- sq_pushbool(_VM,val);
- } // PushValue
- static void PushValue(SQChar * val) {
- sq_pushstring(_VM,val,-1);
- } // PushValue
- static void PushValue(SQUserPointer val) {
- sq_pushuserpointer(_VM,val);
- } // PushValue
- static void PushValue(const SQChar * val) {
- sq_pushstring(_VM,val,-1);
- } // PushValue
- static void PushObject(SquirrelObject & so) {
- sq_pushobject(_VM,so._o);
- } // PushObject
- static void Pop(SQInteger nelemstopop) {
- sq_pop(_VM,nelemstopop);
- } // Pop
-
- static void PushRootTable(void);
-
- // Create/bind a function on the table currently on the stack.
- static SquirrelObject CreateFunction(SQFUNCTION func,const SQChar * scriptFuncName,const SQChar * typeMask=0);
- // Create/bind a function on the table so. typeMask: standard Squirrel types plus: no typemask means no args, "*" means any type of args.
- static SquirrelObject CreateFunction(SquirrelObject & so,SQFUNCTION func,const SQChar * scriptFuncName,const SQChar * typeMask=0);
- // Create/bind a function to the root table. typeMask: standard Squirrel types plus: no typemask means no args, "*" means any type of args.
- static SquirrelObject CreateFunctionGlobal(SQFUNCTION func,const SQChar * scriptFuncName,const SQChar * typeMask=0);
-
- // This is a helper to correct a difference in referncing new VM:s in
- // ref counted versus garbage collected modes. NOTE: Only use after creating
- // a VM with: 1 - sq_open() 2 - Creating a ref to the VM (SquirrelObject)
- static void DropVMRefIfRefCounted( HSQUIRRELVM v );
-
-
-private:
- static SquirrelObject _vm; // This is a Squirrel reference to the VM
- static HSQUIRRELVM _VM; // The raw C++ pointer
- static bool _no_vm_ref; // Set if we only keep the raw C++ pointer and no ref
- static int _CallState;
- static SquirrelObject * _root; // Cached root table if non NULL
- static HSQUIRRELVM _sandboxVM; // The sandbox VM (that cannot use bound functions)
-};
-
-
-template<typename T>
-inline BOOL SquirrelObject::ArrayAppend(T item) {
- sq_pushobject(SquirrelVM::_VM,GetObjectHandle());
- SquirrelVM::PushValue(item);
- BOOL res = sq_arrayappend(SquirrelVM::_VM,-2) == SQ_OK;
- sq_pop(SquirrelVM::_VM,1);
- return res;
-} // ArrayAppend
-
-#endif //_SQUIRREL_VM_H_
-