82 lines · 3.1 KB · C
RawDownload
////  ScriptProgramV8Wrapper.h//  libraries/script-engine/src/v8////  Created by Heather Anderson on 5/21/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_ScriptProgramV8Wrapper_h#define hifi_ScriptProgramV8Wrapper_h #include <QtCore/QPointer> #include "../ScriptProgram.h"#include "ScriptEngineV8.h"#include "V8Types.h"  // V8TODO: This class is likely unnecessary, and it'd be enough// to just use a non-abstract version of ScriptSyntaxCheckResult instead.class ScriptSyntaxCheckResultV8Wrapper final : public ScriptSyntaxCheckResult {public: // construction    inline ScriptSyntaxCheckResultV8Wrapper() : _errorColumnNumber(0), _errorLineNumber(0), _errorMessage("Not compiled"), _state(ScriptSyntaxCheckResult::Error) {}    inline ScriptSyntaxCheckResultV8Wrapper(State state, int columnNumber = 0, int lineNumber = 0, const QString &message = QString(""), const QString &errorBacktrace = QString("")) :        _errorColumnNumber(columnNumber), _errorLineNumber(lineNumber), _errorMessage(message), _state(state) {} public: // ScriptSyntaxCheckResult implementation    virtual int errorColumnNumber() const override {return _errorColumnNumber;}    virtual int errorLineNumber() const override {return _errorLineNumber;}    virtual QString errorMessage() const override {return _errorMessage;}    virtual QString errorBacktrace() const override {return _errorBacktrace;}    virtual State state() const override {return _state;} private: // storage    int _errorColumnNumber;    int _errorLineNumber;    QString _errorMessage;    QString _errorBacktrace;    State _state;}; /// [V8] Implements ScriptProgram for V8 and translates calls for V8ScriptProgramclass ScriptProgramV8Wrapper final : public ScriptProgram {public: // construction    inline ScriptProgramV8Wrapper(ScriptEngineV8* engine, QString source, QString url) :    _engine(engine), _source(source), _url(url), _value(_engine) {        auto isolate = _engine->getIsolate();        Q_ASSERT(isolate->IsCurrent());        v8::HandleScope handleScope(isolate);        v8::Context::Scope contextScope(_engine->getContext());        _value = V8ScriptProgram(engine, v8::Local<v8::Script>());    }    static ScriptProgramV8Wrapper* unwrap(ScriptProgramPointer val);    bool compile();    inline const V8ScriptProgram& toV8Value() const { return _value; } public: // ScriptProgram implementation    virtual ScriptSyntaxCheckResultPointer checkSyntax() override;    virtual QString fileName() const override {return _url;}    virtual QString sourceCode() const override {return _source;} private: // storage    ScriptEngineV8 *_engine;    QString _source;    QString _url;    V8ScriptProgram _value;    bool _isCompiled = false;    ScriptSyntaxCheckResultV8Wrapper _compileResult;}; #endif  // hifi_ScriptValueV8Wrapper_h /// @}