|
|
|
|
@ -73,11 +73,23 @@ def generateV8InternalCode(class_name, methods, header_file):
|
|
|
|
|
code += " }\n"
|
|
|
|
|
code += "}\n"
|
|
|
|
|
code += "\n"
|
|
|
|
|
code += "void* " + class_name + "::GetDataForEmbedObject(void* data)\n"
|
|
|
|
|
adapter_name = class_name + "Adapter"
|
|
|
|
|
code += "class " + adapter_name + " : public CJSEmbedObjectAdapterV8\n"
|
|
|
|
|
code += "{\n"
|
|
|
|
|
code += " v8::Isolate* isolate = reinterpret_cast<v8::Isolate*>(data);\n"
|
|
|
|
|
code += " v8::Local<v8::ObjectTemplate>* internalTemplate = new v8::Local<v8::ObjectTemplate>(" + namespace_name + "::CreateTemplate(isolate));\n"
|
|
|
|
|
code += " return reinterpret_cast<void*>(internalTemplate);\n"
|
|
|
|
|
code += "public:\n"
|
|
|
|
|
code += " virtual v8::Local<v8::ObjectTemplate> getTemplate(v8::Isolate* isolate) override\n"
|
|
|
|
|
code += " {\n"
|
|
|
|
|
code += " v8::EscapableHandleScope handle_scope(isolate);\n"
|
|
|
|
|
code += " v8::Local<v8::ObjectTemplate> templ = " + namespace_name + "::CreateTemplate(isolate);\n"
|
|
|
|
|
code += " return handle_scope.Escape(templ);\n"
|
|
|
|
|
code += " }\n"
|
|
|
|
|
code += "};\n"
|
|
|
|
|
code += "\n"
|
|
|
|
|
code += "CJSEmbedObjectAdapterBase* " + class_name + "::getAdapter()\n"
|
|
|
|
|
code += "{\n"
|
|
|
|
|
code += " if (m_pAdapter == nullptr)\n"
|
|
|
|
|
code += " m_pAdapter = new " + adapter_name + "();\n"
|
|
|
|
|
code += " return m_pAdapter;\n"
|
|
|
|
|
code += "}\n"
|
|
|
|
|
code += "\n"
|
|
|
|
|
code += "std::vector<std::string> " + class_name + "::getMethodNames()\n"
|
|
|
|
|
@ -117,11 +129,21 @@ def generateJSCInternalCode(class_name, methods, header_file):
|
|
|
|
|
code += "FUNCTION_WRAPPER_JS_" + str(len(method.args)) + "(" + method.name + ", " + method.name + ")\n"
|
|
|
|
|
code += "@end\n"
|
|
|
|
|
code += "\n"
|
|
|
|
|
code += "void* " + class_name + "::GetDataForEmbedObject(void* data)\n"
|
|
|
|
|
adapter_name = class_name + "Adapter"
|
|
|
|
|
code += "class " + adapter_name + " : public CJSEmbedObjectAdapterJSC\n"
|
|
|
|
|
code += "{\n"
|
|
|
|
|
code += " " + class_name + "* pNativeObj = reinterpret_cast<" + class_name + "*>(data);\n"
|
|
|
|
|
code += " " + objc_class_name + "* pEmbedObj = [[" + objc_class_name + " alloc] init:pNativeObj];\n"
|
|
|
|
|
code += " return (void*)CFBridgingRetain(pEmbedObj);\n"
|
|
|
|
|
code += "public:\n"
|
|
|
|
|
code += " virtual id getExportedObject(CJSEmbedObject* pNative) override\n"
|
|
|
|
|
code += " {\n"
|
|
|
|
|
code += " return [[" + objc_class_name + " alloc] init:(" + class_name + "*)pNative];\n"
|
|
|
|
|
code += " }\n"
|
|
|
|
|
code += "};\n"
|
|
|
|
|
code += "\n"
|
|
|
|
|
code += "CJSEmbedObjectAdapterBase* " + class_name + "::getAdapter()\n"
|
|
|
|
|
code += "{\n"
|
|
|
|
|
code += " if (m_pAdapter == nullptr)\n"
|
|
|
|
|
code += " m_pAdapter = new " + adapter_name + "();\n"
|
|
|
|
|
code += " return m_pAdapter;\n"
|
|
|
|
|
code += "}\n\n"
|
|
|
|
|
return code
|
|
|
|
|
|
|
|
|
|
@ -155,7 +177,7 @@ def generateV8ExternalCode(class_name, methods, header_file):
|
|
|
|
|
code += "\n"
|
|
|
|
|
code += " };\n"
|
|
|
|
|
code += "}\n\n"
|
|
|
|
|
code += "void* " + class_name + "::GetDataForEmbedObject(void* data) { return nullptr; }\n\n"
|
|
|
|
|
code += "CJSEmbedObjectAdapterBase* " + class_name + "::getAdapter() { return nullptr; }\n\n"
|
|
|
|
|
return code
|
|
|
|
|
|
|
|
|
|
def generateJSCExternalCode(class_name, methods, header_file):
|
|
|
|
|
@ -190,18 +212,28 @@ def generateJSCExternalCode(class_name, methods, header_file):
|
|
|
|
|
code += "\n{\n"
|
|
|
|
|
code += " JSSmart<CJSValue> ret = m_internal->" + method.name + "("
|
|
|
|
|
for arg in method.args:
|
|
|
|
|
code += "NSJSBase::Native2Value((__bridge void*)" + arg + ")"
|
|
|
|
|
code += "CJSEmbedObjectAdapterJSC::Native2Value(" + arg + ")"
|
|
|
|
|
if arg != method.args[-1]:
|
|
|
|
|
code += ", "
|
|
|
|
|
code += ");\n"
|
|
|
|
|
code += " return (__bridge JSValue*)NSJSBase::Value2Native(ret);\n"
|
|
|
|
|
code += " return CJSEmbedObjectAdapterJSC::Value2Native(ret);\n"
|
|
|
|
|
code += "}\n\n"
|
|
|
|
|
code += "@end\n\n"
|
|
|
|
|
code += "void* " + class_name + "::GetDataForEmbedObject(void* data)\n"
|
|
|
|
|
adapter_name = class_name + "Adapter"
|
|
|
|
|
code += "class " + adapter_name + " : public CJSEmbedObjectAdapterJSC\n"
|
|
|
|
|
code += "{\n"
|
|
|
|
|
code += " " + class_name + "* pNativeObj = reinterpret_cast<" + class_name + "*>(data);\n"
|
|
|
|
|
code += " " + objc_class_name + "* pEmbedObj = [[" + objc_class_name + " alloc] init:pNativeObj];\n"
|
|
|
|
|
code += " return (void*)CFBridgingRetain(pEmbedObj);\n"
|
|
|
|
|
code += "public:\n"
|
|
|
|
|
code += " virtual id getExportedObject(CJSEmbedObject* pNative) override\n"
|
|
|
|
|
code += " {\n"
|
|
|
|
|
code += " return [[" + objc_class_name + " alloc] init:(" + class_name + "*)pNative];\n"
|
|
|
|
|
code += " }\n"
|
|
|
|
|
code += "};\n"
|
|
|
|
|
code += "\n"
|
|
|
|
|
code += "CJSEmbedObjectAdapterBase* " + class_name + "::getAdapter()\n"
|
|
|
|
|
code += "{\n"
|
|
|
|
|
code += " if (m_pAdapter == nullptr)\n"
|
|
|
|
|
code += " m_pAdapter = new " + adapter_name + "();\n"
|
|
|
|
|
code += " return m_pAdapter;\n"
|
|
|
|
|
code += "}\n\n"
|
|
|
|
|
return code
|
|
|
|
|
|
|
|
|
|
|