You.i Engine
YiDTBindingContext.h
Go to the documentation of this file.
1 // © You i Labs Inc. 2000-2017. All rights reserved.
2 #ifndef _YI_DT_CONTEXT_H_
3 #define _YI_DT_CONTEXT_H_
4 
6 
7 #include <duktape.h>
8 
9 #ifndef CLANG_ANALYZER_NORETURN
10 #define CLANG_ANALYZER_NORETURN
11 #if defined(__has_feature)
12 #if __has_feature(attribute_analyzer_noreturn)
13 #undef CLANG_ANALYZER_NORETURN
14 #define CLANG_ANALYZER_NORETURN __attribute__((analyzer_noreturn))
15 #endif
16 #endif
17 #endif
18 
20 
33 {
34 public:
36  virtual ~CYIDTBindingContext();
37 
38  // CYIBindingContext Virtuals
39  virtual bool Init() override;
40  virtual bool ExecuteString(const CYIString &scriptString) override;
41  virtual bool ExecuteScript(const std::shared_ptr<CYIAssetScript> &pScriptAsset) override;
42  virtual void CreateGlobalObject(const CYIString &scriptObjectName, const CYIString &className, CYIScriptableObject *pScriptableObject) override;
43 
44  /*
45  \details Creates a new Javascript object of name \a scriptObjectName and prevents Duktape from garbage collecting the object.
46 
47  \sa CYIDTBindingImplementation::SetRooted
48  */
49  virtual CYIScriptableObject *NewRootedObject(const CYIRuntimeTypeInfo &enforceClassType, const CYIString &scriptObjectName) override;
50 
54  virtual void DumpToLog() override;
55 
61  virtual bool ConnectDebugger() override;
62 
66  void DumpErrorObject();
67 
71  void ThrowException(const CYIString &errorMessage, const CYIString &filename, int32_t nLineNumber) CLANG_ANALYZER_NORETURN;
72 
79 
84 
88  CYIDTBindingImplementation *GetBindingImplementationAndPushObjectOnStack(const CYIString &fallbackClassName, const std::shared_ptr<CYIScriptableObject> &pScriptableObject);
89 
93  template<typename T>
94  CYIDTBindingImplementation *GetBindingImplementationAndPushObjectOnStack(const CYIString &fallbackClassName, std::unique_ptr<T> &pScriptableObject);
95 
99  static CYIDTBindingContext *GetContextObject(duk_context *pDKContext);
100 
104  static duk_context *GetNativeContext(CYIBindingContext *pBindingContext);
105 
109  static const char *const BINDING_CONSTRUCTOR_NAMESPACE;
110 
111 private:
115  void RegisterObjectTemplates();
116  duk_context *m_pDKContext;
117  bool m_bInitialized;
118 };
119 
124 template<typename T>
125 CYIDTBindingImplementation *CYIDTBindingContext::GetBindingImplementationAndPushObjectOnStack(const CYIString &fallbackClassName, std::unique_ptr<T> &pScriptableObject)
126 {
127  return GetBindingImplementationAndPushObjectOnStack(fallbackClassName, pScriptableObject.release());
128 }
129 
130 #endif
#define CLANG_ANALYZER_NORETURN
Definition: YiDTBindingContext.h:10
static duk_context * GetNativeContext(CYIBindingContext *pBindingContext)
Container class for Unicode strings. Conceptually, a CYIString object is a sequence of Unicode charac...
Definition: YiString.h:35
The base class for an object accessible from script source code.
Definition: YiScriptableObject.h:28
This is the base class for binding implementations between C++ and Javascript using the Duktape bindi...
Definition: YiDTBindingImplementation.h:25
static const char *const BINDING_CONSTRUCTOR_NAMESPACE
Definition: YiDTBindingContext.h:109
static CYIDTBindingContext * GetContextObject(duk_context *pDKContext)
A binding context implementation for the Duktape Javascript binding engine.
Definition: YiDTBindingContext.h:32
virtual bool ExecuteString(const CYIString &scriptString) override
virtual bool Init() override
virtual ~CYIDTBindingContext()
void ThrowException(const CYIString &errorMessage, const CYIString &filename, int32_t nLineNumber) CLANG_ANALYZER_NORETURN
virtual CYIScriptableObject * NewRootedObject(const CYIRuntimeTypeInfo &enforceClassType, const CYIString &scriptObjectName) override
The entry point for executing script source code in You.i Engine.
Definition: YiBindingContext.h:29
CYIDTBindingImplementation * GetBindingImplementationAndPushObjectOnStack(const CYIString &fallbackClassName, const CYIScriptableObject *pScriptableObject)
The abstract runtime representation of a C++ type.
Definition: YiRtti.h:48
virtual void CreateGlobalObject(const CYIString &scriptObjectName, const CYIString &className, CYIScriptableObject *pScriptableObject) override
virtual void DumpToLog() override
virtual bool ExecuteScript(const std::shared_ptr< CYIAssetScript > &pScriptAsset) override
virtual bool ConnectDebugger() override