first commit

This commit is contained in:
2026-06-22 11:49:35 +02:00
commit d805f2ba86
619 changed files with 126873 additions and 0 deletions

View 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__