Overte C++ Documentation
ScriptProgramV8Wrapper.h
1 //
2 // ScriptProgramV8Wrapper.h
3 // libraries/script-engine/src/v8
4 //
5 // Created by Heather Anderson on 5/21/21.
6 // Modified for V8 by dr Karol Suprynowicz on 2022/10/08
7 // Copyright 2021 Vircadia contributors.
8 // Copyright 2022-2023 Overte e.V.
9 //
10 // Distributed under the Apache License, Version 2.0.
11 // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
12 // SPDX-License-Identifier: Apache-2.0
13 //
14 
17 
18 #ifndef hifi_ScriptProgramV8Wrapper_h
19 #define hifi_ScriptProgramV8Wrapper_h
20 
21 #include <QtCore/QPointer>
22 
23 #include "../ScriptProgram.h"
24 #include "ScriptEngineV8.h"
25 #include "V8Types.h"
26 
27 
28 // V8TODO: This class is likely unnecessary, and it'd be enough
29 // to just use a non-abstract version of ScriptSyntaxCheckResult instead.
30 class ScriptSyntaxCheckResultV8Wrapper final : public ScriptSyntaxCheckResult {
31 public: // construction
32  inline ScriptSyntaxCheckResultV8Wrapper() : _errorColumnNumber(0), _errorLineNumber(0), _errorMessage("Not compiled"), _state(ScriptSyntaxCheckResult::Error) {}
33  inline ScriptSyntaxCheckResultV8Wrapper(State state, int columnNumber = 0, int lineNumber = 0, const QString &message = QString(""), const QString &errorBacktrace = QString("")) :
34  _errorColumnNumber(columnNumber), _errorLineNumber(lineNumber), _errorMessage(message), _state(state) {}
35 
36 public: // ScriptSyntaxCheckResult implementation
37  virtual int errorColumnNumber() const override {return _errorColumnNumber;}
38  virtual int errorLineNumber() const override {return _errorLineNumber;}
39  virtual QString errorMessage() const override {return _errorMessage;}
40  virtual QString errorBacktrace() const override {return _errorBacktrace;}
41  virtual State state() const override {return _state;}
42 
43 private: // storage
44  int _errorColumnNumber;
45  int _errorLineNumber;
46  QString _errorMessage;
47  QString _errorBacktrace;
48  State _state;
49 };
50 
52 class ScriptProgramV8Wrapper final : public ScriptProgram {
53 public: // construction
54  inline ScriptProgramV8Wrapper(ScriptEngineV8* engine, QString source, QString url) :
55  _engine(engine), _source(source), _url(url), _value(_engine) {
56  auto isolate = _engine->getIsolate();
57  v8::Locker locker(isolate);
58  v8::Isolate::Scope isolateScope(isolate);
59  v8::HandleScope handleScope(isolate);
60  v8::Context::Scope contextScope(_engine->getContext());
61  _value = V8ScriptProgram(engine, v8::Local<v8::Script>());
62  }
63  static ScriptProgramV8Wrapper* unwrap(ScriptProgramPointer val);
64  bool compile();
65  inline const V8ScriptProgram& toV8Value() const { return _value; }
66 
67 public: // ScriptProgram implementation
68  virtual ScriptSyntaxCheckResultPointer checkSyntax() override;
69  virtual QString fileName() const override {return _url;}
70  virtual QString sourceCode() const override {return _source;}
71 
72 private: // storage
73  ScriptEngineV8 *_engine;
74  QString _source;
75  QString _url;
76  V8ScriptProgram _value;
77  bool _isCompiled = false;
78  ScriptSyntaxCheckResultV8Wrapper _compileResult;
79 };
80 
81 #endif // hifi_ScriptValueV8Wrapper_h
82 
Engine-independent representation of a script program.
Definition: ScriptProgram.h:35
[V8] Implements ScriptProgram for V8 and translates calls for V8ScriptProgram
Definition: ScriptProgramV8Wrapper.h:52
virtual QString sourceCode() const override
Returns the source code of this program.
Definition: ScriptProgramV8Wrapper.h:70
virtual QString fileName() const override
Returns the filename associated with this program.
Definition: ScriptProgramV8Wrapper.h:69
Engine-independent representation of a script syntax check.
Definition: ScriptProgram.h:65
virtual QString errorBacktrace() const =0
virtual QString errorMessage() const =0
Returns the error message of this ScriptSyntaxCheckResult, or an empty string if there is no error.
virtual State state() const =0
Returns the state of this ScriptSyntaxCheckResult.
virtual int errorColumnNumber() const =0
Returns the error column number of this ScriptSyntaxCheckResult, or -1 if there is no error.
virtual int errorLineNumber() const =0
Returns the error line number of this ScriptSyntaxCheckResult, or -1 if there is no error.
State
State of the syntax check.
Definition: ScriptProgram.h:73