first commit
This commit is contained in:
145
include/engine/script/script_vm.h
Normal file
145
include/engine/script/script_vm.h
Normal file
@ -0,0 +1,145 @@
|
||||
/* -----------------------------------------------------------------------------
|
||||
GSFramework
|
||||
Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
|
||||
----------------------------------------------------------------------------- */
|
||||
|
||||
|
||||
#ifndef __SCRIPTVMINTERFACE__
|
||||
#define __SCRIPTVMINTERFACE__
|
||||
|
||||
|
||||
#include "script/script_binding_interface.h"
|
||||
#include "http/http_interface.h"
|
||||
#include "network/network_interface.h"
|
||||
#include "memory/nshared_ptr.h"
|
||||
|
||||
|
||||
namespace GS {
|
||||
namespace Script {
|
||||
struct Variant;
|
||||
class Object;
|
||||
|
||||
/*
|
||||
@short Script virtual machine abstract interface.
|
||||
@author Emmanuel Julien (ejulien@gsworks.fr)
|
||||
*/
|
||||
class IVM : public SharedObject
|
||||
{
|
||||
public:
|
||||
|
||||
enum State
|
||||
{
|
||||
StateOk = 0,
|
||||
StateExceptionThrown, ///< Crashed and open for inspection.
|
||||
StateDead ///< Crashed with no hope for inspection.
|
||||
};
|
||||
|
||||
struct IDebug
|
||||
{
|
||||
/// Handle a runtime debug step.
|
||||
virtual void OnStep(char type, const char *source, int line, const char *funcname) = 0;
|
||||
/// Handle a VM kill event.
|
||||
virtual void OnFatalError(const char *reason) = 0;
|
||||
/// Handle a compiler error.
|
||||
virtual void OnCompilerError(const char *error, const char *source, int line) = 0;
|
||||
/// Handle a runtime error.
|
||||
virtual void OnRuntimeException(const char *error) = 0;
|
||||
|
||||
virtual ~IDebug() {}
|
||||
};
|
||||
|
||||
protected:
|
||||
|
||||
State state;
|
||||
AutoPtr <IDebug> debug_interface;
|
||||
|
||||
public:
|
||||
|
||||
BindingPluginManager binding_plugins;
|
||||
|
||||
AutoPtr <Network::INetwork> peer_net;
|
||||
AutoPtr <HTTP::IHTTP> http;
|
||||
|
||||
/*!
|
||||
@name Debugging interface.
|
||||
@{
|
||||
*/
|
||||
struct CallStackEntry
|
||||
{
|
||||
String source, function;
|
||||
int line;
|
||||
|
||||
CallStackEntry(const char *s, const char *f, int l) : source(s), function(f), line(l) {}
|
||||
};
|
||||
|
||||
/// Get VM call stack.
|
||||
virtual void GetCallStack(AutoList <CallStackEntry *> &callstack) { callstack.Clear(); }
|
||||
/// @}
|
||||
|
||||
/// Set VM state.
|
||||
void SetState(State s) { state = s; }
|
||||
/// Get VM state.
|
||||
State GetState() const { return state; }
|
||||
|
||||
/// Get virtual machine name.
|
||||
virtual const char *GetName() const = 0;
|
||||
|
||||
/// Set VM event hook table.
|
||||
virtual void SetDebugInterface(IDebug *, bool enable_debugging = false);
|
||||
/// Get the VM event hook table.
|
||||
IDebug *GetEventHandler() const { return debug_interface; }
|
||||
|
||||
/// Get a VM object.
|
||||
virtual Object *GetObjectFromName(const char *name, const Object *context = 0) = 0;
|
||||
|
||||
/// Compile a script.
|
||||
virtual bool Compile(const char *source, uint size, const Object *context = 0, const char *sourcename = 0) = 0;
|
||||
/// Compile a script from file.
|
||||
virtual bool CompileFile(const char *uri, const Object *context = 0);
|
||||
|
||||
/// Create a script table.
|
||||
virtual Object *CreateTable() = 0;
|
||||
/// Set a VM variable.
|
||||
virtual bool Set(const char *name, const Variant &prop, const Object *context = 0) = 0;
|
||||
/// Get a VM variable.
|
||||
virtual bool Get(const char *name, Variant &prop, const Object *context = 0) = 0;
|
||||
|
||||
/// Create a script array.
|
||||
virtual Object *CreateArray() = 0;
|
||||
/// Append a value to an array.
|
||||
virtual bool Append(const Variant &, const Object *context = 0) = 0;
|
||||
|
||||
/// Setup a function call in the VM.
|
||||
virtual bool SetupFunctionCall(const char *func, const Object *function_object = 0, const Object *search_context = 0) = 0;
|
||||
/// Set function call context.
|
||||
virtual bool SetFunctionCallContext(const Variant &) = 0;
|
||||
/// Push function call null argument.
|
||||
virtual bool PushNullArgument() = 0;
|
||||
/// Push function call argument.
|
||||
virtual bool PushArgument(const Variant &) = 0;
|
||||
/// Execute a function call in the VM, return value as a variant.
|
||||
virtual bool DoFunctionCall(Variant *return_value = 0) = 0;
|
||||
|
||||
/// Invalidate all references to a user object.
|
||||
virtual int InvalidateNativeReference(void *) = 0;
|
||||
|
||||
/// Is the VM open.
|
||||
virtual bool IsOpen() const = 0;
|
||||
/// Open the script VM.
|
||||
virtual bool Open() = 0;
|
||||
/// Crash the VM.
|
||||
virtual void Kill(const char *reason);
|
||||
/// Close the script VM.
|
||||
virtual void Close() = 0;
|
||||
|
||||
IVM();
|
||||
virtual ~IVM();
|
||||
};
|
||||
|
||||
typedef SharedPtr <IVM> sVM;
|
||||
|
||||
} // Script
|
||||
} // GS
|
||||
|
||||
|
||||
#endif // __SCRIPTVMINTERFACE__
|
||||
Reference in New Issue
Block a user