diff --git a/src/gen/analyze/function.js b/src/gen/analyze/function.js index cb030505e1b5ca96ded50884c9a3fc508694253d..41c79ef3671eb6ee7abf00bd743c8435f11f0181 100644 --- a/src/gen/analyze/function.js +++ b/src/gen/analyze/function.js @@ -14,13 +14,17 @@ */ const re = require("../tools/re"); const { FuncType, NumberIncrease, isEnum, EnumValueType, enumIndex } = require("../tools/common"); -const { analyzeParams } = require("./params"); +const { analyzeParams, analyzeParamsToObject } = require("./params"); const { analyzeReturn } = require("./return"); const { NapiLog } = require("../tools/NapiLog"); /**函数解析 */ function analyzeFunction(data, name, values, ret) { values = re.replaceAll(re.replaceAll(values, " ", ""), "\n", "") + let matchsParams = re.match("([a-zA-Z_0-9\\.]+)\\?*:({([a-zA-Z_0-9]+):([a-zA-Z_0-9]+))", values) + if(matchsParams){ + analyzeParamsToObject(data, values) + } let tmp = analyzeParams(values) values = tmp[0] let funcType = tmp[1] diff --git a/src/gen/analyze/params.js b/src/gen/analyze/params.js index 937e062e97ea7a9b7cb4358fc50fe0c212ae7a3d..44bc3955b2a5e6e930cb717f865d8705bdf32ec1 100644 --- a/src/gen/analyze/params.js +++ b/src/gen/analyze/params.js @@ -16,6 +16,7 @@ const re = require("../tools/re"); const { checkOutBody } = require("../tools/tool"); const { FuncType } = require("../tools/common"); const { NapiLog } = require("../tools/NapiLog"); +const { analyzeClass } = require("./class"); /**函数参数解析 */ function analyzeParams(values) { @@ -26,8 +27,13 @@ function analyzeParams(values) { if (v == null) v = values values = values.substring(v.length, values.length) - let matchs = re.match("([a-zA-Z_0-9\\.]+)\\?*: *([a-zA-Z<,>_0-9\\[\\]\\(\\):='{}]+)", v) - if (matchs != null) { + let matchs = re.match("([a-zA-Z_0-9\\.]+)\\?*: *([a-zA-Z<>_0-9\\[\\]\\(\\):='{}]+)", v) + let matchsObject = re.match("([a-zA-Z_0-9\\.]+)\\?*:({([a-zA-Z_0-9,:\\.]+)})", v) + if (matchsObject) { + let type = re.getReg(v, [matchsObject.regs[1][1] + 1, matchsObject.regs[2][1]]) + result.push({ "name": re.getReg(v, matchsObject.regs[1]), "type": type }) + } + else if (matchs != null) { let type = re.getReg(v, matchs.regs[2]) result.push({ "name": re.getReg(v, matchs.regs[1]), "type": type }) if (type.indexOf("AsyncCallback") >= 0) @@ -43,6 +49,30 @@ function analyzeParams(values) { return [result, funcType] } +function analyzeParamsToObject(data, values) { + while (values.length > 0) { + let v = checkOutBody(values, 0, ["", ","]) + if (v == null) + v = values + values = values.substring(v.length, values.length) + let matchsObject = re.match("([a-zA-Z_0-9\\.]+)\\?*:({([a-zA-Z_0-9,:\\.]+)})", v) + if (matchsObject) { + let className = re.getReg(v, matchsObject.regs[1]) + let classBody = re.getReg(v, [matchsObject.regs[1][1] + 1, matchsObject.regs[2][1]]) + data.class.push({ + name: className, + body: analyzeClass(re.replaceAll(classBody.substring(1, classBody.length - 1), ",", ";")), + functiontType: 'params' + }) + } + else { + NapiLog.logError("参数列表解析失败"); + NapiLog.logError("analyzeParams error params:" + v); + } + } +} + module.exports = { - analyzeParams + analyzeParams, + analyzeParamsToObject } \ No newline at end of file diff --git a/src/gen/generate/param_generate.js b/src/gen/generate/param_generate.js index 5e384f5863c709bf668dd3b7f14d8bdc98dbbad5..f2ce2ececaa194437b03c70bc20e11cdf1dbc27f 100644 --- a/src/gen/generate/param_generate.js +++ b/src/gen/generate/param_generate.js @@ -447,7 +447,7 @@ function paramGenerate(p, name, type, param, data) { else if (isEnum(type, data)) { paramGenerateEnum(data, type, param, name, p) } - else if (type.substring(0, 4) == "Map<" || type.indexOf("{") == 0) { + else if (type.substring(0, 4) == "Map<" || type.indexOf("{[") == 0) { paramGenerateMap(type, param, p, name) } else {