Overte C++ Documentation
ScriptContextV8Wrapper.h
1 //
2 // ScriptContextV8Wrapper.h
3 // libraries/script-engine/src/v8
4 //
5 // Created by Heather Anderson on 5/22/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_ScriptContextV8Wrapper_h
19 #define hifi_ScriptContextV8Wrapper_h
20 
21 #include <QtCore/QString>
22 
23 #include "../ScriptContext.h"
24 #include "../ScriptValue.h"
25 
26 #include <libplatform/libplatform.h>
27 #include <v8.h>
28 
29 //class V8ScriptContext;
30 class ScriptEngineV8;
31 
33 class ScriptContextV8Wrapper final : public ScriptContext {
34 public: // construction
35  ScriptContextV8Wrapper(ScriptEngineV8* engine, const v8::Local<v8::Context> context, ScriptContextPointer parent);
36  ScriptContextV8Wrapper(ScriptEngineV8* engine, const v8::FunctionCallbackInfo<v8::Value> *functionCallbackInfo,
37  const v8::Local<v8::Context> context, ScriptContextPointer parent);
38  ScriptContextV8Wrapper(ScriptEngineV8* engine, const v8::PropertyCallbackInfo<v8::Value> *propertyCallbackInfo,
39  const v8::Local<v8::Context> context, ScriptContextPointer parent);
40  virtual ~ScriptContextV8Wrapper();
41 
42  static ScriptContextV8Wrapper* unwrap(ScriptContext* val);
43 
44 public: // ScriptContext implementation
45  virtual int argumentCount() const override;
46  virtual ScriptValue argument(int index) const override;
47  virtual QStringList backtrace() const override;
48 
49  // Name of the file in which message was generated. Empty string when no file name is available.
50  virtual int currentLineNumber() const override;
51 
52  // Number of the line on which message was generated. -1 if there line number is not available.
53  virtual QString currentFileName() const override;
54 
55  virtual ScriptValue callee() const override;
56  virtual ScriptEnginePointer engine() const override;
57  virtual ScriptFunctionContextPointer functionContext() const override;
58  virtual ScriptContextPointer parentContext() const override;
59  virtual ScriptValue thisObject() const override;
60  virtual ScriptValue throwError(const QString& text) override;
61  virtual ScriptValue throwValue(const ScriptValue& value) override;
62 
63 public: // For use by V8-related functions
64  v8::Local<v8::Context> toV8Value() const;
65 
66 private: // storage
67  const v8::FunctionCallbackInfo<v8::Value> *_functionCallbackInfo;
68  const v8::PropertyCallbackInfo<v8::Value> *_propertyCallbackInfo;
69  ScriptEngineV8* _engine;
70  v8::Persistent<v8::Context> _context;
71  ScriptContextPointer _parentContext;
72  Q_DISABLE_COPY(ScriptContextV8Wrapper)
73 };
74 
75 class ScriptFunctionContextV8Wrapper final : public ScriptFunctionContext {
76 public: // construction
77  ScriptFunctionContextV8Wrapper(ScriptEngineV8* engine, const v8::Local<v8::Context> context);
78  virtual ~ScriptFunctionContextV8Wrapper();
79 
80 public: // ScriptFunctionContext implementation
81  virtual QString fileName() const override;
82  virtual QString functionName() const override;
83  virtual FunctionType functionType() const override;
84  virtual int lineNumber() const override;
85 
86 private: // storage
87  ScriptEngineV8* _engine;
88  v8::Persistent<v8::Context> _context;
89  Q_DISABLE_COPY(ScriptFunctionContextV8Wrapper)
90 };
91 
92 #endif // hifi_ScriptContextV8Wrapper_h
93 
[ScriptInterface] Provides an engine-independent interface for QScriptContext
Definition: ScriptContext.h:55
[V8] Implements ScriptContext for V8 and translates calls for V8ScriptContextInfo
Definition: ScriptContextV8Wrapper.h:33
[ScriptInterface] Provides an engine-independent interface for QScriptContextInfo
Definition: ScriptContext.h:35
[ScriptInterface] Provides an engine-independent interface for QScriptValue
Definition: ScriptValue.h:40