2004-05-30 02:46:58 +02:00
|
|
|
|
|
|
|
#ifndef _SCRIPTINGHOST_H_
|
|
|
|
#define _SCRIPTINGHOST_H_
|
|
|
|
|
2005-01-07 01:47:44 +01:00
|
|
|
#include "ps/Errors.h"
|
2004-07-31 17:57:18 +02:00
|
|
|
|
2004-07-18 13:51:15 +02:00
|
|
|
ERROR_GROUP(Scripting);
|
|
|
|
ERROR_TYPE(Scripting, RuntimeCreationFailed);
|
|
|
|
ERROR_TYPE(Scripting, ContextCreationFailed);
|
|
|
|
ERROR_TYPE(Scripting, GlobalObjectCreationFailed);
|
|
|
|
ERROR_TYPE(Scripting, StandardClassSetupFailed);
|
|
|
|
ERROR_TYPE(Scripting, NativeFunctionSetupFailed);
|
|
|
|
|
|
|
|
ERROR_SUBGROUP(Scripting, LoadFile);
|
|
|
|
ERROR_TYPE(Scripting_LoadFile, OpenFailed);
|
|
|
|
ERROR_TYPE(Scripting_LoadFile, EvalErrors);
|
|
|
|
|
|
|
|
ERROR_TYPE(Scripting, ConversionFailed);
|
|
|
|
ERROR_TYPE(Scripting, CallFunctionFailed);
|
|
|
|
ERROR_TYPE(Scripting, RegisterFunctionFailed);
|
|
|
|
ERROR_TYPE(Scripting, DefineConstantFailed);
|
|
|
|
ERROR_TYPE(Scripting, CreateObjectFailed);
|
|
|
|
ERROR_TYPE(Scripting, TypeDoesNotExist);
|
|
|
|
|
|
|
|
ERROR_SUBGROUP(Scripting, DefineType);
|
|
|
|
ERROR_TYPE(Scripting_DefineType, AlreadyExists);
|
|
|
|
ERROR_TYPE(Scripting_DefineType, CreationFailed);
|
2004-07-17 19:09:33 +02:00
|
|
|
|
2005-06-22 04:23:46 +02:00
|
|
|
#include "scripting/SpiderMonkey.h"
|
2004-09-04 16:43:23 +02:00
|
|
|
|
2004-05-30 02:46:58 +02:00
|
|
|
#include <string>
|
|
|
|
#include <vector>
|
|
|
|
#include <map>
|
|
|
|
|
|
|
|
#include "Singleton.h"
|
2004-07-20 21:30:35 +02:00
|
|
|
#include "CStr.h"
|
2004-05-30 02:46:58 +02:00
|
|
|
|
2005-03-29 00:13:47 +02:00
|
|
|
class IPropertyOwner
|
|
|
|
{
|
|
|
|
};
|
|
|
|
|
2004-07-20 21:30:35 +02:00
|
|
|
/*
|
2004-05-30 02:46:58 +02:00
|
|
|
class DelayedScriptExecutor
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
DelayedScriptExecutor(const std::string & functionName, float delaySeconds)
|
|
|
|
: m_FunctionName(functionName), m_SecondsToExecution(delaySeconds)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
std::string m_FunctionName;
|
|
|
|
float m_SecondsToExecution;
|
|
|
|
};
|
2004-07-20 21:30:35 +02:00
|
|
|
*/
|
2004-05-30 02:46:58 +02:00
|
|
|
|
|
|
|
class CustomType
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
JSObject * m_Object;
|
|
|
|
JSClass * m_Class;
|
|
|
|
};
|
|
|
|
|
|
|
|
class ScriptingHost : public Singleton < ScriptingHost >
|
|
|
|
{
|
|
|
|
private:
|
|
|
|
JSRuntime * m_RunTime;
|
|
|
|
JSContext * m_Context;
|
|
|
|
JSObject * m_GlobalObject;
|
|
|
|
|
|
|
|
JSErrorReport m_ErrorReport;
|
|
|
|
|
|
|
|
std::map < std::string, CustomType > m_CustomObjectTypes;
|
|
|
|
|
2005-03-30 18:14:19 +02:00
|
|
|
#ifndef NDEBUG
|
|
|
|
// A hook to capture script calls
|
|
|
|
static void* jshook_script( JSContext* cx, JSStackFrame* fp, JSBool before, JSBool* ok, void* closure );
|
|
|
|
// A hook to capture function calls
|
|
|
|
static void* jshook_function( JSContext* cx, JSStackFrame* fp, JSBool before, JSBool* ok, void* closure );
|
|
|
|
#endif
|
2004-05-30 02:46:58 +02:00
|
|
|
public:
|
|
|
|
|
|
|
|
ScriptingHost();
|
|
|
|
~ScriptingHost();
|
2004-06-11 00:24:03 +02:00
|
|
|
|
2004-08-03 01:14:54 +02:00
|
|
|
// Helpers:
|
|
|
|
|
2004-12-21 19:41:58 +01:00
|
|
|
// TODO: Remove one of these
|
|
|
|
inline JSContext *getContext() { return m_Context; }
|
|
|
|
inline JSContext *GetContext() { return m_Context; }
|
2005-04-15 06:23:33 +02:00
|
|
|
inline JSObject* GetGlobalObject() { return m_GlobalObject; }
|
2004-05-30 02:46:58 +02:00
|
|
|
|
|
|
|
void LoadScriptFromDisk(const std::string & fileName);
|
|
|
|
|
|
|
|
jsval CallFunction(const std::string & functionName, jsval * params, int numParams);
|
|
|
|
|
2004-09-03 16:10:48 +02:00
|
|
|
jsval ScriptingHost::ExecuteScript(const CStrW& script, const CStrW& calledFrom = CStrW( L"Console" ), JSObject* contextObject = NULL );
|
2004-05-30 02:46:58 +02:00
|
|
|
|
|
|
|
void RegisterFunction(const std::string & functionName, JSNative function, int numArgs);
|
|
|
|
|
|
|
|
void DefineConstant(const std::string & name, int value);
|
|
|
|
void DefineConstant(const std::string & name, double value);
|
|
|
|
|
|
|
|
void DefineCustomObjectType(JSClass *clasp, JSNative constructor, uintN nargs, JSPropertySpec *ps, JSFunctionSpec *fs, JSPropertySpec *static_ps, JSFunctionSpec *static_fs);
|
|
|
|
|
|
|
|
JSObject * CreateCustomObject(const std::string & typeName);
|
|
|
|
|
2004-07-07 12:52:45 +02:00
|
|
|
void SetObjectProperty(JSObject * object, const std::string & propertyName, jsval value);
|
|
|
|
jsval GetObjectProperty(JSObject * object, const std::string & propertyName);
|
2004-05-30 02:46:58 +02:00
|
|
|
|
2004-09-03 16:10:48 +02:00
|
|
|
void SetObjectProperty_Double(JSObject* object, const char* propertyName, double value);
|
|
|
|
double GetObjectProperty_Double(JSObject* object, const char* propertyName);
|
|
|
|
|
2004-07-04 17:35:04 +02:00
|
|
|
void SetGlobal(const std::string& globalName, jsval value);
|
|
|
|
jsval GetGlobal(const std::string& globalName);
|
|
|
|
|
2004-05-30 02:46:58 +02:00
|
|
|
int ValueToInt(const jsval value);
|
|
|
|
bool ValueToBool(const jsval value);
|
|
|
|
std::string ValueToString(const jsval value);
|
2004-07-20 21:30:35 +02:00
|
|
|
CStrW ValueToUCString( const jsval value );
|
2004-11-07 22:30:47 +01:00
|
|
|
utf16string ValueToUTF16( const jsval value );
|
2004-05-30 02:46:58 +02:00
|
|
|
double ValueToDouble(const jsval value);
|
|
|
|
|
2005-02-21 18:13:31 +01:00
|
|
|
jsval UTF16ToValue(const utf16string &str);
|
|
|
|
jsval UCStringToValue(const CStrW &str);
|
2004-08-16 17:19:17 +02:00
|
|
|
|
2004-05-30 02:46:58 +02:00
|
|
|
static void ErrorReporter(JSContext * context, const char * message, JSErrorReport * report);
|
|
|
|
};
|
|
|
|
|
|
|
|
#define g_ScriptingHost ScriptingHost::GetSingleton()
|
|
|
|
|
|
|
|
#endif
|