diff --git a/ui2abc/libarkts/native/src/common.cc b/ui2abc/libarkts/native/src/common.cc index e8a2cf8680b32f002e965706792348a28619b101..4519645af8f5bb757e9e496acce4ee5dec07761c 100644 --- a/ui2abc/libarkts/native/src/common.cc +++ b/ui2abc/libarkts/native/src/common.cc @@ -375,12 +375,18 @@ struct Pattern { std::string key; std::string value; es2panda_Impl* impl; + bool isWildcard; + regex_t regex; Pattern(es2panda_Context* context, const std::string& part) : context(context), impl(GetImpl()) { std::istringstream stream(part); std::getline(stream, key, '='); std::getline(stream, value, '='); + isWildcard = value.find('*') != std::string::npos; + if (isWildcard) { + regcomp(®ex, value.c_str(), REG_NEWLINE); + } } bool match(es2panda_AstNode* node) { @@ -389,7 +395,6 @@ struct Pattern { switch (type) { case Es2pandaAstNodeType::AST_NODE_TYPE_METHOD_DEFINITION: case Es2pandaAstNodeType::AST_NODE_TYPE_SCRIPT_FUNCTION: - return value == "method"; case Es2pandaAstNodeType::AST_NODE_TYPE_STRUCT_DECLARATION: return value == "struct"; @@ -407,17 +412,23 @@ struct Pattern { result = impl->FunctionDeclarationAnnotations(context, function, &length); break; } - case Es2pandaAstNodeType::AST_NODE_TYPE_FUNCTION_DECLARATION: + case Es2pandaAstNodeType::AST_NODE_TYPE_FUNCTION_DECLARATION: { result = impl->FunctionDeclarationAnnotations(context, node, &length); break; + } case AST_NODE_TYPE_ARROW_FUNCTION_EXPRESSION: { auto function = impl->ArrowFunctionExpressionFunction(context, node); result = impl->FunctionDeclarationAnnotations(context, function, &length); break; } - case Es2pandaAstNodeType::AST_NODE_TYPE_CLASS_PROPERTY: + case Es2pandaAstNodeType::AST_NODE_TYPE_CLASS_PROPERTY: { result = impl->ClassPropertyAnnotations(context, node, &length); break; + } + case Es2pandaAstNodeType::AST_NODE_TYPE_ETS_PARAMETER_EXPRESSION: { + result = impl->ETSParameterExpressionAnnotations(context, node, &length); + break; + } default: return false; } @@ -434,12 +445,10 @@ struct Pattern { bool matchWildcard(const std::string& pattern, const char* value) { - if (pattern.find('*') == std::string::npos) { + if (!isWildcard) { return pattern == value; } - regex_t regex; regmatch_t match[1]; - regcomp(®ex, pattern.c_str(), REG_NEWLINE); return regexec(®ex, value, 1, match, 0) != REG_NOMATCH; } }; diff --git a/ui2abc/libarkts/src-host/es2panda.ts b/ui2abc/libarkts/src-host/es2panda.ts index 600e8aa9238f5d099b15b90f277f485e3fd69555..c7440f0d281dfea58305693ec34b80ee2ba3999c 100644 --- a/ui2abc/libarkts/src-host/es2panda.ts +++ b/ui2abc/libarkts/src-host/es2panda.ts @@ -101,7 +101,7 @@ function insertPlugin(pluginEntry: PluginEntry, state: Es2pandaContextState, dum const hooks = new DumpingHooks(state, pluginName, dumpAst); const pluginContext = new PluginContextImpl(); - if (true) { + if (false) { pluginContext.setProjectConfig({ bundleName: 'bundle', moduleName: 'module', diff --git a/ui2abc/memo-plugin-ng/package.json b/ui2abc/memo-plugin-ng/package.json index 7b2b70178d463b330dabae070ef746f234dfa409..9ac91aa526891014eb071023fee1902b06a78d50 100644 --- a/ui2abc/memo-plugin-ng/package.json +++ b/ui2abc/memo-plugin-ng/package.json @@ -8,7 +8,7 @@ "runtime:prepare": "npm run annotate --prefix ../../incremental/runtime && npm run build --prefix ../../incremental", "compile:libarkts": "npm run compile --prefix ../libarkts", "demo:clean": "npm run clean --prefix demo", - "demo:run:light": "npm run compile --prefix demo && npm run run --prefix demo", + "demo:run:light": "npm run clean --prefix demo && npm run compile --prefix demo && npm run run --prefix demo", "demo:run": "npm run compile:libarkts && npm run compile && npm run demo:run:light", "demo:disasm": "npm run disasm --prefix demo", "compile:deps:harness": "cd ../../incremental/harness && npm run compile && npm run build", diff --git a/ui2abc/memo-plugin-ng/src/analysis/AnalysisVisitor.ts b/ui2abc/memo-plugin-ng/src/analysis/AnalysisVisitor.ts index 26b9bd5dcc4dab546eb7d1e13254961490aa3d68..7bed9a3b290eee72485c9a0b89573230db9186c5 100644 --- a/ui2abc/memo-plugin-ng/src/analysis/AnalysisVisitor.ts +++ b/ui2abc/memo-plugin-ng/src/analysis/AnalysisVisitor.ts @@ -67,13 +67,20 @@ class AnalysisVisitor extends arkts.AbstractVisitor { useFilterNodes = false process(node: arkts.AstNode, options?: AnalysisVisitorOptions): arkts.AstNode { - if (this.useFilterNodes) { + if (arkts.isETSModule(node) && this.useFilterNodes) { + let isInteresting = false const memoNodes = arkts.filterNodes(node, "annotation=memo.*") const processNode = new Set() memoNodes.forEach(it => { - processNode.add(this.findProperParent(it) ?? it) + if (isInteresting) { + console.log(`we found ${it.dumpSrc()}`) + } + processNode.add(this.findProperParent(it)) }) processNode.forEach(it => { + if (isInteresting) { + console.log(`we process ${it.dumpSrc()}`) + } this.visitor(it) }) return node @@ -83,7 +90,7 @@ class AnalysisVisitor extends arkts.AbstractVisitor { } - private findProperParent(node: arkts.AstNode): arkts.AstNode | undefined { + private findProperParent(node: arkts.AstNode): arkts.AstNode { let current: arkts.AstNode | undefined = node while (current) { if (arkts.isClassDeclaration(current) || arkts.isTSInterfaceDeclaration(current) || arkts.isETSFunctionType(current)) { @@ -91,7 +98,7 @@ class AnalysisVisitor extends arkts.AbstractVisitor { } current = current.parent } - return undefined + return node } visitor(node: arkts.AstNode, options?: AnalysisVisitorOptions) { diff --git a/ui2abc/perf-tests/package.json b/ui2abc/perf-tests/package.json index b443c2e9633534efc6a925c9e3e6371c21b8ee07..0b3f2c7cd342d6df308021b8158a51bcba6bcc5c 100644 --- a/ui2abc/perf-tests/package.json +++ b/ui2abc/perf-tests/package.json @@ -8,6 +8,8 @@ "check:inc:separate": "node ../fast-arktsc --config ./ui2abcconfig.json --compiler ../../incremental/tools/panda/arkts/ui2abc --link-name ./build/out-recheck.abc && time ninja ${NINJA_OPTIONS} -f build/build.ninja", "check:inc": "node ../fast-arktsc --simultaneous --config ./ui2abcconfig.json --compiler ../../incremental/tools/panda/arkts/ui2abc --link-name ./build/out-recheck.abc && time ninja ${NINJA_OPTIONS} -f build/build.ninja", "check:separate": "npm run clean && npm run check:inc:separate", - "check": "npm run clean && npm run check:inc" + "check": "npm run clean && npm run check:inc", + "check:joint:inc": "node ../fast-arktsc --simultaneous --config ./ui2abcconfig-joint.json --compiler ../../incremental/tools/panda/arkts/ui2abc --link-name ./build/out.abc && time ninja ${NINJA_OPTIONS} -f build/build.ninja", + "check:joint": "npm run clean && npm run check:joint:inc" } } \ No newline at end of file diff --git a/ui2abc/perf-tests/ui2abcconfig-joint.json b/ui2abc/perf-tests/ui2abcconfig-joint.json new file mode 100644 index 0000000000000000000000000000000000000000..46c9961e0d44bcd73272ff795247702922d64536 --- /dev/null +++ b/ui2abc/perf-tests/ui2abcconfig-joint.json @@ -0,0 +1,69 @@ +{ + "compilerOptions": { + "package": "@ohos.arkui.perf-tests", + "outDir": "build", + "baseUrl": ".", + "paths": { + "arkui": ["../../arkoala-arkts/arkui/sdk/prepared"], + "@ohos.arkui.component": ["../../arkoala-arkts/arkui/@ohos.arkui.component"], + "global": ["../../arkoala-arkts/modules/global.resource/src"], + "global.resource": ["../../arkoala-arkts/modules/global.resource/src/resource"], + "@ohos.font": ["../../arkoala-arkts/modules/ohos/src/font"], + "@ohos.multimedia.image": ["../../arkoala-arkts/modules/ohos/src/multimedia.image"], + "@ohos.data.uniformTypeDescriptor": ["../../arkoala-arkts/modules/ohos/src/data.uniformTypeDescriptor"], + "@ohos.data.unifiedDataChannel": ["../../arkoala-arkts/modules/ohos/src/data.unifiedDataChannel"], + "@ohos.arkui.stateManagement": ["../../arkoala-arkts/arkui/@ohos.arkui.stateManagement"], + "@ohos.arkui.inspector": ["../../arkoala-arkts/arkui/@ohos.arkui.inspector"], + "@ohos.arkui.theme": ["../../arkoala-arkts/arkui/@ohos.arkui.theme"], + "@ohos.arkui.node": ["../../arkoala-arkts/arkui/@ohos.arkui.node"], + "@ohos.arkui.dragController": ["../../arkoala-arkts/arkui/@ohos.arkui.dragController"], + "@ohos.arkui.UIContext": ["../../arkoala-arkts/arkui/@ohos.arkui.UIContext"], + "@ohos.arkui": ["../../arkoala-arkts/arkui/@ohos.arkui"], + "@ohos.router": ["../../arkoala-arkts/arkui/@ohos.router"], + "@koalaui/builderLambda": ["../../arkoala-arkts/arkui/sdk/prepared/stateAnnotations"], + "@koalaui/interop": ["../../interop/src/arkts"], + "@koalaui/compat": [ "../../incremental/compat/src/arkts" ], + "#platform": [ "../../incremental/compat/src/arkts" ], + "@koalaui/common": [ "../../incremental/common/src" ], + "@koalaui/runtime": [ "../../incremental/runtime/ets" ], + "@koalaui/runtime/annotations": [ "../../incremental/runtime/annotations" ] + }, + "plugins": [ + { + "transform": "@ohos/arkui-plugins/ui-syntax", + "state": "parsed", + "name": "ui-syntax" + }, + { + "transform": "@ohos/arkui-plugins/ui", + "state": "parsed", + "name": "ui" + }, + { + "transform": "@ohos/arkui-plugins/ui-syntax", + "state": "checked", + "name": "ui-syntax" + }, + { + "transform": "@ohos/arkui-plugins/ui", + "state": "checked", + "name": "ui" + }, + { + "transform": "@ohos/arkui-plugins/memo", + "state": "checked", + "name": "memo" + } + ] + }, + "include": [ + "./src/stateVariables.ets" + ], + "exclude": [ + "./src/positionalMemoization.ets", + "./src/customComponents.ets", + "./src/manyImportsMain.ets", + "./src/manyImports/*.ets", + "./src/1.1/**/*.ets" + ] +}