// // ScriptContextV8Wrapper.h // libraries/script-engine/src/v8 // // Created by Heather Anderson on 5/22/21. // Modified for V8 by dr Karol Suprynowicz on 2022/10/08 // Copyright 2021 Vircadia contributors. // Copyright 2022-2023 Overte e.V. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // SPDX-License-Identifier: Apache-2.0 // /// @addtogroup ScriptEngine /// @{ #ifndef hifi_ScriptContextV8Wrapper_h #define hifi_ScriptContextV8Wrapper_h #include #include "../ScriptContext.h" #include "../ScriptValue.h" #include #include //class V8ScriptContext; class ScriptEngineV8; /// [V8] Implements ScriptContext for V8 and translates calls for V8ScriptContextInfo class ScriptContextV8Wrapper final : public ScriptContext { public: // construction ScriptContextV8Wrapper(ScriptEngineV8* engine, const v8::Local context, ScriptContextPointer parent); ScriptContextV8Wrapper(ScriptEngineV8* engine, const v8::FunctionCallbackInfo *functionCallbackInfo, const v8::Local context, ScriptContextPointer parent); ScriptContextV8Wrapper(ScriptEngineV8* engine, const v8::PropertyCallbackInfo *propertyCallbackInfo, const v8::Local context, ScriptContextPointer parent); virtual ~ScriptContextV8Wrapper(); static ScriptContextV8Wrapper* unwrap(ScriptContext* val); public: // ScriptContext implementation virtual int argumentCount() const override; virtual ScriptValue argument(int index) const override; virtual QStringList backtrace() const override; // Name of the file in which message was generated. Empty string when no file name is available. virtual int currentLineNumber() const override; // Number of the line on which message was generated. -1 if there line number is not available. virtual QString currentFileName() const override; virtual ScriptValue callee() const override; virtual ScriptEnginePointer engine() const override; virtual ScriptFunctionContextPointer functionContext() const override; virtual ScriptContextPointer parentContext() const override; virtual ScriptValue thisObject() const override; virtual ScriptValue throwError(const QString& text) override; virtual ScriptValue throwValue(const ScriptValue& value) override; public: // For use by V8-related functions v8::Local toV8Value() const; private: // storage const v8::FunctionCallbackInfo *_functionCallbackInfo; const v8::PropertyCallbackInfo *_propertyCallbackInfo; ScriptEngineV8* _engine; v8::Persistent _context; ScriptContextPointer _parentContext; Q_DISABLE_COPY(ScriptContextV8Wrapper) }; class ScriptFunctionContextV8Wrapper final : public ScriptFunctionContext { public: // construction ScriptFunctionContextV8Wrapper(ScriptEngineV8* engine, const v8::Local context); virtual ~ScriptFunctionContextV8Wrapper(); public: // ScriptFunctionContext implementation virtual QString fileName() const override; virtual QString functionName() const override; virtual FunctionType functionType() const override; virtual int lineNumber() const override; private: // storage ScriptEngineV8* _engine; v8::Persistent _context; Q_DISABLE_COPY(ScriptFunctionContextV8Wrapper) }; #endif // hifi_ScriptContextV8Wrapper_h /// @}