From e28959283fadffb080d0c6dd892ee30c0ea34812 Mon Sep 17 00:00:00 2001 From: huruitao Date: Thu, 11 Jul 2024 15:32:43 +0800 Subject: [PATCH 01/31] =?UTF-8?q?"modifile=20examples/napitutorials/entry/?= =?UTF-8?q?src/main/cpp/ncpp/ffmpegcase/render/egl=5Fcore.cpp=20=E4=BF=AE?= =?UTF-8?q?=E6=94=B9napi=E4=BB=93=20js=E6=A0=BC=E5=BC=8F=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E5=92=8C=E9=87=8D=E5=A4=A7=E5=91=8A=E8=AD=A6"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: huruitao --- .../cpp/ncpp/ffmpegcase/render/egl_core.cpp | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/examples/napitutorials/entry/src/main/cpp/ncpp/ffmpegcase/render/egl_core.cpp b/examples/napitutorials/entry/src/main/cpp/ncpp/ffmpegcase/render/egl_core.cpp index e22e106f..737eb311 100644 --- a/examples/napitutorials/entry/src/main/cpp/ncpp/ffmpegcase/render/egl_core.cpp +++ b/examples/napitutorials/entry/src/main/cpp/ncpp/ffmpegcase/render/egl_core.cpp @@ -334,19 +334,19 @@ void EGLCore::TRBackground() 0, 1, 3, // first triangle 1, 2, 3 // second triangle }; - unsigned int VBO = 0; - unsigned int VAO = 0; - unsigned int EBO = 0; - glGenVertexArrays(1, &VAO); - glGenBuffers(1, &VBO); - glGenBuffers(1, &EBO); + unsigned int vbo = 0; + unsigned int vao = 0; + unsigned int ebo = 0; + glGenVertexArrays(1, &vao); + glGenBuffers(1, &vbo); + glGenBuffers(1, &ebo); - glBindVertexArray(VAO); + glBindVertexArray(vao); - glBindBuffer(GL_ARRAY_BUFFER, VBO); + glBindBuffer(GL_ARRAY_BUFFER, vbo); glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo); glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW); // position attribute @@ -381,7 +381,7 @@ void EGLCore::TRBackground() glUseProgram(program_); - glBindVertexArray(VAO); + glBindVertexArray(vao); glDrawElements(GL_TRIANGLES, NUM_6, GL_UNSIGNED_INT, 0); eglSwapBuffers(eglDisplay_, eglSurface_); @@ -563,19 +563,19 @@ void EGLCore::DrawBmp(uint32_t fd, uint32_t foff, uint32_t flen, int& hasDraw) 0, 1, 3, // first triangle 1, 2, 3 // second triangle }; - unsigned int VBO = 0; - unsigned int VAO = 0; - unsigned int EBO = 0; - glGenVertexArrays(1, &VAO); - glGenBuffers(1, &VBO); - glGenBuffers(1, &EBO); + unsigned int vbo = 0; + unsigned int vao = 0; + unsigned int ebo = 0; + glGenVertexArrays(1, &vao); + glGenBuffers(1, &vbo); + glGenBuffers(1, &ebo); - glBindVertexArray(VAO); + glBindVertexArray(vao); - glBindBuffer(GL_ARRAY_BUFFER, VBO); + glBindBuffer(GL_ARRAY_BUFFER, vbo); glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo); glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW); // position attribute @@ -613,7 +613,7 @@ void EGLCore::DrawBmp(uint32_t fd, uint32_t foff, uint32_t flen, int& hasDraw) glUseProgram(program_); - glBindVertexArray(VAO); + glBindVertexArray(vao); glDrawElements(GL_TRIANGLES, NUM_6, GL_UNSIGNED_INT, 0); eglSwapBuffers(eglDisplay_, eglSurface_); -- Gitee From 942cb8af108b0b36b9d0182cc1a8380864389263 Mon Sep 17 00:00:00 2001 From: huruitao Date: Thu, 11 Jul 2024 15:34:05 +0800 Subject: [PATCH 02/31] =?UTF-8?q?"modifile=20src/cli/cmake2gn/src/main.js?= =?UTF-8?q?=20=E4=BF=AE=E6=94=B9napi=E4=BB=93=20js=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E5=92=8C=E9=87=8D=E5=A4=A7=E5=91=8A=E8=AD=A6?= =?UTF-8?q?"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: huruitao --- src/cli/cmake2gn/src/main.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cli/cmake2gn/src/main.js b/src/cli/cmake2gn/src/main.js index 943ace77..55812af7 100644 --- a/src/cli/cmake2gn/src/main.js +++ b/src/cli/cmake2gn/src/main.js @@ -62,10 +62,10 @@ Tool.OHOS_PART_NAME = ops.part_name; let compileFile = path.parse(path.join(Tool.OHOS_PROJECT_PATH, ops.filename)); -if (ops.type == 'cmake') {//cmake +if (ops.type === 'cmake') {//cmake AnalyzeCMake.analyze(compileFile, ops.cmake_args.substring(1, ops.cmake_args.length - 1)); } -else if (ops.type == 'make') {//make +else if (ops.type === 'make') {//make AnalyzeMake.analyze(compileFile); } else { -- Gitee From ea8954725e20df4a12c074f5b2b543da57c0a71b Mon Sep 17 00:00:00 2001 From: huruitao Date: Thu, 11 Jul 2024 15:34:46 +0800 Subject: [PATCH 03/31] =?UTF-8?q?"modifile=20src/cli/cmake2gn/src/src/anal?= =?UTF-8?q?yze=5Fcmake.js=20=E4=BF=AE=E6=94=B9napi=E4=BB=93=20js=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E9=97=AE=E9=A2=98=E5=92=8C=E9=87=8D=E5=A4=A7=E5=91=8A?= =?UTF-8?q?=E8=AD=A6"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: huruitao --- src/cli/cmake2gn/src/src/analyze_cmake.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/cli/cmake2gn/src/src/analyze_cmake.js b/src/cli/cmake2gn/src/src/analyze_cmake.js index 933b98c5..cfcf7fb3 100755 --- a/src/cli/cmake2gn/src/src/analyze_cmake.js +++ b/src/cli/cmake2gn/src/src/analyze_cmake.js @@ -23,13 +23,12 @@ class AnalyzeCMake { constructor() { } - static mkdirBuildTemp(compileFile){ + static mkdirBuildTemp(compileFile) { let buildTmp; - if(Tool.OHOS_PORTING_TO==''){ + if (Tool.OHOS_PORTING_TO == '') { buildTmp = path.join(compileFile.dir, 'build_tmp');//cmake编译的临时目录 - } - else{ - buildTmp = path.join(Tool.OHOS_PROJECT_PATH,Tool.OHOS_PORTING_TO, 'build_tmp');//cmake编译的临时目录 + } else { + buildTmp = path.join(Tool.OHOS_PROJECT_PATH, Tool.OHOS_PORTING_TO, 'build_tmp');//cmake编译的临时目录 } if (fs.existsSync(buildTmp)) { fs.rmSync(buildTmp, { recursive: true, force: true });//🌻 @@ -57,9 +56,9 @@ class AnalyzeCMake { } ohosToolchainCmake = path.join(buildTmp, 'ohos.toolchain.cmake'); fs.writeFileSync(ohosToolchainCmake, ohosToolchainCmakeData); - ohosToolchainCmake=Tool.swapPath(ohosToolchainCmake); + ohosToolchainCmake = Tool.swapPath(ohosToolchainCmake); let args = [compileFile.dir, - '-DCMAKE_TOOLCHAIN_FILE=%s'.format(ohosToolchainCmake),'-G','Unix Makefiles', + '-DCMAKE_TOOLCHAIN_FILE=%s'.format(ohosToolchainCmake), '-G', 'Unix Makefiles', '-DCMAKE_MAKE_PROGRAM=%s'.format(Tool.swapPath(Tool.getMakeRaw())), ]; if (cmakeArgs.length > 0) { @@ -76,8 +75,9 @@ class AnalyzeCMake { if (code == 0) { Logger.info('------------------------cmake ok'); AnalyzeMake.analyze(path.join(buildTmp, 'Makefile')); //调用make生成命令行 + } else { + Logger.err('cmake fail'); } - else Logger.err('cmake fail'); }); } } -- Gitee From b95d833821a07e54bdd4bcc66adf6edef11083aa Mon Sep 17 00:00:00 2001 From: huruitao Date: Thu, 11 Jul 2024 15:35:58 +0800 Subject: [PATCH 04/31] =?UTF-8?q?"modifile=20src/cli/cmake2gn/src/src/anal?= =?UTF-8?q?yze=5Fcommand.js=20=E4=BF=AE=E6=94=B9napi=E4=BB=93=20js?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E9=97=AE=E9=A2=98=E5=92=8C=E9=87=8D=E5=A4=A7?= =?UTF-8?q?=E5=91=8A=E8=AD=A6"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: huruitao --- src/cli/cmake2gn/src/src/analyze_command.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cli/cmake2gn/src/src/analyze_command.js b/src/cli/cmake2gn/src/src/analyze_command.js index f65ed65c..61829704 100644 --- a/src/cli/cmake2gn/src/src/analyze_command.js +++ b/src/cli/cmake2gn/src/src/analyze_command.js @@ -184,7 +184,7 @@ class AnalyzeCommand { let startp = -1; let isContinuChar = 0; for (let p = 0; p < s.length; p++) { - if (s[p] == '\"' && s[p-1] != '\\') { + if (s[p] === '\"' && s[p-1] !== '\\') { isContinuChar = 1 - isContinuChar; } if (startp >= 0) { -- Gitee From c8a94f2a90c50f18eee7b8d00258d53e35b6a038 Mon Sep 17 00:00:00 2001 From: huruitao Date: Thu, 11 Jul 2024 15:36:39 +0800 Subject: [PATCH 05/31] =?UTF-8?q?"modifile=20src/cli/cmake2gn/src/src/anal?= =?UTF-8?q?yze=5Fmake.js=20=E4=BF=AE=E6=94=B9napi=E4=BB=93=20js=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E9=97=AE=E9=A2=98=E5=92=8C=E9=87=8D=E5=A4=A7=E5=91=8A?= =?UTF-8?q?=E8=AD=A6"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: huruitao --- src/cli/cmake2gn/src/src/analyze_make.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/cli/cmake2gn/src/src/analyze_make.js b/src/cli/cmake2gn/src/src/analyze_make.js index e6f72bdf..ba537436 100644 --- a/src/cli/cmake2gn/src/src/analyze_make.js +++ b/src/cli/cmake2gn/src/src/analyze_make.js @@ -47,8 +47,9 @@ class AnalyzeMake { AnalyzeCommand.storeCommands(); Tool.generateTarget(makeProjectPath, analyzeResult);//生成结果目标 + } else { + Logger.err('make fail'); } - else Logger.err('make fail'); }); }); udpServer_.on('error', (e) => { @@ -106,8 +107,9 @@ class AnalyzeMake { if (code === 0) { Logger.info('-----------------------------make ok'); Tool.generateTarget(makeProjectPath.dir, analyzeResult);//生成结果目标 + } else { + Logger.err('make fail'); } - else Logger.err('make fail'); }); } } -- Gitee From 7849938770b133dd882afa8b6a470779736980a8 Mon Sep 17 00:00:00 2001 From: huruitao Date: Thu, 11 Jul 2024 15:37:53 +0800 Subject: [PATCH 06/31] =?UTF-8?q?"modifile=20src/cli/cmake2gn/src/src/gene?= =?UTF-8?q?rate=5Fgn.js=20=E4=BF=AE=E6=94=B9napi=E4=BB=93=20js=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E9=97=AE=E9=A2=98=E5=92=8C=E9=87=8D=E5=A4=A7=E5=91=8A?= =?UTF-8?q?=E8=AD=A6"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: huruitao --- src/cli/cmake2gn/src/src/generate_gn.js | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/cli/cmake2gn/src/src/generate_gn.js b/src/cli/cmake2gn/src/src/generate_gn.js index 2a057265..914ce0c8 100644 --- a/src/cli/cmake2gn/src/src/generate_gn.js +++ b/src/cli/cmake2gn/src/src/generate_gn.js @@ -174,14 +174,22 @@ group("all_targets") { fs.writeFileSync(gnName, gnStr, { encoding: 'utf8' }); } static genTargetStr(targetName) { + let result; // 声明一个变量来存储返回结果 switch (targetName[0]) { case 'static': - return 'ohos_static_library("' + targetName[1] + '")'; + result = 'ohos_static_library("' + targetName[1] + '")'; + break; case 'dynamic': - return 'ohos_shared_library("' + targetName[1] + '")'; + result = 'ohos_shared_library("' + targetName[1] + '")'; + break; case 'executable': - return 'ohos_executable("' + targetName[1] + '")'; + result = 'ohos_executable("' + targetName[1] + '")'; + break; + default: + // 为未处理的情况提供一个默认返回值 + result = 'unknown_target_type'; // 或者其他适当的默认值 } + return result; // 确保函数返回一个值 } static genCollectDetail(gen, genList) { let collectDetails = { @@ -270,8 +278,7 @@ subsystem_name = "%s" let gnName = path.join(gnPath, 'BUILD.gn'); Logger.info('输出:' + gnName + '\n' + gnStr); fs.writeFileSync(gnName, gnStr, { encoding: 'utf8' }); - } - else { + } else { Logger.info(' no target'); } } @@ -279,7 +286,7 @@ subsystem_name = "%s" static genDetail(name, detail) { let ss = ''; for (let s of detail) { - s=Tool.swapPath(s); + s = Tool.swapPath(s); if (ss.length > 0) ss += '",\n "'; ss += s; } -- Gitee From 5c71d8a7d9e73059b57e939e9dd12be7028b1ff3 Mon Sep 17 00:00:00 2001 From: huruitao Date: Thu, 11 Jul 2024 15:38:01 +0800 Subject: [PATCH 07/31] =?UTF-8?q?"modifile=20src/cli/cmake2gn/src/src/tool?= =?UTF-8?q?.js=20=E4=BF=AE=E6=94=B9napi=E4=BB=93=20js=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E5=92=8C=E9=87=8D=E5=A4=A7=E5=91=8A=E8=AD=A6?= =?UTF-8?q?"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: huruitao --- src/cli/cmake2gn/src/src/tool.js | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/src/cli/cmake2gn/src/src/tool.js b/src/cli/cmake2gn/src/src/tool.js index 935ec030..930a7b2a 100644 --- a/src/cli/cmake2gn/src/src/tool.js +++ b/src/cli/cmake2gn/src/src/tool.js @@ -156,8 +156,8 @@ class Tool { */ static getJsonCfg() { if (this.globalJsonCfg === null || this.globalJsonCfg === undefined) { - let jsonFilePath = path.join(Tool.CURRENT_TOOL_PATH, "res/cfg.json"); - let jsonFile = fs.readFileSync(jsonFilePath, { encoding: "utf8" }); + let jsonFilePath = path.join(Tool.CURRENT_TOOL_PATH, 'res/cfg.json'); + let jsonFile = fs.readFileSync(jsonFilePath, { encoding: 'utf8' }); this.globalJsonCfg = JSON.parse(jsonFile); this.globalJsonCfg.fileSuffix = this.globalJsonCfg.fileSuffix ? ',' + this.globalJsonCfg.fileSuffix : ''; this.globalJsonCfg.compileflag = this.globalJsonCfg.compileflag ? ',' + this.globalJsonCfg.compileflag : ''; @@ -176,11 +176,11 @@ class Tool { let jsonCfg = this.getJsonCfg(); let allowedCxxSuffix = '.cpp, .cxx, .cc, .o, .z, .so, .a' + jsonCfg.fileSuffix; this.allowedCxx.fileSuffix = - allowedCxxSuffix.split(',').map(item => item.trim()).filter(item => item != ''); - let allowedFlag = '--target=, -march=, -mfloat-abi=, -mfpu=, -fsigned-char, -ffast-math, -rdynamic, ' - + '-UNDEBUG, -fno-threadsafe-statics, -fno-common, -fno-strict-aliasing, -fcolor-diagnostics, ' - + '-fstrict-aliasing, -fdiagnostics-show-option' + jsonCfg.compileflag; - this.allowedCxx.compileflag = allowedFlag.split(',').map(item => item.trim()).filter(item => item != ''); + allowedCxxSuffix.split(',').map(item => item.trim()).filter(item => item !== ''); + let allowedFlag = '--target=, -march=, -mfloat-abi=, -mfpu=, -fsigned-char, -ffast-math, -rdynamic, ' + + '-UNDEBUG, -fno-threadsafe-statics, -fno-common, -fno-strict-aliasing, -fcolor-diagnostics, ' + + '-fstrict-aliasing, -fdiagnostics-show-option' + jsonCfg.compileflag; + this.allowedCxx.compileflag = allowedFlag.split(',').map(item => item.trim()).filter(item => item !== ''); } return this.allowedCxx; } @@ -194,12 +194,12 @@ class Tool { this.allowedC = {}; let jsonCfg = this.getJsonCfg(); let allowedCSuffix = '.c, .o, .o", .a, .S, .so' + jsonCfg.fileSuffix; - this.allowedC.fileSuffix = allowedCSuffix.split(',').map(item => item.trim()).filter(item => item != ''); - let allowedFlag = '--target=, -march=, -mfloat-abi=, -mfpu=, -fno-common, -fcolor-diagnostics, -ggdb, ' - + '-fno-strict-aliasing, -ldl, -flto, -fno-builtin, -fno-stack-protector, -fvisibility=default, ' - + '-fsigned-char, -fstack-protector-strong, -fdiagnostics-show-option' - + jsonCfg.compileflag; - this.allowedC.compileflag = allowedFlag.split(',').map(item => item.trim()).filter(item => item != ''); + this.allowedC.fileSuffix = allowedCSuffix.split(',').map(item => item.trim()).filter(item => item !== ''); + let allowedFlag = '--target=, -march=, -mfloat-abi=, -mfpu=, -fno-common, -fcolor-diagnostics, -ggdb, ' + + '-fno-strict-aliasing, -ldl, -flto, -fno-builtin, -fno-stack-protector, -fvisibility=default, ' + + '-fsigned-char, -fstack-protector-strong, -fdiagnostics-show-option' + + jsonCfg.compileflag; + this.allowedC.compileflag = allowedFlag.split(',').map(item => item.trim()).filter(item => item !== ''); } return this.allowedC; } @@ -210,7 +210,9 @@ String.prototype.format = function (...args) { let reg = new RegExp('%[sd]{1}'); for (let i = 0; i < args.length; i++) { let p = result.search(reg); - if (p < 0) break; + if (p < 0) { + break; + } result = result.substring(0, p) + args[i] + result.substring(p + 2, result.length); } return result; -- Gitee From 1ef8987cda7283699f4688711a41a837b2709883 Mon Sep 17 00:00:00 2001 From: huruitao Date: Thu, 11 Jul 2024 15:39:36 +0800 Subject: [PATCH 08/31] =?UTF-8?q?"modifile=20src/cli/dts2cpp/src/gen/analy?= =?UTF-8?q?ze/enum.js=20=E4=BF=AE=E6=94=B9napi=E4=BB=93=20js=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E9=97=AE=E9=A2=98=E5=92=8C=E9=87=8D=E5=A4=A7=E5=91=8A?= =?UTF-8?q?=E8=AD=A6"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: huruitao --- src/cli/dts2cpp/src/gen/analyze/enum.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/cli/dts2cpp/src/gen/analyze/enum.js b/src/cli/dts2cpp/src/gen/analyze/enum.js index 61a5a408..b8fb2a3d 100644 --- a/src/cli/dts2cpp/src/gen/analyze/enum.js +++ b/src/cli/dts2cpp/src/gen/analyze/enum.js @@ -24,15 +24,15 @@ function analyzeEnum(data) { enumValueType: 0 // 0代表数字,1代表字符串 }; for (let i in body) { - let bodyContent = body[i] + let bodyContent = body[i]; while (bodyContent.length > 0 && bodyContent[0] === ' ') { - bodyContent = bodyContent.substring(1, bodyContent.length) + bodyContent = bodyContent.substring(1, bodyContent.length); } while (bodyContent.length > 0 && bodyContent[-1] === ' ') { - bodyContent = bodyContent.substring(0, bodyContent.length - 1) + bodyContent = bodyContent.substring(0, bodyContent.length - 1); } - if (bodyContent === "") { - break + if (bodyContent === '') { + break; } analyzeEnumResult(result, bodyContent, i); } @@ -40,9 +40,9 @@ function analyzeEnum(data) { } function analyzeEnumResult(result, bodyContent, index) { - let regString = re.match(' *([a-zA-Z0-9_]+) * = *\"([\x21-\x7e]+)*\"', bodyContent); + let regString = re.match(' *([a-zA-Z0-9_]+) * = *\'([\x21-\x7e]+)*\'', bodyContent); let regSingleQuotes = re.match(" *([a-zA-Z0-9_]+) * = *'([\x21-\x7e]+)*'", bodyContent); - let regNumber = re.match(" *([a-zA-Z0-9_]+) * = *([a-zA-Z_0-9<>-]+)", bodyContent); + let regNumber = re.match(' *([a-zA-Z0-9_]+) * = *([a-zA-Z_0-9<>-]+)', bodyContent); let reg = re.match(' *([a-zA-Z0-9_]+) *', bodyContent); if (regString) { let elementName = re.getReg(bodyContent, regString.regs[1]); -- Gitee From e783b7ef7c44b98c40b748a7a4a563b3de56a095 Mon Sep 17 00:00:00 2001 From: huruitao Date: Thu, 11 Jul 2024 15:41:01 +0800 Subject: [PATCH 09/31] =?UTF-8?q?"modifile=20src/cli/dts2cpp/src/gen/analy?= =?UTF-8?q?ze/function.js=20=E4=BF=AE=E6=94=B9napi=E4=BB=93=20js=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E9=97=AE=E9=A2=98=E5=92=8C=E9=87=8D=E5=A4=A7=E5=91=8A?= =?UTF-8?q?=E8=AD=A6"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: huruitao --- src/cli/dts2cpp/src/gen/analyze/function.js | 46 +++++++++++---------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/src/cli/dts2cpp/src/gen/analyze/function.js b/src/cli/dts2cpp/src/gen/analyze/function.js index 34a18e76..ef4a4096 100644 --- a/src/cli/dts2cpp/src/gen/analyze/function.js +++ b/src/cli/dts2cpp/src/gen/analyze/function.js @@ -22,7 +22,7 @@ const { randomInt } = require('crypto'); const { print } = require('../tools/tool'); function analyzeSubInterface(data) { - let body = re.replaceAll(data, '\n', '').split(';') // # replace(' ', ''). + let body = re.replaceAll(data, '\n', '').split(';'); // # replace(' ', ''). let result = { value: [], function: [], @@ -32,12 +32,16 @@ function analyzeSubInterface(data) { }; for (let i in body) { let t = body[i]; - while (t.length > 0 && t[0] === ' ') // 去除前面的空格 - t = t.substring(1, t.length); - while (t.length > 0 && t[-1] === ' ') // 去除后面的空格 - t = t.substring(0, t.length - 1) - if (t === '') break // 如果t为空直接返回 - let tt = re.match(' *([a-zA-Z0-9_]+) *: *([a-zA-Z_0-9<>,:{}[\\] ]+)', t) + while (t.length > 0 && t[0] === ' ') { + t = t.substring(1, t.length); // 去除前面的空格 + } + while (t.length > 0 && t[-1] === ' ') { + t = t.substring(0, t.length - 1); // 去除后面的空格 + } + if (t === '') { + break; // 如果t为空直接返回 + } + let tt = re.match(' *([a-zA-Z0-9_]+) *: *([a-zA-Z_0-9<>,:{}[\\] ]+)', t); if (tt) { // 变量 analyzeSubInterfaceVal(t, tt, result); } @@ -60,17 +64,17 @@ function analyzeSubInterfaceVal(t, tt, result) { } function getFuncParaType(v, interfaceName, data, results) { - let arrayType = re.match('(Async)*Callback<(Array<([a-zA-Z_0-9]+)>)>', v.type) - let parameter = v.type + let arrayType = re.match('(Async)*Callback<(Array<([a-zA-Z_0-9]+)>)>', v.type); + let parameter = v.type; if (arrayType) { - parameter = re.getReg(v.type, arrayType.regs[2]) + parameter = re.getReg(v.type, arrayType.regs[2]); } if (isEnum(parameter, data)) { let index = enumIndex(parameter, data); if (data.enum[index].body.enumValueType === EnumValueType.ENUM_VALUE_TYPE_NUMBER) { - v.type = v.type.replace(parameter, 'NUMBER_TYPE_' + NumberIncrease.getAndIncrease()) + v.type = v.type.replace(parameter, 'NUMBER_TYPE_' + NumberIncrease.getAndIncrease()); } else if (data.enum[index].body.enumValueType === EnumValueType.ENUM_VALUE_TYPE_STRING) { - v.type = v.type.replace(parameter, 'string') + v.type = v.type.replace(parameter, 'string'); } else { NapiLog.logError('analyzeFunction getFuncParaType is not support this type %s.' .format(data.enum[index].body.enumValueType), getLogErrInfo); @@ -81,10 +85,10 @@ function getFuncParaType(v, interfaceName, data, results) { else if (isEnum(parameter, results)) { let index = enumIndex(parameter, results); if (results.enum[index].body.enumValueType === EnumValueType.ENUM_VALUE_TYPE_NUMBER) { - v.type = v.type.replace(parameter, 'NUMBER_TYPE_' + NumberIncrease.getAndIncrease()) - v.realType = v.type + v.type = v.type.replace(parameter, 'NUMBER_TYPE_' + NumberIncrease.getAndIncrease()); + v.realType = v.type; } else if (results.enum[index].body.enumValueType === EnumValueType.ENUM_VALUE_TYPE_STRING) { - v.type = v.type.replace(parameter, 'string') + v.type = v.type.replace(parameter, 'string'); } else { NapiLog.logError('analyzeFunction getFuncParaType is not support this type %s.' .format(results.enum[index].body.enumValueType), getLogErrInfo()); @@ -115,15 +119,15 @@ function getFuncParaType(v, interfaceName, data, results) { function analyzeFuncNoNameInterface(data, values, results) { values = re.replaceAll(re.replaceAll(values, ' ', ''), '\n', ''); let interfaceName = ''; - let matchNoName = '([:{<}>,;a-zA-Z_0-9]*)\\?*(:[A-Za-z0-9_,;]*)?:((Async)*Callback<)?{(([A-Za-z0-9_]+:'+ + let matchNoName = '([:{<}>,;a-zA-Z_0-9]*)\\?*(:[A-Za-z0-9_,;]*)?:((Async)*Callback<)?{(([A-Za-z0-9_]+:' + '[A-Za-z0-9_,;]+)*)([A-Za-z0-9_]+:[A-Za-z0-9_]+)}(}|,|;|>)?$'; let matchs = re.match(matchNoName, values); if (matchs) { - let st = values.lastIndexOf('{'); + let st = values.lastIndexOf('{'); let end = values.indexOf('}'); let number = NumberIncrease.getAndIncrease(); interfaceName = 'AUTO_INTERFACE_%s'.format(number); - let interfaceBody = values.substring(st+1, end); + let interfaceBody = values.substring(st + 1, end); let typeInterface = '{%s}'.format(interfaceBody); values = re.replaceAll(values, typeInterface, interfaceName); interfaceBody = re.replaceAll(interfaceBody, ',', ';'); @@ -141,7 +145,7 @@ function analyzeFuncNoNameInterface(data, values, results) { } matchs = re.match(matchNoName, values); - if(matchs) { + if (matchs) { let resNoNameInter = analyzeFuncNoNameInterface(data, values); values = resNoNameInter.values; } @@ -166,7 +170,7 @@ function analyseSubReturn(ret, data, results) { let len = tt.length; let res = ''; let interfaceName = ''; - for (let i=0; i Date: Thu, 11 Jul 2024 15:41:09 +0800 Subject: [PATCH 10/31] =?UTF-8?q?"modifile=20src/cli/dts2cpp/src/gen/analy?= =?UTF-8?q?ze/interface.js=20=E4=BF=AE=E6=94=B9napi=E4=BB=93=20js=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E9=97=AE=E9=A2=98=E5=92=8C=E9=87=8D=E5=A4=A7=E5=91=8A?= =?UTF-8?q?=E8=AD=A6"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: huruitao --- src/cli/dts2cpp/src/gen/analyze/interface.js | 26 ++++++++++++-------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/cli/dts2cpp/src/gen/analyze/interface.js b/src/cli/dts2cpp/src/gen/analyze/interface.js index 16a1b4f0..a46e909c 100644 --- a/src/cli/dts2cpp/src/gen/analyze/interface.js +++ b/src/cli/dts2cpp/src/gen/analyze/interface.js @@ -24,7 +24,7 @@ function analyzeNoNameInterface(valueType, valueName, rsltInterface) { if (matchs) { let number = NumberIncrease.getAndIncrease(); let interfaceTypeName = 'AUTO_INTERFACE_%s_%s'.format(valueName, number); - let interfaceBody = valueType.substring(1, valueType.length-1); + let interfaceBody = valueType.substring(1, valueType.length - 1); interfaceBody = re.replaceAll(interfaceBody, ',', ';\n'); rsltInterface.push({ name: interfaceTypeName, @@ -38,12 +38,12 @@ function analyzeNoNameInterface(valueType, valueName, rsltInterface) { /* 去除单行注释// */ function parseNotes(data) { let notes = data.indexOf('//') >= 0 ? data.substring(data.indexOf('//'), data.length) : ''; - while(notes != '') { + while (notes !== '') { notes = notes.substring(0, notes.indexOf('\n')); data = data.replace(notes, ''); notes = ''; let st = data.indexOf('//'); - if(st >= 0) { + if (st >= 0) { notes = data.substring(st, data.length); } } @@ -54,7 +54,7 @@ function parseNotes(data) { function analyzeInterface(data, rsltInterface = null, results, interfaceName = '') { // same as class let body = data; body = body.indexOf('//') < 0 ? body : parseNotes(body); - let arr = [...body.matchAll(/;\s*\n+/g)]; + let arr = [...body.matchAll(/;\s*\n+/g)]; for (let i = 0; i < arr.length; i++) { let result = arr[i]; body = re.replaceAll(body, result[0], ';\n'); @@ -67,15 +67,21 @@ function analyzeInterface(data, rsltInterface = null, results, interfaceName = ' for (let i in body) { let t = body[i]; t = re.replaceAll(t, '\n', ''); - while (t.length > 0 && t[0] === ' ') t = t.substring(1, t.length); // 去除前面的空格 - while (t.length > 0 && t[-1] === ' ') t = t.substring(0, t.length - 1); // 去除后面的空格 - if (t === '') break; // 如果t为空直接返回 + while (t.length > 0 && t[0] === ' ') { + t = t.substring(1, t.length); // 去除前面的空格 + } + while (t.length > 0 && t[-1] === ' ') { + t = t.substring(0, t.length - 1); // 去除后面的空格 + } + if (t === '') { + break; // 如果t为空直接返回 + } let tt = re.match(' *([a-zA-Z0-9_]+)(\\?*)*: *([a-zA-Z_0-9<>,:{}[\\]| ]+)', t); if (tt && t.indexOf('=>') < 0) { // 接口成员变量, 但不包括带'=>'的成员,带'=>'的接口成员需要按函数处理 analyzeInterfaceVariable(t, tt, rsltInterface, result); } - tt = re.match("(static )* *(\\$*[A-Za-z0-9_]+) *[:]? *\\(([\n 'a-zA-Z\'\'\"\":;=,_0-9?<>{}()=>|[\\]]*)\\)" - + ' *(:|=>)? *([A-Za-z0-9_<>{}:;, .[\\]]+)?', t) + tt = re.match("(static )* *(\\$*[A-Za-z0-9_]+) *[:]? *\\(([\n 'a-zA-Z\'\'\"\":;=,_0-9?<>{}()=>|[\\]]*)\\)" + + ' *(:|=>)? *([A-Za-z0-9_<>{}:;, .[\\]]+)?', t); if (tt) { // 接口函数成员 analyzeInterfaceFunction(t, tt, data, results, interfaceName, result); } @@ -86,7 +92,7 @@ function analyzeInterface(data, rsltInterface = null, results, interfaceName = ' module.exports = { analyzeInterface, parseNotes -} +}; function analyzeInterfaceFunction(t, tt, data, results, interfaceName, result) { let ret = re.getReg(t, tt.regs[5]) === '' ? 'void' : re.getReg(t, tt.regs[5]); -- Gitee From 2ed31e595e6be40333967686357a1debe5c17a4a Mon Sep 17 00:00:00 2001 From: huruitao Date: Thu, 11 Jul 2024 15:41:56 +0800 Subject: [PATCH 11/31] =?UTF-8?q?"modifile=20src/cli/dts2cpp/src/gen/analy?= =?UTF-8?q?ze/namespace.js=20=E4=BF=AE=E6=94=B9napi=E4=BB=93=20js=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E9=97=AE=E9=A2=98=E5=92=8C=E9=87=8D=E5=A4=A7=E5=91=8A?= =?UTF-8?q?=E8=AD=A6"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: huruitao --- src/cli/dts2cpp/src/gen/analyze/namespace.js | 32 ++++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/cli/dts2cpp/src/gen/analyze/namespace.js b/src/cli/dts2cpp/src/gen/analyze/namespace.js index 112be802..c5b08e50 100644 --- a/src/cli/dts2cpp/src/gen/analyze/namespace.js +++ b/src/cli/dts2cpp/src/gen/analyze/namespace.js @@ -51,10 +51,12 @@ function analyzeNamespace(data) { while (data !== '\n') { let oldData = data; data = removeEmptyLine(data); - let matchs = re.match(' *\n*', data); + let matchs = re.match(' *\n*', data); data = preProcessData(data); // 只剩下空格和回车时,解析完成 - if (matchs && matchs.regs[0][1] === data.length) break; + if (matchs && matchs.regs[0][1] === data.length) { + break; + } let parseEnumResult = parseEnum(matchs, data, result); data = getDataByResult(parseEnumResult); @@ -96,7 +98,7 @@ function parseEnumType(result) { // interface 匹配 for (let i in result.interface) { let interf = result.interface[i]; - if(!isValidValue(interf)) { + if (!isValidValue(interf)) { NapiLog.logError('parseEnumType interf is null!'); return null; } @@ -104,7 +106,7 @@ function parseEnumType(result) { // function 匹配 for (let j in interf.body.function) { let func = interf.body.function[j]; - if(!isValidValue(func)) { + if (!isValidValue(func)) { NapiLog.logError('parseEnumType func is null!'); return null; } @@ -112,12 +114,12 @@ function parseEnumType(result) { // 参数匹配 for (let k in func.value) { let v = func.value[k]; - if(!isValidValue(v)) { + if (!isValidValue(v)) { NapiLog.logError('parseEnumType func.value is null!'); return null; } - if (v.type === enumm.name) { + if (v.type === enumm.name) { if (enumm.body.enumValueType === EnumValueType.ENUM_VALUE_TYPE_NUMBER) { v.type = 'NUMBER_TYPE_' + NumberIncrease.getAndIncrease(); } else if (enumm.body.enumValueType === EnumValueType.ENUM_VALUE_TYPE_STRING) { @@ -277,17 +279,15 @@ function parseFunction(matchs, data, result) { let matchFuncArray = re.match(' *: *([A-Za-z0-9]+)(\\[]);*', funcRet); if (matchFuncArray) { funcRet = re.getReg(funcRet, [matchFuncArray.regs[1][0], matchFuncArray.regs[2][1]]); - } - else if (matchFunc) { + } else if (matchFunc) { funcRet = re.getReg(funcRet, matchFunc.regs[1]); - } - else { + } else { funcRet = 'void'; } funcRet = re.replaceAll(re.replaceAll(funcRet, ' ', ''), '\n', ''); - if(funcRet[funcRet.length-1] === ';'){ - funcRet = funcRet.substring(0, funcRet.length-1); + if (funcRet[funcRet.length - 1] === ';') { + funcRet = funcRet.substring(0, funcRet.length - 1); } let funcDetail = analyzeFunction( result, false, funcName, funcValue.substring(1, funcValue.length - 1), funcRet, result); @@ -341,7 +341,7 @@ function getParentNameList(firstKey, secondKey, parentStr) { * @param result 解析后的ts数据结构 * @returns data 原始ts文件内容中剩余未解析的部分 */ -function createInterfaceData (matchs, data, result) { +function createInterfaceData(matchs, data, result) { let interfaceName = re.getReg(data, matchs.regs[2]); let interfaceBody = checkOutBody(data, matchs.regs[6][0], null, null); let bodyObj = analyzeInterface(interfaceBody.substring(1, interfaceBody.length - 1), result.interface, @@ -349,10 +349,10 @@ function createInterfaceData (matchs, data, result) { let extendsParent = re.getReg(data, matchs.regs[4]); let implementParent = re.getReg(data, matchs.regs[5]); bodyObj.parentNameList = []; - if(extendsParent !== '') { + if (extendsParent !== '') { bodyObj.parentNameList = getParentNameList('extends', 'implements', extendsParent); } - if(implementParent !== '') { + if (implementParent !== '') { bodyObj.parentNameList = getParentNameList('implements', 'extends', implementParent); } for (let i in bodyObj.parentNameList) { @@ -386,7 +386,7 @@ function parseInterface(matchs, data, result) { '(export )*interface ([A-Za-z_0-9]+)()* *(extends [a-zA-Z_0-9, ]+)* *(implements [a-zA-Z_0-9, ]+)* *({)' , data); if (matchs) { - return createInterfaceData (matchs, data, result); + return createInterfaceData(matchs, data, result); } return data; } -- Gitee From cacd0802a0de174d04ab53a4b99562380df0c83f Mon Sep 17 00:00:00 2001 From: huruitao Date: Thu, 11 Jul 2024 15:42:57 +0800 Subject: [PATCH 12/31] =?UTF-8?q?"modifile=20src/cli/dts2cpp/src/gen/analy?= =?UTF-8?q?ze/params.js=20=E4=BF=AE=E6=94=B9napi=E4=BB=93=20js=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E9=97=AE=E9=A2=98=E5=92=8C=E9=87=8D=E5=A4=A7=E5=91=8A?= =?UTF-8?q?=E8=AD=A6"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: huruitao --- src/cli/dts2cpp/src/gen/analyze/params.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/cli/dts2cpp/src/gen/analyze/params.js b/src/cli/dts2cpp/src/gen/analyze/params.js index 77baa679..4ce8f18d 100644 --- a/src/cli/dts2cpp/src/gen/analyze/params.js +++ b/src/cli/dts2cpp/src/gen/analyze/params.js @@ -14,7 +14,7 @@ */ const re = require('../tools/re'); const { checkOutBody, print } = require('../tools/tool'); -const { FuncType, NumberIncrease,isFuncType, isArrowFunc,isRegisterFunc } = require('../tools/common'); +const { FuncType, NumberIncrease, isFuncType, isArrowFunc, isRegisterFunc } = require('../tools/common'); const { NapiLog } = require('../tools/NapiLog'); function isSyncFuncType(type, funcType) { @@ -67,7 +67,7 @@ function analyzeCallbackFunction(valueType, valueName, rsltCallFunction) { /**函数参数解析 */ function analyzeParams(funcName, values) { - let result = []; + let result = []; let rsltCallFunction = []; let funcType = FuncType.DIRECT; let optionalParamCount = 0; // 可选参数的个数 @@ -98,8 +98,8 @@ function analyzeParams(funcName, values) { optionalParamCount++; } else if (optionalParamCount > 0) { // 可选参数之后不能再有必选参数,须是可选参数。 - NapiLog.logError('Invalid parameter [%s] of function [%s],'.format(v, funcName) - + ' the required parameter cannot follow an optional parameter.'); + NapiLog.logError('Invalid parameter [%s] of function [%s],'.format(v, funcName) + + ' the required parameter cannot follow an optional parameter.'); checkParamOk = false; } if (checkParamOk) { -- Gitee From 9e7082d2324c9bf6bfee3d6f9cf8d3c6e9fba970 Mon Sep 17 00:00:00 2001 From: huruitao Date: Thu, 11 Jul 2024 15:43:59 +0800 Subject: [PATCH 13/31] =?UTF-8?q?"modifile=20src/cli/dts2cpp/src/gen/analy?= =?UTF-8?q?ze/type.js=20=E4=BF=AE=E6=94=B9napi=E4=BB=93=20js=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E9=97=AE=E9=A2=98=E5=92=8C=E9=87=8D=E5=A4=A7=E5=91=8A?= =?UTF-8?q?=E8=AD=A6"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: huruitao --- src/cli/dts2cpp/src/gen/analyze/type.js | 34 ++++++++++++++----------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/src/cli/dts2cpp/src/gen/analyze/type.js b/src/cli/dts2cpp/src/gen/analyze/type.js index 91f5d5bd..46f695de 100644 --- a/src/cli/dts2cpp/src/gen/analyze/type.js +++ b/src/cli/dts2cpp/src/gen/analyze/type.js @@ -18,12 +18,12 @@ const { NumberIncrease } = require('../tools/common'); /* 去除单行注释// */ function parseNotes(data) { let notes = data.indexOf('//') >= 0 ? data.substring(data.indexOf('//'), data.length) : ''; - while(notes !== '') { + while (notes !== '') { notes = notes.substring(0, notes.indexOf('\n')); data = data.replace(notes, ''); - notes = '' + notes = ''; let st = data.indexOf('//'); - if(st >= 0) { + if (st >= 0) { notes = data.substring(st, data.length); } } @@ -41,11 +41,15 @@ function analyzeType(data, rsltInterface = null) { // same as class }; for (let i in body) { let t = body[i]; - while (t.length > 0 && t[0] === ' ') // 去除前面的空格 - t = t.substring(1, t.length); - while (t.length > 0 && t[-1] === ' ') // 去除后面的空格 - t = t.substring(0, t.length - 1); - if (t === '') break; // 如果t为空直接返回 + while (t.length > 0 && t[0] === ' ') { + t = t.substring(1, t.length); // 去除前面的空格 + } + while (t.length > 0 && t[-1] === ' ') { + t = t.substring(0, t.length - 1); // 去除后面的空格 + } + if (t === '') { + break; // 如果t为空直接返回 + } let tt = re.match(' *([a-zA-Z0-9_]+)(\\?*)*: *([a-zA-Z_0-9<>,:{}[\\]| ]+)', t); if (tt && t.indexOf('=>') < 0) { // 接口成员变量, 但不包括带'=>'的成员,带'=>'的接口成员需要按函数处理 analyzeTypeVariable(t, tt, result); @@ -71,7 +75,7 @@ function analyzeTypeVariable(t, tt, result) { } function analyzeType2(data) { - let body = re.replaceAll(data, ' ', '').split("'|'"); + let body = re.replaceAll(data, ' ', '').split('"|"'); let result = { element: [], function: [], @@ -79,13 +83,13 @@ function analyzeType2(data) { }; for (let i in body) { let bodyContent = body[i]; - while (bodyContent.length > 0 && bodyContent[0] == ' ') { + while (bodyContent.length > 0 && bodyContent[0] === ' ') { bodyContent = bodyContent.substring(1, bodyContent.length); } - while (bodyContent.length > 0 && bodyContent[-1] == ' ') { + while (bodyContent.length > 0 && bodyContent[-1] === ' ') { bodyContent = bodyContent.substring(0, bodyContent.length - 1); } - if (bodyContent == '') { + if (bodyContent === '') { break; } analyzeType2Result(result, bodyContent, i); @@ -94,10 +98,10 @@ function analyzeType2(data) { } function analyzeType2Result(result, bodyContent, index) { - let regString = re.match(' *([a-zA-Z0-9_]+) *', bodyContent); + let regString = re.match(' *([a-zA-Z0-9_]+) *', bodyContent); if (regString) { let elementName = re.getReg(bodyContent, regString.regs[1]); - elementName = 'NAME_' + elementName.toUpperCase() + elementName = 'NAME_' + elementName.toUpperCase(); let elementValue = re.getReg(bodyContent, regString.regs[1]); result.element.push({ name: elementName, @@ -114,4 +118,4 @@ module.exports = { analyzeType2, analyzeType2Result, parseNotes -}; \ No newline at end of file +}; -- Gitee From a180f69830100e5b86335144e4d53982b682c980 Mon Sep 17 00:00:00 2001 From: huruitao Date: Thu, 11 Jul 2024 15:44:18 +0800 Subject: [PATCH 14/31] =?UTF-8?q?"modifile=20src/cli/dts2cpp/src/gen/cmd?= =?UTF-8?q?=5Fgen.js=20=E4=BF=AE=E6=94=B9napi=E4=BB=93=20js=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E9=97=AE=E9=A2=98=E5=92=8C=E9=87=8D=E5=A4=A7=E5=91=8A?= =?UTF-8?q?=E8=AD=A6"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: huruitao --- src/cli/dts2cpp/src/gen/cmd_gen.js | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/cli/dts2cpp/src/gen/cmd_gen.js b/src/cli/dts2cpp/src/gen/cmd_gen.js index 8e8832ea..609bcb2d 100644 --- a/src/cli/dts2cpp/src/gen/cmd_gen.js +++ b/src/cli/dts2cpp/src/gen/cmd_gen.js @@ -37,18 +37,18 @@ let ops = stdio.getopt({ * "serviceCode":"out = codeTestFunc(v);"}] * 配置cfg.json文件路径 */ - 'serviceCode': {key: 's', args: 1, description: "configure the service code", default: ""} + 'serviceCode': {key: 's', args: 1, description: 'configure the service code', default: ''} }); -NapiLog.init(ops.loglevel, path.join("" + ops.out, "napi_gen.log")); +NapiLog.init(ops.loglevel, path.join('' + ops.out, 'napi_gen.log')); let fileNames = ops.filename; var pathDir = ops.directory; var imports = ops.imports; if (fileNames == null && pathDir == null) { NapiLog.logInfo('fileNames and pathDir both cannot be empty at the same time'); -} else if (pathDir != '') { +} else if (pathDir !== '') { readDirFiles(); } else if (fileNames !== '') { readFiles(); @@ -115,7 +115,7 @@ function getJsonCfg(currentPath) { function checkGenerate(fileName) { NapiLog.logInfo('check file []'.format(fileName)); let suffix = fileName.split('.').pop().toLowerCase(); - if (ops.tsGen == 'true' && suffix === 'h') { + if (ops.tsGen === 'true' && suffix === 'h') { NapiLog.logInfo('convert .h file to .ts file...'); tsMain.doGenerate(fileName, ops.out); return; @@ -145,8 +145,7 @@ let ret = NapiLog.getResult(); if (ret[0]) { print('success'); NapiLog.logInfo('success'); -} -else { +} else { print('fail\n' + ret[1]); NapiLog.logInfo('fail\n' + ret[1]); -} +} \ No newline at end of file -- Gitee From e1e41ecb14638ac623613157b70d9a21e04c29da Mon Sep 17 00:00:00 2001 From: huruitao Date: Thu, 11 Jul 2024 15:45:47 +0800 Subject: [PATCH 15/31] =?UTF-8?q?"modifile=20src/cli/dts2cpp/src/gen/debug?= =?UTF-8?q?.js=20=E4=BF=AE=E6=94=B9napi=E4=BB=93=20js=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E5=92=8C=E9=87=8D=E5=A4=A7=E5=91=8A=E8=AD=A6?= =?UTF-8?q?"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: huruitao --- src/cli/dts2cpp/src/gen/debug.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/cli/dts2cpp/src/gen/debug.js b/src/cli/dts2cpp/src/gen/debug.js index 9a38dd05..356ebd1e 100644 --- a/src/cli/dts2cpp/src/gen/debug.js +++ b/src/cli/dts2cpp/src/gen/debug.js @@ -33,8 +33,8 @@ const re = require('./tools/re'); // let file_path = `D:\\DOC\\NAPI\\feature\\supported\\@ohos.napitestsupportSingle.d.ts` // let file_path = './test/storytest/test_type/@ohos.test.d.ts' -let file_path = 'D:\\Code\\debugAppCodeGen\\napi1109\\napi_generator_0824\\@ohos.napitest.d.ts'; -let fn = re. getFileInPath(file_path); +let filePath = 'D:\\Code\\debugAppCodeGen\\napi1109\\napi_generator_0824\\@ohos.napitest.d.ts'; +let fn = re. getFileInPath(filePath); let jsonCfg = `D:\\Code\\debugAppCodeGen\\napi1109\\napi_generator_0824\\funTestCfg.json`; NapiLog.init(NapiLog.LEV_INFO, 'napi_gen.log'); NapiLog.logError('Begin to test.'); @@ -42,7 +42,7 @@ let funcConfig; if (jsonCfg) { funcConfig = getJsonCfg(jsonCfg); } -let tt = re.match('(@ohos\.)*([.a-z_A-Z0-9]+).d.ts', fn); // @ohos\.[a-zA-Z0-9]+\.d\.ts +let tt = re.match('(@ohos\.)*([.a-z_A-Z0-9]+).d.ts', fn); // @ohos\.[a-zA-Z0-9]+\.d\.ts if (tt) { - main.doGenerate(file_path, 'D:\\Code\\debugAppCodeGen\\napi1109\\napi_generator_0824\\appOut', funcConfig); + main.doGenerate(filePath, 'D:\\Code\\debugAppCodeGen\\napi1109\\napi_generator_0824\\appOut', funcConfig); } -- Gitee From 46e56ceb2d03921f6c4739e549415377e8bf1320 Mon Sep 17 00:00:00 2001 From: huruitao Date: Thu, 11 Jul 2024 15:46:02 +0800 Subject: [PATCH 16/31] =?UTF-8?q?"modifile=20src/cli/dts2cpp/src/gen/exten?= =?UTF-8?q?d/binding=5Fgyp.js=20=E4=BF=AE=E6=94=B9napi=E4=BB=93=20js?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E9=97=AE=E9=A2=98=E5=92=8C=E9=87=8D=E5=A4=A7?= =?UTF-8?q?=E5=91=8A=E8=AD=A6"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: huruitao --- src/cli/dts2cpp/src/gen/extend/binding_gyp.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/cli/dts2cpp/src/gen/extend/binding_gyp.js b/src/cli/dts2cpp/src/gen/extend/binding_gyp.js index 4bfec093..194d2d6c 100644 --- a/src/cli/dts2cpp/src/gen/extend/binding_gyp.js +++ b/src/cli/dts2cpp/src/gen/extend/binding_gyp.js @@ -43,9 +43,9 @@ function generateGYP(destDir, implName, license, bindingCpp) { } } writeFile(re.pathJoin(destDir, 'binding.gyp'), (null !== license && undefined !== license) ? - (license + '\n' + ss) : ss) + (license + '\n' + ss) : ss); - writeFile(re.pathJoin(destDir, 'test.sh'), 'node-gyp configure build && sleep 0.5 && node --expose-gc test.js') + writeFile(re.pathJoin(destDir, 'test.sh'), 'node-gyp configure build && sleep 0.5 && node --expose-gc test.js'); } @@ -64,4 +64,4 @@ function getLicense(s2, i, license) { module.exports = { generateGYP -} +}; \ No newline at end of file -- Gitee From c8e495cb86eb162e8ce788a675acb307f92e6ffd Mon Sep 17 00:00:00 2001 From: huruitao Date: Thu, 11 Jul 2024 15:47:18 +0800 Subject: [PATCH 17/31] =?UTF-8?q?"modifile=20src/cli/dts2cpp/src/gen/exten?= =?UTF-8?q?d/build=5Fgn.js=20=E4=BF=AE=E6=94=B9napi=E4=BB=93=20js=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E9=97=AE=E9=A2=98=E5=92=8C=E9=87=8D=E5=A4=A7=E5=91=8A?= =?UTF-8?q?=E8=AD=A6"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: huruitao --- src/cli/dts2cpp/src/gen/extend/build_gn.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cli/dts2cpp/src/gen/extend/build_gn.js b/src/cli/dts2cpp/src/gen/extend/build_gn.js index 986ee44e..235e248f 100644 --- a/src/cli/dts2cpp/src/gen/extend/build_gn.js +++ b/src/cli/dts2cpp/src/gen/extend/build_gn.js @@ -59,7 +59,7 @@ function generateGN(destDir, implName, license, partName, buildCpp) { license = getGnLicense(license); } writeFile(re.pathJoin(destDir, 'BUILD.gn'), (null !== license && undefined !== license) ? - (license + '\n' + gnFile) : gnFile) + (license + '\n' + gnFile) : gnFile); } function getGnLicense(license) { @@ -81,4 +81,4 @@ function getGnLicense(license) { module.exports = { generateGN -} +}; -- Gitee From 8cc48c9dd7bbb51324a7adc8facfc190b5314a6d Mon Sep 17 00:00:00 2001 From: huruitao Date: Thu, 11 Jul 2024 15:48:07 +0800 Subject: [PATCH 18/31] =?UTF-8?q?"modifile=20src/cli/dts2cpp/src/gen/exten?= =?UTF-8?q?d/tool=5Futility.js=20=E4=BF=AE=E6=94=B9napi=E4=BB=93=20js?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E9=97=AE=E9=A2=98=E5=92=8C=E9=87=8D=E5=A4=A7?= =?UTF-8?q?=E5=91=8A=E8=AD=A6"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: huruitao --- src/cli/dts2cpp/src/gen/extend/tool_utility.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cli/dts2cpp/src/gen/extend/tool_utility.js b/src/cli/dts2cpp/src/gen/extend/tool_utility.js index 735ad6bd..13563db4 100644 --- a/src/cli/dts2cpp/src/gen/extend/tool_utility.js +++ b/src/cli/dts2cpp/src/gen/extend/tool_utility.js @@ -1781,7 +1781,7 @@ void XNapiTool::CallThreadSafeFunc(std::string eventName) { function generateBase(destDir, license) { writeFile(re.pathJoin(destDir, 'tool_utility.h'), null != license ? (license + '\n' + xNapiToolH) : xNapiToolH); - writeFile(re.pathJoin(destDir, 'tool_utility.cpp'), null != license ? (license + '\n' + xNapiToolCpp):xNapiToolCpp); + writeFile(re.pathJoin(destDir, 'tool_utility.cpp'), null != license ? (license + '\n' + xNapiToolCpp) : xNapiToolCpp); } module.exports = { -- Gitee From 400bd44db4b65a4108e17046229cf970eacf5d36 Mon Sep 17 00:00:00 2001 From: huruitao Date: Thu, 11 Jul 2024 15:49:07 +0800 Subject: [PATCH 19/31] =?UTF-8?q?"modifile=20src/cli/dts2cpp/src/gen/gener?= =?UTF-8?q?ate.js=20=E4=BF=AE=E6=94=B9napi=E4=BB=93=20js=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E5=92=8C=E9=87=8D=E5=A4=A7=E5=91=8A=E8=AD=A6?= =?UTF-8?q?"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: huruitao --- src/cli/dts2cpp/src/gen/generate.js | 68 ++++++++++++++--------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/src/cli/dts2cpp/src/gen/generate.js b/src/cli/dts2cpp/src/gen/generate.js index 5b07f354..b89b953d 100644 --- a/src/cli/dts2cpp/src/gen/generate.js +++ b/src/cli/dts2cpp/src/gen/generate.js @@ -176,7 +176,7 @@ function formatCode(destDir) { let dumyClangFmtFile = path.join(callPath, clangFmtName); let dumyFmtCfgFile = path.join(callPath, '.clang-format'); - if(!fs.existsSync(dumyClangFmtFile)) { + if (!fs.existsSync(dumyClangFmtFile)) { NapiLog.logInfo('Warning: clang-format does not exist, can not format cpp file.'); return; } @@ -190,15 +190,15 @@ function formatCode(destDir) { fs.copyFileSync(dumyFmtCfgFile, localFmtCfgFile); let execSync = require('child_process').execSync; - if (sysInfo != 'win32') { + if (sysInfo !== 'win32') { // linux系统下需要为临时复制的clang-format程序增加可执行权限 execSync('chmod +x ' + '\"' + localClangFmtFile + '\"'); } for (let i = 0; i < genFileList.length; ++i) { // 文件路径前后要用引号包含,防止因为路径中存在空格而导致命令执行失败 (windows的文件夹允许有空格) - let cmd = '\"' + localClangFmtFile + '\" -style=file -i \"' + path.resolve(path.join(destDir, genFileList[i])) - + '\"'; + let cmd = '\"' + localClangFmtFile + '\" -style=file -i \"' + path.resolve(path.join(destDir, genFileList[i])) + + '\"'; try { execSync(cmd); // C++文件格式化 } catch (err) { @@ -254,9 +254,9 @@ function generateAll(structOfTs, destDir, moduleName, numberType, jsonCfg) { jsonCfgList.pop(); - let numberUsing = "" - var numbertype = "uint32_t"; - if(numberType !== "" && (numberType !== undefined && numberType !== null)){ + let numberUsing = ''; + var numbertype = 'uint32_t'; + if (numberType !== '' && (numberType !== undefined && numberType !== null)) { numbertype = numberType; } for (let i = 1; i < NumberIncrease.get(); i++) { @@ -277,18 +277,18 @@ function generateAll(structOfTs, destDir, moduleName, numberType, jsonCfg) { includeH = includeHCppRes[1]; buildCpp = includeHCppRes[2]; } - implCpp = implCpp.replaceAll("[include_configure_hCode]", includeH); - implCpp = implCpp.replaceAll("[implCpp_detail]", result.implCpp) - writeFile(re.pathJoin(destDir, "%s.cpp".format(ns0.name)), (null !== license && undefined !== license) ? - (license + "\n" + implCpp) : implCpp) - genFileList.push("%s.cpp".format(ns0.name)); - - let partName = moduleName.replace('.', '_') - generateGYP(destDir, ns0.name, license, bindingCpp) // 生成ubuntu下测试的编译脚本 - generateGN(destDir, ns0.name, license, partName, buildCpp) // 生成BUILD.gn for ohos - generateBase(destDir, license) // tool_utility.h/cpp - genFileList.push("tool_utility.h"); - genFileList.push("tool_utility.cpp"); + implCpp = implCpp.replaceAll('[include_configure_hCode]', includeH); + implCpp = implCpp.replaceAll('[implCpp_detail]', result.implCpp); + writeFile(re.pathJoin(destDir, '%s.cpp'.format(ns0.name)), (null !== license && undefined !== license) ? + (license + '\n' + implCpp) : implCpp); + genFileList.push('%s.cpp'.format(ns0.name)); + + let partName = moduleName.replace('.', '_'); + generateGYP(destDir, ns0.name, license, bindingCpp) // 生成ubuntu下测试的编译脚本; + generateGN(destDir, ns0.name, license, partName, buildCpp) // 生成BUILD.gn for ohos; + generateBase(destDir, license) // tool_utility.h/cpp; + genFileList.push('tool_utility.h'); + genFileList.push('tool_utility.cpp'); formatCode(destDir); } @@ -300,10 +300,10 @@ function generateImplH(ns0, numberUsing, result, structOfTs, destDir, license) { for (let i = 0; i < structOfTs.imports.length; i++) { imports += structOfTs.imports[i]; } - implH = replaceAll(implH, "[importTs]", imports); - writeFile(re.pathJoin(destDir, "%s.h".format(ns0.name)), (null !== license && undefined !== license) ? - (license + "\n" + implH) : implH); - genFileList.push("%s.h".format(ns0.name)); + implH = replaceAll(implH, '[importTs]', imports); + writeFile(re.pathJoin(destDir, '%s.h'.format(ns0.name)), (null !== license && undefined !== license) ? + (license + '\n' + implH) : implH); + genFileList.push('%s.h'.format(ns0.name)); } function generateMiddleCpp(result, ns0, moduleName, destDir, license) { @@ -312,9 +312,9 @@ function generateMiddleCpp(result, ns0, moduleName, destDir, license) { middleCpp = replaceAll(middleCpp, '[implName]', ns0.name); middleCpp = replaceAll(middleCpp, '[modulename]', moduleName); genFileList.splice(0, genFileList.length); - writeFile(re.pathJoin(destDir, "%s_middle.cpp".format(ns0.name)), - (null !== license && undefined !== license) ? (license + "\n" + middleCpp) : middleCpp); - genFileList.push("%s_middle.cpp".format(ns0.name)); + writeFile(re.pathJoin(destDir, '%s_middle.cpp'.format(ns0.name)), + (null !== license && undefined !== license) ? (license + '\n' + middleCpp) : middleCpp); + genFileList.push('%s_middle.cpp'.format(ns0.name)); } // 将业务代码的头文件导入,若重复则跳过 @@ -341,15 +341,15 @@ function includeHCppFunc(jsonCfg, includeH, bindingCpp, buildCpp) {; } function generateMiddleH(ns0, result, destDir, license) { - let implName = ns0.name + "_middle"; - let middleH = replaceAll(moduleHTemplete, "[impl_name_upper]", implName.toUpperCase()); - middleH = replaceAll(middleH, "[implName]", ns0.name); - middleH = replaceAll(middleH, "[implH_detail]", result.middleH); - writeFile(re.pathJoin(destDir, "%s_middle.h".format(ns0.name)), - (null !== license && undefined !== license) ? (license + "\n" + middleH) : middleH); - genFileList.push("%s_middle.h".format(ns0.name)); + let implName = ns0.name + '_middle'; + let middleH = replaceAll(moduleHTemplete, '[impl_name_upper]', implName.toUpperCase()); + middleH = replaceAll(middleH, '[implName]', ns0.name); + middleH = replaceAll(middleH, '[implH_detail]', result.middleH); + writeFile(re.pathJoin(destDir, '%s_middle.h'.format(ns0.name)), + (null !== license && undefined !== license) ? (license + '\n' + middleH) : middleH); + genFileList.push('%s_middle.h'.format(ns0.name)); } module.exports = { generateAll -}; \ No newline at end of file +}; -- Gitee From 36278952969ec3f4766589964b98e44c36de031c Mon Sep 17 00:00:00 2001 From: huruitao Date: Thu, 11 Jul 2024 15:50:05 +0800 Subject: [PATCH 20/31] =?UTF-8?q?"modifile=20src/cli/dts2cpp/src/gen/gener?= =?UTF-8?q?ate/class.js=20=E4=BF=AE=E6=94=B9napi=E4=BB=93=20js=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E9=97=AE=E9=A2=98=E5=92=8C=E9=87=8D=E5=A4=A7=E5=91=8A?= =?UTF-8?q?=E8=AD=A6"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: huruitao --- src/cli/dts2cpp/src/gen/generate/class.js | 36 +++++++++++++---------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/src/cli/dts2cpp/src/gen/generate/class.js b/src/cli/dts2cpp/src/gen/generate/class.js index 60921f34..5e904020 100644 --- a/src/cli/dts2cpp/src/gen/generate/class.js +++ b/src/cli/dts2cpp/src/gen/generate/class.js @@ -41,23 +41,26 @@ public: };`; function generateVariable(name, type, variable, className) { - if (type == 'string') variable.hDefine += '\n std::string %s;'.format(name); - else if (type.substring(0, 12) == 'NUMBER_TYPE_') variable.hDefine += '\n %s %s;'.format(type, name); - else if (InterfaceList.getValue(type)) variable.hDefine += '\n %s %s;'.format(type, name); - else if (type.indexOf('Array<') == 0) { + if (type === 'string') { + variable.hDefine += '\n std::string %s;'.format(name); + } else if (type.substring(0, 12) === 'NUMBER_TYPE_') { + variable.hDefine += '\n %s %s;'.format(type, name); + } else if (InterfaceList.getValue(type)) { + variable.hDefine += '\n %s %s;'.format(type, name); + } else if (type.indexOf('Array<') === 0) { let type2 = getArrayType(type); - if (type2 == 'string') type2 = 'std::string'; - if (type2 == 'boolean') type2 = 'bool'; + if (type2 === 'string') type2 = 'std::string'; + if (type2 === 'boolean') type2 = 'bool'; variable.hDefine += '\n std::vector<%s> %s;'.format(type2, name); - } else if (type == 'boolean') { + } else if (type === 'boolean') { variable.hDefine += '\n bool %s;'.format(name); - } else if (type.indexOf('[]') == 0) { + } else if (type.indexOf('[]') === 0) { variable.hDefine += '\n std::vector<%s> %s;'.format(type, name); - } - else + } else { NapiLog.logError(` ---- generateVariable fail %s,%s ---- `.format(name, type)); + } variable.middleValue += ` static napi_value getvalue_%s(napi_env env, napi_callback_info info) { @@ -83,7 +86,7 @@ function generateVariable(name, type, variable, className) { function generateClass(name, data, inNamespace, functiontType) { let resultConnect = connectResult(data, inNamespace, name); let middleFunc = resultConnect[0]; - let implH = functiontType == 'static' ? '\n' + 'static ' + + let implH = functiontType === 'static' ? '\n' + 'static ' + resultConnect[1].substring(1, resultConnect[1].length) : resultConnect[1]; let implCpp = resultConnect[2]; let middleInit = resultConnect[3]; @@ -96,7 +99,7 @@ function generateClass(name, data, inNamespace, functiontType) { selfNs = ', ' + nsl[nsl.length - 1]; } } - let toolNamespace = getToolNamespace(inNamespace); + let toolNamespace = getToolNamespace(inNamespace); middleInit += `\n pxt->DefineClass("%s", %s%s%s_middle::constructor, valueList, funcList%s);\n}\n` .format(name, inNamespace, toolNamespace, name, selfNs); let result = { @@ -124,7 +127,7 @@ function connectResult(data, inNamespace, name) { hDefine: '', middleValue: '', }; - let toolNamespace = getToolNamespace(inNamespace); + let toolNamespace = getToolNamespace(inNamespace); middleInit = `{\n std::map> valueList;`; for (let i in data.value) { let v = data.value[i]; @@ -139,7 +142,7 @@ function connectResult(data, inNamespace, name) { middleInit += `\n std::map funcList;`; for (let i in data.function) { let func = data.function[i]; - let tmp; + let tmp = []; switch (func.type) { case FuncType.DIRECT: tmp = generateFunctionDirect(func, '', name); @@ -152,7 +155,8 @@ function connectResult(data, inNamespace, name) { tmp = generateFunctionAsync(func, '', name); break; default: - return; + tmp = []; + break; } middleFunc += tmp[0]; implH += tmp[1]; @@ -171,7 +175,7 @@ function getToolNamespace(inNamespace) { let bodyTmp = inNamespace.substring(0, index); let index2 = bodyTmp.lastIndexOf('::'); if (index2 > 0 && index2 < index) { - toolNamespace = inNamespace.substring(index2 + 2, index) + '_interface::'; + toolNamespace = inNamespace.substring(index2 + 2, index) + '_interface::'; } else { toolNamespace = bodyTmp + '_interface::'; } -- Gitee From 50c8ee35478023601a7ee0f6b5e042dcb15ca274 Mon Sep 17 00:00:00 2001 From: huruitao Date: Thu, 11 Jul 2024 15:50:49 +0800 Subject: [PATCH 21/31] =?UTF-8?q?"modifile=20src/cli/dts2cpp/src/gen/gener?= =?UTF-8?q?ate/enum.js=20=E4=BF=AE=E6=94=B9napi=E4=BB=93=20js=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E9=97=AE=E9=A2=98=E5=92=8C=E9=87=8D=E5=A4=A7=E5=91=8A?= =?UTF-8?q?=E8=AD=A6"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: huruitao --- src/cli/dts2cpp/src/gen/generate/enum.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/cli/dts2cpp/src/gen/generate/enum.js b/src/cli/dts2cpp/src/gen/generate/enum.js index 3b29cdd2..5232ef85 100644 --- a/src/cli/dts2cpp/src/gen/generate/enum.js +++ b/src/cli/dts2cpp/src/gen/generate/enum.js @@ -21,9 +21,9 @@ function generateEnum(name, data, inNamespace, nameSpaceName, toolNamespace) { let midInitEnum = ''; let midInitEnumDefine = ''; - if (data.enumValueType == EnumValueType.ENUM_VALUE_TYPE_STRING) { + if (data.enumValueType === EnumValueType.ENUM_VALUE_TYPE_STRING) { implH = `\nclass %s {\npublic:\n`.format(name, implH); - } else if (data.enumValueType == EnumValueType.ENUM_VALUE_TYPE_NUMBER){ + } else if (data.enumValueType === EnumValueType.ENUM_VALUE_TYPE_NUMBER) { implH = `\nenum class %s {\n`.format(name, implH); } else { NapiLog.logError(`The enum type[%s] is not support.`.format(data.enumValueType), getLogErrInfo()); @@ -31,20 +31,20 @@ function generateEnum(name, data, inNamespace, nameSpaceName, toolNamespace) { } for (let i in data.element) { let v = data.element[i]; - if(midInitEnumDefine == '') { + if (midInitEnumDefine === '') { midInitEnumDefine += 'std::map enumMap%s;\n'.format(name); } - if (data.enumValueType == EnumValueType.ENUM_VALUE_TYPE_STRING) { + if (data.enumValueType === EnumValueType.ENUM_VALUE_TYPE_STRING) { implH += ` static const std::string %s;\n`.format(v.name); - implCpp += `\nconst std::string %s::%s = "%s";\n`.format(name, v.name, v.value); + implCpp += `\nconst std::string %s::%s = "%s";\n`.format(name, v.name, v.value); midInitEnum += ' %s%s::%senumMap%s["%s"] = "%s";\n'.format(inNamespace, nameSpaceName, toolNamespace, name, v.name, v.value); } else { - if (v.value == '') { + if (v.value === '') { v.value = 0; } implH += ` %s = %s,\n`.format(v.name, v.value); - midInitEnum += ' %s%s::%senumMap%s["%s"] = %s;\n'.format(inNamespace, nameSpaceName, toolNamespace, name, v.name, v.value); + midInitEnum += ' %s%s::%senumMap%s["%s"] = %s;\n'.format(inNamespace, nameSpaceName, toolNamespace, name, v.name, v.value); } } midInitEnum += ' pxt->CreateEnumObject("%s", %s%s::%senumMap%s);\n'.format(name, inNamespace, nameSpaceName, toolNamespace, name); -- Gitee From 5cfd5429544ccb4da71eed12b2da54dae2498ef4 Mon Sep 17 00:00:00 2001 From: huruitao Date: Thu, 11 Jul 2024 15:52:04 +0800 Subject: [PATCH 22/31] =?UTF-8?q?"modifile=20src/cli/dts2cpp/src/gen/gener?= =?UTF-8?q?ate/function=5Fasync.js=20=E4=BF=AE=E6=94=B9napi=E4=BB=93=20js?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E9=97=AE=E9=A2=98=E5=92=8C=E9=87=8D=E5=A4=A7?= =?UTF-8?q?=E5=91=8A=E8=AD=A6"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: huruitao --- .../src/gen/generate/function_async.js | 64 +++++++++---------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/src/cli/dts2cpp/src/gen/generate/function_async.js b/src/cli/dts2cpp/src/gen/generate/function_async.js index 0a76ce42..363b3443 100644 --- a/src/cli/dts2cpp/src/gen/generate/function_async.js +++ b/src/cli/dts2cpp/src/gen/generate/function_async.js @@ -15,7 +15,7 @@ const { replaceAll, getPrefix, getConstNum } = require('../tools/tool'); const { paramGenerate } = require('./param_generate'); const { returnGenerate } = require('./return_generate'); -const { jsonCfgList, InterfaceList }= require('../tools/common'); +const { jsonCfgList, InterfaceList } = require('../tools/common'); /** * 结果异步返回Async|Promise @@ -91,7 +91,7 @@ void %s%sSetCbValue(%s) function removeEndlineEnter(value) { for (var i = value.length; i > 0; i--) { let len = value.length; - if (value.substring(len - 1, len) == '\n' || value.substring(len - 1, len) == ' ') { + if (value.substring(len - 1, len) === '\n' || value.substring(len - 1, len) === ' ') { value = value.substring(0, len - 1); } else { value = ' ' + value + '\n'; @@ -110,7 +110,7 @@ function getOptionalCallbackInit(param) { } function replaceBasicInfo(middleFunc, middleH, className) { - if (className == null) { + if (className === null || className === undefined) { middleH = middleH.replaceAll('[static_define]', ''); middleFunc = middleFunc.replaceAll('[unwarp_instance]', ''); middleFunc = middleFunc.replaceAll('[checkout_async_instance]', ''); @@ -129,7 +129,7 @@ function replaceBasicInfo(middleFunc, middleH, className) { function generateFunctionAsync(func, data, className, implHCbVariable) { let middleFunc = replaceAll(funcAsyncTemplete, '[funcName]', func.name); let middleH = ''; - if (func.name != 'constructor') { + if (func.name !== 'constructor') { middleH = replaceAll(funcAsyncMiddleHTemplete, '[funcName]', func.name); } let basicInfoRes = replaceBasicInfo(middleFunc, middleH, className); @@ -151,25 +151,25 @@ function generateFunctionAsync(func, data, className, implHCbVariable) { napi_value result = pxt->StartAsync(%s_execute, reinterpret_cast(vio), %s_complete, pxt->GetArgc() == %s? pxt->GetArgv(%d) : nullptr);` .format(func.name, func.name, getConstNum(parseInt(param.callback.offset) + 1), - getConstNum(param.callback.offset))) // 注册异步调用 - let callFunc = "%s%s(%s);".format((className === null || className === undefined) ? - "" : "pInstance->", func.name, param.valueFill) - middleFunc = replaceAll(middleFunc, "[callFunc]", callFunc); // 执行 - middleFunc = replaceAll(middleFunc, "[valuePackage]", param.valuePackage); // 输出参数打包 - middleFunc = replaceAll(middleFunc, "[optionalParamDestory]", param.optionalParamDestory); // 可选参数内存释放 + getConstNum(param.callback.offset))) // 注册异步调用; + let callFunc = '%s%s(%s);'.format((className === null || className === undefined) ? + '' : 'pInstance->', func.name, param.valueFill); + middleFunc = replaceAll(middleFunc, '[callFunc]', callFunc) // 执行; + middleFunc = replaceAll(middleFunc, '[valuePackage]', param.valuePackage) // 输出参数打包; + middleFunc = replaceAll(middleFunc, '[optionalParamDestory]', param.optionalParamDestory) // 可选参数内存释放; let prefixArr = getPrefix(data, func); - let implH = ""; - let implCpp = ""; + let implH = ''; + let implCpp = ''; if (!func.isParentMember) { // 只有类/接口自己的成员方法需要在.h.cpp中生成,父类/父接口不需要 - implH = "\n%s%s%sbool %s(%s)%s;".format( + implH = '\n%s%s%sbool %s(%s)%s;'.format( prefixArr[0], prefixArr[1], prefixArr[2], func.name, param.valueDefine, prefixArr[3]); - let callStatement = jsonCfgList.getValue((className === null || className === undefined)? - "": className, func.name); + let callStatement = jsonCfgList.getValue((className === null || className === undefined) ? + '' : className, func.name); implCpp = cppTemplate.format((className === null || className === undefined) ? - "" : className + "::", func.name, param.valueDefine, - (callStatement === null || callStatement === undefined)? "": callStatement); + '' : className + '::', func.name, param.valueDefine, + (callStatement === null || callStatement === undefined) ? '' : callStatement); let outResult = generateCbInterfaceOutFunc(param, className, prefixArr, implHCbVariable, implCpp, implH); implCpp = outResult[0]; @@ -206,22 +206,22 @@ function generateCbInterfaceOutFunc(param, className, prefixArr, implHCbVariable let useParams = ''; let interBody = InterfaceList.getValue(outInterfaceName); for (let i = 0; i < interBody.length; i++) { - let realType = interBody[i].type === "string" ? "std::string" : interBody[i].type; - realType = interBody[i].type === "boolean" ? "bool" : realType; - defineParams += "%s %s, ".format(realType, interBody[i].name); - useParams += "%s%sOutRes.%s = %s;\n".format((className === null || className === undefined) ? - "" : className + "::", + let realType = interBody[i].type === 'string' ? 'std::string' : interBody[i].type; + realType = interBody[i].type === 'boolean' ? 'bool' : realType; + defineParams += '%s %s, '.format(realType, interBody[i].name); + useParams += '%s%sOutRes.%s = %s;\n'.format((className === null || className === undefined) ? + '' : className + '::', outInterfaceName.toLocaleLowerCase(), interBody[i].name, interBody[i].name); } defineParams = defineParams.substring(0, defineParams.length - 2); - let cbOutDefine = "\n%s %s%sOutRes = {};".format(outInterfaceName, (className === null || className === undefined) ? - "" : className + "::", - outInterfaceName.toLocaleLowerCase()) + let cbOutDefine = '\n%s %s%sOutRes = {};'.format(outInterfaceName, (className === null || className === undefined) ? + '' : className + '::', + outInterfaceName.toLocaleLowerCase()); cbInterfaceRes = cppCbResultTemplate.format((className === null || className === undefined) ? - "" : className + "::", outInterfaceName.toLocaleLowerCase(), + '' : className + '::', outInterfaceName.toLocaleLowerCase(), defineParams, useParams); if (className !== null && className !== undefined) { - cbInterfaceRes = replaceAll(cbInterfaceRes, '[replace_outDefine]', cbOutDefine) + cbInterfaceRes = replaceAll(cbInterfaceRes, '[replace_outDefine]', cbOutDefine); } else { cbInterfaceRes = replaceAll(cbInterfaceRes, '[replace_outDefine]', ''); } @@ -229,8 +229,8 @@ function generateCbInterfaceOutFunc(param, className, prefixArr, implHCbVariable // 多次使用interface(非匿名)作为Promise回调只需生成一次cbResult接口 let outResDefine = '\n%s%s%sstatic %s %sOutRes;'.format( prefixArr[0], prefixArr[1], prefixArr[2], outInterfaceName, outInterfaceName.toLocaleLowerCase()); - let replaceOut = "\n out = %s%sOutRes;".format((className === null || className === undefined) ? - "" : className + "::", + let replaceOut = '\n out = %s%sOutRes;'.format((className === null || className === undefined) ? + '' : className + '::', outInterfaceName.toLocaleLowerCase()); implCpp = replaceAll(implCpp, '[replace_valueOut]', replaceOut); if (implHCbVariable.indexOf(outResDefine) < 0) { @@ -246,9 +246,9 @@ function generateCbInterfaceOutFunc(param, className, prefixArr, implHCbVariable } function replaceValueOut(middleH, param) { - middleH = replaceAll(middleH, "[valueIn]", param.valueIn); // # 输入参数定义 - if (param.valueOut === "") { - middleH = replaceAll(middleH, "[valueOut]", param.valueOut); // # 输出参数定义 + middleH = replaceAll(middleH, '[valueIn]', param.valueIn); // # 输入参数定义 + if (param.valueOut === '') { + middleH = replaceAll(middleH, '[valueOut]', param.valueOut); // # 输出参数定义 } else { middleH = replaceAll(middleH, '[valueOut]', '\n ' + param.valueOut); // # 输出参数定义 } -- Gitee From 5b8b051fabbe247553f72fb167d47bffd5a62386 Mon Sep 17 00:00:00 2001 From: huruitao Date: Thu, 11 Jul 2024 15:52:51 +0800 Subject: [PATCH 23/31] =?UTF-8?q?"modifile=20src/cli/dts2cpp/src/gen/gener?= =?UTF-8?q?ate/function=5Fdirect.js=20=E4=BF=AE=E6=94=B9napi=E4=BB=93=20js?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E9=97=AE=E9=A2=98=E5=92=8C=E9=87=8D=E5=A4=A7?= =?UTF-8?q?=E5=91=8A=E8=AD=A6"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: huruitao --- .../src/gen/generate/function_direct.js | 208 +++++++++--------- 1 file changed, 104 insertions(+), 104 deletions(-) diff --git a/src/cli/dts2cpp/src/gen/generate/function_direct.js b/src/cli/dts2cpp/src/gen/generate/function_direct.js index 0da78915..ee7eb788 100644 --- a/src/cli/dts2cpp/src/gen/generate/function_direct.js +++ b/src/cli/dts2cpp/src/gen/generate/function_direct.js @@ -12,11 +12,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -const { replaceAll, getPrefix } = require("../tools/tool"); -const { paramGenerate } = require("./param_generate"); -const { returnGenerate } = require("./return_generate"); -const { jsonCfgList, InterfaceList, CallFunctionList } = require("../tools/common"); -const { NapiLog } = require("../tools/NapiLog"); +const { replaceAll, getPrefix } = require('../tools/tool'); +const { paramGenerate } = require('./param_generate'); +const { returnGenerate } = require('./return_generate'); +const { jsonCfgList, InterfaceList, CallFunctionList } = require('../tools/common'); +const { NapiLog } = require('../tools/NapiLog'); /** * 结果直接返回 @@ -26,7 +26,7 @@ struct [funcName]_value_struct {[valueIn][valueOut] }; [static_define]napi_value [funcName]_middle(napi_env env, napi_callback_info info); -` +`; let funcDirectTemplete = ` napi_value [middleClassName][funcName]_middle(napi_env env, napi_callback_info info) @@ -47,7 +47,7 @@ napi_value [middleClassName][funcName]_middle(napi_env env, napi_callback_info i delete vio; delete pxt; // release return result; -}` +}`; let cppTemplate = ` %s @@ -56,37 +56,37 @@ bool %s%s(%s) %s return true; } -` +`; function removeEndlineEnter(value) { for (var i = value.length; i > 0; i--) { - let len = value.length - if (value.substring(len - 1, len) === "\n" || value.substring(len - 1, len) === ' ') { - value = value.substring(0, len - 1) + let len = value.length; + if (value.substring(len - 1, len) === '\n' || value.substring(len - 1, len) === ' ') { + value = value.substring(0, len - 1); } else { - value = ' ' + value - break + value = ' ' + value; + break; } } - return value + return value; } function isAddFunc(name) { let regIndex = name.indexOf('add'); - let flag = false + let flag = false; if (regIndex === 0) { - flag = true + flag = true; } - return flag + return flag; } function isRemoveFunc(name) { let regIndex = name.indexOf('remove'); - let flag = false + let flag = false; if (regIndex === 0) { - flag = true + flag = true; } - return flag + return flag; } function getaddListenerCont() { @@ -123,162 +123,162 @@ function getaddListenerCont() { [RegistOrUnregistFunc] } } - }` - return addListenerCont + }`; + return addListenerCont; } //(InterfaceList.getValue(type)) 判断func value是否为interface //是的话,读callfunction 根据 interfaceName过滤得到所有回调的名称,填到Add处理中 // add处理根据名称集检查当前实例对象是否存在此回调,存在则注册,否则不处理 function getAddOrRemoveReg(func, isAddReg) { - let addListenerCont = '' - const addParaSize = 1; + let addListenerCont = ''; + const addParaSize = 1; if (func.value.length !== addParaSize) { NapiLog.logError(`AddReg param do not support param number not 1!`); - return - } + return ''; + } - let ValueType = func.value[0].type - let funNames = [] + let ValueType = func.value[0].type; + let funNames = []; if (InterfaceList.getValue(ValueType)) { let cbFuncTypePrefix = 'AUTO_CALLFUNCTION_' + ValueType; - funNames = CallFunctionList.getObjOnFuncName(cbFuncTypePrefix) + funNames = CallFunctionList.getObjOnFuncName(cbFuncTypePrefix); } - addListenerCont = getaddListenerCont() - let proNamesValues = "" - for (let i=0; i", func.name, param.valueFill) - middleFunc = replaceAll(middleFunc, "[callFunc]", callFunc) // 执行 - middleFunc = replaceAll(middleFunc, "[valuePackage]", param.valuePackage) // 输出参数打包 - middleFunc = replaceOptionalParamDestory(middleFunc, param) - let prefixArr = getPrefix(data, func) - let implH = "" - let implCpp = "" + param.valueCheckout = removeEndlineEnter(param.valueCheckout); + middleFunc = replaceAll(middleFunc, '[valueCheckout]', param.valueCheckout) // # 输入参数解析; + let callFunc = '%s%s(%s);'.format(className == null ? '' : 'pInstance->', func.name, param.valueFill); + middleFunc = replaceAll(middleFunc, '[callFunc]', callFunc) // 执行; + middleFunc = replaceAll(middleFunc, '[valuePackage]', param.valuePackage) // 输出参数打包; + middleFunc = replaceOptionalParamDestory(middleFunc, param); + let prefixArr = getPrefix(data, func); + let implH = ''; + let implCpp = ''; if (!func.isParentMember) { if (func.name === 'constructor') { // 构造函数去掉&或* (在内部去掉较麻烦,生成后统一去除) implH = constructorFunc(param, implHVariable, implH, prefixArr, className); - middleFunc = "" + middleFunc = ''; } else { // 只有类/接口自己的成员方法需要在.h.cpp中生成,父类/父接口不需要 - implH = getimplHForForComClassValue(isAddReg, param, prefixArr, func) - implCpp = getimplCppForComClassValue(isAddReg, param, className, func) + implH = getimplHForForComClassValue(isAddReg, param, prefixArr, func); + implCpp = getimplCppForComClassValue(isAddReg, param, className, func); } } - return [middleFunc, implH, implCpp, middleH] + return [middleFunc, implH, implCpp, middleH]; } function getimplHForForComClassValue(isAddReg, param, prefixArr, func) { - let implH = "\n%s%s%sbool %s(%s)%s;".format( - prefixArr[0], prefixArr[1], prefixArr[2], func.name, param.valueDefine, prefixArr[3]) + let implH = '\n%s%s%sbool %s(%s)%s;'.format( + prefixArr[0], prefixArr[1], prefixArr[2], func.name, param.valueDefine, prefixArr[3]); if (isAddReg) { - let ValueType = func.value[0].type - implH += "\n static %s listener_;".format(ValueType) + let ValueType = func.value[0].type; + implH += '\n static %s listener_;'.format(ValueType); } - return implH + return implH; } function getimplCppForComClassValue(isAddReg, param, className, func) { - let implCpp = "" - let initListener = '' - let callStatement = jsonCfgList.getValue((className === null || className === undefined)? - "": className, func.name); + let implCpp = ''; + let initListener = ''; + let callStatement = jsonCfgList.getValue((className === null || className === undefined) ? + '' : className, func.name); if (isAddReg) { - initListener = '%s %s::listener_ = {};'.format(func.value[0].type, className) - callStatement = '%s::listener_ = listener;'.format(className) + initListener = '%s %s::listener_ = {};'.format(func.value[0].type, className); + callStatement = '%s::listener_ = listener;'.format(className); } implCpp = cppTemplate.format(initListener, (className === null || className === undefined) ? - "" : className + "::", func.name, - param.valueDefine, (callStatement === null || callStatement === undefined)? "": callStatement) - return implCpp + '' : className + '::', func.name, + param.valueDefine, (callStatement === null || callStatement === undefined) ? '' : callStatement); + return implCpp; } function replaceValueOut(middleH, param) { - middleH = replaceAll(middleH, "[valueIn]", param.valueIn); // # 输入参数定义 - if (param.valueOut === "") { - middleH = replaceAll(middleH, "[valueOut]", param.valueOut); // # 输出参数定义 + middleH = replaceAll(middleH, '[valueIn]', param.valueIn); // # 输入参数定义 + if (param.valueOut === '') { + middleH = replaceAll(middleH, '[valueOut]', param.valueOut); // # 输出参数定义 } else { - middleH = replaceAll(middleH, "[valueOut]", "\n " + param.valueOut); // # 输出参数定义 + middleH = replaceAll(middleH, '[valueOut]', '\n ' + param.valueOut); // # 输出参数定义 } return middleH; } function isClassFunc(className, middleFunc, middleH) { if (className === null || className === undefined) { - middleH = middleH.replaceAll("[static_define]", ""); - middleFunc = middleFunc.replaceAll("[unwarp_instance]", ""); - middleFunc = middleFunc.replaceAll("[middleClassName]", ""); + middleH = middleH.replaceAll('[static_define]', ''); + middleFunc = middleFunc.replaceAll('[unwarp_instance]', ''); + middleFunc = middleFunc.replaceAll('[middleClassName]', ''); } else { - middleH = middleH.replaceAll("[static_define]", "static "); - middleFunc = middleFunc.replaceAll("[unwarp_instance]", + middleH = middleH.replaceAll('[static_define]', 'static '); + middleFunc = middleFunc.replaceAll('[unwarp_instance]', `void *instPtr = pxt->UnWarpInstance(); %s *pInstance = static_cast<%s *>(instPtr);`.format(className, className)); - middleFunc = middleFunc.replaceAll("[middleClassName]", className + "_middle" + "::"); + middleFunc = middleFunc.replaceAll('[middleClassName]', className + '_middle' + '::'); } return [middleFunc, middleH]; } @@ -312,18 +312,18 @@ function constructorFunc(param, implHVariable, implH, prefixArr, className) { let len = result.length; let costructorStr = ''; for (let m = 0; m < len - 1; m++) { - costructorStr += "%s(%s), ".format(result2[m], result[m]); + costructorStr += '%s(%s), '.format(result2[m], result[m]); } - costructorStr += "%s(%s)".format(result2[len - 1], result[len - 1]); + costructorStr += '%s(%s)'.format(result2[len - 1], result[len - 1]); // 构造函数只在h文件中,cpp文件中不包含 if (len > 0) { - implH = "\n%s%s%s%s() {};".format( + implH = '\n%s%s%s%s() {};'.format( prefixArr[0], prefixArr[1], prefixArr[2], className); - implH += "\n%s%s%s%s(%s) : %s {};".format( + implH += '\n%s%s%s%s(%s) : %s {};'.format( prefixArr[0], prefixArr[1], prefixArr[2], className, valueDef, costructorStr); } else { - implH = "\n%s%s%s%s() {};".format( + implH = '\n%s%s%s%s() {};'.format( prefixArr[0], prefixArr[1], prefixArr[2], className); } return implH; @@ -331,4 +331,4 @@ function constructorFunc(param, implHVariable, implH, prefixArr, className) { module.exports = { generateFunctionDirect -} \ No newline at end of file +}; \ No newline at end of file -- Gitee From 38354391f31ad48309a1500c2a17bbe8c406eaa5 Mon Sep 17 00:00:00 2001 From: huruitao Date: Thu, 11 Jul 2024 15:54:00 +0800 Subject: [PATCH 24/31] =?UTF-8?q?"modifile=20src/cli/dts2cpp/src/gen/gener?= =?UTF-8?q?ate/function=5Fonoff.js=20=E4=BF=AE=E6=94=B9napi=E4=BB=93=20js?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E9=97=AE=E9=A2=98=E5=92=8C=E9=87=8D=E5=A4=A7?= =?UTF-8?q?=E5=91=8A=E8=AD=A6"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: huruitao --- .../src/gen/generate/function_onoff.js | 282 +++++++++--------- 1 file changed, 141 insertions(+), 141 deletions(-) diff --git a/src/cli/dts2cpp/src/gen/generate/function_onoff.js b/src/cli/dts2cpp/src/gen/generate/function_onoff.js index 53d7424d..65294505 100644 --- a/src/cli/dts2cpp/src/gen/generate/function_onoff.js +++ b/src/cli/dts2cpp/src/gen/generate/function_onoff.js @@ -12,13 +12,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -const { replaceAll } = require("../tools/tool"); -const re = require("../tools/re"); -const { eventParamGenerate } = require("./param_generate"); -const { returnGenerate } = require("./return_generate"); -const { cToJs } = require("./return_generate"); +const { replaceAll } = require('../tools/tool'); +const re = require('../tools/re'); +const { eventParamGenerate } = require('./param_generate'); +const { returnGenerate } = require('./return_generate'); +const { cToJs } = require('./return_generate'); const { jsonCfgList, isRegisterFunc, isUnRegisterFunc, getOnObjCallbackType, isOnObjCallback } = -require("../tools/common"); +require('../tools/common'); let middleHOnOffTemplate = ` struct [funcName]_value_struct { @@ -26,11 +26,11 @@ struct [funcName]_value_struct { }; [static_define]napi_value [funcName]_middle(napi_env env, napi_callback_info info); -` +`; let middleHCallbackTemplate = ` void [eventName]CallbackMiddle(std::string &eventName, [callback_param_type]); void [eventName]AsyncOrSyncCallbackMiddle(const std::string &eventName, [callback_param_type]); -` +`; /** * on和off接口生成模板 @@ -53,7 +53,7 @@ napi_value [middleClassName][funcName]_middle(napi_env env, napi_callback_info i delete pxt; // release return result; } -` +`; let middleAsyncCallbackTemplate = ` void [middleClassName][eventNames]AsyncOrSyncCallbackMiddle(const std::string &eventName, [callback_param_type]) @@ -77,25 +77,25 @@ void [middleClassName][eventNames]AsyncOrSyncCallbackMiddle(const std::string &e XNapiTool::[call_function_name](pAsyncFuncs, result); delete pxt; } -` +`; let fixedTypeMiddleTemplate = `if (eventName != "[eventName]") { // on方法注册字段为固定值时,判断ts文件中注册的字段与使用字段是否一样 printf("eventName Err !"); return; - }` + }`; let middleEventCallbakTemplate = ` void [middleClassName][eventName]CallbackMiddle(std::string &eventName, [callback_param_type]) { [replace_onTypeMiddle] [middleClassName][eventName]AsyncOrSyncCallbackMiddle(eventName, [callback_param_name]); } -` +`; let implHEventCallbakTemplate = ` //供业务调用的回调接口 void [eventName]Callback([callback_eventName][callback_param_type]); -` +`; let implCppEventCallbakTemplate = ` //供业务调用的回调接口 @@ -104,140 +104,140 @@ void [className][eventName]Callback([callback_eventName][callback_param_type]) [eventName_is_string] [use_callback_func] } -` +`; function isOnTypeExist(onTypeList, newType) { if (!onTypeList) { - return false + return false; } for (var i in onTypeList) { if (onTypeList[i] === newType) { - return true + return true; } } - return false + return false; } function addOnTypeToList(data, newType) { if (!data.onTypeList) { - data.onTypeList = [] + data.onTypeList = []; } - data.onTypeList.push(newType) + data.onTypeList.push(newType); } function isOnOffFuncExist(data, funcName) { - return data.onOffList && data.onOffList.indexOf(funcName) > -1 + return data.onOffList && data.onOffList.indexOf(funcName) > -1; } function addOnOffFunc(data, funcName) { if (!data.onOffList) { - data.onOffList = [] + data.onOffList = []; } - data.onOffList.push(funcName) + data.onOffList.push(funcName); } function getregistLine(name) { - let registLine = '' + let registLine = ''; if (isRegisterFunc(name)) { - registLine = "pxt->RegistOnOffFunc(vio->eventName, pxt->GetArgv(XNapiTool::ZERO));" + registLine = 'pxt->RegistOnOffFunc(vio->eventName, pxt->GetArgv(XNapiTool::ZERO));'; } else if (name === 'on') { - registLine = "pxt->RegistOnOffFunc(vio->eventName, pxt->GetArgv(XNapiTool::ONE));" + registLine = 'pxt->RegistOnOffFunc(vio->eventName, pxt->GetArgv(XNapiTool::ONE));'; } else if (isOnObjCallback(name)) { // registLine = "pxt->RegistOnOffFunc(vio->eventName, cbFunc);" - }else { // off/unRegister处理 - registLine = "pxt->UnregistOnOffFunc(vio->eventName);" + } else { // off/unRegister处理 + registLine = 'pxt->UnregistOnOffFunc(vio->eventName);'; } - return registLine + return registLine; } function getPrefix(isRegister) { - let prefix = '' + let prefix = ''; if (isRegister) { - prefix = "register" + prefix = 'register'; } else { - prefix = "unRegister" + prefix = 'unRegister'; } return prefix; } function gennerateOnOffContext(codeContext, func, data, className, param) { let isRegister = isRegisterFunc(func.name); - let isUnRegister = isUnRegisterFunc(func.name) - let getEventName = '' - let registLine = getregistLine(func.name) - let onObjFlag = isOnObjCallback(func.name) + let isUnRegister = isUnRegisterFunc(func.name); + let getEventName = ''; + let registLine = getregistLine(func.name); + let onObjFlag = isOnObjCallback(func.name); if (isRegister || isUnRegister) { - let prefix = getPrefix(isRegister) - param.eventName = func.name.replaceAll(prefix, "") // 去掉注册、注销关键字前缀 - getEventName = 'vio->eventName = "%s";\n'.format(param.eventName) + let prefix = getPrefix(isRegister); + param.eventName = func.name.replaceAll(prefix, '') // 去掉注册、注销关键字前缀; + getEventName = 'vio->eventName = "%s";\n'.format(param.eventName); } else if (onObjFlag) { - param.eventName = className + '_' +func.name - getEventName = 'vio->eventName = "%s";\n'.format(param.eventName) + param.eventName = className + '_' + func.name; + getEventName = 'vio->eventName = "%s";\n'.format(param.eventName); } else { - getEventName = 'pxt->SwapJs2CUtf8(pxt->GetArgv(XNapiTool::ZERO), vio->eventName);\n' + getEventName = 'pxt->SwapJs2CUtf8(pxt->GetArgv(XNapiTool::ZERO), vio->eventName);\n'; } - codeContext.middleFunc = replaceAll(funcOnOffTemplete, "[funcName]", func.name) + codeContext.middleFunc = replaceAll(funcOnOffTemplete, '[funcName]', func.name); - if (func.name !== "constructor") { - codeContext.middleH = replaceAll(middleHOnOffTemplate, "[funcName]", func.name) + if (func.name !== 'constructor') { + codeContext.middleH = replaceAll(middleHOnOffTemplate, '[funcName]', func.name); } - codeContext.middleFunc = codeContext.middleFunc.replaceAll("[getEventName]", getEventName) - let middleClassName = "" + codeContext.middleFunc = codeContext.middleFunc.replaceAll('[getEventName]', getEventName); + let middleClassName = ''; if (className === null || className === undefined) { - codeContext.middleH = codeContext.middleH.replaceAll("[static_define]", "") - codeContext.middleFunc = codeContext.middleFunc.replaceAll("[middleClassName]", "") + codeContext.middleH = codeContext.middleH.replaceAll('[static_define]', ''); + codeContext.middleFunc = codeContext.middleFunc.replaceAll('[middleClassName]', ''); } else { - middleClassName = className + "_middle" - codeContext.middleH = codeContext.middleH.replaceAll("[static_define]", "static ") - codeContext.middleFunc = codeContext.middleFunc.replaceAll("[middleClassName]", middleClassName + "::") + middleClassName = className + '_middle'; + codeContext.middleH = codeContext.middleH.replaceAll('[static_define]', 'static '); + codeContext.middleFunc = codeContext.middleFunc.replaceAll('[middleClassName]', middleClassName + '::'); } - let instancePtr = "%s".format((className === null || className === undefined) ? "" : "pInstance->") - codeContext.middleFunc = replaceAll(codeContext.middleFunc, "[instance]", instancePtr) //执行 + let instancePtr = '%s'.format((className === null || className === undefined) ? '' : 'pInstance->'); + codeContext.middleFunc = replaceAll(codeContext.middleFunc, '[instance]', instancePtr) //执行; - codeContext.middleFunc = replaceAll(codeContext.middleFunc, "[handleRegist]", registLine) //注册/去注册event + codeContext.middleFunc = replaceAll(codeContext.middleFunc, '[handleRegist]', registLine) //注册/去注册event; if (isRegister) { - codeContext.middleFunc = replaceAll(codeContext.middleFunc, "(vio->eventName)", "()") + codeContext.middleFunc = replaceAll(codeContext.middleFunc, '(vio->eventName)', '()'); } - addOnOffFunc(data, func.name) + addOnOffFunc(data, func.name); } function gennerateEventCallback(codeContext, data, param, className = null, isOnFuncFlag = false) { - let paramIsAsync = false - let middleClassName = '' + let paramIsAsync = false; + let middleClassName = ''; - param.resultDefine = '' - param.cbParams = '' - param.valueSetArray = '' - param.useParams = '' - param.params = '' + param.resultDefine = ''; + param.cbParams = ''; + param.valueSetArray = ''; + param.useParams = ''; + param.params = ''; - returnGenerate(param.callback, param, data, isOnFuncFlag) + returnGenerate(param.callback, param, data, isOnFuncFlag); if (param.params === '') { - let paramType = param.valueOut.substring(0, param.valueOut.lastIndexOf(' ') + 1) + let paramType = param.valueOut.substring(0, param.valueOut.lastIndexOf(' ') + 1); if (paramType !== null && paramType !== undefined && paramType !== '') { - param.params = paramType + '&valueIn' + param.params = paramType + '&valueIn'; } } if (param.useParams === '' && param.params !== '') { - param.useParams = 'valueIn' + param.useParams = 'valueIn'; } if (className !== null && className !== undefined) { - middleClassName = className + "_middle" + middleClassName = className + '_middle'; } - let callFunctionName = paramIsAsync? "CallAsyncFunc" : "CallSyncFunc" - let callbackFunc = middleAsyncCallbackTemplate - callbackFunc = replaceAll(middleAsyncCallbackTemplate, "[eventNames]", param.eventName) - callbackFunc = replaceAll(callbackFunc, "[callback_param_type]", param.params) + let callFunctionName = paramIsAsync ? 'CallAsyncFunc' : 'CallSyncFunc'; + let callbackFunc = middleAsyncCallbackTemplate; + callbackFunc = replaceAll(middleAsyncCallbackTemplate, '[eventNames]', param.eventName); + callbackFunc = replaceAll(callbackFunc, '[callback_param_type]', param.params); if (param.params === '') { - callbackFunc = replaceAll(callbackFunc, "&eventName, ", "&eventName") + callbackFunc = replaceAll(callbackFunc, '&eventName, ', '&eventName'); } // 回调是箭头函数 @@ -248,13 +248,13 @@ function gennerateEventCallback(codeContext, data, param, className = null, isOn } else { // 回调是普通callback callbackFunc = getCallbackC2JsParam(callbackFunc, param); } - callbackFunc = replaceAll(callbackFunc, "[call_function_name]", callFunctionName) + callbackFunc = replaceAll(callbackFunc, '[call_function_name]', callFunctionName); if (className !== null && className !== undefined) { - callbackFunc = replaceAll(callbackFunc, "[middleClassName]", middleClassName + "::") + callbackFunc = replaceAll(callbackFunc, '[middleClassName]', middleClassName + '::'); } else { - callbackFunc = replaceAll(callbackFunc, "[middleClassName]", "") + callbackFunc = replaceAll(callbackFunc, '[middleClassName]', ''); } - codeContext.middleFunc += callbackFunc + codeContext.middleFunc += callbackFunc; // 为每个on的event事件生成回调方法 genCallbackMiddleMethod(param, className, middleClassName, codeContext); @@ -279,64 +279,64 @@ function genCallbackMethodDeclare(param, codeContext) { } function getArrowCallbackC2JsParam(callbackFunc, param) { - callbackFunc = replaceAll(callbackFunc, "[cb_params_define]", param.resultDefine); - callbackFunc = replaceAll(callbackFunc, "[cb_params]", param.cbParams + '\n'); - callbackFunc = replaceAll(callbackFunc, "[value_set_array]", param.valueSetArray); + callbackFunc = replaceAll(callbackFunc, '[cb_params_define]', param.resultDefine); + callbackFunc = replaceAll(callbackFunc, '[cb_params]', param.cbParams + '\n'); + callbackFunc = replaceAll(callbackFunc, '[value_set_array]', param.valueSetArray); return callbackFunc; } function getCallbackC2JsParam(callbackFunc, param) { - callbackFunc = replaceAll(callbackFunc, "[cb_params_define]", `napi_value resultTmp = nullptr; `); - callbackFunc = replaceAll(callbackFunc, "[cb_params]", param.valuePackage); - callbackFunc = replaceAll(callbackFunc, "[value_set_array]", + callbackFunc = replaceAll(callbackFunc, '[cb_params_define]', `napi_value resultTmp = nullptr; `); + callbackFunc = replaceAll(callbackFunc, '[cb_params]', param.valuePackage); + callbackFunc = replaceAll(callbackFunc, '[value_set_array]', `napi_set_element(pAsyncFuncs->env_, result, 0, resultTmp);`); return callbackFunc; } function genCallbackMiddleMethod(param, className, middleClassName, codeContext) { - let middleEventCallBack = replaceAll(middleEventCallbakTemplate, "[eventName]", param.eventName); - middleEventCallBack = replaceAll(middleEventCallBack, "[callback_param_type]", param.params); - middleEventCallBack = replaceAll(middleEventCallBack, "[callback_param_name]", param.useParams); + let middleEventCallBack = replaceAll(middleEventCallbakTemplate, '[eventName]', param.eventName); + middleEventCallBack = replaceAll(middleEventCallBack, '[callback_param_type]', param.params); + middleEventCallBack = replaceAll(middleEventCallBack, '[callback_param_name]', param.useParams); if (className !== null && className !== undefined) { - middleEventCallBack = replaceAll(middleEventCallBack, "[middleClassName]", middleClassName + "::"); + middleEventCallBack = replaceAll(middleEventCallBack, '[middleClassName]', middleClassName + '::'); } else { - middleEventCallBack = replaceAll(middleEventCallBack, "[middleClassName]", ""); + middleEventCallBack = replaceAll(middleEventCallBack, '[middleClassName]', ''); } - let middleEventTypeTemplate = replaceAll(fixedTypeMiddleTemplate, "[eventName]", param.eventName); + let middleEventTypeTemplate = replaceAll(fixedTypeMiddleTemplate, '[eventName]', param.eventName); if (param.eventNameIsStr) { - middleEventCallBack = replaceAll(middleEventCallBack, "[replace_onTypeMiddle]", ""); + middleEventCallBack = replaceAll(middleEventCallBack, '[replace_onTypeMiddle]', ''); } else { - middleEventCallBack = replaceAll(middleEventCallBack, "[replace_onTypeMiddle]", middleEventTypeTemplate); + middleEventCallBack = replaceAll(middleEventCallBack, '[replace_onTypeMiddle]', middleEventTypeTemplate); } if (param.params === '') { - middleEventCallBack = replaceAll(middleEventCallBack, "eventName, ", "eventName") + middleEventCallBack = replaceAll(middleEventCallBack, 'eventName, ', 'eventName'); } codeContext.middleFunc += middleEventCallBack; } function genCallbackMethodH(param, codeContext) { - let eventNameDefine = param.eventNameIsStr ? "std::string &eventName, " : ""; + let eventNameDefine = param.eventNameIsStr ? 'std::string &eventName, ' : ''; if (param.params === '' && eventNameDefine !== '') { - eventNameDefine = "std::string &eventName" + eventNameDefine = 'std::string &eventName'; } - let implHCallBack = replaceAll(implHEventCallbakTemplate, "[eventName]", param.eventName); - implHCallBack = replaceAll(implHCallBack, "[callback_param_type]", param.params); - implHCallBack = replaceAll(implHCallBack, "[callback_eventName]", eventNameDefine); + let implHCallBack = replaceAll(implHEventCallbakTemplate, '[eventName]', param.eventName); + implHCallBack = replaceAll(implHCallBack, '[callback_param_type]', param.params); + implHCallBack = replaceAll(implHCallBack, '[callback_eventName]', eventNameDefine); codeContext.implH += implHCallBack; } function genCallbackMethod(param, className, middleClassName, codeContext) { - let isStrType = param.eventNameIsStr ? "" : `std::string eventName = "[fixed_eventName]";`; - isStrType = replaceAll(isStrType, "[fixed_eventName]", param.eventName); - let implCppCallBack = replaceAll(implCppEventCallbakTemplate, "[eventName]", param.eventName); - implCppCallBack = replaceAll(implCppCallBack, "[callback_param_type]", param.params); - implCppCallBack = replaceAll(implCppCallBack, "[eventName_is_string]", isStrType); - let eventNameDefine = param.eventNameIsStr ? "std::string &eventName, " : ""; - if (param.params === '' && eventNameDefine !== "") { - eventNameDefine = replaceAll(eventNameDefine, "&eventName,", "&eventName") + let isStrType = param.eventNameIsStr ? '' : `std::string eventName = '[fixed_eventName]';`; + isStrType = replaceAll(isStrType, '[fixed_eventName]', param.eventName); + let implCppCallBack = replaceAll(implCppEventCallbakTemplate, '[eventName]', param.eventName); + implCppCallBack = replaceAll(implCppCallBack, '[callback_param_type]', param.params); + implCppCallBack = replaceAll(implCppCallBack, '[eventName_is_string]', isStrType); + let eventNameDefine = param.eventNameIsStr ? 'std::string &eventName, ' : ''; + if (param.params === '' && eventNameDefine !== '') { + eventNameDefine = replaceAll(eventNameDefine, '&eventName,', '&eventName'); } - implCppCallBack = replaceAll(implCppCallBack, "[callback_eventName]", eventNameDefine); + implCppCallBack = replaceAll(implCppCallBack, '[callback_eventName]', eventNameDefine); let callbackNoClass = `[eventName]CallbackMiddle(eventName, [callback_param_name]);`; let callbackClass = ` [middleClassName] *ptr = new [middleClassName](); @@ -344,22 +344,22 @@ function genCallbackMethod(param, className, middleClassName, codeContext) { delete ptr;`; if (className === null) { - let callbackNoClassRes = replaceAll(callbackNoClass, "[eventName]", param.eventName); - callbackNoClassRes = replaceAll(callbackNoClassRes, "[callback_param_name]", param.useParams); + let callbackNoClassRes = replaceAll(callbackNoClass, '[eventName]', param.eventName); + callbackNoClassRes = replaceAll(callbackNoClassRes, '[callback_param_name]', param.useParams); if (param.useParams === '') { - callbackNoClassRes = replaceAll(callbackNoClassRes, "eventName, ", "eventName") + callbackNoClassRes = replaceAll(callbackNoClassRes, 'eventName, ', 'eventName'); } - implCppCallBack = replaceAll(implCppCallBack, "[use_callback_func]", callbackNoClassRes); - implCppCallBack = replaceAll(implCppCallBack, "[className]", ""); + implCppCallBack = replaceAll(implCppCallBack, '[use_callback_func]', callbackNoClassRes); + implCppCallBack = replaceAll(implCppCallBack, '[className]', ''); } else { - let callbackClassRes = replaceAll(callbackClass, "[eventName]", param.eventName); - callbackClassRes = replaceAll(callbackClassRes, "[callback_param_name]", param.useParams); - callbackClassRes = replaceAll(callbackClassRes, "[middleClassName]", middleClassName); + let callbackClassRes = replaceAll(callbackClass, '[eventName]', param.eventName); + callbackClassRes = replaceAll(callbackClassRes, '[callback_param_name]', param.useParams); + callbackClassRes = replaceAll(callbackClassRes, '[middleClassName]', middleClassName); if (param.useParams === '') { - callbackClassRes = replaceAll(callbackClassRes, "eventName, ", "eventName") + callbackClassRes = replaceAll(callbackClassRes, 'eventName, ', 'eventName'); } - implCppCallBack = replaceAll(implCppCallBack, "[use_callback_func]", callbackClassRes); - implCppCallBack = replaceAll(implCppCallBack, "[className]", className + "::"); + implCppCallBack = replaceAll(implCppCallBack, '[use_callback_func]', callbackClassRes); + implCppCallBack = replaceAll(implCppCallBack, '[className]', className + '::'); } codeContext.implCpp += implCppCallBack; @@ -367,53 +367,53 @@ function genCallbackMethod(param, className, middleClassName, codeContext) { function generateFunctionOnOff(func, data, className) { let param = { - valueIn: "", // 定义输入 - valueOut: "", // 定义输出 - valueCheckout: "", // 解析 - valueFill: "", // 填充到函数内 - valuePackage: "", // 输出参数打包 - valueDefine: "", // impl参数定义 - eventName:"", // 注册/去注册事件名称 + valueIn: '', // 定义输入 + valueOut: '', // 定义输出 + valueCheckout: '', // 解析 + valueFill: '', // 填充到函数内 + valuePackage: '', // 输出参数打包 + valueDefine: '', // impl参数定义 + eventName:'', // 注册/去注册事件名称 eventNameIsStr:false, // 注册/去注册事件名称是否在ts中为string类型 - optionalParamDestory: "" // 可选参数内存释放 - } + optionalParamDestory: '' // 可选参数内存释放 + }; - let isRegister = isRegisterFunc(func.name) - let onObjFlag = isOnObjCallback(func.name) + let isRegister = isRegisterFunc(func.name); + let onObjFlag = isOnObjCallback(func.name); if (onObjFlag) { - let cbType = getOnObjCallbackType(func.name, className) + let cbType = getOnObjCallbackType(func.name, className); let funcValue = { type: cbType, optional: false - } - eventParamGenerate(0, funcValue, param, data) + }; + eventParamGenerate(0, funcValue, param, data); } else { for (let i in func.value) { - eventParamGenerate(i, func.value[i], param, data) + eventParamGenerate(i, func.value[i], param, data); } } let codeContext = { - middleFunc: "", - implH: "", - implCpp: "", - middleH: "" - } + middleFunc: '', + implH: '', + implCpp: '', + middleH: '' + }; if (!isOnOffFuncExist(data, func.name)) { // 同一个ts文件中所有的on和off 接口只需要生成一份公共的native方法 - gennerateOnOffContext(codeContext, func, data, className, param) + gennerateOnOffContext(codeContext, func, data, className, param); } if (func.name === 'on' || isRegister || onObjFlag) { // 为每个on接口同步生成eventCallback方法供用户回调使用 let isOnFuncFlag = true; - gennerateEventCallback(codeContext, data, param, className, isOnFuncFlag) + gennerateEventCallback(codeContext, data, param, className, isOnFuncFlag); } - return [codeContext.middleFunc, codeContext.implH, codeContext.implCpp, codeContext.middleH] + return [codeContext.middleFunc, codeContext.implH, codeContext.implCpp, codeContext.middleH]; } module.exports = { generateFunctionOnOff -} \ No newline at end of file +}; \ No newline at end of file -- Gitee From b8a9a59261aadcde288ad6bb2d101f2e41203fe5 Mon Sep 17 00:00:00 2001 From: huruitao Date: Thu, 11 Jul 2024 15:55:19 +0800 Subject: [PATCH 25/31] =?UTF-8?q?"modifile=20src/cli/dts2cpp/src/gen/gener?= =?UTF-8?q?ate/function=5Fsync.js=20=E4=BF=AE=E6=94=B9napi=E4=BB=93=20js?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E9=97=AE=E9=A2=98=E5=92=8C=E9=87=8D=E5=A4=A7?= =?UTF-8?q?=E5=91=8A=E8=AD=A6"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: huruitao --- .../dts2cpp/src/gen/generate/function_sync.js | 220 +++++++++--------- 1 file changed, 110 insertions(+), 110 deletions(-) diff --git a/src/cli/dts2cpp/src/gen/generate/function_sync.js b/src/cli/dts2cpp/src/gen/generate/function_sync.js index 4f98e2a8..10d7497b 100644 --- a/src/cli/dts2cpp/src/gen/generate/function_sync.js +++ b/src/cli/dts2cpp/src/gen/generate/function_sync.js @@ -12,11 +12,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -const { replaceAll, getPrefix, getConstNum } = require("../tools/tool"); -const { paramGenerate } = require("./param_generate"); -const { returnGenerate } = require("./return_generate"); -const { NapiLog } = require("../tools/NapiLog"); -const { NumberIncrease, jsonCfgList, getLogErrInfo }= require("../tools/common"); +const { replaceAll, getPrefix, getConstNum } = require('../tools/tool'); +const { paramGenerate } = require('./param_generate'); +const { returnGenerate } = require('./return_generate'); +const { NapiLog } = require('../tools/NapiLog'); +const { NumberIncrease, jsonCfgList, getLogErrInfo } = require('../tools/common'); /** * 结果通过同步回调(CallBack)返回 @@ -26,7 +26,7 @@ struct [funcName]_value_struct {[valueIn][valueOut] }; [static_define]napi_value [funcName]_middle(napi_env env, napi_callback_info info); -` +`; let funcSyncTemplete = ` napi_value [middleClassName][funcName]_middle(napi_env env, napi_callback_info info) @@ -66,7 +66,7 @@ napi_value [middleClassName][funcName]_middle(napi_env env, napi_callback_info i delete vio; delete pxt; // release return result; -}` +}`; let cppTemplate = ` bool %s%s(%s) @@ -74,41 +74,41 @@ bool %s%s(%s) %s return true; } -` +`; let cppFuncReturnTemplate = ` bool %s%sReturn(%s) { return true; } -` +`; function removeEndlineEnter(value) { for (var i = value.length; i > 0; i--) { - let len = value.length - if (value.substring(len - 1, len) === "\n" || value.substring(len - 1, len) === ' ') { - value = value.substring(0, len - 1) + let len = value.length; + if (value.substring(len - 1, len) === '\n' || value.substring(len - 1, len) === ' ') { + value = value.substring(0, len - 1); } else { - value = ' ' + value + "\n" - break + value = ' ' + value + '\n'; + break; } } - return value + return value; } function getOptionalCallbackInit(param) { if (!param.callback.optional) { - return "" + return ''; } - let cType = param.valueOut.substr(0, param.valueOut.indexOf("*")) - return "if (pxt->GetArgc() > %s) {\n vio->out = new %s;\n }" - .format(getConstNum(param.callback.offset), cType) + let cType = param.valueOut.substr(0, param.valueOut.indexOf('*')); + return 'if (pxt->GetArgc() > %s) {\n vio->out = new %s;\n }' + .format(getConstNum(param.callback.offset), cType); } function callBackReturnValJs2C(className, funcName, callbackRetType, funcRetType) { - let cbRetJs2CTrans = '' - let retOutFill = '' + let cbRetJs2CTrans = ''; + let retOutFill = ''; if (funcRetType !== 'void') { - retOutFill = ', vio->retOut' + retOutFill = ', vio->retOut'; } if (callbackRetType === 'void') { @@ -116,22 +116,22 @@ function callBackReturnValJs2C(className, funcName, callbackRetType, funcRetType } else if (callbackRetType === 'string') { cbRetJs2CTrans = 'pxt->SwapJs2CUtf8(retVal, vio->cbOut);\n' + '%s%sReturn(vio->cbOut%s);\n'.format((className === null || className === undefined) ? - "" : "pInstance->", funcName, retOutFill); + '' : 'pInstance->', funcName, retOutFill); } else if (callbackRetType === 'boolean') { cbRetJs2CTrans = 'vio->cbOut = pxt->SwapJs2CBool(retVal);\n' + '%s%sReturn(vio->cbOut%s);\n'.format((className === null || className === undefined) ? - "" : "pInstance->", funcName, retOutFill); - } else if (callbackRetType.substring(0, 12) == "NUMBER_TYPE_") { - let lt = NumberIncrease.getAndIncrease() + '' : 'pInstance->', funcName, retOutFill); + } else if (callbackRetType.substring(0, 12) == 'NUMBER_TYPE_') { + let lt = NumberIncrease.getAndIncrease(); cbRetJs2CTrans = 'NUMBER_JS_2_C(retVal, NUMBER_TYPE_%d, vio->cbOut);\n'.format(lt) + '%s%sReturn(vio->cbOut%s);\n'.format((className === null || className === undefined) ? - "" : "pInstance->", funcName, retOutFill); + '' : 'pInstance->', funcName, retOutFill); } else if (callbackRetType === 'number') { cbRetJs2CTrans = 'NUMBER_JS_2_C(retVal, NUMBER_TYPE_1, vio->cbOut);\n' + '%s%sReturn(vio->cbOut%s);\n'.format((className === null || className === undefined) ? - "" : "pInstance->", funcName, retOutFill); + '' : 'pInstance->', funcName, retOutFill); } else { - NapiLog.logError("callBackReturnValJs2C not surpport callbackRetType:%s." + NapiLog.logError('callBackReturnValJs2C not surpport callbackRetType:%s.' .format(callbackRetType), getLogErrInfo()); } return cbRetJs2CTrans; @@ -140,36 +140,36 @@ function callBackReturnValJs2C(className, funcName, callbackRetType, funcRetType function returnProcRetC2Js(funRetType) { let retC2JsCode = ''; if (funRetType === 'void') { - NapiLog.logInfo("returnProcRetC2Js void type do nothing!"); + NapiLog.logInfo('returnProcRetC2Js void type do nothing!'); } else if (funRetType === 'string') { - retC2JsCode = 'result = pxt->SwapC2JsUtf8(vio->retOut.c_str());' + retC2JsCode = 'result = pxt->SwapC2JsUtf8(vio->retOut.c_str());'; } else if (funRetType === 'boolean') { - retC2JsCode = 'result = pxt->SwapC2JsBool(vio->retOut);' - } else if (funRetType.substring(0, 12) == "NUMBER_TYPE_") { - retC2JsCode = 'result = NUMBER_C_2_JS(pxt, vio->retOut);' + retC2JsCode = 'result = pxt->SwapC2JsBool(vio->retOut);'; + } else if (funRetType.substring(0, 12) == 'NUMBER_TYPE_') { + retC2JsCode = 'result = NUMBER_C_2_JS(pxt, vio->retOut);'; } else { - NapiLog.logError("returnProcRetC2Js not surpport funRetType:%s".format(funRetType)); + NapiLog.logError('returnProcRetC2Js not surpport funRetType:%s'.format(funRetType)); } return retC2JsCode; } function fillCbRetValueStruct(type, param, outName) { if (type === null || param === null || param.valueOut === null || param.valueDefine === null) { - NapiLog.logError("[fillCbRetValueStruct] param in is null!"); + NapiLog.logError('[fillCbRetValueStruct] param in is null!'); return; } if (type === 'void') { NapiLog.logInfo("The current void type don't need generate"); } else if (type === 'string') { - param.cbRetvalueDefine += "%sstd::string& %s".format(param.cbRetvalueDefine.length > 0 ? ", " : "", outName) + param.cbRetvalueDefine += '%sstd::string& %s'.format(param.cbRetvalueDefine.length > 0 ? ', ' : '', outName); } else if (type === 'boolean') { - param.cbRetvalueDefine += "%sbool& %s".format(param.cbRetvalueDefine.length > 0 ? ", " : "", outName) - } else if (type.substring(0, 12) === "NUMBER_TYPE_") { - param.cbRetvalueDefine += "%s%s& %s".format(param.cbRetvalueDefine.length > 0 ? ", " : "", type, outName) + param.cbRetvalueDefine += '%sbool& %s'.format(param.cbRetvalueDefine.length > 0 ? ', ' : '', outName); + } else if (type.substring(0, 12) === 'NUMBER_TYPE_') { + param.cbRetvalueDefine += '%s%s& %s'.format(param.cbRetvalueDefine.length > 0 ? ', ' : '', type, outName); } else if ( type === 'number') { - param.cbRetvalueDefine += "%sNUMBER_TYPE_1& %s".format(param.cbRetvalueDefine.length > 0 ? ", " : "", - type, outName) + param.cbRetvalueDefine += '%sNUMBER_TYPE_1& %s'.format(param.cbRetvalueDefine.length > 0 ? ', ' : '', + type, outName); } else { NapiLog.logError("[fillCbRetValueStruct] The current type:%s don't support." @@ -179,31 +179,31 @@ function fillCbRetValueStruct(type, param, outName) { function fillValueStruct(type, param, outName) { if (type === null || param === null || param.valueOut === null || param.valueDefine === null) { - NapiLog.logError("[fillValueStruct] Param in is null!"); + NapiLog.logError('[fillValueStruct] Param in is null!'); return; } if (type === 'void') { NapiLog.logInfo("The current void type don't need generate"); } else if (type === 'string') { - param.valueOut += 'std::string %s;\n'.format(outName) + param.valueOut += 'std::string %s;\n'.format(outName); if (param.callback.returnType === 'void') { - param.valueDefine += "%sstd::string& %s".format(param.valueDefine.length > 0 ? ", " : "", outName) + param.valueDefine += '%sstd::string& %s'.format(param.valueDefine.length > 0 ? ', ' : '', outName); } } else if (type === 'boolean') { - param.valueOut += 'bool %s;\n'.format(outName) + param.valueOut += 'bool %s;\n'.format(outName); if (param.callback.returnType === 'void') { - param.valueDefine += "%sbool& %s".format(param.valueDefine.length > 0 ? ", " : "", outName) + param.valueDefine += '%sbool& %s'.format(param.valueDefine.length > 0 ? ', ' : '', outName); } - } else if (type.substring(0, 12) === "NUMBER_TYPE_") { - param.valueOut += '%s %s;\n'.format(type, outName) + } else if (type.substring(0, 12) === 'NUMBER_TYPE_') { + param.valueOut += '%s %s;\n'.format(type, outName); if (param.callback.returnType === 'void') { - param.valueDefine += "%s%s& %s".format(param.valueDefine.length > 0 ? ", " : "", type, outName) + param.valueDefine += '%s%s& %s'.format(param.valueDefine.length > 0 ? ', ' : '', type, outName); } } else if (type === 'number') { - param.valueOut += 'NUMBER_TYPE_1 %s;\n'.format(outName) + param.valueOut += 'NUMBER_TYPE_1 %s;\n'.format(outName); if (param.callback.returnType === 'void') { - param.valueDefine += "%sNUMBER_TYPE_1& %s".format(param.valueDefine.length > 0 ? ", " : "", outName) + param.valueDefine += '%sNUMBER_TYPE_1& %s'.format(param.valueDefine.length > 0 ? ', ' : '', outName); } } else { @@ -213,105 +213,105 @@ function fillValueStruct(type, param, outName) { } function callbackReturnProc(param, func) { - fillValueStruct(param.callback.returnType, param, 'cbOut') - fillValueStruct(func.ret, param, 'retOut') + fillValueStruct(param.callback.returnType, param, 'cbOut'); + fillValueStruct(func.ret, param, 'retOut'); // 回调返回值非空,业务代码分两部分,一部分填写JS回调需要的参数(对应funcname函数),一部分根据回调返回值进行后续业务处理(对应funcnameReturn函数), // 回调返回值为空,则业务代码处理是一个整体,对应funcname函数,统一处理填写参数、函数返回值赋值处理。 if (param.callback.returnType === 'void') { - if (func.ret === "string" || func.ret === "boolean" || func.ret.substring(0, 12) === "NUMBER_TYPE_") { - param.valueFill += param.valueFill.length > 0 ? ", vio->retOut" : "vio->retOut" - } else if (func.ret === "void") { + if (func.ret === 'string' || func.ret === 'boolean' || func.ret.substring(0, 12) === 'NUMBER_TYPE_') { + param.valueFill += param.valueFill.length > 0 ? ', vio->retOut' : 'vio->retOut'; + } else if (func.ret === 'void') { NapiLog.logInfo("The current void type don't need generate"); - } else{ - NapiLog.logError("not support returnType:%s!".format(param.callback.returnType), - getLogErrInfo()) + } else { + NapiLog.logError('not support returnType:%s!'.format(param.callback.returnType), + getLogErrInfo()); } } else { // param.cbRetvalueDefine赋值,传递给funcnameReturn函数 - fillCbRetValueStruct(param.callback.returnType, param, 'in') - fillCbRetValueStruct(func.ret, param, 'out') + fillCbRetValueStruct(param.callback.returnType, param, 'in'); + fillCbRetValueStruct(func.ret, param, 'out'); } } function replaceValueOut(param, middleH) { - if (param.valueOut === "") { - middleH = replaceAll(middleH, "[valueOut]", param.valueOut) // # 输出参数定义 + if (param.valueOut === '') { + middleH = replaceAll(middleH, '[valueOut]', param.valueOut) // # 输出参数定义; } else { - middleH = replaceAll(middleH, "[valueOut]", "\n " + param.valueOut) // # 输出参数定义 + middleH = replaceAll(middleH, '[valueOut]', '\n ' + param.valueOut) // # 输出参数定义; } - return middleH + return middleH; } function replaceValueCheckout(param, middleFunc) { - if (param.valueCheckout === "") { - middleFunc = replaceAll(middleFunc, "[valueCheckout]", param.valueCheckout) // # 输入参数解析 + if (param.valueCheckout === '') { + middleFunc = replaceAll(middleFunc, '[valueCheckout]', param.valueCheckout) // # 输入参数解析; } else { - param.valueCheckout = removeEndlineEnter(param.valueCheckout) - middleFunc = replaceAll(middleFunc, "[valueCheckout]", param.valueCheckout) // # 输入参数解析 + param.valueCheckout = removeEndlineEnter(param.valueCheckout); + middleFunc = replaceAll(middleFunc, '[valueCheckout]', param.valueCheckout) // # 输入参数解析; } - return middleFunc + return middleFunc; } function generateFunctionSync(func, data, className) { - let middleFunc = replaceAll(funcSyncTemplete, "[funcName]", func.name) - let middleH = "" - if (func.name !== "constructor") { - middleH = replaceAll(funcSyncMiddleHTemplete, "[funcName]", func.name) + let middleFunc = replaceAll(funcSyncTemplete, '[funcName]', func.name); + let middleH = ''; + if (func.name !== 'constructor') { + middleH = replaceAll(funcSyncMiddleHTemplete, '[funcName]', func.name); } let isClassresult = isClassFunc(className, middleH, middleFunc); - middleH = isClassresult[0] - middleFunc = isClassresult[1] + middleH = isClassresult[0]; + middleFunc = isClassresult[1]; // 定义输入,定义输出,解析,填充到函数内,输出参数打包,impl参数定义,可选参数内存释放 - let param = { valueIn: "", valueOut: "", valueCheckout: "", valueFill: "", - valuePackage: "", valueDefine: "", optionalParamDestory: "", cbRetvalueDefine: "", paramSize: 1} + let param = { valueIn: '', valueOut: '', valueCheckout: '', valueFill: '', + valuePackage: '', valueDefine: '', optionalParamDestory: '', cbRetvalueDefine: '', paramSize: 1}; for (let i in func.value) { - paramGenerate(i, func.value[i], param, data) + paramGenerate(i, func.value[i], param, data); } - returnGenerate(param.callback, param) + returnGenerate(param.callback, param); callbackReturnProc(param, func); - middleH = replaceAll(middleH, "[valueIn]", param.valueIn) // # 输入参数定义 - middleH = replaceValueOut(param, middleH) - middleFunc = replaceValueCheckout(param, middleFunc) + middleH = replaceAll(middleH, '[valueIn]', param.valueIn) // # 输入参数定义; + middleH = replaceValueOut(param, middleH); + middleFunc = replaceValueCheckout(param, middleFunc); - let callFunc = "%s%s(%s);".format((className === null || className === undefined) ? - "" : "pInstance->", func.name, param.valueFill) + let callFunc = '%s%s(%s);'.format((className === null || className === undefined) ? + '' : 'pInstance->', func.name, param.valueFill); middleFunc = getMiddleFunc(middleFunc, callFunc, param); // 呼叫回调 // callback返回值处理,回调成功后根据js返回值,业务进行后续处理 - let callBackReturnProc = callBackReturnValJs2C(className, func.name, param.callback.returnType, func.ret) - middleFunc = middleFunc.replaceAll("[cbRetValJs2C]", callBackReturnProc); + let callBackReturnProc = callBackReturnValJs2C(className, func.name, param.callback.returnType, func.ret); + middleFunc = middleFunc.replaceAll('[cbRetValJs2C]', callBackReturnProc); // 同步函数返回值处理 - let retTrans = returnProcRetC2Js(func.ret) - middleFunc = middleFunc.replaceAll("[funcRetC2Js]", retTrans); + let retTrans = returnProcRetC2Js(func.ret); + middleFunc = middleFunc.replaceAll('[funcRetC2Js]', retTrans); - let prefixArr = getPrefix(data, func) - let implH = "" - let implCpp = "" + let prefixArr = getPrefix(data, func); + let implH = ''; + let implCpp = ''; if (!func.isParentMember) { // 只有类/接口自己的成员方法需要在.h.cpp中生成,父类/父接口不需要 - implH = "\n%s%s%sbool %s(%s)%s;".format( - prefixArr[0], prefixArr[1], prefixArr[2], func.name, param.valueDefine, prefixArr[3]) + implH = '\n%s%s%sbool %s(%s)%s;'.format( + prefixArr[0], prefixArr[1], prefixArr[2], func.name, param.valueDefine, prefixArr[3]); let callStatement = jsonCfgList.getValue((className === null || className === undefined)? - "": className, func.name); + '': className, func.name); implCpp = cppTemplate.format((className === null || className === undefined) ? - "" : className + "::", func.name, param.valueDefine, - (callStatement === null || callStatement === undefined)? "": callStatement) + '' : className + '::', func.name, param.valueDefine, + (callStatement === null || callStatement === undefined)? '': callStatement); if (param.callback.returnType !== 'void' && param.callback.returnType !== undefined) { - implH += "\n%s%s%sbool %sReturn(%s)%s;".format( - prefixArr[0], prefixArr[1], prefixArr[2], func.name, param.cbRetvalueDefine, prefixArr[3]) + implH += '\n%s%s%sbool %sReturn(%s)%s;'.format( + prefixArr[0], prefixArr[1], prefixArr[2], func.name, param.cbRetvalueDefine, prefixArr[3]); implCpp += cppFuncReturnTemplate.format((className === null || className === undefined) ? - "" : className + "::", - func.name, param.cbRetvalueDefine) + '' : className + '::', + func.name, param.cbRetvalueDefine); } } - return [middleFunc, implH, implCpp, middleH] + return [middleFunc, implH, implCpp, middleH]; } function getMiddleFunc(middleFunc, callFunc, param) { @@ -328,20 +328,20 @@ function getMiddleFunc(middleFunc, callFunc, param) { function isClassFunc(className, middleH, middleFunc) { if (className === null || className === undefined) { - middleH = middleH.replaceAll("[static_define]", ""); - middleFunc = middleFunc.replaceAll("[unwarp_instance]", ""); - middleFunc = middleFunc.replaceAll("[middleClassName]", ""); + middleH = middleH.replaceAll('[static_define]', ''); + middleFunc = middleFunc.replaceAll('[unwarp_instance]', ''); + middleFunc = middleFunc.replaceAll('[middleClassName]', ''); } else { - middleH = middleH.replaceAll("[static_define]", "static "); - middleFunc = middleFunc.replaceAll("[unwarp_instance]", + middleH = middleH.replaceAll('[static_define]', 'static '); + middleFunc = middleFunc.replaceAll('[unwarp_instance]', `void *instPtr = pxt->UnWarpInstance(); %s *pInstance = static_cast<%s *>(instPtr);`.format(className, className)); - middleFunc = middleFunc.replaceAll("[middleClassName]", className + "_middle" + "::"); + middleFunc = middleFunc.replaceAll('[middleClassName]', className + '_middle' + '::'); } return [middleH, middleFunc]; } module.exports = { generateFunctionSync -} \ No newline at end of file +}; \ No newline at end of file -- Gitee From 8f53e21765ea001d348ea5e929255efaf1a83025 Mon Sep 17 00:00:00 2001 From: huruitao Date: Thu, 11 Jul 2024 15:56:23 +0800 Subject: [PATCH 26/31] =?UTF-8?q?"modifile=20src/cli/dts2cpp/src/gen/gener?= =?UTF-8?q?ate/function=5Fthreadsafe.js=20=E4=BF=AE=E6=94=B9napi=E4=BB=93?= =?UTF-8?q?=20js=E6=A0=BC=E5=BC=8F=E9=97=AE=E9=A2=98=E5=92=8C=E9=87=8D?= =?UTF-8?q?=E5=A4=A7=E5=91=8A=E8=AD=A6"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: huruitao --- .../src/gen/generate/function_threadsafe.js | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/cli/dts2cpp/src/gen/generate/function_threadsafe.js b/src/cli/dts2cpp/src/gen/generate/function_threadsafe.js index b9e5f298..bf0456c5 100644 --- a/src/cli/dts2cpp/src/gen/generate/function_threadsafe.js +++ b/src/cli/dts2cpp/src/gen/generate/function_threadsafe.js @@ -12,8 +12,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -const { replaceAll } = require("../tools/tool"); -const re = require("../tools/re"); +const { replaceAll } = require('../tools/tool'); +const re = require('../tools/re'); let middleHTdSafeFuncTemplate = ` struct createThreadSafeFunc[funcName]_value_struct { @@ -21,7 +21,7 @@ struct createThreadSafeFunc[funcName]_value_struct { }; [static_define] napi_value createThreadSafeFunc[funcName]_middle(napi_env env, napi_callback_info info); -` +`; /** * ThreadsafeFunc接口生成模板 @@ -74,36 +74,36 @@ napi_value [middleClassName]createThreadSafeFunc[funcName]_middle(napi_env env, delete pxt; // release return result; } -` +`; function generateThreadsafeFunc(func, data, className) { let codeContext = { - middleFunc: "", - implH: "", - implCpp: "", - middleH: "" - } + middleFunc: '', + implH: '', + implCpp: '', + middleH: '' + }; - let name = func.name - let preFix = 'createThreadSafeFunc' + let name = func.name; + let preFix = 'createThreadSafeFunc'; - let postFix = name.substring(preFix.length, name.length) - codeContext.middleFunc = replaceAll(threadsafeFuncTemplete, "[funcName]", postFix) - codeContext.middleH = replaceAll(middleHTdSafeFuncTemplate, "[funcName]", postFix) - let middleClassName = "" + let postFix = name.substring(preFix.length, name.length); + codeContext.middleFunc = replaceAll(threadsafeFuncTemplete, '[funcName]', postFix); + codeContext.middleH = replaceAll(middleHTdSafeFuncTemplate, '[funcName]', postFix); + let middleClassName = ''; if (className === null || className === undefined) { - codeContext.middleH = codeContext.middleH.replaceAll("[static_define]", "") - codeContext.middleFunc = codeContext.middleFunc.replaceAll("[middleClassName]", "") + codeContext.middleH = codeContext.middleH.replaceAll('[static_define]', ''); + codeContext.middleFunc = codeContext.middleFunc.replaceAll('[middleClassName]', ''); } else { - middleClassName = className + "_middle" - codeContext.middleH = codeContext.middleH.replaceAll("[static_define]", "static ") - codeContext.middleFunc = codeContext.middleFunc.replaceAll("[middleClassName]", middleClassName + "::") + middleClassName = className + '_middle'; + codeContext.middleH = codeContext.middleH.replaceAll('[static_define]', 'static '); + codeContext.middleFunc = codeContext.middleFunc.replaceAll('[middleClassName]', middleClassName + '::'); } - return [codeContext.middleFunc, codeContext.implH, codeContext.implCpp, codeContext.middleH] + return [codeContext.middleFunc, codeContext.implH, codeContext.implCpp, codeContext.middleH]; } module.exports = { generateThreadsafeFunc -} \ No newline at end of file +}; -- Gitee From e8ad15e0663939a3debb515f747b44216ce0dbe3 Mon Sep 17 00:00:00 2001 From: huruitao Date: Thu, 11 Jul 2024 15:56:48 +0800 Subject: [PATCH 27/31] =?UTF-8?q?"modifile=20src/cli/dts2cpp/src/gen/gener?= =?UTF-8?q?ate/interface.js=20=E4=BF=AE=E6=94=B9napi=E4=BB=93=20js?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E9=97=AE=E9=A2=98=E5=92=8C=E9=87=8D=E5=A4=A7?= =?UTF-8?q?=E5=91=8A=E8=AD=A6"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: huruitao --- src/cli/dts2cpp/src/gen/generate/interface.js | 320 +++++++++--------- 1 file changed, 163 insertions(+), 157 deletions(-) diff --git a/src/cli/dts2cpp/src/gen/generate/interface.js b/src/cli/dts2cpp/src/gen/generate/interface.js index 73e3edc4..d4fe8557 100644 --- a/src/cli/dts2cpp/src/gen/generate/interface.js +++ b/src/cli/dts2cpp/src/gen/generate/interface.js @@ -12,18 +12,18 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -const { generateFunctionDirect } = require("./function_direct"); -const { generateFunctionSync } = require("./function_sync"); -const { generateFunctionAsync } = require("./function_async"); -const { generateFunctionOnOff } = require("./function_onoff"); -const { generateThreadsafeFunc } = require("./function_threadsafe"); +const { generateFunctionDirect } = require('./function_direct'); +const { generateFunctionSync } = require('./function_sync'); +const { generateFunctionAsync } = require('./function_async'); +const { generateFunctionOnOff } = require('./function_onoff'); +const { generateThreadsafeFunc } = require('./function_threadsafe'); const { FuncType, InterfaceList, getArrayType, getArrayTypeTwo, getMapType, EnumList, jsType2CType, - isOnOffRegisterFunc, isCreateThreadsafeFunc } = require("../tools/common"); -const { jsToC, getCType, paramGenerate } = require("./param_generate"); -const { cToJs } = require("./return_generate"); -const re = require("../tools/re"); -const { NapiLog } = require("../tools/NapiLog"); -const { addUniqFunc2List, addUniqObj2List, setOverrideFunc } = require("../tools/tool"); + isOnOffRegisterFunc, isCreateThreadsafeFunc } = require('../tools/common'); +const { jsToC, getCType, paramGenerate } = require('./param_generate'); +const { cToJs } = require('./return_generate'); +const re = require('../tools/re'); +const { NapiLog } = require('../tools/NapiLog'); +const { addUniqFunc2List, addUniqObj2List, setOverrideFunc } = require('../tools/tool'); let middleHTmplete = ` class [className]_middle { @@ -34,7 +34,7 @@ public: static void release(DataPtr p); [static_funcs] }; -` +`; let middleBodyTmplete = ` napi_value [className]_middle::constructor(napi_env env, napi_callback_info info) @@ -68,32 +68,32 @@ let middleBodyTmplete = ` delete p2; } [static_funcs] -` +`; function getHDefineOfVariable(name, type, variable, optional) { - if (type.indexOf("|") >= 0) { - unionTypeString(name, type, variable, optional) - } else if (type === "string") { + if (type.indexOf('|') >= 0) { + unionTypeString(name, type, variable, optional); + } else if (type === 'string') { variableTypeString(optional, variable, name); } else if (InterfaceList.getValue(type)) { variableTypeInterface(optional, variable, type, name); } else if (EnumList.getValue(type)) { // 如果是枚举string类型,需要将其转换为std::string类型 variableTypeEnum(type, variable, name); - } else if (type.indexOf("Array<") === 0) { + } else if (type.indexOf('Array<') === 0) { typeArrFunctionOne(type, variable, name, optional); - } else if (type === "boolean") { + } else if (type === 'boolean') { variableTypeBoolean(optional, variable, name); - } else if (type.substring(type.length - 2) === "[]") { + } else if (type.substring(type.length - 2) === '[]') { typeArrFunctionTwo(type, variable, name, optional); - } else if (type.substring(0, 4) === "Map<" || type.indexOf("{[key:") === 0) { // 支持可选参数? - variable.hDefine += mapTypeString(type, name, optional) - } else if (type === "any") { - variable.hDefine += anyTypeString(type, name) - } else if (type.substring(0, 12) === "NUMBER_TYPE_") { + } else if (type.substring(0, 4) === 'Map<' || type.indexOf('{[key:') === 0) { + variable.hDefine += mapTypeString(type, name, optional); // 支持可选参数? + } else if (type === 'any') { + variable.hDefine += anyTypeString(type, name); + } else if (type.substring(0, 12) === 'NUMBER_TYPE_') { variableTypeNumber(optional, variable, type, name); - } else if (type === "Object" || type === "object") { - variable.hDefine += "\n std::map %s;".format(name) + } else if (type === 'Object' || type === 'object') { + variable.hDefine += '\n std::map %s;'.format(name); } else { NapiLog.logError(` @@ -145,46 +145,46 @@ function variableTypeString(optional, variable, name) { function typeArrFunctionTwo(type, variable, name, optional) { let arrayType = getArrayTypeTwo(type); - if (arrayType === "any") { - variable.hDefine += "\n std::string %s_type;\n std::any %s;".format(name, name); + if (arrayType === 'any') { + variable.hDefine += '\n std::string %s_type;\n std::any %s;'.format(name, name); } else { let cType = jsType2CType(arrayType); if (optional) { - variable.hDefine += "\n std::optional> %s;".format(cType, name); + variable.hDefine += '\n std::optional> %s;'.format(cType, name); } else { - variable.hDefine += "\n std::vector<%s> %s;".format(cType, name); + variable.hDefine += '\n std::vector<%s> %s;'.format(cType, name); } } } function typeArrFunctionOne(type, variable, name, optional) { let arrayType = getArrayType(type); - if (arrayType === "any") { - variable.hDefine += "\n std::string %s_type; \n std::any %s;".format(name, name); + if (arrayType === 'any') { + variable.hDefine += '\n std::string %s_type; \n std::any %s;'.format(name, name); } else { let cType = jsType2CType(arrayType); if (optional) { - variable.hDefine += "\n std::optional> %s;".format(cType, name); + variable.hDefine += '\n std::optional> %s;'.format(cType, name); } else { - variable.hDefine += "\n std::vector<%s> %s;".format(cType, name); + variable.hDefine += '\n std::vector<%s> %s;'.format(cType, name); } } } function generateVariable(value, variable, className) { - let name = value.name - let type = value.type - let optional = value.optional + let name = value.name; + let type = value.type; + let optional = value.optional; if (!value.isParentMember) { // 只有类/接口自己的成员属性需要在.h中定义, 父类/父接口不需要 - getHDefineOfVariable(name, type, variable, optional) + getHDefineOfVariable(name, type, variable, optional); } - if (optional && type.indexOf("|") < 0) { + if (optional && type.indexOf('|') < 0) { optionalParamGetSet(type, variable, name, className); } else { variable.middleH += ` static napi_value getvalue_%s(napi_env env, napi_callback_info info); - static napi_value setvalue_%s(napi_env env, napi_callback_info info);\n`.format(name, name) + static napi_value setvalue_%s(napi_env env, napi_callback_info info);\n`.format(name, name); variable.middleValue += ` napi_value %s::getvalue_%s(napi_env env, napi_callback_info info) { @@ -192,8 +192,8 @@ function generateVariable(value, variable, className) { void *instPtr = pxt->UnWarpInstance(); %s *p = static_cast<%s *>(instPtr); napi_value result = nullptr; - `.format(className + "_middle", name, className, className) + - cToJs("p->" + name, type, "result", 1, optional) + ` + `.format(className + '_middle', name, className, className) + + cToJs('p->' + name, type, 'result', 1, optional) + ` delete pxt; return result; } @@ -202,11 +202,11 @@ function generateVariable(value, variable, className) { std::shared_ptr pxt = std::make_shared(env, info); void *instPtr = pxt->UnWarpInstance(); %s *p = static_cast<%s *>(instPtr); - `.format(className + "_middle", name, className, className) + - jsToC("p->" + name, "pxt->GetArgv(XNapiTool::ZERO)", + `.format(className + '_middle', name, className, className) + + jsToC('p->' + name, 'pxt->GetArgv(XNapiTool::ZERO)', type, 0, optional) + ` return nullptr; - }` + }`; } } @@ -214,7 +214,7 @@ function optionalParamGetSet(type, variable, name, className) { let optType = getCType(type); variable.middleH += ` static napi_value getvalue_%s(napi_env env, napi_callback_info info); - static napi_value setvalue_%s(napi_env env, napi_callback_info info);\n`.format(name, name) + static napi_value setvalue_%s(napi_env env, napi_callback_info info);\n`.format(name, name); variable.middleValue += ` napi_value %s::getvalue_%s(napi_env env, napi_callback_info info) { @@ -223,8 +223,8 @@ function optionalParamGetSet(type, variable, name, className) { %s *p = static_cast<%s *>(instPtr); napi_value result = nullptr; if(p->%s.has_value()) { - `.format(className + "_middle", name, className, className, name) + - cToJs("p->%s.value()".format(name), type, "result") + ` + `.format(className + '_middle', name, className, className, name) + + cToJs('p->%s.value()'.format(name), type, 'result') + ` } delete pxt; return result; @@ -236,8 +236,8 @@ function optionalParamGetSet(type, variable, name, className) { %s *p = static_cast<%s *>(instPtr); if (pxt->GetProperty(pxt->GetArgv(XNapiTool::ZERO), "%s")) { %s %s_tmp; - `.format(className + "_middle", name, className, className, name, optType, name) + - jsToC("%s_tmp".format(name), "pxt->GetArgv(XNapiTool::ZERO)", type) + ` + `.format(className + '_middle', name, className, className, name, optType, name) + + jsToC('%s_tmp'.format(name), 'pxt->GetArgv(XNapiTool::ZERO)', type) + ` p->%s.emplace(%s_tmp);`.format(name, name) + ` } return nullptr; @@ -247,103 +247,109 @@ function optionalParamGetSet(type, variable, name, className) { function unionTypeString(name, type, variable, optional) { if (optional) { variable.hDefine += `\n std::optional %s_type; - std::optional %s;`.format(name, name) + std::optional %s;`.format(name, name); } else { variable.hDefine += `\n std::string %s_type; - std::any %s;`.format(name, name) + std::any %s;`.format(name, name); } } function mapTypeString(type, name, optional) { - let mapType = getMapType(type) - let mapTypeString + let mapType = getMapType(type); + let mapTypeString; if (mapType[1] !== undefined && mapType[1] !== null && mapType[2] === undefined) { - if (mapType[1] === "string") mapTypeString = "std::string, std::string" - else if (mapType[1] === "boolean") mapTypeString = "std::string, bool" - else if (mapType[1].substring(0, 12) === "NUMBER_TYPE_") { - mapTypeString = "std::string, %s".format(mapType[1]) - } - else if (mapType[1].substring(0, 12) === "any") { - mapTypeString = `std::string, std::any`.format(mapType[1]) + if (mapType[1] === 'string') { + mapTypeString = 'std::string, std::string'; + } else if (mapType[1] === 'boolean') { + mapTypeString = 'std::string, bool'; + } else if (mapType[1].substring(0, 12) === 'NUMBER_TYPE_') { + mapTypeString = 'std::string, %s'.format(mapType[1]); + } else if (mapType[1].substring(0, 12) === 'any') { + mapTypeString = `std::string, std::any`.format(mapType[1]); return `\n std::map<%s> %s; - std::string %s_type;`.format(mapTypeString, name, name) + std::string %s_type;`.format(mapTypeString, name, name); + } else if (InterfaceList.getValue(mapType[1])) { + mapTypeString = 'std::string, %s'.format(mapType[1]); } - else if (InterfaceList.getValue(mapType[1])) mapTypeString = "std::string, %s".format(mapType[1]) } if (mapType[2] != undefined) { - if (mapType[2] === "string") mapTypeString = "std::string, std::map" - else if (mapType[2] === "boolean") mapTypeString = "std::string, std::map" - else if (mapType[2].substring(0, 12) === "NUMBER_TYPE_") { - mapTypeString = "std::string, std::map".format(mapType[2]) + if (mapType[2] === 'string') { + mapTypeString = 'std::string, std::map'; + } else if (mapType[2] === 'boolean') { + mapTypeString = 'std::string, std::map'; + } else if (mapType[2].substring(0, 12) === 'NUMBER_TYPE_') { + mapTypeString = 'std::string, std::map'.format(mapType[2]); } } if (mapType[3] != undefined) { - if (mapType[3] === "string") mapTypeString = "std::string, std::vector" - else if (mapType[3] === "boolean") mapTypeString = "std::string, std::vector" - else if (mapType[3].substring(0, 12) === "NUMBER_TYPE_") { - mapTypeString = "std::string, std::vector<%s>".format(mapType[3]) + if (mapType[3] === 'string') { + mapTypeString = 'std::string, std::vector'; + } else if (mapType[3] === 'boolean') { + mapTypeString = 'std::string, std::vector'; + } else if (mapType[3].substring(0, 12) === 'NUMBER_TYPE_') { + mapTypeString = 'std::string, std::vector<%s>'.format(mapType[3]); } } if (optional) { - return "\n std::optional> %s;".format(mapTypeString, name); + return '\n std::optional> %s;'.format(mapTypeString, name); } else { - return "\n std::map<%s> %s;".format(mapTypeString, name); + return '\n std::map<%s> %s;'.format(mapTypeString, name); } } -function anyTypeString (type, name) { +function anyTypeString(type, name) { let anyType = `\n std::string %s_type; - std::any %s;` - return anyType.format(name, name) + std::any %s;`; + return anyType.format(name, name); } function generateInterface(name, data, inNamespace) { - let param = { valueIn: "", valueOut: "", valueCheckout: "", valueFill: "", - valuePackage: "", valueDefine: "", optionalParamDestory: "" } + let param = { valueIn: '', valueOut: '', valueCheckout: '', valueFill: '', + valuePackage: '', valueDefine: '', optionalParamDestory: '' }; let getConParam = getConstructorFunc(data, param); - let resultConnect = connectResult(data, inNamespace, name) - let middleFunc = resultConnect[0] - let implH = resultConnect[1] - let implCpp = resultConnect[2] - let middleInit = resultConnect[3] - let middleH = resultConnect[4] - let selfNs = "" + let resultConnect = connectResult(data, inNamespace, name); + let middleFunc = resultConnect[0]; + let implH = resultConnect[1]; + let implCpp = resultConnect[2]; + let middleInit = resultConnect[3]; + let middleH = resultConnect[4]; + let selfNs = ''; if (inNamespace.length > 0) { - let nsl = inNamespace.split("::") - nsl.pop() + let nsl = inNamespace.split('::'); + nsl.pop(); if (nsl.length >= 2) { - selfNs = ", " + nsl[nsl.length - 1] + selfNs = ', ' + nsl[nsl.length - 1]; } } let toolNamespace = getToolNamespace(inNamespace); middleInit += `\n pxt->DefineClass("%s", %s%s%s_middle::constructor, valueList, funcList%s);\n}\n` - .format(name, inNamespace, toolNamespace, name, selfNs) + .format(name, inNamespace, toolNamespace, name, selfNs); let extendsStr = (data.parentNameList && data.parentNameList.length > 0) ? - " : public %s".format(data.parentNameList.join(", public ")) : "" + ' : public %s'.format(data.parentNameList.join(', public ')) : ''; let result = { implH: ` class %s%s { public:%s\n };\n`.format(name, extendsStr, implH), implCpp: implCpp, - middleBody: middleBodyTmplete.replaceAll("[className]", name).replaceAll("[static_funcs]", middleFunc) - .replaceAll("[getConstructorParam]", getConParam) - .replaceAll("[constructorParam]", param.valueFill), + middleBody: middleBodyTmplete.replaceAll('[className]', name).replaceAll('[static_funcs]', middleFunc) + .replaceAll('[getConstructorParam]', getConParam) + .replaceAll('[constructorParam]', param.valueFill), middleInit: middleInit, declarationH: ` class %s;\r`.format(name), - middleH: middleHTmplete.replaceAll("[className]", name).replaceAll("[static_funcs]", middleH) - .replaceAll("[contructorValueIn]", param.valueIn) - } - return result + middleH: middleHTmplete.replaceAll('[className]', name).replaceAll('[static_funcs]', middleH) + .replaceAll('[contructorValueIn]', param.valueIn) + }; + return result; } function getConstructorFunc(data, param) { let funcValues = null; if (data.function !== null && data.function !== undefined) { for (let i = 0; i < data.function.length; i++) { - if (data.function[i].name === "constructor") { + if (data.function[i].name === 'constructor') { funcValues = data.function[i].value; } } @@ -352,26 +358,26 @@ function getConstructorFunc(data, param) { paramGenerate(j, funcValues[j], param, data); } let tmpBody = param.valueCheckout.split(';\n'); - let getConParam = ""; + let getConParam = ''; for (let i in tmpBody) { - let flag = tmpBody[i].replaceAll('\n', '').replaceAll(' ', '') + let flag = tmpBody[i].replaceAll('\n', '').replaceAll(' ', ''); if (flag !== '') { - let indexBegin = tmpBody[i].indexOf("pxt->GetArgv("); - if (indexBegin > 0 && tmpBody[i].indexOf("\n") < 0) { - tmpBody[i] = tmpBody[i].replaceAll("pxt->GetArgv(", "args["); - let index = tmpBody[i].indexOf(")"); - tmpBody[i] = tmpBody[i].substring(0, index) + "]" + tmpBody[i].substring(index + 1, tmpBody[i].length); - } else if (indexBegin > 0 && tmpBody[i].indexOf("\n") >= 0) { - tmpBody[i] = tmpBody[i].replaceAll("pxt->GetArgv(", "args["); - let index = tmpBody[i].indexOf("),"); - tmpBody[i] = tmpBody[i].substring(0, index) + "]" + tmpBody[i].substring(index + 1, tmpBody[i].length); + let indexBegin = tmpBody[i].indexOf('pxt->GetArgv('); + if (indexBegin > 0 && tmpBody[i].indexOf('\n') < 0) { + tmpBody[i] = tmpBody[i].replaceAll('pxt->GetArgv(', 'args['); + let index = tmpBody[i].indexOf(')'); + tmpBody[i] = tmpBody[i].substring(0, index) + ']' + tmpBody[i].substring(index + 1, tmpBody[i].length); + } else if (indexBegin > 0 && tmpBody[i].indexOf('\n') >= 0) { + tmpBody[i] = tmpBody[i].replaceAll('pxt->GetArgv(', 'args['); + let index = tmpBody[i].indexOf('),'); + tmpBody[i] = tmpBody[i].substring(0, index) + ']' + tmpBody[i].substring(index + 1, tmpBody[i].length); } - getConParam += tmpBody[i] + ";\n"; + getConParam += tmpBody[i] + ';\n'; } } - let index = getConParam.lastIndexOf(';\n') - if (getConParam.substring(index-1, index) === ' ') { - getConParam = getConParam.substring(0, index -1) + let index = getConParam.lastIndexOf(';\n'); + if (getConParam.substring(index - 1, index) === ' ') { + getConParam = getConParam.substring(0, index - 1); } return getConParam; } @@ -379,21 +385,21 @@ function getConstructorFunc(data, param) { // 递归获取接口及接口父类的所有成员属性和方法 function getAllPropties(interfaceBody, properties, isParentClass) { for (let i in interfaceBody.value) { - interfaceBody.value[i].isParentMember = isParentClass - addUniqObj2List(interfaceBody.value[i], properties.values) + interfaceBody.value[i].isParentMember = isParentClass; + addUniqObj2List(interfaceBody.value[i], properties.values); } for (let i in interfaceBody.function) { - interfaceBody.function[i].isParentMember = isParentClass - if(!addUniqFunc2List(interfaceBody.function[i], properties.functions)) { + interfaceBody.function[i].isParentMember = isParentClass; + if (!addUniqFunc2List(interfaceBody.function[i], properties.functions)) { if (isParentClass) { // 没添加到列表,说明子类方法properties.functions重写了父类方法interfaceBody.function[i] // 找到该子类方法并将其设置为override (生成的重写函数如果没有override关键字会触发门禁告警) - setOverrideFunc(interfaceBody.function[i], properties.functions) + setOverrideFunc(interfaceBody.function[i], properties.functions); } } } if (!isParentClass && interfaceBody.parentNameList && interfaceBody.parentNameList.length > 0) { - getAllPropties(interfaceBody.parentBody, properties, true) + getAllPropties(interfaceBody.parentBody, properties, true); } } @@ -401,66 +407,66 @@ function addVirtualKeywords(data, implH, name) { if (data.childList && data.childList.length > 0) { // 如果该类是其它类的父类,增加虚析构函数使其具备泛型特征 (基类必须有虚函数才能正确使用dynamic_cast和typeinfo等方法) // 如果该类自己也有父类,虚析构函数需要加上override关键字(否则C++门禁会有告警) - let ovrrideStr = (data.parentList && data.parentList.length > 0) ? " override" : ""; + let ovrrideStr = (data.parentList && data.parentList.length > 0) ? ' override' : ''; // 如果虚析构函数已经有override关键字,就不需要再加virtual关键字了(否则C++门禁会有告警) - let virtualStr = (data.parentList && data.parentList.length > 0) ? "" : "virtual "; - implH += "\n %s~%s()%s {};".format(virtualStr, name, ovrrideStr); + let virtualStr = (data.parentList && data.parentList.length > 0) ? '' : 'virtual '; + implH += '\n %s~%s()%s {};'.format(virtualStr, name, ovrrideStr); } return implH; } function connectResult(data, inNamespace, name) { - let implH = "" - let implCpp = "" - let middleFunc = "" - let middleInit = "" - let middleH = "" + let implH = ''; + let implCpp = ''; + let middleFunc = ''; + let middleInit = ''; + let middleH = ''; let variable = { - hDefine: "", - middleValue: "", - middleH: "" - } + hDefine: '', + middleValue: '', + middleH: '' + }; middleInit = getMiddleInitFunc(middleInit, data, variable, name, inNamespace); - implH += variable.hDefine - middleFunc += variable.middleValue - middleInit += `\n std::map funcList;` - middleH += variable.middleH + implH += variable.hDefine; + middleFunc += variable.middleValue; + middleInit += `\n std::map funcList;`; + middleH += variable.middleH; for (let i in data.allProperties.functions) { - let func = data.allProperties.functions[i] + let func = data.allProperties.functions[i]; let tmp; if (isOnOffRegisterFunc(func.name)) { - tmp = generateFunctionOnOff(func, data, name) + tmp = generateFunctionOnOff(func, data, name); } else if (isCreateThreadsafeFunc(func.name)) { - tmp = generateThreadsafeFunc(func, data, name) + tmp = generateThreadsafeFunc(func, data, name); } if (!tmp) { switch (func.type) { case FuncType.DIRECT: - tmp = generateFunctionDirect(func, data, name, implH) + tmp = generateFunctionDirect(func, data, name, implH); break; case FuncType.SYNC: - tmp = generateFunctionSync(func, data, name) - break + tmp = generateFunctionSync(func, data, name); + break; case FuncType.ASYNC: case FuncType.PROMISE: - tmp = generateFunctionAsync(func, data, name, implH) - break + tmp = generateFunctionAsync(func, data, name, implH); + break; default: - return + break; } } - middleFunc += tmp[0] - implH += tmp[1] - implCpp += tmp[2] - middleH += tmp[3] + middleFunc += tmp[0]; + implH += tmp[1]; + implCpp += tmp[2]; + middleH += tmp[3]; middleInit = generateMiddleInitFunc(func, inNamespace, middleInit, name); } implH = addVirtualKeywords(data, implH, name); - return [middleFunc, implH, implCpp, middleInit, middleH] + return [middleFunc, implH, implCpp, middleInit, middleH]; } function generateMiddleInitFunc(func, inNamespace, middleInit, name) { - if (func.name !== "constructor") { + if (func.name !== 'constructor') { let toolNamespace = getToolNamespace(inNamespace); middleInit += `\n funcList["%s"] = %s%s%s_middle::%s_middle;`.format(func.name, inNamespace, toolNamespace, name, func.name); @@ -485,18 +491,18 @@ function getMiddleInitFunc(middleInit, data, variable, name, inNamespace) { } function getToolNamespace(inNamespace) { - let index = inNamespace.lastIndexOf("::"); + let index = inNamespace.lastIndexOf('::'); let toolNamespace; if (index > 0) { - let bodyTmp = inNamespace.substring(0, index) - let index2 = bodyTmp.lastIndexOf('::') + let bodyTmp = inNamespace.substring(0, index); + let index2 = bodyTmp.lastIndexOf('::'); if (index2 > 0 && index2 < index) { - toolNamespace = inNamespace.substring(index2 + 2, index) + '_interface::' + toolNamespace = inNamespace.substring(index2 + 2, index) + '_interface::'; } else { - toolNamespace = bodyTmp + "_interface::"; + toolNamespace = bodyTmp + '_interface::'; } } else { - toolNamespace = inNamespace + "_interface::"; + toolNamespace = inNamespace + '_interface::'; } return toolNamespace; } @@ -508,4 +514,4 @@ module.exports = { mapTypeString, anyTypeString, getHDefineOfVariable -} +}; -- Gitee From a3d2d8a2d986618383ed5883166a4d887c827d48 Mon Sep 17 00:00:00 2001 From: huruitao Date: Thu, 11 Jul 2024 15:57:19 +0800 Subject: [PATCH 28/31] =?UTF-8?q?"modifile=20src/cli/dts2cpp/src/gen/gener?= =?UTF-8?q?ate/namespace.js=20=E4=BF=AE=E6=94=B9napi=E4=BB=93=20js?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E9=97=AE=E9=A2=98=E5=92=8C=E9=87=8D=E5=A4=A7?= =?UTF-8?q?=E5=91=8A=E8=AD=A6"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: huruitao --- src/cli/dts2cpp/src/gen/generate/namespace.js | 190 +++++++++--------- 1 file changed, 95 insertions(+), 95 deletions(-) diff --git a/src/cli/dts2cpp/src/gen/generate/namespace.js b/src/cli/dts2cpp/src/gen/generate/namespace.js index dac88701..229046f2 100644 --- a/src/cli/dts2cpp/src/gen/generate/namespace.js +++ b/src/cli/dts2cpp/src/gen/generate/namespace.js @@ -12,34 +12,34 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -const { generateFunctionDirect } = require("./function_direct"); -const { generateFunctionSync } = require("./function_sync"); -const { generateFunctionAsync } = require("./function_async"); -const { generateInterface } = require("./interface"); -const { generateClass } = require("./class"); -const { generateType } = require("./type"); +const { generateFunctionDirect } = require('./function_direct'); +const { generateFunctionSync } = require('./function_sync'); +const { generateFunctionAsync } = require('./function_async'); +const { generateInterface } = require('./interface'); +const { generateClass } = require('./class'); +const { generateType } = require('./type'); const { FuncType, InterfaceList, EnumList, TypeList, CallFunctionList, isOnOffRegisterFunc, isCreateThreadsafeFunc } = -require("../tools/common"); -const { generateEnum } = require("./enum"); -const { generateFunctionOnOff } = require("./function_onoff"); -const { generateThreadsafeFunc } = require("./function_threadsafe"); +require('../tools/common'); +const { generateEnum } = require('./enum'); +const { generateFunctionOnOff } = require('./function_onoff'); +const { generateThreadsafeFunc } = require('./function_threadsafe'); -const { NapiLog } = require("../tools/NapiLog"); -const { addUniqFunc2List, addUniqObj2List } = require("../tools/tool"); +const { NapiLog } = require('../tools/NapiLog'); +const { addUniqFunc2List, addUniqObj2List } = require('../tools/tool'); function findParentByName(parentName, data) { for (let i in data.interface) { if (parentName === data.interface[i].name) { - return data.interface[i] + return data.interface[i]; } } for (let i in data.class) { if (parentName === data.class[i].name) { - return data.class[i] + return data.class[i]; } } - return null + return null; } /** @@ -51,30 +51,30 @@ function findParentByName(parentName, data) { */ function genParentPropties(currentObj, data, parentBody) { for (let i in currentObj.body.parentNameList) { - let parentName = currentObj.body.parentNameList[i] - let parentObj = findParentByName(parentName, data) + let parentName = currentObj.body.parentNameList[i]; + let parentObj = findParentByName(parentName, data); if (!parentObj) { - NapiLog.logError("Failed to find %s's parent by name [%s]".format(currentObj.body.name, parentName)) - return + NapiLog.logError("Failed to find %s's parent by name [%s]".format(currentObj.body.name, parentName)); + return; } // 为父类添加子类的对象信息 - addUniqObj2List(currentObj, parentObj.body.childList) + addUniqObj2List(currentObj, parentObj.body.childList); // 为当前类添加父类对象信息 - addUniqObj2List(parentObj, currentObj.body.parentList) + addUniqObj2List(parentObj, currentObj.body.parentList); for (let i in parentObj.body.value) { // 添加父类的所有成员属性到parentBody - addUniqObj2List(parentObj.body.value[i], parentBody.value) + addUniqObj2List(parentObj.body.value[i], parentBody.value); } for (let i in parentObj.body.function) { // 添加父类的所有成员方法到parentBody - addUniqFunc2List(parentObj.body.function[i], parentBody.function) + addUniqFunc2List(parentObj.body.function[i], parentBody.function); } if (parentObj.body.parentNameList.length > 0) { // 递归查找父类的父类 - genParentPropties(parentObj, data, parentBody) + genParentPropties(parentObj, data, parentBody); } } } @@ -82,49 +82,49 @@ function genParentPropties(currentObj, data, parentBody) { // 为有继承关系的interface和class类型建立父子类关系信息 function genExtendsRelation(data) { for (let i in data.interface) { - let ifObj = data.interface[i] + let ifObj = data.interface[i]; if (ifObj && ifObj.body.parentNameList && ifObj.body.parentNameList.length > 0) { - ifObj.body.parentBody = {value:[], function:[]} - genParentPropties(ifObj, data, ifObj.body.parentBody) + ifObj.body.parentBody = {value:[], function:[]}; + genParentPropties(ifObj, data, ifObj.body.parentBody); } } for (let i in data.class) { - let classObj = data.class[i] + let classObj = data.class[i]; if (classObj.body.parentName) { - classObj.body.parentBody = {value:[], function:[]} - genParentPropties(classObj, data, classObj.body.parentBody) + classObj.body.parentBody = {value:[], function:[]}; + genParentPropties(classObj, data, classObj.body.parentBody); } } } //生成module_middle.cpp、module.h、module.cpp -function generateNamespace(name, data, inNamespace = "") { - let namespaceResult = { implH: "", implCpp: "", middleFunc: "", middleInit: "", declarationH: "", middleH: "", middleInitEnumDef: "" } - namespaceResult.middleInit += formatMiddleInit(inNamespace, name) - genExtendsRelation(data) - InterfaceList.push(data.interface) - TypeList.push(data.type) - EnumList.push(data.enum) - CallFunctionList.push(data.callFunction) +function generateNamespace(name, data, inNamespace = '') { + let namespaceResult = { implH: '', implCpp: '', middleFunc: '', middleInit: '', declarationH: '', middleH: '', middleInitEnumDef: '' }; + namespaceResult.middleInit += formatMiddleInit(inNamespace, name); + genExtendsRelation(data); + InterfaceList.push(data.interface); + TypeList.push(data.type); + EnumList.push(data.enum); + CallFunctionList.push(data.callFunction); let toolNamespace = getToolNamespaceFunc(inNamespace, name); enumNamespaceFunction(data, namespaceResult, inNamespace, name, toolNamespace); for (let i in data.type) { - let ii = data.type[i] - let result = generateType(ii.name, ii.body, inNamespace + name + "::",inNamespace, name, toolNamespace) - namespaceResult = getNamespaceResult(result, namespaceResult) + let ii = data.type[i]; + let result = generateType(ii.name, ii.body, inNamespace + name + '::', inNamespace, name, toolNamespace); + namespaceResult = getNamespaceResult(result, namespaceResult); } for (let i in data.interface) { - let ii = data.interface[i] - let result = generateInterface(ii.name, ii.body, inNamespace + name + "::") - namespaceResult = getNamespaceResult(result, namespaceResult) + let ii = data.interface[i]; + let result = generateInterface(ii.name, ii.body, inNamespace + name + '::'); + namespaceResult = getNamespaceResult(result, namespaceResult); } for (let i in data.class) { - let ii = data.class[i] - let result = generateClass(ii.name, ii.body, inNamespace + name + "::", ii.functiontType) - namespaceResult = getNamespaceResult(result, namespaceResult) + let ii = data.class[i]; + let result = generateClass(ii.name, ii.body, inNamespace + name + '::', ii.functiontType); + namespaceResult = getNamespaceResult(result, namespaceResult); } - namespaceResult.implH = namespaceResult.declarationH + namespaceResult.implH + namespaceResult.implH = namespaceResult.declarationH + namespaceResult.implH; for (let i in data.function) { genNamespaceFunc(data, i, namespaceResult, inNamespace, name); } @@ -133,20 +133,20 @@ function generateNamespace(name, data, inNamespace = "") { flag = false; } for (let i in data.namespace) { - let ns = data.namespace[i] - let result = generateNamespace(ns.name, ns.body, inNamespace + name + "::") - namespaceResult = getNamespaceResult(result, namespaceResult) + let ns = data.namespace[i]; + let result = generateNamespace(ns.name, ns.body, inNamespace + name + '::'); + namespaceResult = getNamespaceResult(result, namespaceResult); } InterfaceList.pop(); TypeList.pop(); EnumList.pop(); CallFunctionList.pop(); if (inNamespace.length > 0) { - namespaceResult.middleInit += "}" + namespaceResult.middleInit += '}'; flag = true; } return generateResult(name, namespaceResult.implH, namespaceResult.implCpp, namespaceResult.middleFunc, - namespaceResult.middleInit, namespaceResult.middleH, namespaceResult.middleInitEnumDef, flag) + namespaceResult.middleInit, namespaceResult.middleH, namespaceResult.middleInitEnumDef, flag); } function genNamespaceFunc(data, i, namespaceResult, inNamespace, name) { @@ -158,7 +158,7 @@ function genNamespaceFunc(data, i, namespaceResult, inNamespace, name) { namespaceResult.middleH += tmp[3]; let toolNamespace = getToolNamespaceFunc(inNamespace, name); let middleTmp = ' pxt->DefineFunction("%s", %s%s::%s%s_middle%s);\n' - .format(func.name, inNamespace, name, toolNamespace, func.name, inNamespace.length > 0 ? ", " + name : ""); + .format(func.name, inNamespace, name, toolNamespace, func.name, inNamespace.length > 0 ? ', ' + name : ''); if (namespaceResult.middleInit.indexOf(middleTmp) < 0) { // on方法不需要重复定义 namespaceResult.middleInit += middleTmp; } @@ -186,46 +186,46 @@ function enumNamespaceFunction(data, namespaceResult, inNamespace, nameSpaceName namespaceResult.implH += result.implH; namespaceResult.implCpp += result.implCpp; namespaceResult.middleInit += result.middleInit; - namespaceResult.middleInitEnumDef += result.midInitEnumDefine + namespaceResult.middleInitEnumDef += result.midInitEnumDefine; } function getNamespaceResult(subResult, returnResult) { - returnResult.middleFunc += subResult.middleBody - returnResult.implH += subResult.implH - returnResult.implCpp += subResult.implCpp - returnResult.middleInit += subResult.middleInit - returnResult.declarationH += subResult.declarationH - returnResult.middleH += subResult.middleH + returnResult.middleFunc += subResult.middleBody; + returnResult.implH += subResult.implH; + returnResult.implCpp += subResult.implCpp; + returnResult.middleInit += subResult.middleInit; + returnResult.declarationH += subResult.declarationH; + returnResult.middleH += subResult.middleH; if (subResult.midInitEnumDefine !== undefined) { - returnResult.middleInitEnumDef += subResult.midInitEnumDefine + returnResult.middleInitEnumDef += subResult.midInitEnumDefine; } - return returnResult + return returnResult; } function generateEnumResult(data, inNamespace, nameSpaceName, toolNamespace) { let resultEnum = { - implH: "", - implCpp: "", - middleInit: "", - midInitEnumDefine: "" - } + implH: '', + implCpp: '', + middleInit: '', + midInitEnumDefine: '' + }; for (let i in data.enum) { - let enumm = data.enum[i] - let result = generateEnum(enumm.name, enumm.body, inNamespace, nameSpaceName, toolNamespace) - resultEnum.implH += result.implH - resultEnum.implCpp += result.implCpp - resultEnum.middleInit += result.midInitEnum - resultEnum.midInitEnumDefine += result.midInitEnumDefine + let enumm = data.enum[i]; + let result = generateEnum(enumm.name, enumm.body, inNamespace, nameSpaceName, toolNamespace); + resultEnum.implH += result.implH; + resultEnum.implCpp += result.implCpp; + resultEnum.middleInit += result.midInitEnum; + resultEnum.midInitEnumDefine += result.midInitEnumDefine; } - return resultEnum + return resultEnum; } function generateResult(name, implH, implCpp, middleFunc, middleInit, middleH, middleInitEnumDef, flag) { - let result - let middleEnumDefine = middleInitEnumDef.indexOf('undefined') >= 0? '' : middleInitEnumDef + let result; + let middleEnumDefine = middleInitEnumDef.indexOf('undefined') >= 0 ? '' : middleInitEnumDef; if (flag) { result = { implH: `\nnamespace %s {\nnamespace %s_interface {%s\n}\n}`.format(name, name, implH), @@ -233,7 +233,7 @@ function generateResult(name, implH, implCpp, middleFunc, middleInit, middleH, m middleBody: `\nnamespace %s {\nnamespace %s_interface {\n%s%s\n}\n}`.format(name, name, middleEnumDefine, middleFunc), middleInit: middleInit, middleH: `\nnamespace %s {\nnamespace %s_interface {%s\n}\n}`.format(name, name, middleH) - } + }; } else { result = { implH: `\nnamespace %s {%s\n}`.format(name, implH), @@ -241,7 +241,7 @@ function generateResult(name, implH, implCpp, middleFunc, middleInit, middleH, m middleBody: `\nnamespace %s {\n%s%s}`.format(name, middleEnumDefine, middleFunc), middleInit: middleInit, middleH: `\nnamespace %s {%s\n}`.format(name, middleH) - } + }; } return result; } @@ -250,37 +250,37 @@ function generateFunction(func, data, implH = null) { let tmp; let className; if (isOnOffRegisterFunc(func.name)) { - return generateFunctionOnOff(func, data) + return generateFunctionOnOff(func, data); } else if (isCreateThreadsafeFunc(func.name)) { - return generateThreadsafeFunc(func, data) + return generateThreadsafeFunc(func, data); } switch (func.type) { case FuncType.DIRECT: - tmp = generateFunctionDirect(func, data) + tmp = generateFunctionDirect(func, data); break; case FuncType.SYNC: - tmp = generateFunctionSync(func, data) - break + tmp = generateFunctionSync(func, data); + break; case FuncType.ASYNC: case FuncType.PROMISE: - tmp = generateFunctionAsync(func, data, className, implH) - break + tmp = generateFunctionAsync(func, data, className, implH); + break; default: - return + break; } - return tmp + return tmp; } function formatMiddleInit(inNamespace, name) { - let middleInit = "" + let middleInit = ''; if (inNamespace.length > 0) { - let nsl = inNamespace.split("::") - nsl.pop() - let parentNs = nsl[nsl.length - 1] + let nsl = inNamespace.split('::'); + nsl.pop(); + let parentNs = nsl[nsl.length - 1]; middleInit = `{\nnapi_value %s = pxt->CreateSubObject(%s, "%s");\n` - .format(name, nsl.length === 1 ? "exports" : parentNs, name) + .format(name, nsl.length === 1 ? 'exports' : parentNs, name); } - return middleInit + return middleInit; } module.exports = { @@ -290,4 +290,4 @@ module.exports = { generateResult, generateFunction, formatMiddleInit -} \ No newline at end of file +}; -- Gitee From c9e68f3bdba8e4cf853a5b6e12df66b0a43ccfdf Mon Sep 17 00:00:00 2001 From: huruitao Date: Thu, 11 Jul 2024 15:57:39 +0800 Subject: [PATCH 29/31] =?UTF-8?q?"modifile=20src/cli/dts2cpp/src/gen/gener?= =?UTF-8?q?ate/param=5Fgenerate.js=20=E4=BF=AE=E6=94=B9napi=E4=BB=93=20js?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E9=97=AE=E9=A2=98=E5=92=8C=E9=87=8D=E5=A4=A7?= =?UTF-8?q?=E5=91=8A=E8=AD=A6"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: huruitao --- .../src/gen/generate/param_generate.js | 966 +++++++++--------- 1 file changed, 485 insertions(+), 481 deletions(-) diff --git a/src/cli/dts2cpp/src/gen/generate/param_generate.js b/src/cli/dts2cpp/src/gen/generate/param_generate.js index 7570c080..a1550a3e 100644 --- a/src/cli/dts2cpp/src/gen/generate/param_generate.js +++ b/src/cli/dts2cpp/src/gen/generate/param_generate.js @@ -14,98 +14,98 @@ */ const { InterfaceList, getArrayType, getArrayTypeTwo, NumberIncrease, enumIndex, isEnum, EnumValueType, getMapType, getLogErrInfo, - EnumList, getUnionType, TypeList, CallFunctionList, isFuncType, isArrowFunc } = require("../tools/common"); -const re = require("../tools/re"); -const { NapiLog } = require("../tools/NapiLog"); -const { getConstNum } = require("../tools/tool"); + EnumList, getUnionType, TypeList, CallFunctionList, isFuncType, isArrowFunc } = require('../tools/common'); +const re = require('../tools/re'); +const { NapiLog } = require('../tools/NapiLog'); +const { getConstNum } = require('../tools/tool'); class LenIncrease { } LenIncrease.LEN_TO = 1; LenIncrease.Reset = function () { LenIncrease.LEN_TO = 1; -} +}; LenIncrease.getAndIncrease = function () { return LenIncrease.LEN_TO++; -} +}; function getValueProperty(napiVn, name) { - return 'pxt->GetValueProperty(%s, "%s")'.format(napiVn, name) + return 'pxt->GetValueProperty(%s, "%s")'.format(napiVn, name); } function getCType(type) { - if (type === "boolean") { - return "bool" - } else if (type === "string") { - return "std::string" - } else if (type.substring(0, 6) === "Array<" || type.substring(type.length - 2) === "[]") { - return "std::vector<%s>".format(getArrayTypeTemplete(type)); - } else if (type.substring(0, 4) === "Map<" || type.indexOf("{[key:") === 0) { + if (type === 'boolean') { + return 'bool'; + } else if (type === 'string') { + return 'std::string'; + } else if (type.substring(0, 6) === 'Array<' || type.substring(type.length - 2) === '[]') { + return 'std::vector<%s>'.format(getArrayTypeTemplete(type)); + } else if (type.substring(0, 4) === 'Map<' || type.indexOf('{[key:') === 0) { return getMapCType(type); } else { - return type + return type; } } function getMapCType(type) { - let mapType = getMapType(type) - let mapTypeString = "" - - if (mapType[1] !== undefined && mapType[2] === undefined) { - if (mapType[1] === "string") { mapTypeString = "std::string" } - else if (mapType[1].substring(0, 12) === "NUMBER_TYPE_") { mapTypeString = mapType[1] } - else if (mapType[1] === "boolean") { mapTypeString = "bool" } - else if (mapType[1] === "any") { mapTypeString = "std::any" } - else if (mapType[1] !== null) { mapTypeString = mapType[1] } - } else if (mapType[2] !== undefined) { - if (mapType[2] === "string") { mapTypeString = "std::map" } - else if (mapType[2].substring(0, 12) === "NUMBER_TYPE_") { - mapTypeString = "std::map".format(mapType[2]) + let mapType = getMapType(type); + let mapTypeString = ''; + + if (mapType[1] !== undefined && mapType[2] === undefined) { + if (mapType[1] === 'string') { mapTypeString = 'std::string' } + else if (mapType[1].substring(0, 12) === 'NUMBER_TYPE_') { mapTypeString = mapType[1] } + else if (mapType[1] === 'boolean') { mapTypeString = 'bool' } + else if (mapType[1] === 'any') { mapTypeString = 'std::any' } + else if (mapType[1] !== null) { mapTypeString = mapType[1] } + } else if (mapType[2] !== undefined) { + if (mapType[2] === 'string') { mapTypeString = 'std::map' } + else if (mapType[2].substring(0, 12) === 'NUMBER_TYPE_') { + mapTypeString = 'std::map'.format(mapType[2]); } - else if (mapType[2] === "boolean") { mapTypeString = "std::map" } - } else if (mapType[3] !== undefined) { - if (mapType[3] === "string") { mapTypeString = "std::vector" } - else if (mapType[3].substring(0, 12) === "NUMBER_TYPE_") { - mapTypeString = "std::vector<%s>".format(mapType[3]) + else if (mapType[2] === 'boolean') { mapTypeString = 'std::map' } + } else if (mapType[3] !== undefined) { + if (mapType[3] === 'string') { mapTypeString = 'std::vector' } + else if (mapType[3].substring(0, 12) === 'NUMBER_TYPE_') { + mapTypeString = 'std::vector<%s>'.format(mapType[3]); } - else if (mapType[3] === "boolean") { mapTypeString = "std::vector" } + else if (mapType[3] === 'boolean') { mapTypeString = 'std::vector' } } - return "std::map".format(mapTypeString) + return 'std::map'.format(mapTypeString); } function jsToC(dest, napiVn, type, enumType = 0, optional) { - if (type.indexOf("|") >= 0) { - return unionTempleteFunc(dest, napiVn, type, optional) - } else if (type === "string") { + if (type.indexOf('|') >= 0) { + return unionTempleteFunc(dest, napiVn, type, optional); + } else if (type === 'string') { let verifyEnumValue = getVeriyEnumValue(enumType, dest); - if (napiVn.indexOf("GetValueProperty") >= 0) { - let lt = LenIncrease.getAndIncrease() + if (napiVn.indexOf('GetValueProperty') >= 0) { + let lt = LenIncrease.getAndIncrease(); return `napi_value tnv%d = %s;\n if (tnv%d != nullptr) {pxt->SwapJs2CUtf8(tnv%d, %s);}\n` - .format(lt, napiVn, lt, lt, dest) + .format(lt, napiVn, lt, lt, dest); } else { - return "pxt->SwapJs2CUtf8(%s, %s);".format(napiVn, dest) + verifyEnumValue + return 'pxt->SwapJs2CUtf8(%s, %s);'.format(napiVn, dest) + verifyEnumValue; } - } else if (type.substring(type.length - 2) === "[]") { + } else if (type.substring(type.length - 2) === '[]') { return arrTemplete(dest, napiVn, type); - } else if (type.substring(0, 12) === "NUMBER_TYPE_") { - return numTempleteFunc (enumType, napiVn, type, dest); + } else if (type.substring(0, 12) === 'NUMBER_TYPE_') { + return numTempleteFunc(enumType, napiVn, type, dest); } else if (InterfaceList.getValue(type)) { return interfaceTempleteFunc(type, napiVn, dest); } else if (TypeList.getValue(type)) { return typeTempleteFunc(type, dest, napiVn); } else if (EnumList.getValue(type)) { - return jsToCEnum(type, dest, napiVn) - } else if (type.indexOf("Array<") === 0) { + return jsToCEnum(type, dest, napiVn); + } else if (type.indexOf('Array<') === 0) { return arrTemplete(dest, napiVn, type); - } else if (type === "boolean") { - return `BOOLEAN_JS_2_C(%s, %s, %s);\n`.format(napiVn, "bool", dest) - } else if (type.substring(0, 4) === "Map<" || type.substring(0, 6) === "{[key:") { + } else if (type === 'boolean') { + return `BOOLEAN_JS_2_C(%s, %s, %s);\n`.format(napiVn, 'bool', dest); + } else if (type.substring(0, 4) === 'Map<' || type.substring(0, 6) === '{[key:') { return mapTempleteFunc(dest, napiVn, type); - } else if (type === "any") { + } else if (type === 'any') { return anyTempleteFunc(dest, napiVn, type); - } else if (type === "Object" || type === "object") { + } else if (type === 'Object' || type === 'object') { return objectTempleteFunc(dest, napiVn); - }else { + } else { NapiLog.logError(`do not support to generate jsToC %s,%s,%s` .format(dest, napiVn, type), getLogErrInfo()); } @@ -135,7 +135,7 @@ function getVeriyEnumValue(enumType, dest) { } function interfaceTempleteFunc(type, napiVn, dest) { - let tt = ""; + let tt = ''; let ifl = InterfaceList.getValue(type); for (let i in ifl) { let name2 = ifl[i].name; @@ -144,45 +144,45 @@ function interfaceTempleteFunc(type, napiVn, dest) { if (name2 === undefined || type2 === undefined) { NapiLog.logError(`interfaceTempleteFunc: name2 or type2 is undefined!`); return tt; - } else if (optional2 && type2.indexOf("|") < 0) { + } else if (optional2 && type2.indexOf('|') < 0) { let optType2 = getCType(type2); tt += ` if (pxt->GetProperty(%s, "%s")) {\n `.format(napiVn, name2); tt += ` %s %s_tmp;\n`.format(optType2, name2); - tt += jsToC("%s".format('%s_tmp'.format(name2)), getValueProperty(napiVn, name2), type2); + tt += jsToC('%s'.format('%s_tmp'.format(name2)), getValueProperty(napiVn, name2), type2); tt += ` %s.%s.emplace(%s_tmp);\n`.format(dest, name2, name2); tt += ` }\n`; - } else if (optional2 && type2.indexOf("|") >= 0) { + } else if (optional2 && type2.indexOf('|') >= 0) { tt += ` if (pxt->GetProperty(%s, "%s")) {\n `.format(napiVn, name2); - tt += jsToC("%s.%s".format(dest, name2), getValueProperty(napiVn, name2), type2, 0, optional2); + tt += jsToC('%s.%s'.format(dest, name2), getValueProperty(napiVn, name2), type2, 0, optional2); tt += ` }\n`; } else { - tt += jsToC("%s.%s".format(dest, name2), getValueProperty(napiVn, name2), type2); + tt += jsToC('%s.%s'.format(dest, name2), getValueProperty(napiVn, name2), type2); } } return tt; } function typeTempleteFunc(type, dest, napiVn) { - let tt = ""; + let tt = ''; let ifl = TypeList.getValue(type); if (typeof (ifl) === 'object') { for (let i in ifl) { let name2 = ifl[i].name; let type2 = ifl[i].type; let optional2 = ifl[i].optional; - if (optional2 && type2.indexOf("|") < 0) { - let optType2 = getCType(type2) - tt += ` if (pxt->GetProperty(%s, "%s")) {\n `.format(napiVn, name2) - tt += ` %s %s_tmp;\n`.format(optType2, name2) - tt += jsToC("%s".format('%s_tmp'.format(name2)), getValueProperty(napiVn, name2), type2) - tt += ` %s.%s.emplace(%s_tmp);\n`.format(dest, name2, name2) - tt += ` }\n` - } else if (optional2 && type2.indexOf("|") >= 0) { - tt += ` if (pxt->GetProperty(%s, "%s")) {\n `.format(napiVn, name2) - tt += jsToC("%s.%s".format(dest, name2), getValueProperty(napiVn, name2), type2, 0, optional2) - tt += ` }\n` + if (optional2 && type2.indexOf('|') < 0) { + let optType2 = getCType(type2); + tt += ` if (pxt->GetProperty(%s, "%s")) {\n `.format(napiVn, name2); + tt += ` %s %s_tmp;\n`.format(optType2, name2); + tt += jsToC('%s'.format('%s_tmp'.format(name2)), getValueProperty(napiVn, name2), type2); + tt += ` %s.%s.emplace(%s_tmp);\n`.format(dest, name2, name2); + tt += ` }\n`; + } else if (optional2 && type2.indexOf('|') >= 0) { + tt += ` if (pxt->GetProperty(%s, "%s")) {\n `.format(napiVn, name2); + tt += jsToC('%s.%s'.format(dest, name2), getValueProperty(napiVn, name2), type2, 0, optional2); + tt += ` }\n`; } else { - tt += jsToC("%s.%s".format(dest, name2), getValueProperty(napiVn, name2), type2); + tt += jsToC('%s.%s'.format(dest, name2), getValueProperty(napiVn, name2), type2); } } } else { @@ -192,91 +192,91 @@ function typeTempleteFunc(type, dest, napiVn) { } function unionTempleteFunc(dest, napiVn, type, optional) { - let unionType = getUnionType(type) - let unionTypeString = '' - let typeStr = 'type' + let unionType = getUnionType(type); + let unionTypeString = ''; + let typeStr = 'type'; if (optional) { - typeStr = 'type.value()' - unionTypeString += '%s_type.emplace(pxt->GetUnionType(%s));\n'.format(dest, napiVn) + typeStr = 'type.value()'; + unionTypeString += '%s_type.emplace(pxt->GetUnionType(%s));\n'.format(dest, napiVn); } else { - unionTypeString += '%s_type = pxt->GetUnionType(%s);\n'.format(dest, napiVn) + unionTypeString += '%s_type = pxt->GetUnionType(%s);\n'.format(dest, napiVn); } for (let i = 0; i < unionType.length; i++) { - if (unionType[i] === "string") { + if (unionType[i] === 'string') { unionTypeString += `if (%s_%s == "string") { std::string union_string; %s %s - }\n`.format(dest, typeStr, jsToC("union_string", napiVn, unionType[i]), - optional? dest+".emplace(union_string);":dest+" = union_string;") - } else if (unionType[i].substring(0, 12) === "NUMBER_TYPE_") { + }\n`.format(dest, typeStr, jsToC('union_string', napiVn, unionType[i]), + optional ? dest + '.emplace(union_string);' : dest + ' = union_string;'); + } else if (unionType[i].substring(0, 12) === 'NUMBER_TYPE_') { unionTypeString += `if (%s_%s == "number") { std::uint32_t union_number; %s %s - }\n`.format(dest, typeStr, jsToC("union_number", napiVn, unionType[i]), - optional? dest+".emplace(union_number);":dest+" = union_number;") - } else if (unionType[i] === "boolean") { + }\n`.format(dest, typeStr, jsToC('union_number', napiVn, unionType[i]), + optional ? dest + '.emplace(union_number);' : dest + ' = union_number;'); + } else if (unionType[i] === 'boolean') { unionTypeString += `if (%s_%s == "boolean") { bool union_boolean; %s %s - }\n`.format(dest, typeStr, jsToC("union_boolean", napiVn, unionType[i]), - optional? dest+".emplace(union_boolean);":dest+" = union_boolean;") + }\n`.format(dest, typeStr, jsToC('union_boolean', napiVn, unionType[i]), + optional ? dest + '.emplace(union_boolean);' : dest + ' = union_boolean;'); } } - return unionTypeString + return unionTypeString; } function jsToCEnum(type, dest, napiVn) { - let tt = "" - let ifl = EnumList.getValue(type) - let type2 = "" + let tt = ''; + let ifl = EnumList.getValue(type); + let type2 = ''; if (ifl && ifl.length > 0) { - type2 = ifl[0].type + type2 = ifl[0].type; } else { return null; } - tt += jsToC("%s".format(dest), napiVn, type2, type) - return tt + tt += jsToC('%s'.format(dest), napiVn, type2, type); + return tt; } function getArrayTypeTemplete(type) { - let arrayType - if (type.substring(type.length - 2) === "[]") { - arrayType = getArrayTypeTwo(type) + let arrayType; + if (type.substring(type.length - 2) === '[]') { + arrayType = getArrayTypeTwo(type); } else { - arrayType = getArrayType(type) + arrayType = getArrayType(type); } - if (arrayType === "string") { - arrayType = "std::string" - } else if (arrayType === "boolean") { - arrayType = "bool" - } else if (arrayType === "any") { - arrayType = "any" - } else if (arrayType === "[key:string]:string" || arrayType === "Map") { - arrayType = "std::map" - } else if (arrayType.substring(0, arrayType.lastIndexOf("_") + 1) === "[key:string]:NUMBER_TYPE_" || - arrayType.substring(0, arrayType.lastIndexOf("_") + 1) === "Map") { - let len = arrayType.length - let num = arrayType.substring(arrayType.lastIndexOf("_") + 1, len) - arrayType = "std::map".format(num) - } else if (arrayType === "[key:string]:boolean" || arrayType === "Map") { - arrayType = "std::map" - } else if (arrayType.substring(0, 14) === "[key:string]:") { - let valueType = arrayType.substring(14, arrayType.length) - arrayType = "std::map".format(valueType) - } else if (arrayType.substring(0, 11) === "Map') { + arrayType = 'std::map'; + } else if (arrayType.substring(0, arrayType.lastIndexOf('_') + 1) === '[key:string]:NUMBER_TYPE_' || + arrayType.substring(0, arrayType.lastIndexOf('_') + 1) === 'Map') { + let len = arrayType.length; + let num = arrayType.substring(arrayType.lastIndexOf('_') + 1, len); + arrayType = 'std::map'.format(num); + } else if (arrayType === '[key:string]:boolean' || arrayType === 'Map') { + arrayType = 'std::map'; + } else if (arrayType.substring(0, 14) === '[key:string]:') { + let valueType = arrayType.substring(14, arrayType.length); + arrayType = 'std::map'.format(valueType); + } else if (arrayType.substring(0, 11) === 'MapGetArrayLength(%s); @@ -301,28 +301,28 @@ function arrTemplete(dest, napiVn, type) { tt[replace_lt].insert(std::make_pair(ttName, ttValue)); } %s.push_back(tt[replace_lt]); - }\n`.format(napiVn, arrayType, dest) - arrTemplete = arrTemplete.replaceAll("[replace_lt]", lt) + }\n`.format(napiVn, arrayType, dest); + arrTemplete = arrTemplete.replaceAll('[replace_lt]', lt); - let str = "std::map= 0) { - let lt = LenIncrease.getAndIncrease() + }`.format(strlt, enumType, dest, strlt, strlt); + if (napiVn.indexOf('GetValueProperty') >= 0) { + let lt = LenIncrease.getAndIncrease(); return `napi_value tnv%d = %s;\n if (tnv%d != nullptr) {NUMBER_JS_2_C_ENUM(tnv%d, %s, %s, %s);}\n` - .format(lt, napiVn, lt, lt, type, dest, enumType) + verifyEnumValue + .format(lt, napiVn, lt, lt, type, dest, enumType) + verifyEnumValue; } else { - return `NUMBER_JS_2_C_ENUM(%s, %s, %s, %s);`.format(napiVn, type, dest, enumType) + verifyEnumValue + return `NUMBER_JS_2_C_ENUM(%s, %s, %s, %s);`.format(napiVn, type, dest, enumType) + verifyEnumValue; } } else { - if (napiVn.indexOf("GetValueProperty") >= 0) { - let lt = LenIncrease.getAndIncrease() + if (napiVn.indexOf('GetValueProperty') >= 0) { + let lt = LenIncrease.getAndIncrease(); return `napi_value tnv%d = %s;\n if (tnv%d != nullptr) {NUMBER_JS_2_C(tnv%d, %s, %s);}\n` - .format(lt, napiVn, lt, lt, type, dest) + .format(lt, napiVn, lt, lt, type, dest); } else { - return `NUMBER_JS_2_C(%s, %s, %s);`.format(napiVn, type, dest) + return `NUMBER_JS_2_C(%s, %s, %s);`.format(napiVn, type, dest); } } } function getMapValueCode(arrayType) { - let valueTypeOut = arrayType.substring(22, arrayType.length-1) - let strTypeOut = "%s".format(valueTypeOut) - let codegen - if (strTypeOut === "std::string") { + let valueTypeOut = arrayType.substring(22, arrayType.length - 1); + let strTypeOut = '%s'.format(valueTypeOut); + let codegen; + if (strTypeOut === 'std::string') { codegen = '\ std::string ttValue;\n\ - pxt->SwapJs2CUtf8(mapValue, ttValue);' - } else if (strTypeOut === "bool") { + pxt->SwapJs2CUtf8(mapValue, ttValue);'; + } else if (strTypeOut === 'bool') { codegen = '\ bool ttValue;\n\ - ttValue = pxt->SwapJs2CBool(mapValue);' - } else if (strTypeOut.substr(0, 12) === "NUMBER_TYPE_") { + ttValue = pxt->SwapJs2CBool(mapValue);'; + } else if (strTypeOut.substr(0, 12) === 'NUMBER_TYPE_') { codegen = '\ %s ttValue;\n\ - NUMBER_JS_2_C(mapValue, %s, ttValue);'.format(strTypeOut, strTypeOut) + NUMBER_JS_2_C(mapValue, %s, ttValue);'.format(strTypeOut, strTypeOut); } - return codegen + return codegen; } function getArrTempletereplaceSwap(arrTemplete, arrayType, napiVn, lt) { - if (arrayType.substring(0, 12) === "NUMBER_TYPE_") { - arrTemplete = arrTemplete.replaceAll("[replace_swap]", - "NUMBER_JS_2_C(pxt->GetArrayElement(%s, i%d), %s, tt%d);".format(napiVn, lt, arrayType, lt)) - } else if (arrayType === "std::string") { - arrTemplete = arrTemplete.replaceAll("[replace_swap]", - "pxt->SwapJs2CUtf8(pxt->GetArrayElement(%s, i%d), tt%d);".format(napiVn, lt, lt)) + if (arrayType.substring(0, 12) === 'NUMBER_TYPE_') { + arrTemplete = arrTemplete.replaceAll('[replace_swap]', + 'NUMBER_JS_2_C(pxt->GetArrayElement(%s, i%d), %s, tt%d);'.format(napiVn, lt, arrayType, lt)); + } else if (arrayType === 'std::string') { + arrTemplete = arrTemplete.replaceAll('[replace_swap]', + 'pxt->SwapJs2CUtf8(pxt->GetArrayElement(%s, i%d), tt%d);'.format(napiVn, lt, lt)); } else if (InterfaceList.getValue(arrayType)) { - arrTemplete = arrTemplete.replaceAll("[replace_swap]", - jsToC("tt" + lt, "pxt->GetArrayElement(%s, i%d)".format(napiVn, lt), arrayType)) - } else if (arrayType === "bool") { - arrTemplete = arrTemplete.replaceAll("[replace_swap]", - "tt%d = pxt->SwapJs2CBool(pxt->GetArrayElement(%s, i%d));".format(lt, napiVn, lt)) + arrTemplete = arrTemplete.replaceAll('[replace_swap]', + jsToC('tt' + lt, 'pxt->GetArrayElement(%s, i%d)'.format(napiVn, lt), arrayType)); + } else if (arrayType === 'bool') { + arrTemplete = arrTemplete.replaceAll('[replace_swap]', + 'tt%d = pxt->SwapJs2CBool(pxt->GetArrayElement(%s, i%d));'.format(lt, napiVn, lt)); } - return arrTemplete + return arrTemplete; } -function getMapValueType(strLen, keyType, arrayType){ - let valueTypeIn - if (keyType === "[key:string]:"){ - valueTypeIn = arrayType.substring(strLen, arrayType.length) - } else if (keyType === "Mapin" + p + ")" : "vio->in" + p - let modifiers = funcValue.optional ? "* " : "&" - if (type.substring(type.length - 2) === "[]") { - let arrayType = getArrayTypeTwo(type) - if (arrayType === "string") arrayType = "std::string" - if (arrayType === "boolean") arrayType = "bool" - if (arrayType === "any") { - return paramGenerateAnyArray(p, name, type, param) + let type = funcValue.type; + let name = funcValue.name; + let inParamName = funcValue.optional ? '(*vio->in' + p + ')' : 'vio->in' + p; + let modifiers = funcValue.optional ? '* ' : '&'; + if (type.substring(type.length - 2) === '[]') { + let arrayType = getArrayTypeTwo(type); + if (arrayType === 'string') { + arrayType = 'std::string'; + } + if (arrayType === 'boolean') { + arrayType = 'bool'; } - param.valueIn += funcValue.optional ? "\n std::vector<%s>* in%d = nullptr;".format(arrayType, p) - : "\n std::vector<%s> in%d;".format(arrayType, p) - param.valueCheckout += jsToC(inParamName, "pxt->GetArgv(%d)".format(getConstNum(p)), type) - param.valueFill += "%svio->in%d".format(param.valueFill.length > 0 ? ", " : "", p) - param.valueDefine += "%sstd::vector<%s>%s%s".format(param.valueDefine.length > 0 ? ", " - : "", arrayType, modifiers, name) - } else if (type.substring(0, 6) === "Array<") { - let arrayType = getArrayType(type) - let strLen = getMapKeyLen(arrayType) - let keyType = arrayType.substring(0, strLen) - if (arrayType === "string") { - arrayType = "std::string" - } else if (arrayType === "boolean") { - arrayType = "bool" - } else if (arrayType === "any") { - return paramGenerateAnyArray(p, name, type, param) + if (arrayType === 'any') { + return paramGenerateAnyArray(p, name, type, param); + } + param.valueIn += funcValue.optional ? '\n std::vector<%s>* in%d = nullptr;'.format(arrayType, p) + : '\n std::vector<%s> in%d;'.format(arrayType, p); + param.valueCheckout += jsToC(inParamName, 'pxt->GetArgv(%d)'.format(getConstNum(p)), type); + param.valueFill += '%svio->in%d'.format(param.valueFill.length > 0 ? ', ' : '', p); + param.valueDefine += '%sstd::vector<%s>%s%s'.format(param.valueDefine.length > 0 ? ', ' + : '', arrayType, modifiers, name); + } else if (type.substring(0, 6) === 'Array<') { + let arrayType = getArrayType(type); + let strLen = getMapKeyLen(arrayType); + let keyType = arrayType.substring(0, strLen); + if (arrayType === 'string') { + arrayType = 'std::string'; + } else if (arrayType === 'boolean') { + arrayType = 'bool'; + } else if (arrayType === 'any') { + return paramGenerateAnyArray(p, name, type, param); } else if (checkIsMap(keyType)) { let mapValueType = getMapValueType(strLen, keyType, arrayType); - arrayType = "std::map".format(mapValueType) + arrayType = 'std::map'.format(mapValueType); } - param.valueIn += funcValue.optional ? "\n std::vector<%s>* in%d = nullptr;".format(arrayType, p) - : "\n std::vector<%s> in%d;".format(arrayType, p) - let arrValueCheckout = jsToC(inParamName, "pxt->GetArgv(%d)".format(getConstNum(p)), type) + param.valueIn += funcValue.optional ? '\n std::vector<%s>* in%d = nullptr;'.format(arrayType, p) + : '\n std::vector<%s> in%d;'.format(arrayType, p); + let arrValueCheckout = jsToC(inParamName, 'pxt->GetArgv(%d)'.format(getConstNum(p)), type); arrValueCheckout = getFuncOptionalValue(funcValue, arrValueCheckout, p, arrayType, param); - param.valueCheckout += arrValueCheckout - param.valueFill += "%svio->in%d".format(param.valueFill.length > 0 ? ", " : "", p) - param.valueDefine += "%sstd::vector<%s>%s%s".format(param.valueDefine.length > 0 ? ", " - : "", arrayType, modifiers, name) + param.valueCheckout += arrValueCheckout; + param.valueFill += '%svio->in%d'.format(param.valueFill.length > 0 ? ', ' : '', p); + param.valueDefine += '%sstd::vector<%s>%s%s'.format(param.valueDefine.length > 0 ? ', ' + : '', arrayType, modifiers, name); } else { - NapiLog.logError("The current version do not support to this param to generate :", name, - "type :", type, getLogErrInfo()); + NapiLog.logError('The current version do not support to this param to generate :', name, + 'type :', type, getLogErrInfo()); } } @@ -483,108 +487,108 @@ function getFuncOptionalValue(funcValue, arrValueCheckout, p, arrayType, param) function paramGenerateAny(p, name, type, param) { param.valueIn += `\n std::any in%d; - std::string in%d_type;`.format(p, p) - param.valueCheckout += jsToC("vio->in" + p, "pxt->GetArgv(%d)".format(getConstNum(p)), type) - param.valueFill += "%svio->in%d".format(param.valueFill.length > 0 ? ", " : "", p) - param.valueDefine += "%sstd::any &%s".format(param.valueDefine.length > 0 ? ", " : "", name) + std::string in%d_type;`.format(p, p); + param.valueCheckout += jsToC('vio->in' + p, 'pxt->GetArgv(%d)'.format(getConstNum(p)), type); + param.valueFill += '%svio->in%d'.format(param.valueFill.length > 0 ? ', ' : '', p); + param.valueDefine += '%sstd::any &%s'.format(param.valueDefine.length > 0 ? ', ' : '', name); } function paramGenerateAnyArray(p, name, type, param) { param.valueIn += `\n std::any in%d; - std::string in%d_type;`.format(p, p) - param.valueCheckout += jsToC("vio->in" + p, "pxt->GetArgv(%d)".format(getConstNum(p)), type) - param.valueFill += "%svio->in%d".format(param.valueFill.length > 0 ? ", " : "", p) - param.valueDefine += "%sstd::any &%s".format(param.valueDefine.length > 0 ? ", " : "", name) + std::string in%d_type;`.format(p, p); + param.valueCheckout += jsToC('vio->in' + p, 'pxt->GetArgv(%d)'.format(getConstNum(p)), type); + param.valueFill += '%svio->in%d'.format(param.valueFill.length > 0 ? ', ' : '', p); + param.valueDefine += '%sstd::any &%s'.format(param.valueDefine.length > 0 ? ', ' : '', name); } function paramGenerateEnum(data, funcValue, param, p) { - let index = enumIndex(funcValue.type, data) + let index = enumIndex(funcValue.type, data); if (data.enum[index].body.enumValueType === EnumValueType.ENUM_VALUE_TYPE_NUMBER) { - funcValue.type = "NUMBER_TYPE_" + NumberIncrease.getAndIncrease() + funcValue.type = 'NUMBER_TYPE_' + NumberIncrease.getAndIncrease(); } else if (data.enum[index].body.enumValueType === EnumValueType.ENUM_VALUE_TYPE_STRING) { - funcValue.type = "string" + funcValue.type = 'string'; } else { NapiLog.logError(`paramGenerate is not support`, getLogErrInfo()); - return + return; } - paramGenerate(p, funcValue, param, data) + paramGenerate(p, funcValue, param, data); } function paramGenerateMap(funcValue, param, p) { - let type = funcValue.type - let name = funcValue.name - let mapType = getMapType(type) - let mapTypeString - if (mapType[1] !== undefined && mapType[2] === undefined) { - if (mapType[1] === "string") { mapTypeString = "std::string" } - else if (mapType[1].substring(0, 12) === "NUMBER_TYPE_") { mapTypeString = mapType[1] } - else if (mapType[1] === "boolean") { mapTypeString = "bool" } - else if (mapType[1] === "any") { mapTypeString = "std::any" } + let type = funcValue.type; + let name = funcValue.name; + let mapType = getMapType(type); + let mapTypeString; + if (mapType[1] !== undefined && mapType[2] === undefined) { + if (mapType[1] === 'string') { mapTypeString = 'std::string' } + else if (mapType[1].substring(0, 12) === 'NUMBER_TYPE_') { mapTypeString = mapType[1] } + else if (mapType[1] === 'boolean') { mapTypeString = 'bool' } + else if (mapType[1] === 'any') { mapTypeString = 'std::any' } else { mapTypeString = mapType[1] } } - else if (mapType[2] !== undefined) { - if (mapType[2] === "string") { mapTypeString = "std::map" } - else if (mapType[2].substring(0, 12) === "NUMBER_TYPE_") { "std::map" } - else if (mapType[2] === "boolean") { mapTypeString = "std::map" } + else if (mapType[2] !== undefined) { + if (mapType[2] === 'string') { mapTypeString = 'std::map' } + else if (mapType[2].substring(0, 12) === 'NUMBER_TYPE_') { 'std::map' } + else if (mapType[2] === 'boolean') { mapTypeString = 'std::map' } } - else if (mapType[3] !== undefined) { - if (mapType[3] === "string") { mapTypeString = "std::vector" } - else if (mapType[3].substring(0, 12) === "NUMBER_TYPE_") { mapTypeString = "std::vector<"+mapType[3]+">" } - else if (mapType[3] === "boolean") { mapTypeString = "std::vector" } + else if (mapType[3] !== undefined) { + if (mapType[3] === 'string') { mapTypeString = 'std::vector' } + else if (mapType[3].substring(0, 12) === 'NUMBER_TYPE_') { mapTypeString = 'std::vector<' + mapType[3] + '>' } + else if (mapType[3] === 'boolean') { mapTypeString = 'std::vector' } } - paramGenerateMap2(funcValue, param, p, mapType, mapTypeString, name) + paramGenerateMap2(funcValue, param, p, mapType, mapTypeString, name); } function paramGenerateMap2(funcValue, param, p, mapType, mapTypeString, name) { - let inParamName = funcValue.optional ? "(*vio->in" + p + ")" : "vio->in" + p - let modifiers = funcValue.optional ? "*" : "&" - if (mapType[1] === "any") { + let inParamName = funcValue.optional ? '(*vio->in' + p + ')' : 'vio->in' + p; + let modifiers = funcValue.optional ? '*' : '&'; + if (mapType[1] === 'any') { param.valueIn += funcValue.optional ? `\n std::map* in%d = nullptr; std::string in%d_type;`.format(mapTypeString, p, p) : `\n std::map in%d; - std::string in%d_type;`.format(mapTypeString, p, p) + std::string in%d_type;`.format(mapTypeString, p, p); } else { - param.valueIn += funcValue.optional ? "\n std::map* in%d = nullptr;" + param.valueIn += funcValue.optional ? '\n std::map* in%d = nullptr;' .format(mapTypeString, p) - : "\n std::map in%d;".format(mapTypeString, p) + : '\n std::map in%d;'.format(mapTypeString, p); } param.valueCheckout += getValueCheckout(funcValue, param, inParamName, p, - "std::map".format(mapTypeString)) - param.valueFill += "%svio->in%d".format(param.valueFill.length > 0 ? ", " : "", p) - param.valueDefine += "%sstd::map%s %s" - .format(param.valueDefine.length > 0 ? ", " : "", mapTypeString, modifiers, name) + 'std::map'.format(mapTypeString)); + param.valueFill += '%svio->in%d'.format(param.valueFill.length > 0 ? ', ' : '', p); + param.valueDefine += '%sstd::map%s %s' + .format(param.valueDefine.length > 0 ? ', ' : '', mapTypeString, modifiers, name); } function mapTempleteFunc(dest, napiVn, type) { - let mapType = getMapType(type) - let lt = LenIncrease.getAndIncrease() - let mapTemplete = "" - if (mapType[1] !== undefined && mapType[2] === undefined) { - mapTemplete = mapValue(mapType, napiVn, dest, lt) + let mapType = getMapType(type); + let lt = LenIncrease.getAndIncrease(); + let mapTemplete = ''; + if (mapType[1] !== undefined && mapType[2] === undefined) { + mapTemplete = mapValue(mapType, napiVn, dest, lt); } - else if (mapType[2] !== undefined) { - mapTemplete = mapMap(mapType, napiVn, dest, lt) + else if (mapType[2] !== undefined) { + mapTemplete = mapMap(mapType, napiVn, dest, lt); } - else if (mapType[3] !== undefined) { - mapTemplete = mapArray(mapType, napiVn, dest, lt) + else if (mapType[3] !== undefined) { + mapTemplete = mapArray(mapType, napiVn, dest, lt); } - return mapTemplete + return mapTemplete; } function anyTempleteFunc(dest) { let anyTemplete = `%s_type = pxt->GetAnyType(pxt->GetArgv(XNapiTool::ZERO)); pxt->SetAnyValue(%s_type, pxt->GetArgv(XNapiTool::ZERO), %s);\n` - .format(dest, dest, dest) + .format(dest, dest, dest); - return anyTemplete + return anyTemplete; } function anyArrayTempleteFunc(dest, napiVn) { let anyArrayTemplete = `%s_type = pxt->GetAnyArrayType(%s); pxt->SetAnyValue(%s_type, %s, %s);\n` - .format(dest, napiVn, dest, napiVn, dest) + .format(dest, napiVn, dest, napiVn, dest); - return anyArrayTemplete + return anyArrayTemplete; } let mapValueTemplete = `\ @@ -594,86 +598,86 @@ for (uint32_t i[replace_lt] = 0; i[replace_lt] < len[replace_lt]; i[replace_lt]+ %s tt[replace_lt+1]; [replace_swap] %s.insert(std::make_pair(tt[replace_lt], tt[replace_lt+1])); -}` +}`; function mapInterface(mapTypeString, mapTemplete, napiVn, lt) { - let interfaceValue = InterfaceList.getValue(mapTypeString) - let interfaceVarName = "" - let interfaceFun = "" + let interfaceValue = InterfaceList.getValue(mapTypeString); + let interfaceVarName = ''; + let interfaceFun = ''; for (let i = 0; i < interfaceValue.length; i++) { if (interfaceValue[i].type === 'string') { - interfaceVarName += `std::string %dName = "%d";\n`.format(interfaceValue[i].name, interfaceValue[i].name) + interfaceVarName += `std::string %dName = "%d";\n`.format(interfaceValue[i].name, interfaceValue[i].name); interfaceFun += `pxt->%s(pxt->%s(pxt->GetMapElementValue(pxt->GetArgv(XNapiTool::ZERO), tt%d.c_str()), %sName.c_str()), tt%d.%s);\n` - .format("SwapJs2CUtf8", "GetMapElementValue", - lt, interfaceValue[i].name, lt+1, interfaceValue[i].name) + .format('SwapJs2CUtf8', 'GetMapElementValue', + lt, interfaceValue[i].name, lt + 1, interfaceValue[i].name); } - else if (interfaceValue[i].type.substring(0, 12) === "NUMBER_TYPE_") { - interfaceVarName += `std::string %dName = "%d";\n`.format(interfaceValue[i].name, interfaceValue[i].name) + else if (interfaceValue[i].type.substring(0, 12) === 'NUMBER_TYPE_') { + interfaceVarName += `std::string %dName = "%d";\n`.format(interfaceValue[i].name, interfaceValue[i].name); interfaceFun += `%s(pxt->%s(pxt->GetMapElementValue(pxt->GetArgv(XNapiTool::ZERO), tt%d.c_str()), %sName.c_str()), %s, tt%d.%s);\n` - .format("NUMBER_JS_2_C", "GetMapElementValue", lt, interfaceValue[i].name, - interfaceValue[i].type, lt + 1, interfaceValue[i].name) + .format('NUMBER_JS_2_C', 'GetMapElementValue', lt, interfaceValue[i].name, + interfaceValue[i].type, lt + 1, interfaceValue[i].name); } else if (interfaceValue[i].type === 'boolean') { - interfaceVarName += `std::string %dName = "%d";\n`.format(interfaceValue[i].name, interfaceValue[i].name) + interfaceVarName += `std::string %dName = "%d";\n`.format(interfaceValue[i].name, interfaceValue[i].name); interfaceFun += `tt%d.%s = pxt->%s(pxt->%s(pxt->GetMapElementValue(pxt->GetArgv(XNapiTool::ZERO), tt%d.c_str()), %sName.c_str()));\n` - .format(lt + 1, interfaceValue[i].name, "SwapJs2CBool", "GetMapElementValue", - lt, interfaceValue[i].name) + .format(lt + 1, interfaceValue[i].name, 'SwapJs2CBool', 'GetMapElementValue', + lt, interfaceValue[i].name); } } - mapTemplete = mapTemplete.replaceAll("[replace_swap]", + mapTemplete = mapTemplete.replaceAll('[replace_swap]', `pxt->SwapJs2CUtf8(pxt->GetMapElementName(%s, i%d), tt%d); %d - %d`.format(napiVn, lt, lt, interfaceVarName, interfaceFun)) - return mapTemplete + %d`.format(napiVn, lt, lt, interfaceVarName, interfaceFun)); + return mapTemplete; } function mapValue(mapType, napiVn, dest, lt) { - let mapTypeString - if (mapType[1] === "string") { mapTypeString = "std::string" } - else if (mapType[1].substring(0, 12) === "NUMBER_TYPE_") { mapTypeString = mapType[1] } - else if (mapType[1] === "boolean") { mapTypeString = "bool" } - else if (mapType[1] === "any") { mapTypeString = "std::any" } - else if (mapType[1] !== null) { mapTypeString = mapType[1] } - let mapTemplete = mapValueTemplete.format(napiVn, mapTypeString, dest) - mapTemplete = mapTemplete.replaceAll("[replace_lt]", lt) - mapTemplete = mapTemplete.replaceAll("[replace_lt+1]", lt + 1) - if (mapTypeString === "std::string") { - mapTemplete = mapTemplete.replaceAll("[replace_swap]", + let mapTypeString; + if (mapType[1] === 'string') { mapTypeString = 'std::string' } + else if (mapType[1].substring(0, 12) === 'NUMBER_TYPE_') { mapTypeString = mapType[1] } + else if (mapType[1] === 'boolean') { mapTypeString = 'bool' } + else if (mapType[1] === 'any') { mapTypeString = 'std::any' } + else if (mapType[1] !== null) { mapTypeString = mapType[1] } + let mapTemplete = mapValueTemplete.format(napiVn, mapTypeString, dest); + mapTemplete = mapTemplete.replaceAll('[replace_lt]', lt); + mapTemplete = mapTemplete.replaceAll('[replace_lt+1]', lt + 1); + if (mapTypeString === 'std::string') { + mapTemplete = mapTemplete.replaceAll('[replace_swap]', `pxt->SwapJs2CUtf8(pxt->GetMapElementName(%s, i%d), tt%d); pxt->SwapJs2CUtf8(pxt->GetMapElementValue(%s, tt%d.c_str()), tt%d);\n` - .format(napiVn, lt, lt, napiVn, lt, lt + 1)) + .format(napiVn, lt, lt, napiVn, lt, lt + 1)); } - else if (mapTypeString.substring(0, 12) === "NUMBER_TYPE_") { - mapTemplete = mapTemplete.replaceAll("[replace_swap]", + else if (mapTypeString.substring(0, 12) === 'NUMBER_TYPE_') { + mapTemplete = mapTemplete.replaceAll('[replace_swap]', `pxt->SwapJs2CUtf8(pxt->GetMapElementName(%s, i%d), tt%d); NUMBER_JS_2_C(pxt->GetMapElementValue(%s, tt%d.c_str()), %s, tt%d);\n` - .format(napiVn, lt, lt, napiVn, lt, mapTypeString, lt + 1)) + .format(napiVn, lt, lt, napiVn, lt, mapTypeString, lt + 1)); } - else if (mapTypeString === "bool") { - mapTemplete = mapTemplete.replaceAll("[replace_swap]", + else if (mapTypeString === 'bool') { + mapTemplete = mapTemplete.replaceAll('[replace_swap]', `pxt->SwapJs2CUtf8(pxt->GetMapElementName(%s, i%d), tt%d); tt%d = pxt->SwapJs2CBool(pxt->GetMapElementValue(%s, tt%d.c_str()));\n` - .format(napiVn, lt, lt, lt + 1, napiVn, lt)) + .format(napiVn, lt, lt, lt + 1, napiVn, lt)); } - if (mapTypeString === "std::any") { - mapTemplete = mapTemplete.replaceAll("[replace_swap]", + if (mapTypeString === 'std::any') { + mapTemplete = mapTemplete.replaceAll('[replace_swap]', `pxt->SwapJs2CUtf8(pxt->GetMapElementName(%s, i%d), tt%d); if (i%d == 0) { %s_type = pxt->GetAnyType(pxt->GetMapElementValue(%s, tt%d.c_str())); } pxt->SetAnyValue(%s_type, pxt->GetMapElementValue(%s, tt%d.c_str()), tt%d);\n` - .format(napiVn, lt, lt, lt, dest, napiVn, lt, dest, napiVn, lt, lt + 1)) + .format(napiVn, lt, lt, lt, dest, napiVn, lt, dest, napiVn, lt, lt + 1)); } else if (InterfaceList.getValue(mapTypeString)) { - mapTemplete = mapInterface(mapTypeString, mapTemplete, napiVn, lt) + mapTemplete = mapInterface(mapTypeString, mapTemplete, napiVn, lt); } - return mapTemplete + return mapTemplete; } let mapMapTemplete = `\ @@ -683,10 +687,10 @@ for (uint32_t i[replace_lt] = 0; i[replace_lt] < len[replace_lt]; i[replace_lt]+ std::map tt[replace_lt+1]; [replace_swap] %s.insert(std::make_pair(tt[replace_lt], tt[replace_lt+1])); -}` +}`; function mapMapString(mapTemplete, napiVn, lt) { - return mapTemplete.replaceAll("[replace_swap]", + return mapTemplete.replaceAll('[replace_swap]', `pxt->SwapJs2CUtf8(pxt->GetMapElementName(%s, i%d), tt%d); uint32_t len%d = pxt->GetMapLength(pxt->GetMapElementValue(%s, tt%d.c_str())); for (uint32_t i%d = 0; i%d < len%d; i%d++) { @@ -698,11 +702,11 @@ function mapMapString(mapTemplete, napiVn, lt) { tt%d.c_str()), tt%d.c_str()), tt%d); tt%d.insert(std::make_pair(tt%d, tt%d)); }`.format(napiVn, lt, lt, lt + 1, napiVn, lt, lt + 1, lt + 1, lt + 1, lt + 1, - lt + 2, lt + 3, napiVn, lt, lt + 1, lt + 2, napiVn, lt, lt + 2, lt + 3, lt + 1, lt + 2, lt + 3)) + lt + 2, lt + 3, napiVn, lt, lt + 1, lt + 2, napiVn, lt, lt + 2, lt + 3, lt + 1, lt + 2, lt + 3)); } function mapMapBoolean(mapTemplete, napiVn, lt) { - return mapTemplete.replaceAll("[replace_swap]", + return mapTemplete.replaceAll('[replace_swap]', `pxt->SwapJs2CUtf8(pxt->GetMapElementName(%s, i%d), tt%d); uint32_t len%d = pxt->GetMapLength(pxt->GetMapElementValue(%s, tt%d.c_str())); for (uint32_t i%d = 0; i%d < len%d; i%d++) { @@ -714,12 +718,12 @@ function mapMapBoolean(mapTemplete, napiVn, lt) { tt%d.c_str()), tt%d.c_str())); tt%d.insert(std::make_pair(tt%d, tt%d)); }\n`.format(napiVn, lt, lt, lt + 1, napiVn, lt, lt + 1, lt + 1, lt + 1, lt + 1, - lt + 2, lt + 3, napiVn, lt, lt + 1, lt + 2, lt + 3, "SwapJs2CBool" - ,napiVn, lt, lt + 2, lt + 1, lt + 2, lt + 3)) + lt + 2, lt + 3, napiVn, lt, lt + 1, lt + 2, lt + 3, 'SwapJs2CBool' + , napiVn, lt, lt + 2, lt + 1, lt + 2, lt + 3)); } function mapMapNumber(mapTemplete, napiVn, lt, mapTypeString) { - return mapTemplete.replaceAll("[replace_swap]", + return mapTemplete.replaceAll('[replace_swap]', `pxt->SwapJs2CUtf8(pxt->GetMapElementName(%s, i%d), tt%d); uint32_t len%d = pxt->GetMapLength(pxt->GetMapElementValue(%s, tt%d.c_str())); for (uint32_t i%d = 0; i%d < len%d; i%d++) { @@ -732,27 +736,27 @@ function mapMapNumber(mapTemplete, napiVn, lt, mapTypeString) { tt%d.insert(std::make_pair(tt%d, tt%d)); }`.format(napiVn, lt, lt, lt + 1, napiVn, lt, lt + 1, lt + 1, lt + 1, lt + 1, lt + 2, mapTypeString, lt + 3, napiVn, lt, lt + 1, lt + 2, napiVn, lt, lt + 2, - mapTypeString, lt + 3, lt + 1, lt + 2, lt + 3)) + mapTypeString, lt + 3, lt + 1, lt + 2, lt + 3)); } function mapMap(mapType, napiVn, dest, lt) { - let mapTypeString - if (mapType[2] === "string") { mapTypeString = "std::string" } - else if (mapType[2].substring(0, 12) === "NUMBER_TYPE_") { mapTypeString = mapType[2] } - else if (mapType[2] === "boolean") { mapTypeString = "bool" } - let mapTemplete = mapMapTemplete.format(napiVn, mapTypeString, dest) - mapTemplete = mapTemplete.replaceAll("[replace_lt]", lt) - mapTemplete = mapTemplete.replaceAll("[replace_lt+1]", lt + 1) - if (mapType[2] === "string") { - mapTemplete = mapMapString (mapTemplete, napiVn, lt) + let mapTypeString; + if (mapType[2] === 'string') { mapTypeString = 'std::string' } + else if (mapType[2].substring(0, 12) === 'NUMBER_TYPE_') { mapTypeString = mapType[2] } + else if (mapType[2] === 'boolean') { mapTypeString = 'bool' } + let mapTemplete = mapMapTemplete.format(napiVn, mapTypeString, dest); + mapTemplete = mapTemplete.replaceAll('[replace_lt]', lt); + mapTemplete = mapTemplete.replaceAll('[replace_lt+1]', lt + 1); + if (mapType[2] === 'string') { + mapTemplete = mapMapString(mapTemplete, napiVn, lt); } - else if (mapType[2] === "boolean") { - mapTemplete = mapMapBoolean (mapTemplete, napiVn, lt) + else if (mapType[2] === 'boolean') { + mapTemplete = mapMapBoolean(mapTemplete, napiVn, lt); } - else if (mapType[2].substring(0, 12) === "NUMBER_TYPE_") { - mapTemplete = mapMapNumber (mapTemplete, napiVn, lt, mapTypeString) + else if (mapType[2].substring(0, 12) === 'NUMBER_TYPE_') { + mapTemplete = mapMapNumber(mapTemplete, napiVn, lt, mapTypeString); } - return mapTemplete + return mapTemplete; } let mapArrayTemplete = `\ @@ -762,18 +766,18 @@ for (uint32_t i[replace_lt] = 0; i[replace_lt] < len[replace_lt]; i[replace_lt]+ std::vector<%s> tt[replace_lt+1]; [replace_swap] %s.insert(std::make_pair(tt[replace_lt], tt[replace_lt+1])); -}` +}`; function mapArray(mapType, napiVn, dest, lt) { - let mapTypeString - if (mapType[3] === "string") { mapTypeString = "std::string" } - else if (mapType[3].substring(0, 12) === "NUMBER_TYPE_") { mapTypeString = mapType[3] } - else if (mapType[3] === "boolean") { mapTypeString = "bool" } - let mapTemplete = mapArrayTemplete.format(napiVn, mapTypeString, dest) - mapTemplete = mapTemplete.replaceAll("[replace_lt]", lt) - mapTemplete = mapTemplete.replaceAll("[replace_lt+1]", lt + 1) - if (mapType[3] === "string") { - mapTemplete = mapTemplete.replaceAll("[replace_swap]", + let mapTypeString; + if (mapType[3] === 'string') { mapTypeString = 'std::string' } + else if (mapType[3].substring(0, 12) === 'NUMBER_TYPE_') { mapTypeString = mapType[3] } + else if (mapType[3] === 'boolean') { mapTypeString = 'bool' } + let mapTemplete = mapArrayTemplete.format(napiVn, mapTypeString, dest); + mapTemplete = mapTemplete.replaceAll('[replace_lt]', lt); + mapTemplete = mapTemplete.replaceAll('[replace_lt+1]', lt + 1); + if (mapType[3] === 'string') { + mapTemplete = mapTemplete.replaceAll('[replace_swap]', `pxt->SwapJs2CUtf8(pxt->GetMapElementName(%s, i%s), tt%d); uint32_t len%s = pxt->GetArrayLength(pxt->GetMapElementValue(%s, tt%d.c_str())); for (uint32_t i%d = 0; i%d < len%d; i%d++) { @@ -782,10 +786,10 @@ function mapArray(mapType, napiVn, dest, lt) { tt%d.c_str()), i%d), tt%d); tt%d.push_back(tt%d); }`.format(napiVn, lt, lt, lt + 1, napiVn, lt, lt + 1, lt + 1, lt + 1, - lt + 1, lt + 2, napiVn, lt, lt + 1, lt + 2, lt + 1, lt + 2)) + lt + 1, lt + 2, napiVn, lt, lt + 1, lt + 2, lt + 1, lt + 2)); } - else if (mapType[3] === "boolean") { - mapTemplete = mapTemplete.replaceAll("[replace_swap]", + else if (mapType[3] === 'boolean') { + mapTemplete = mapTemplete.replaceAll('[replace_swap]', `pxt->SwapJs2CUtf8(pxt->GetMapElementName(%s, i%s), tt%d); uint32_t len%s = pxt->GetArrayLength(pxt->GetMapElementValue(%s, tt%d.c_str())); for (uint32_t i%d = 0; i%d < len%d; i%d++) { @@ -794,10 +798,10 @@ function mapArray(mapType, napiVn, dest, lt) { tt%d.c_str()), i%d)); tt%d.push_back(tt%d); }`.format(napiVn, lt, lt, lt + 1, napiVn, lt, lt + 1, lt + 1, lt + 1, - lt + 1, lt + 2, lt + 2, napiVn, lt, lt, lt + 1, lt + 2)) + lt + 1, lt + 2, lt + 2, napiVn, lt, lt, lt + 1, lt + 2)); } - else if (mapType[3].substring(0, 12) === "NUMBER_TYPE_") { - mapTemplete = mapTemplete.replaceAll("[replace_swap]", + else if (mapType[3].substring(0, 12) === 'NUMBER_TYPE_') { + mapTemplete = mapTemplete.replaceAll('[replace_swap]', `pxt->SwapJs2CUtf8(pxt->GetMapElementName(%s, i%s), tt%d); uint32_t len%s = pxt->GetArrayLength(pxt->GetMapElementValue(%s, tt%d.c_str())); for (uint32_t i%d = 0; i%d < len%d; i%d++) { @@ -806,71 +810,71 @@ function mapArray(mapType, napiVn, dest, lt) { tt%d.c_str()), i%d), %s, tt%d); tt%d.push_back(tt%d); }`.format(napiVn, lt, lt, lt + 1, napiVn, lt, lt + 1, lt + 1, lt + 1, - lt + 1, mapTypeString, lt + 2, napiVn, lt, lt + 1, mapTypeString, lt + 2, lt + 1, lt + 2)) + lt + 1, mapTypeString, lt + 2, napiVn, lt, lt + 1, mapTypeString, lt + 2, lt + 1, lt + 2)); } - return mapTemplete + return mapTemplete; } function getCBparaTypeForArrow(type) { - let cbParamType - const typeSplits = type.split("=>", 2); + let cbParamType; + const typeSplits = type.split('=>', 2); let callbackParams = typeSplits[0]; let returnType = typeSplits[1]; - callbackParams = callbackParams.substring(1, callbackParams.length-1); // 去掉参数列表两侧的小括号 + callbackParams = callbackParams.substring(1, callbackParams.length - 1); // 去掉参数列表两侧的小括号 if (callbackParams.length <= 0) { //无参 cbParamType = 'void'; } - if (callbackParams.indexOf(",") >= 0) { // 多个参数,进行分割 - callbackParams = callbackParams.split(",") - for(let i=0; i= 0) { // 多个参数,进行分割 + callbackParams = callbackParams.split(','); + for(let i = 0; i < callbackParams.length; i++) { + NapiLog.logInfo('muilti paramets'); } } else { // 一个参数 let params = callbackParams.split(':', 2); - cbParamType = params[1] + cbParamType = params[1]; } - return [cbParamType, returnType] + return [cbParamType, returnType]; } function matchCBParamType(cbParamType, type) { - let arrayType = re.match("(Async)*Callback<(Array<([a-zA-Z_0-9]+)>)>", type) + let arrayType = re.match('(Async)*Callback<(Array<([a-zA-Z_0-9]+)>)>', type); if (arrayType) { - cbParamType = re.getReg(type, arrayType.regs[2]) + cbParamType = re.getReg(type, arrayType.regs[2]); } - let arrayType2 = re.match("(Async)*Callback<(([a-zA-Z_0-9]+)\\[\\])>", type) + let arrayType2 = re.match('(Async)*Callback<(([a-zA-Z_0-9]+)\\[\\])>', type); if (arrayType2) { - cbParamType = re.getReg(type, arrayType2.regs[2]) + cbParamType = re.getReg(type, arrayType2.regs[2]); } - let tt = re.match("(Async)*Callback<([a-zA-Z_0-9]+)>", type) + let tt = re.match('(Async)*Callback<([a-zA-Z_0-9]+)>', type); if (tt) { - cbParamType = re.getReg(type, tt.regs[2]) + cbParamType = re.getReg(type, tt.regs[2]); } - return cbParamType + return cbParamType; } function paramGenerateCallBack(data, funcValue, param, p) { - let cbParamType - let returnType = 'void' + let cbParamType; + let returnType = 'void'; - let type = funcValue.type + let type = funcValue.type; if (isFuncType(type)) { cbParamType = 'void'; } - cbParamType = matchCBParamType(cbParamType, type) + cbParamType = matchCBParamType(cbParamType, type); if (isEnum(cbParamType, data)) { - let index = enumIndex(cbParamType, data) + let index = enumIndex(cbParamType, data); if (data.enum[index].body.enumValueType === EnumValueType.ENUM_VALUE_TYPE_NUMBER) { - cbParamType = "NUMBER_TYPE_" + NumberIncrease.getAndIncrease() + cbParamType = 'NUMBER_TYPE_' + NumberIncrease.getAndIncrease(); } else if (data.enum[index].body.enumValueType === EnumValueType.ENUM_VALUE_TYPE_STRING) { - cbParamType = "string" + cbParamType = 'string'; } else { NapiLog.logError(`paramGenerate is not support`, getLogErrInfo()); - return + return; } } @@ -880,28 +884,28 @@ function paramGenerateCallBack(data, funcValue, param, p) { offset: p, returnType: returnType, optional: funcValue.optional, - isAsync: type.indexOf("AsyncCallback") >= 0 - } + isAsync: type.indexOf('AsyncCallback') >= 0 + }; } function paramGenerateArrowCallBack(funcValue, param, p, onFlag = false) { - let cbParamType - let returnType = 'void' + let cbParamType; + let returnType = 'void'; - let type = funcValue.type - let cbParamList = [] + let type = funcValue.type; + let cbParamList = []; if (CallFunctionList.getValue(type)) { // callFunction => 函数参数处理 - let funcBody = CallFunctionList.getValue(type)[0] // 取出回调方法参数 - returnType = CallFunctionList.getValue(type)[1] - cbParamType = type + let funcBody = CallFunctionList.getValue(type)[0]; // 取出回调方法参数 + returnType = CallFunctionList.getValue(type)[1]; + cbParamType = type; for (let i in funcBody) { let cbParam = { name: funcBody[i].name, type: funcBody[i].type - } - cbParamList[i] = cbParam + }; + cbParamList[i] = cbParam; } } @@ -914,12 +918,12 @@ function paramGenerateArrowCallBack(funcValue, param, p, onFlag = false) { isArrowFuncFlag: true, arrowFuncParamList:cbParamList, onFlag: onFlag, - isAsync: type.indexOf("AsyncCallback") >= 0 - } + isAsync: type.indexOf('AsyncCallback') >= 0 + }; } function isArrayType(type) { - if (type.substring(type.length - 2) === "[]" || type.substring(0, 6) === "Array<") { + if (type.substring(type.length - 2) === '[]' || type.substring(0, 6) === 'Array<') { return true; } return false; @@ -930,25 +934,25 @@ function getValueCheckout(funcValue, param, inParamName, p, cType) { if (funcValue.type !== funcValue.realType) { enumType = funcValue.realType; } - let valueCheckout = jsToC(inParamName, "pxt->GetArgv(%d)".format(getConstNum(p)), funcValue.type, enumType) + "\n " + let valueCheckout = jsToC(inParamName, 'pxt->GetArgv(%d)'.format(getConstNum(p)), funcValue.type, enumType) + '\n '; if (funcValue.optional) { - valueCheckout = "if (pxt->GetArgc() > %d) {\n vio->in%d = new %s;\n " - .format(getConstNum(p), p, cType) + valueCheckout + "}\n " - param.optionalParamDestory += "C_DELETE(vio->in%d);\n ".format(p) + valueCheckout = 'if (pxt->GetArgc() > %d) {\n vio->in%d = new %s;\n ' + .format(getConstNum(p), p, cType) + valueCheckout + '}\n '; + param.optionalParamDestory += 'C_DELETE(vio->in%d);\n '.format(p); } return valueCheckout; } function paramGenerateUnion(type, param, p, name) { param.valueIn += `\n std::any in%d; - std::string in%d_type;`.format(p, p) - param.valueCheckout += jsToC("vio->in" + p, "pxt->GetArgv(%d)".format(getConstNum(p)), type) - param.valueFill += "%svio->in%d".format(param.valueFill.length > 0 ? ", " : "", p) - param.valueDefine += "%sstd::any &%s".format(param.valueDefine.length > 0 ? ", " : "", name) + std::string in%d_type;`.format(p, p); + param.valueCheckout += jsToC('vio->in' + p, 'pxt->GetArgv(%d)'.format(getConstNum(p)), type); + param.valueFill += '%svio->in%d'.format(param.valueFill.length > 0 ? ', ' : '', p); + param.valueDefine += '%sstd::any &%s'.format(param.valueDefine.length > 0 ? ', ' : '', name); } function isEnumTypeFunc(cType, funcValue) { - if (cType !== funcValue.realType && funcValue.type !== funcValue.realType && funcValue.type !== "string") { + if (cType !== funcValue.realType && funcValue.type !== funcValue.realType && funcValue.type !== 'string') { return true; } else { return false; @@ -959,21 +963,21 @@ function isEnumTypeFunc(cType, funcValue) { function paramGenerateCommon(p, cType, funcValue, param, modifiers, inParamName) { // string类型和number类型枚举处理时才走该分支 if (isEnumTypeFunc(cType, funcValue)) { - cType = funcValue.realType + cType = funcValue.realType; } - param.valueIn += funcValue.optional ? "\n %s* in%d = nullptr;".format(cType, p) - : "\n %s in%d;".format(cType, p) + param.valueIn += funcValue.optional ? '\n %s* in%d = nullptr;'.format(cType, p) + : '\n %s in%d;'.format(cType, p); if (TypeList.getValue(cType)) { - let realType = TypeList.getValue(cType) + let realType = TypeList.getValue(cType); if (realType.indexOf('|') > 0) { - param.valueIn += `\n std::string in%d_type;`.format(p, p) + param.valueIn += `\n std::string in%d_type;`.format(p, p); } } - param.valueCheckout += getValueCheckout(funcValue, param, inParamName, p, cType) - param.valueFill += "%svio->in%d".format(param.valueFill.length > 0 ? ", " : "", p) - param.valueDefine += "%s%s%s %s".format( - param.valueDefine.length > 0 ? ", " : "", cType, modifiers, funcValue.name) + param.valueCheckout += getValueCheckout(funcValue, param, inParamName, p, cType); + param.valueFill += '%svio->in%d'.format(param.valueFill.length > 0 ? ', ' : '', p); + param.valueDefine += '%s%s%s %s'.format( + param.valueDefine.length > 0 ? ', ' : '', cType, modifiers, funcValue.name); } let objectTemplete = `\ @@ -986,7 +990,7 @@ let objectTemplete = `\ std::string valueObjType = pxt->GetAnyType(valueObj); [replace_swap] %s.insert(std::make_pair(tt[replace_lt], tt[replace_lt+1])); - }\n` + }\n`; // To avoid function that exceed 50 lines let objectTempleteArrnum = `\ @@ -1000,7 +1004,7 @@ let objectTempleteArrnum = `\ arr.push_back(tt[replace_lt+2]); } tt[replace_lt+1] = arr; -` +`; let objectTempleteMap = `\ napi_value obj_name_value; @@ -1040,13 +1044,13 @@ let objectTempleteMap = `\ } } tt[replace_lt+1] = anyValue; -` +`; function objectTempleteFunc(dest, napiVn) { - let lt = LenIncrease.getAndIncrease() - let objTemplete = objectTemplete.format(napiVn, napiVn, napiVn, dest) + let lt = LenIncrease.getAndIncrease(); + let objTemplete = objectTemplete.format(napiVn, napiVn, napiVn, dest); - objTemplete = objTemplete.replaceAll("[replace_swap]", + objTemplete = objTemplete.replaceAll('[replace_swap]', `if (valueObjType == "string") { std::string tt[replace_lt+2]; pxt->SwapJs2CUtf8(valueObj, tt[replace_lt+2]); @@ -1084,36 +1088,36 @@ function objectTempleteFunc(dest, napiVn) { } else if (valueObjType == "map_string" || valueObjType == "map_number" || valueObjType == "map_boolean") { [replace_objectTemplete_map] } - `).format(lt) - objTemplete = objTemplete.replaceAll("[replace_objectTemplete_arrnum]", objectTempleteArrnum.format(lt, lt, lt)) - objTemplete = objTemplete.replaceAll("[replace_objectTemplete_map]", objectTempleteMap.format(lt, lt)) - objTemplete = objTemplete.replaceAll("[replace_lt]", lt) - objTemplete = objTemplete.replaceAll("[replace_lt+1]", lt + 1) - objTemplete = objTemplete.replaceAll("[replace_lt+2]", lt + 2) - return objTemplete + `).format(lt); + objTemplete = objTemplete.replaceAll('[replace_objectTemplete_arrnum]', objectTempleteArrnum.format(lt, lt, lt)); + objTemplete = objTemplete.replaceAll('[replace_objectTemplete_map]', objectTempleteMap.format(lt, lt)); + objTemplete = objTemplete.replaceAll('[replace_lt]', lt); + objTemplete = objTemplete.replaceAll('[replace_lt+1]', lt + 1); + objTemplete = objTemplete.replaceAll('[replace_lt+2]', lt + 2); + return objTemplete; } function paramGenerateObject(p, funcValue, param) { - let type = funcValue.type - let name = funcValue.name - let inParamName = funcValue.optional ? "(*vio->in" + p + ")" : "vio->in" + p - let modifiers = funcValue.optional ? "* " : "&" + let type = funcValue.type; + let name = funcValue.name; + let inParamName = funcValue.optional ? '(*vio->in' + p + ')' : 'vio->in' + p; + let modifiers = funcValue.optional ? '* ' : '&'; - let arrayType = "std::map" - param.valueIn += funcValue.optional ? "\n %s* in%d = nullptr;".format(arrayType, p) - : "\n %s in%d;".format(arrayType, p) + let arrayType = 'std::map'; + param.valueIn += funcValue.optional ? '\n %s* in%d = nullptr;'.format(arrayType, p) + : '\n %s in%d;'.format(arrayType, p); - let arrValueCheckout = jsToC(inParamName, "pxt->GetArgv(%d)".format(getConstNum(p)), type) - param.valueCheckout += arrValueCheckout - param.valueFill += "%svio->in%d".format(param.valueFill.length > 0 ? ", " : "", p) - param.valueDefine += "%s%s %s%s".format(param.valueDefine.length > 0 ? ", " - : "", arrayType, modifiers, name) + let arrValueCheckout = jsToC(inParamName, 'pxt->GetArgv(%d)'.format(getConstNum(p)), type); + param.valueCheckout += arrValueCheckout; + param.valueFill += '%svio->in%d'.format(param.valueFill.length > 0 ? ', ' : '', p); + param.valueDefine += '%s%s %s%s'.format(param.valueDefine.length > 0 ? ', ' + : '', arrayType, modifiers, name); } function isCallbackFunc(type) { let callbackFunc = false; - if (type.substring(0, 9) === "Callback<" || - type.substring(0, 14) === "AsyncCallback<" || + if (type.substring(0, 9) === 'Callback<' || + type.substring(0, 14) === 'AsyncCallback<' || isFuncType(type)) { callbackFunc = true; } @@ -1122,38 +1126,38 @@ function isCallbackFunc(type) { // 函数的参数处理 function paramGenerate(p, funcValue, param, data) { - let type = funcValue.type - let name = funcValue.name - let inParamName = funcValue.optional ? "(*vio->in" + p + ")" : "vio->in" + p - let modifiers = funcValue.optional ? "*" : "&" - if (type.indexOf("|") >= 0) { - return paramGenerateUnion(type, param, p, name) - } else if (type === "string") { - paramGenerateCommon(p, "std::string", funcValue, param, modifiers, inParamName) - } else if (type.substring(0, 12) === "NUMBER_TYPE_" && type.indexOf("[]") < 0) { - paramGenerateCommon(p, funcValue.type, funcValue, param, modifiers, inParamName) + let type = funcValue.type; + let name = funcValue.name; + let inParamName = funcValue.optional ? '(*vio->in' + p + ')' : 'vio->in' + p; + let modifiers = funcValue.optional ? '*' : '&'; + if (type.indexOf('|') >= 0) { + return paramGenerateUnion(type, param, p, name); + } else if (type === 'string') { + paramGenerateCommon(p, 'std::string', funcValue, param, modifiers, inParamName); + } else if (type.substring(0, 12) === 'NUMBER_TYPE_' && type.indexOf('[]') < 0) { + paramGenerateCommon(p, funcValue.type, funcValue, param, modifiers, inParamName); } else if (InterfaceList.getValue(type)) { - paramGenerateCommon(p, funcValue.type, funcValue, param, modifiers, inParamName) + paramGenerateCommon(p, funcValue.type, funcValue, param, modifiers, inParamName); } else if (TypeList.getValue(type)) { - paramGenerateCommon(p, funcValue.type, funcValue, param, modifiers, inParamName) + paramGenerateCommon(p, funcValue.type, funcValue, param, modifiers, inParamName); } else if (isCallbackFunc(type)) { - paramGenerateCallBack(data, funcValue, param, p) + paramGenerateCallBack(data, funcValue, param, p); } else if (CallFunctionList.getValue(type)) { - paramGenerateArrowCallBack(funcValue, param, p) - } else if (type === "boolean") { - paramGenerateCommon(p, "bool", funcValue, param, modifiers, inParamName) + paramGenerateArrowCallBack(funcValue, param, p); + } else if (type === 'boolean') { + paramGenerateCommon(p, 'bool', funcValue, param, modifiers, inParamName); } else if (isEnum(type, data)) { - paramGenerateEnum(data, funcValue, param, p) - } else if (type.substring(0, 4) === "Map<" || type.substring(0, 6) === "{[key:") { - paramGenerateMap(funcValue, param, p) + paramGenerateEnum(data, funcValue, param, p); + } else if (type.substring(0, 4) === 'Map<' || type.substring(0, 6) === '{[key:') { + paramGenerateMap(funcValue, param, p); } else if (isArrayType(type)) { paramGenerateArray(p, funcValue, param); - } else if (type === "any") { + } else if (type === 'any') { paramGenerateAny(p, name, type, param); - } else if (type === "object" || type === "Object") { + } else if (type === 'object' || type === 'Object') { paramGenerateObject(p, funcValue, param); } else { - NapiLog.logError("The current version does not support generating parameter [%s] with type [%s]." + NapiLog.logError('The current version does not support generating parameter [%s] with type [%s].' .format(name, type), getLogErrInfo()); } } @@ -1163,37 +1167,37 @@ function eventParamGenerate(p, funcValue, param, data) { let name = funcValue.name; let type = funcValue.type; if (type === undefined) { - NapiLog.logError("eventParamGenerate param error: funcValue.type is null") - return + NapiLog.logError('eventParamGenerate param error: funcValue.type is null'); + return; } if (type.indexOf("'") >= 0) { - type = type.replaceAll("'", "") + type = type.replaceAll(''', ''); } - let regName = re.match("([a-zA-Z_0-9]+)", type) - if(isFuncType(type)) { - paramGenerateCallBack(data, funcValue, param, p) - } else if (type.substring(0, 9) === "Callback<" || type.substring(0, 14) === "AsyncCallback<") { + let regName = re.match('([a-zA-Z_0-9]+)', type); + if (isFuncType(type)) { + paramGenerateCallBack(data, funcValue, param, p); + } else if (type.substring(0, 9) === 'Callback<' || type.substring(0, 14) === 'AsyncCallback<') { // callback参数处理 - paramGenerateCallBack(data, funcValue, param, p) - } else if (CallFunctionList.getValue(type)) { // 判断条件 + paramGenerateCallBack(data, funcValue, param, p); + } else if (CallFunctionList.getValue(type)) { // 判断条件 // callFunction => 函数参数处理 let onFlag = true; - paramGenerateArrowCallBack(funcValue, param, p, onFlag) + paramGenerateArrowCallBack(funcValue, param, p, onFlag); } else if (InterfaceList.getValue(type)) { let aaOnFlag = true; } else if (regName) { // event type参数处理 - param.eventName = re.getReg(type, regName.regs[1]) // string类型如何处理? - if (param.eventName === "string") { - param.eventNameIsStr = true - param.eventName = "string%d".format(NumberIncrease.getAndIncrease()) + param.eventName = re.getReg(type, regName.regs[1]); // string类型如何处理? + if (param.eventName === 'string') { + param.eventNameIsStr = true; + param.eventName = 'string%d'.format(NumberIncrease.getAndIncrease()); } - param.valueDefine += "%sstd::string &%s".format(param.valueDefine.length > 0 ? ", " : "", name) + param.valueDefine += '%sstd::string &%s'.format(param.valueDefine.length > 0 ? ', ' : '', name); } else { - NapiLog.logError("function eventParamGenerate:The current version do not support to this param to generate :", - name, "type :", type, getLogErrInfo()); + NapiLog.logError('function eventParamGenerate:The current version do not support to this param to generate :', + name, 'type :', type, getLogErrInfo()); } } @@ -1215,4 +1219,4 @@ module.exports = { anyTempleteFunc, objectTempleteFunc, unionTempleteFunc -} \ No newline at end of file +}; -- Gitee From aad522ecdf22212c3508cec534378f499be701db Mon Sep 17 00:00:00 2001 From: huruitao Date: Thu, 11 Jul 2024 17:09:54 +0800 Subject: [PATCH 30/31] src/cli/dts2cpp/src/gen/ Signed-off-by: huruitao --- src/cli/dts2cpp/src/gen/analyze/function.js | 2 +- .../dts2cpp/src/gen/generate/param_generate.js | 16 +++++----------- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/src/cli/dts2cpp/src/gen/analyze/function.js b/src/cli/dts2cpp/src/gen/analyze/function.js index ef4a4096..6389c2d9 100644 --- a/src/cli/dts2cpp/src/gen/analyze/function.js +++ b/src/cli/dts2cpp/src/gen/analyze/function.js @@ -36,7 +36,7 @@ function analyzeSubInterface(data) { t = t.substring(1, t.length); // 去除前面的空格 } while (t.length > 0 && t[-1] === ' ') { - t = t.substring(0, t.length - 1); // 去除后面的空格 + t = t.substring(0, t.length - 1); // 去除后面的空格 } if (t === '') { break; // 如果t为空直接返回 diff --git a/src/cli/dts2cpp/src/gen/generate/param_generate.js b/src/cli/dts2cpp/src/gen/generate/param_generate.js index a1550a3e..f827c6e1 100644 --- a/src/cli/dts2cpp/src/gen/generate/param_generate.js +++ b/src/cli/dts2cpp/src/gen/generate/param_generate.js @@ -1164,7 +1164,6 @@ function paramGenerate(p, funcValue, param, data) { // on/off 接口的参数处理 function eventParamGenerate(p, funcValue, param, data) { - let name = funcValue.name; let type = funcValue.type; if (type === undefined) { NapiLog.logError('eventParamGenerate param error: funcValue.type is null'); @@ -1173,31 +1172,26 @@ function eventParamGenerate(p, funcValue, param, data) { if (type.indexOf("'") >= 0) { type = type.replaceAll(''', ''); } - let regName = re.match('([a-zA-Z_0-9]+)', type); if (isFuncType(type)) { paramGenerateCallBack(data, funcValue, param, p); } else if (type.substring(0, 9) === 'Callback<' || type.substring(0, 14) === 'AsyncCallback<') { - // callback参数处理 - paramGenerateCallBack(data, funcValue, param, p); + paramGenerateCallBack(data, funcValue, param, p); // callback参数处理 } else if (CallFunctionList.getValue(type)) { // 判断条件 - // callFunction => 函数参数处理 - let onFlag = true; + let onFlag = true; // callFunction => 函数参数处理 paramGenerateArrowCallBack(funcValue, param, p, onFlag); } else if (InterfaceList.getValue(type)) { let aaOnFlag = true; - } - else if (regName) { - // event type参数处理 + } else if (regName) { // event type参数处理 param.eventName = re.getReg(type, regName.regs[1]); // string类型如何处理? if (param.eventName === 'string') { param.eventNameIsStr = true; param.eventName = 'string%d'.format(NumberIncrease.getAndIncrease()); } - param.valueDefine += '%sstd::string &%s'.format(param.valueDefine.length > 0 ? ', ' : '', name); + param.valueDefine += '%sstd::string &%s'.format(param.valueDefine.length > 0 ? ', ' : '', funcValue.name); } else { NapiLog.logError('function eventParamGenerate:The current version do not support to this param to generate :', - name, 'type :', type, getLogErrInfo()); + funcValue.name, 'type :', type, getLogErrInfo()); } } -- Gitee From 90936bd38d3c23739904047f0737db245c91a0af Mon Sep 17 00:00:00 2001 From: huruitao Date: Thu, 11 Jul 2024 18:16:57 +0800 Subject: [PATCH 31/31] codecheck Signed-off-by: huruitao --- src/cli/dts2cpp/src/gen/analyze/namespace.js | 39 +++++++------------- 1 file changed, 14 insertions(+), 25 deletions(-) diff --git a/src/cli/dts2cpp/src/gen/analyze/namespace.js b/src/cli/dts2cpp/src/gen/analyze/namespace.js index d10ad6fa..2de91620 100644 --- a/src/cli/dts2cpp/src/gen/analyze/namespace.js +++ b/src/cli/dts2cpp/src/gen/analyze/namespace.js @@ -97,36 +97,25 @@ function parseEnumType(result) { // interface 匹配 for (let i in result.interface) { - let interf = result.interface[i]; - if (!isValidValue(interf)) { - NapiLog.logError('parseEnumType interf is null!'); - return null; - } - - // function 匹配 - for (let j in interf.body.function) { - let func = interf.body.function[j]; - if (!isValidValue(func)) { - NapiLog.logError('parseEnumType func is null!'); + let interf = result.interface[i]; + if (!isValidValue(interf)) { + NapiLog.logError('parseEnumType interf is null!'); return null; } - - // 参数匹配 - for (let k in func.value) { - let v = func.value[k]; - if (!isValidValue(v)) { - NapiLog.logError('parseEnumType func.value is null!'); + + // function 匹配 + for (let j in interf.body.function) { + let func = interf.body.function[j]; + if (!isValidValue(func)) { + NapiLog.logError('parseEnumType func is null!'); return null; } - if (v.type === enumm.name) { - if (enumm.body.enumValueType === EnumValueType.ENUM_VALUE_TYPE_NUMBER) { - v.type = 'NUMBER_TYPE_' + NumberIncrease.getAndIncrease(); - } else if (enumm.body.enumValueType === EnumValueType.ENUM_VALUE_TYPE_STRING) { - v.type = 'string'; - } else { - NapiLog.logError('parseEnumType for interface function value is not support this type %s.' - .format(enumm.body.enumValueType), getLogErrInfo()); + // 参数匹配 + for (let k in func.value) { + let v = func.value[k]; + if (!isValidValue(v)) { + NapiLog.logError('parseEnumType func.value is null!'); return null; } -- Gitee