#ifndef JS_SHELL_H #define JS_SHELL_H #include #include typedef void* HANDLE; typedef void* MODULE; class JSShell { public: enum Engine { JSC = 0, V8 }; public: JSShell() {} virtual ~JSShell() = 0; static JSShell* Create(Engine engine = JSC); std::string LoadModule(const std::string& name, HANDLE* library); virtual bool RunScript(const std::string& scriptPath); virtual bool RunShell(); void setModulePath(const std::vector& modulePath) { module_path = modulePath; } protected: virtual bool InitializeEngine() = 0; virtual bool ExecuteScript(const std::string& source, const std::string& scriptPath) = 0; virtual bool DisposeEngine() = 0; static std::string ReadFile(const std::string& fileName); protected: std::vector loaded_modules; std::vector module_path; }; #endif // JS_SHELL_H