diff --git a/arkoala-arkts/arkui/arktsconfig-pure-sts.json b/arkoala-arkts/arkui/arktsconfig-pure-sts.json index 52c609f78cac46ac855da487b123bb430f98654c..9d78ffcd259e3e31569a0b5f24f2335e940623df 100644 --- a/arkoala-arkts/arkui/arktsconfig-pure-sts.json +++ b/arkoala-arkts/arkui/arktsconfig-pure-sts.json @@ -2,7 +2,18 @@ "compilerOptions": { "package": "@ohos.arkui", "outDir": "build/sts/abc", - "baseUrl": "./src/sts" + "baseUrl": "./src/sts", + "paths": { + "@koalaui/runtime": [ + "../../../memo-plugin/runtime-api" + ] + }, + "plugins": [ + { + "transform": "@koalaui/memo-plugin", + "stage": "checked" + } + ] }, "files": [ "./src/sts/arkui.sts" diff --git a/arkoala-arkts/arkui/package.json b/arkoala-arkts/arkui/package.json index b09a5f0505e878a4166161b0217ba7de4b83e1d4..0674cb1082bf4fe60984ed11c110884e79c1b6e9 100644 --- a/arkoala-arkts/arkui/package.json +++ b/arkoala-arkts/arkui/package.json @@ -10,6 +10,6 @@ "build:arkui-no-common:inc": "npm run unmemoize && fast-arktsc --input-files ./arktsconfig-unmemoized.json --output-dir ./build --compiler ../../incremental/tools/panda/arkts/arktsc --link-name arkui-no-common && ninja ${NINJA_OPTIONS} -f build/build.ninja", "build:arkui-no-common": "npm run unmemoize && fast-arktsc --input-files ./arktsconfig-unmemoized.json --output-dir ./build --compiler ../../incremental/tools/panda/arkts/arktsc --link-name arkui-no-common && ninja ${NINJA_OPTIONS} -f build/build.ninja", "unmemoize": "ets-tsc -b ./tsconfig-unmemoize.json && cp -r ./src/generated/arkts ./build/unmemoized/src/generated", - "build:arkui:pure-sts": "mkdir -p build/sts/abc && ../../incremental/tools/panda/arkts/arktsc --arktsconfig arktsconfig-pure-sts.json" + "build:arkui:pure-sts": "mkdir -p build/sts/abc && ../../incremental/tools/panda/arkts/arktsc-capi --arktsconfig arktsconfig-pure-sts.json --file src/sts/arkui.sts --output build/sts/abc --dump-plugin-ast --restart-stages" } } diff --git a/arkoala-arkts/arkui/src/sts/arkui.sts b/arkoala-arkts/arkui/src/sts/arkui.sts index 58a5b1b1a086011f649f6d5a61032d2240641850..37d17fe33a7971deca1610340076d4127a54d0a9 100644 --- a/arkoala-arkts/arkui/src/sts/arkui.sts +++ b/arkoala-arkts/arkui/src/sts/arkui.sts @@ -11,35 +11,47 @@ export @interface State {} export @interface memo {} export abstract class StructBase { + @memo @BuilderLambda("instantiateImpl") static $_instantiate, OptionsS> ( factory: () => S, options?: OptionsS, - content?: () => void + @memo content?: () => void ): S { throw new Error("This method should only be called through a @BuilderLambda redirect") } + @memo static instantiateImpl, OptionsS>( - builder: ((instance: S)=>S)|undefined, + @memo builder: ((instance: S)=>S)|undefined, factory: () => S, options?: OptionsS, - content?: () => void + @memo content?: () => void ) { console.log("Struct instantiate redirected") const instance = factory() if (builder !== undefined) builder(instance) instance._build(builder, content, options) } + + @memo build() { throw new Error("The struct build() should never be executed directly") } - protected _build(style: ((instance: T)=>T)|undefined, content: (() => void)|undefined, options: OptionsT|undefined) { + @memo + protected _build( + @memo + style: ((instance: T)=>T)|undefined, + @memo + content: (() => void)|undefined, + options: OptionsT|undefined + ) { throw new Error("The struct _build() must have a valid override") } } +/* export enum Color { White, Red @@ -153,3 +165,4 @@ export class Text extends CommonMethod { return this } } +*/ diff --git a/arkoala-arkts/libarkts/arktsconfig.json b/arkoala-arkts/libarkts/arktsconfig.json index 85e9e51f6d825c201ca549ce35952deed24d1685..48dfefbf431bc50044e851e8aad77c37c91c1f7b 100644 --- a/arkoala-arkts/libarkts/arktsconfig.json +++ b/arkoala-arkts/libarkts/arktsconfig.json @@ -1,7 +1,13 @@ { "compilerOptions": { + "package0": "@koalaui/example", "outDir": "./abc", "baseUrl": ".", + "paths": { + "@koalaui/runtime": [ + "../memo-plugin/runtime-api" + ] + }, "plugins": [ { "transform": "./plugins/build/src/printer-plugin.js", @@ -11,11 +17,14 @@ "transform": "./plugins/build/src/parsed-stage-plugin.js", "stage": "parsed", "arkui": "../../../arkui/src/sts" - }, { "transform": "./plugins/build/src/checked-stage-plugin.js", "stage": "checked" + }, + { + "transform": "@koalaui/memo-plugin", + "stage": "checked" } ] } diff --git a/arkoala-arkts/libarkts/src/es2panda.ts b/arkoala-arkts/libarkts/src/es2panda.ts index 46ba9309be52164319da72f3f2df3933d8e0b2da..8410c3b99fb626961596fa74f8ac6670b6f94cb5 100644 --- a/arkoala-arkts/libarkts/src/es2panda.ts +++ b/arkoala-arkts/libarkts/src/es2panda.ts @@ -75,10 +75,12 @@ function insertPlugin(pluginsByState: Map", "_cctor_") -} + return filtered +} diff --git a/arkoala-arkts/package.json b/arkoala-arkts/package.json index ee2066012bc889a8045bbd7ff77c1a9f3ae9ae4b..effe48e80cdd74b4c5a5205ff14353e7c65ae810 100644 --- a/arkoala-arkts/package.json +++ b/arkoala-arkts/package.json @@ -4,6 +4,7 @@ "workspaces": [ "./arkui", "./libarkts", + "./memo-plugin", "./loader", "./har", "../arkoala/arkui-common", diff --git a/arkoala-arkts/trivial/user/arktsconfig-pure-sts.json b/arkoala-arkts/trivial/user/arktsconfig-pure-sts.json index 551fb7ed8776980bbc9bca07f17a1f373fae2bea..403d8fed36501eedf92d37806f368aa38baa6646 100644 --- a/arkoala-arkts/trivial/user/arktsconfig-pure-sts.json +++ b/arkoala-arkts/trivial/user/arktsconfig-pure-sts.json @@ -4,7 +4,10 @@ "outDir": "build/sts/abc", "baseUrl": ".", "paths": { - "@ohos.arkui": ["../../arkui/src/sts"] + "@ohos.arkui": ["../../arkui/src/sts"], + "@koalaui/runtime": [ + "../../memo-plugin/runtime-api" + ] }, "plugins": [ { @@ -19,6 +22,10 @@ { "transform": "@koalaui/libarkts/plugins/checked-stage-plugin", "stage": "checked" + }, + { + "transform": "@koalaui/memo-plugin", + "stage": "checked" } ] },