From bd2f7eef469fed0a0cec4a9725173e5655ece9a4 Mon Sep 17 00:00:00 2001 From: Igor Loginov Date: Fri, 7 Feb 2025 09:54:33 +0300 Subject: [PATCH 01/14] demo --- .../src/generated/Es2pandaNativeModule.ts | 4 ++-- .../demo/arktsconfig-unmemoized.json | 22 ++++++++++++++++++ .../memo-plugin/demo/arktsconfig.json | 23 +++++++++++++++++++ arkoala-arkts/memo-plugin/demo/foo.sts | 15 ++++++++++++ arkoala-arkts/memo-plugin/demo/foo.ts | 15 ++++++++++++ arkoala-arkts/memo-plugin/demo/package.json | 18 +++++++++++++++ arkoala-arkts/memo-plugin/demo/runtime.ts | 4 ++++ .../memo-plugin/demo/tsconfig-unmemoize.json | 17 ++++++++++++++ .../memo-plugin/runtime-api/index.sts | 10 ++++++++ .../memo-plugin/runtime-api/memo/entry.sts | 4 ++++ .../runtime-api/states/GlobalStateManager.sts | 5 ++++ .../memo-plugin/runtime-api/states/State.sts | 13 +++++++++++ 12 files changed, 148 insertions(+), 2 deletions(-) create mode 100644 arkoala-arkts/memo-plugin/demo/arktsconfig-unmemoized.json create mode 100644 arkoala-arkts/memo-plugin/demo/arktsconfig.json create mode 100644 arkoala-arkts/memo-plugin/demo/foo.sts create mode 100644 arkoala-arkts/memo-plugin/demo/foo.ts create mode 100644 arkoala-arkts/memo-plugin/demo/package.json create mode 100644 arkoala-arkts/memo-plugin/demo/runtime.ts create mode 100644 arkoala-arkts/memo-plugin/demo/tsconfig-unmemoize.json create mode 100644 arkoala-arkts/memo-plugin/runtime-api/index.sts create mode 100644 arkoala-arkts/memo-plugin/runtime-api/memo/entry.sts create mode 100644 arkoala-arkts/memo-plugin/runtime-api/states/GlobalStateManager.sts create mode 100644 arkoala-arkts/memo-plugin/runtime-api/states/State.sts diff --git a/arkoala-arkts/libarkts/src/generated/Es2pandaNativeModule.ts b/arkoala-arkts/libarkts/src/generated/Es2pandaNativeModule.ts index d0bd3c804..b15158853 100644 --- a/arkoala-arkts/libarkts/src/generated/Es2pandaNativeModule.ts +++ b/arkoala-arkts/libarkts/src/generated/Es2pandaNativeModule.ts @@ -2095,10 +2095,10 @@ export class Es2pandaNativeModule { _AnnotationUsageIrPropertiesPtrConst(context: KNativePointer, receiver: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _AnnotationUsageIrAddProperty(context: KNativePointer, receiver: KNativePointer, property: KNativePointer): void { + _AnnotationUsageIrAddProperty(context: KNativePointer, receiver: KNativePointer, property: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _AnnotationUsageIrSetProperties(context: KNativePointer, receiver: KNativePointer, properties: BigUint64Array, propertiesLen: KUInt): void { + _AnnotationUsageIrSetProperties(context: KNativePointer, receiver: KNativePointer, properties: BigUint64Array, propertiesLen: KUInt): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } _AnnotationUsageIrGetBaseNameConst(context: KNativePointer, receiver: KNativePointer): KNativePointer { diff --git a/arkoala-arkts/memo-plugin/demo/arktsconfig-unmemoized.json b/arkoala-arkts/memo-plugin/demo/arktsconfig-unmemoized.json new file mode 100644 index 000000000..561617515 --- /dev/null +++ b/arkoala-arkts/memo-plugin/demo/arktsconfig-unmemoized.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "package": "@koalaui/runtime", + "outDir": "build/abc", + "baseUrl": "build/unmemoized", + "paths": { + "@koalaui/compat": [ + "../../../../../incremental/compat/src/arkts" + ], + "@koalaui/common": [ + "../../../../../incremental/common/src" + ], + "@koalaui/runtime": [ + "../../../../../incremental/runtime/build/unmemoized/src" + ], + "@koalaui/interop": [ + "../../../../../interop/src/arkts" + ] + } + }, + "include": ["./build/unmemoized/runtime.ts"] +} diff --git a/arkoala-arkts/memo-plugin/demo/arktsconfig.json b/arkoala-arkts/memo-plugin/demo/arktsconfig.json new file mode 100644 index 000000000..6d1e6136a --- /dev/null +++ b/arkoala-arkts/memo-plugin/demo/arktsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "package": "@koalaui/runtime", + "outDir": "build/abc", + "baseUrl": ".", + "paths": { + "@koalaui/compat": [ + "../../../incremental/compat/src/arkts" + ], + "@koalaui/common": [ + "../../../incremental/common/src" + ], + "@koalaui/runtime": [ + "../runtime-api", + "../../../incremental/runtime/build/unmemoized/src" + ], + "@koalaui/interop": [ + "../../../interop/src/arkts" + ] + } + }, + "include": ["./foo.sts"] +} diff --git a/arkoala-arkts/memo-plugin/demo/foo.sts b/arkoala-arkts/memo-plugin/demo/foo.sts new file mode 100644 index 000000000..a320326d1 --- /dev/null +++ b/arkoala-arkts/memo-plugin/demo/foo.sts @@ -0,0 +1,15 @@ +import { GlobalStateManager, memoEntry, StateContext, memo, memo_foo } from "@koalaui/runtime" + +@memo +function foo_wrapper() { + // memo_foo("hello") +} + +function main() { + console.log("WHWH") + const manager = GlobalStateManager.instance + const state = manager.computableState((context: StateContext) => { + memoEntry(context, 0, foo_wrapper) + }) + state.value +} diff --git a/arkoala-arkts/memo-plugin/demo/foo.ts b/arkoala-arkts/memo-plugin/demo/foo.ts new file mode 100644 index 000000000..54756cc0e --- /dev/null +++ b/arkoala-arkts/memo-plugin/demo/foo.ts @@ -0,0 +1,15 @@ +import { GlobalStateManager, memoEntry, StateContext } from "@koalaui/runtime" +import { memo_foo } from "./runtime" + +/** @memo */ +function foo_wrapper() { + memo_foo("hello") +} + +function main() { + const manager = GlobalStateManager.instance + const state = manager.computableState((context: StateContext) => { + memoEntry(context, 0, foo_wrapper) + }) + state.value +} diff --git a/arkoala-arkts/memo-plugin/demo/package.json b/arkoala-arkts/memo-plugin/demo/package.json new file mode 100644 index 000000000..5797f4426 --- /dev/null +++ b/arkoala-arkts/memo-plugin/demo/package.json @@ -0,0 +1,18 @@ +{ + "name": "@koalaui/sts-memo-plugin", + "version": "", + "description": "", + "scripts": { + "clean": "rimraf build", + "unmemoize": "ets-tsc -p tsconfig-unmemoize.json", + "ts-like:compile": "npm run unmemoize && fast-arktsc --input-files ./arktsconfig-unmemoized.json --output-dir ./build --compiler ../../../incremental/tools/panda/arkts/arktsc --link-name runtime_stub && ninja ${NINJA_OPTIONS} -f build/build.ninja", + "arkts-like:compile": "../../../incremental/tools/panda/arkts/arktsc --arktsconfig ./arktsconfig.json --output ./build/foo.abc ./foo.sts", + "arkts-like:compile:capi": "../../../incremental/tools/panda/arkts/arktsc-capi --arktsconfig ./arktsconfig.json --output ./build/foo.abc --file ./foo.sts --dump-plugin-ast", + "run": "../../../incremental/tools/panda/node_modules/@panda/sdk/linux_host_tools/bin/ark --load-runtimes=ets --boot-panda-files=../../../incremental/tools/panda/node_modules/@panda/sdk/ets/etsstdlib.abc:../../../incremental/runtime/build/incremental.abc:build/runtime_stub.abc ./build/foo.abc @koalaui.runtime.foo.ETSGLOBAL::main", + "run:unmemoized": "npm run unmemoize && npm run ts-like:compile && ../../../incremental/tools/panda/node_modules/@panda/sdk/linux_host_tools/bin/ark --load-runtimes=ets --boot-panda-files=../../../incremental/tools/panda/node_modules/@panda/sdk/ets/etsstdlib.abc:../../../incremental/runtime/build/incremental.abc ./build/runtime_stub.abc @koalaui.runtime.foo.ETSGLOBAL::main" + }, + "devDependencies": { + "@koalaui/ets-tsc": "4.9.5-r4", + "@koalaui/fast-arktsc": "next" + } +} \ No newline at end of file diff --git a/arkoala-arkts/memo-plugin/demo/runtime.ts b/arkoala-arkts/memo-plugin/demo/runtime.ts new file mode 100644 index 000000000..6763c0867 --- /dev/null +++ b/arkoala-arkts/memo-plugin/demo/runtime.ts @@ -0,0 +1,4 @@ +/** @memo */ +export function memo_foo(arg0: string) { + console.log(`MEMO FUNCTION FOO CALLED`) +} diff --git a/arkoala-arkts/memo-plugin/demo/tsconfig-unmemoize.json b/arkoala-arkts/memo-plugin/demo/tsconfig-unmemoize.json new file mode 100644 index 000000000..b792e829b --- /dev/null +++ b/arkoala-arkts/memo-plugin/demo/tsconfig-unmemoize.json @@ -0,0 +1,17 @@ +{ + "extends": "@koalaui/build-common/tsconfig.json", + "compilerOptions": { + "outDir": "build/junk", + "rootDir" : "../..", + "module": "CommonJS", + "plugins": [ + { + "transform": "@koalaui/compiler-plugin/build/lib/src/koala-transformer.js", + "trace": false, + "only_unmemoize": true, + "unmemoizeDir": "build/unmemoized" + } + ] + }, + "include": ["./runtime.ts", "./foo.ts"] +} diff --git a/arkoala-arkts/memo-plugin/runtime-api/index.sts b/arkoala-arkts/memo-plugin/runtime-api/index.sts new file mode 100644 index 000000000..31acf1f6f --- /dev/null +++ b/arkoala-arkts/memo-plugin/runtime-api/index.sts @@ -0,0 +1,10 @@ +import { KoalaCallsiteKey } from "@koalaui/common" +import { StateContext } from "./states/State" + +export { memoEntry } from "./memo/entry" +export { GlobalStateManager } from "./states/GlobalStateManager" +export { StateManager, State, Disposable, ComputableState, StateContext } from "./states/State" + +export @interface memo {} + +@memo export declare function memo_foo(arg0: StateContext, arg1: KoalaCallsiteKey, arg2: String): void diff --git a/arkoala-arkts/memo-plugin/runtime-api/memo/entry.sts b/arkoala-arkts/memo-plugin/runtime-api/memo/entry.sts new file mode 100644 index 000000000..454a47720 --- /dev/null +++ b/arkoala-arkts/memo-plugin/runtime-api/memo/entry.sts @@ -0,0 +1,4 @@ +import { KoalaCallsiteKey } from "@koalaui/common" +import { StateContext } from "../states/State" + +export declare function memoEntry(__memo_context: StateContext, __memo_id: KoalaCallsiteKey, entry: (__memo_context: StateContext, __memo_id: KoalaCallsiteKey) => R): R diff --git a/arkoala-arkts/memo-plugin/runtime-api/states/GlobalStateManager.sts b/arkoala-arkts/memo-plugin/runtime-api/states/GlobalStateManager.sts new file mode 100644 index 000000000..bc62a8992 --- /dev/null +++ b/arkoala-arkts/memo-plugin/runtime-api/states/GlobalStateManager.sts @@ -0,0 +1,5 @@ +import { StateManager } from "./State" + +export declare class GlobalStateManager { + static get instance(): StateManager +} diff --git a/arkoala-arkts/memo-plugin/runtime-api/states/State.sts b/arkoala-arkts/memo-plugin/runtime-api/states/State.sts new file mode 100644 index 000000000..361be3850 --- /dev/null +++ b/arkoala-arkts/memo-plugin/runtime-api/states/State.sts @@ -0,0 +1,13 @@ +export declare interface StateManager extends StateContext { } +export declare interface State { + modified: boolean + value: Value +} +export interface Disposable { + disposed: boolean + dispose(): void +} +export declare interface ComputableState extends Disposable, State { } +export declare interface StateContext { + computableState(compute: (context: StateContext) => Value, cleanup?: (context: StateContext, value: Value | undefined) => void): ComputableState +} -- Gitee From d5ff6aea2a6b754f845513172c25487afc6b7321 Mon Sep 17 00:00:00 2001 From: Igor Loginov Date: Fri, 7 Feb 2025 16:44:53 +0300 Subject: [PATCH 02/14] more working demo --- arkoala-arkts/libarkts/package.json | 2 +- .../memo-plugin/demo/arktsconfig.json | 11 +++++++--- arkoala-arkts/memo-plugin/demo/foo.sts | 10 ++++++---- arkoala-arkts/memo-plugin/package.json | 8 ++++++++ .../memo-plugin/runtime-api/common.sts | 1 + .../memo-plugin/runtime-api/index.sts | 2 +- .../memo-plugin/runtime-api/memo/entry.sts | 2 +- .../memo-plugin/src/memo-transformer.ts | 20 +++++++++++++++++++ arkoala-arkts/memo-plugin/tsconfig.json | 12 +++++++++++ 9 files changed, 58 insertions(+), 10 deletions(-) create mode 100644 arkoala-arkts/memo-plugin/package.json create mode 100644 arkoala-arkts/memo-plugin/runtime-api/common.sts create mode 100644 arkoala-arkts/memo-plugin/src/memo-transformer.ts create mode 100644 arkoala-arkts/memo-plugin/tsconfig.json diff --git a/arkoala-arkts/libarkts/package.json b/arkoala-arkts/libarkts/package.json index c5edbbda6..bf250ec0d 100644 --- a/arkoala-arkts/libarkts/package.json +++ b/arkoala-arkts/libarkts/package.json @@ -5,7 +5,7 @@ "types": "./build/src/arkts-api/index.d.ts", "exports": { ".": "./build/src/arkts-api/index.js", - "./plugins/*": "./plugins/build/src/*.js" + "./plugins/src/*": "./plugins/build/src/*.js" }, "files": [ "./build/*" diff --git a/arkoala-arkts/memo-plugin/demo/arktsconfig.json b/arkoala-arkts/memo-plugin/demo/arktsconfig.json index 6d1e6136a..4812480ab 100644 --- a/arkoala-arkts/memo-plugin/demo/arktsconfig.json +++ b/arkoala-arkts/memo-plugin/demo/arktsconfig.json @@ -11,13 +11,18 @@ "../../../incremental/common/src" ], "@koalaui/runtime": [ - "../runtime-api", - "../../../incremental/runtime/build/unmemoized/src" + "../runtime-api" ], "@koalaui/interop": [ "../../../interop/src/arkts" ] - } + }, + "plugins": [ + { + "transform": "..", + "stage": "parsed" + } + ] }, "include": ["./foo.sts"] } diff --git a/arkoala-arkts/memo-plugin/demo/foo.sts b/arkoala-arkts/memo-plugin/demo/foo.sts index a320326d1..fa17c7559 100644 --- a/arkoala-arkts/memo-plugin/demo/foo.sts +++ b/arkoala-arkts/memo-plugin/demo/foo.sts @@ -2,14 +2,16 @@ import { GlobalStateManager, memoEntry, StateContext, memo, memo_foo } from "@ko @memo function foo_wrapper() { + console.log("wrapper called") // memo_foo("hello") } function main() { - console.log("WHWH") + console.log("start") const manager = GlobalStateManager.instance - const state = manager.computableState((context: StateContext) => { - memoEntry(context, 0, foo_wrapper) + const state = manager.computableState((context: StateContext): Int => { + memoEntry(context, 0, ETSGLOBAL.foo_wrapper) + return 20 }) - state.value + console.log(state.value) } diff --git a/arkoala-arkts/memo-plugin/package.json b/arkoala-arkts/memo-plugin/package.json new file mode 100644 index 000000000..e0c0cca8f --- /dev/null +++ b/arkoala-arkts/memo-plugin/package.json @@ -0,0 +1,8 @@ +{ + "name": "@koalaui/memo-plugin", + "main": "build/src/memo-transformer.js", + "scripts": { + "compile": "tsc -b .", + "demo:run": "npm run compile && npm run ts-like:compile --prefix demo && npm run arkts-like:compile:capi --prefix demo && npm run run --prefix demo" + } +} \ No newline at end of file diff --git a/arkoala-arkts/memo-plugin/runtime-api/common.sts b/arkoala-arkts/memo-plugin/runtime-api/common.sts new file mode 100644 index 000000000..f8a1d055d --- /dev/null +++ b/arkoala-arkts/memo-plugin/runtime-api/common.sts @@ -0,0 +1 @@ +export type KoalaCallsiteKey = int diff --git a/arkoala-arkts/memo-plugin/runtime-api/index.sts b/arkoala-arkts/memo-plugin/runtime-api/index.sts index 31acf1f6f..cdc064467 100644 --- a/arkoala-arkts/memo-plugin/runtime-api/index.sts +++ b/arkoala-arkts/memo-plugin/runtime-api/index.sts @@ -1,4 +1,4 @@ -import { KoalaCallsiteKey } from "@koalaui/common" +import { KoalaCallsiteKey } from "./common" import { StateContext } from "./states/State" export { memoEntry } from "./memo/entry" diff --git a/arkoala-arkts/memo-plugin/runtime-api/memo/entry.sts b/arkoala-arkts/memo-plugin/runtime-api/memo/entry.sts index 454a47720..0c7501465 100644 --- a/arkoala-arkts/memo-plugin/runtime-api/memo/entry.sts +++ b/arkoala-arkts/memo-plugin/runtime-api/memo/entry.sts @@ -1,4 +1,4 @@ -import { KoalaCallsiteKey } from "@koalaui/common" +import { KoalaCallsiteKey } from "../common" import { StateContext } from "../states/State" export declare function memoEntry(__memo_context: StateContext, __memo_id: KoalaCallsiteKey, entry: (__memo_context: StateContext, __memo_id: KoalaCallsiteKey) => R): R diff --git a/arkoala-arkts/memo-plugin/src/memo-transformer.ts b/arkoala-arkts/memo-plugin/src/memo-transformer.ts new file mode 100644 index 000000000..4ce88cf97 --- /dev/null +++ b/arkoala-arkts/memo-plugin/src/memo-transformer.ts @@ -0,0 +1,20 @@ +import * as arkts from "@koalaui/libarkts" +import { AbstractVisitor } from "@koalaui/libarkts/plugins/src/AbstractVisitor" + +export class MemoTransformer extends AbstractVisitor { + visitor(beforeChildren: arkts.AstNode): arkts.AstNode { + return beforeChildren + } +} + +export interface TransformerOptions { + trace?: boolean, +} + +export default function exampleTransformer( + userPluginOptions?: TransformerOptions +) { + return (node: arkts.EtsScript) => { + return node + } +} diff --git a/arkoala-arkts/memo-plugin/tsconfig.json b/arkoala-arkts/memo-plugin/tsconfig.json new file mode 100644 index 000000000..df0b19348 --- /dev/null +++ b/arkoala-arkts/memo-plugin/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "@koalaui/build-common/tsconfig.json", + "compilerOptions": { + "rootDir": ".", + "baseUrl": ".", + "outDir": "./build", + "module": "CommonJS" + }, + "include": [ + "./src/memo-transformer.ts", + ] +} -- Gitee From 1610005b82e9c3cef452d866905aea2cc0733013 Mon Sep 17 00:00:00 2001 From: Igor Loginov Date: Fri, 7 Feb 2025 17:01:01 +0300 Subject: [PATCH 03/14] ? --- arkoala-arkts/memo-plugin/src/memo-transformer.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/arkoala-arkts/memo-plugin/src/memo-transformer.ts b/arkoala-arkts/memo-plugin/src/memo-transformer.ts index 4ce88cf97..40661f7c2 100644 --- a/arkoala-arkts/memo-plugin/src/memo-transformer.ts +++ b/arkoala-arkts/memo-plugin/src/memo-transformer.ts @@ -2,8 +2,10 @@ import * as arkts from "@koalaui/libarkts" import { AbstractVisitor } from "@koalaui/libarkts/plugins/src/AbstractVisitor" export class MemoTransformer extends AbstractVisitor { - visitor(beforeChildren: arkts.AstNode): arkts.AstNode { - return beforeChildren + visitor(node: arkts.AstNode): arkts.AstNode { + console.log('>>> PLUGIN OUTPUT') + console.log(node.getChildren().length) + return node } } @@ -11,10 +13,10 @@ export interface TransformerOptions { trace?: boolean, } -export default function exampleTransformer( +export default function memoTransformer( userPluginOptions?: TransformerOptions ) { return (node: arkts.EtsScript) => { - return node + return new MemoTransformer().visitor(node) } } -- Gitee From 638a16d20e98b8df8e975c0de4b9f4819831a893 Mon Sep 17 00:00:00 2001 From: Igor Loginov Date: Thu, 13 Feb 2025 10:58:23 +0300 Subject: [PATCH 04/14] draft --- arkoala-arkts/libarkts/src/arkts-api/types.ts | 22 +++++++--- .../src/arkts-api/utilities/private.ts | 2 +- .../libarkts/src/arkts-api/visitor.ts | 23 ++++++++++ .../memo-plugin/demo/tsconfig-unmemoize.json | 2 +- arkoala-arkts/memo-plugin/package.json | 1 + .../memo-plugin/runtime-api/index.sts | 2 + .../memo-plugin/src/import-transformer.ts | 42 +++++++++++++++++++ .../memo-plugin/src/memo-detector.ts | 22 ++++++++++ .../memo-plugin/src/memo-transformer.ts | 16 +++---- arkoala-arkts/memo-plugin/src/utils.ts | 8 ++++ arkoala-arkts/memo-plugin/tsconfig.json | 2 +- 11 files changed, 123 insertions(+), 19 deletions(-) create mode 100644 arkoala-arkts/memo-plugin/src/import-transformer.ts create mode 100644 arkoala-arkts/memo-plugin/src/memo-detector.ts create mode 100644 arkoala-arkts/memo-plugin/src/utils.ts diff --git a/arkoala-arkts/libarkts/src/arkts-api/types.ts b/arkoala-arkts/libarkts/src/arkts-api/types.ts index a9bf80f46..f30ba0700 100644 --- a/arkoala-arkts/libarkts/src/arkts-api/types.ts +++ b/arkoala-arkts/libarkts/src/arkts-api/types.ts @@ -45,6 +45,7 @@ import { AstNode } from "./peers/AstNode" import { ArktsObject } from "./peers/ArktsObject" import { Config } from "./peers/Config" import { Context } from "./peers/Context" +import { factory } from "@koalaui/ets-tsc" export const arrayOfNullptr = new BigUint64Array([nullptr]) @@ -504,7 +505,7 @@ export class ScriptFunction extends AstNode { this.parameters = unpackNodeArray(global.generatedEs2panda._ScriptFunctionParams(global.context, this.peer)) this.typeParamsDecl = unpackNode(global.generatedEs2panda._ScriptFunctionTypeParams(global.context, this.peer)) this.body = unpackNode(global.generatedEs2panda._ScriptFunctionBody(global.context, this.peer)) - // this.signature = unpackNonNullableObject(FunctionSignature, nativeModule._ScriptFunctionSignature(global.context, this.peer)) + // this.signature = unpackNode(global.generatedEs2panda._ScriptFunctionSignature(global.context, this.peer)) // this.declare = global.generatedEs2panda._ScriptFunctionDeclareConst(global.context, this.peer) this.ident = unpackNode(global.generatedEs2panda._ScriptFunctionId(global.context, this.peer)) @@ -513,16 +514,21 @@ export class ScriptFunction extends AstNode { static create( body: AstNode | undefined, - signature: FunctionSignature, + signature: FunctionSignature | undefined, functionFlags: Es2pandaScriptFunctionFlags, modifierFlags: Es2pandaModifierFlags, declare: boolean, - ident: Identifier | undefined + ident: Identifier | undefined, + parameters?: ETSParameterExpression[], ): ScriptFunction { const peer = global.generatedEs2panda._CreateScriptFunction( global.context, passNode(body), - signature.peer, + signature?.peer ?? FunctionSignature.create( + undefined, + parameters!, + undefined + ).peer, functionFlags, modifierFlags ) @@ -568,7 +574,7 @@ export class ScriptFunction extends AstNode { return (this.modifiers & Es2pandaModifierFlags.MODIFIER_FLAGS_ASYNC) !== 0 } - readonly parameters: readonly ETSParameterExpression[] + readonly parameters: ETSParameterExpression[] readonly typeParamsDecl?: TSTypeParameterDeclaration readonly body?: BlockStatement // readonly signature: FunctionSignature @@ -1072,7 +1078,9 @@ export class EtsImportDeclaration extends AstNode { assertValidPeer(peer, Es2pandaAstNodeType.AST_NODE_TYPE_ETS_IMPORT_DECLARATION) super(peer) this.importSource = unpackNonNullableNode(global.generatedEs2panda._ETSImportDeclarationSourceConst(global.context, this.peer)) + this.importSpecifiers = unpackNodeArray(global.generatedEs2panda._ImportDeclarationSpecifiersConst(global.context, this.peer)) this.resolvedSource = unpackNonNullableNode(global.generatedEs2panda._ETSImportDeclarationResolvedSource(global.context, this.peer)) + this.importKind = global.generatedEs2panda._ImportDeclarationIsTypeKindConst(global.context, this.peer) this.hasDecl = global.generatedEs2panda._ETSImportDeclarationHasDeclConst(global.context, this.peer) } @@ -1091,13 +1099,15 @@ export class EtsImportDeclaration extends AstNode { ).peer, passNodeArray(specifiers), specifiers.length, - importKind + +importKind ) ) } readonly importSource: StringLiteral readonly resolvedSource: StringLiteral + readonly importSpecifiers: readonly ImportSpecifier[] + readonly importKind: Es2pandaImportKinds readonly hasDecl: boolean } diff --git a/arkoala-arkts/libarkts/src/arkts-api/utilities/private.ts b/arkoala-arkts/libarkts/src/arkts-api/utilities/private.ts index ea90f7282..c6ec7acdc 100644 --- a/arkoala-arkts/libarkts/src/arkts-api/utilities/private.ts +++ b/arkoala-arkts/libarkts/src/arkts-api/utilities/private.ts @@ -44,7 +44,7 @@ export function passNode(node: AstNode | undefined): KNativePointer { } // meaning unpackNonNullableNodeArray -export function unpackNodeArray(nodesPtr: KNativePointer): readonly T[] { +export function unpackNodeArray(nodesPtr: KNativePointer): T[] { if (nodesPtr === nullptr) { throwError('nodesPtr is NULLPTR (maybe you should use unpackNodeArray)') } diff --git a/arkoala-arkts/libarkts/src/arkts-api/visitor.ts b/arkoala-arkts/libarkts/src/arkts-api/visitor.ts index 7838dd0dd..af9e3606a 100644 --- a/arkoala-arkts/libarkts/src/arkts-api/visitor.ts +++ b/arkoala-arkts/libarkts/src/arkts-api/visitor.ts @@ -19,11 +19,13 @@ import { CallExpression, ClassDeclaration, ClassDefinition, + EtsImportDeclaration, EtsScript, ExpressionStatement, FunctionDeclaration, FunctionSignature, MethodDefinition, + ScriptFunction, StructDeclaration } from "./types" import { @@ -142,6 +144,27 @@ export function visitEachChild( false ) } + if (node instanceof ScriptFunction) { + return factory.updateScriptFunction( + node, + nodeVisitor(node.body, visitor), + nullptr, + node.scriptFunctionFlags, + Es2pandaModifierFlags.MODIFIER_FLAGS_NONE, + false, + nodeVisitor(node.ident, visitor), + nodesVisitor(node.parameters, visitor) + ) + } + if (node instanceof EtsImportDeclaration) { + return factory.updateImportDeclaration( + node, + nodeVisitor(node.importSource, visitor), + nodesVisitor(node.importSpecifiers, visitor), + node.importKind, + node.hasDecl + ) + } // TODO return node diff --git a/arkoala-arkts/memo-plugin/demo/tsconfig-unmemoize.json b/arkoala-arkts/memo-plugin/demo/tsconfig-unmemoize.json index b792e829b..f845c8ed1 100644 --- a/arkoala-arkts/memo-plugin/demo/tsconfig-unmemoize.json +++ b/arkoala-arkts/memo-plugin/demo/tsconfig-unmemoize.json @@ -2,7 +2,7 @@ "extends": "@koalaui/build-common/tsconfig.json", "compilerOptions": { "outDir": "build/junk", - "rootDir" : "../..", + "rootDir" : ".", "module": "CommonJS", "plugins": [ { diff --git a/arkoala-arkts/memo-plugin/package.json b/arkoala-arkts/memo-plugin/package.json index e0c0cca8f..a182312f3 100644 --- a/arkoala-arkts/memo-plugin/package.json +++ b/arkoala-arkts/memo-plugin/package.json @@ -3,6 +3,7 @@ "main": "build/src/memo-transformer.js", "scripts": { "compile": "tsc -b .", + "compile:libarkts": "npm run compile --prefix ../libarkts", "demo:run": "npm run compile && npm run ts-like:compile --prefix demo && npm run arkts-like:compile:capi --prefix demo && npm run run --prefix demo" } } \ No newline at end of file diff --git a/arkoala-arkts/memo-plugin/runtime-api/index.sts b/arkoala-arkts/memo-plugin/runtime-api/index.sts index cdc064467..b88625f32 100644 --- a/arkoala-arkts/memo-plugin/runtime-api/index.sts +++ b/arkoala-arkts/memo-plugin/runtime-api/index.sts @@ -6,5 +6,7 @@ export { GlobalStateManager } from "./states/GlobalStateManager" export { StateManager, State, Disposable, ComputableState, StateContext } from "./states/State" export @interface memo {} +export type __memo_context_type = StateContext +export type __memo_id_type = KoalaCallsiteKey @memo export declare function memo_foo(arg0: StateContext, arg1: KoalaCallsiteKey, arg2: String): void diff --git a/arkoala-arkts/memo-plugin/src/import-transformer.ts b/arkoala-arkts/memo-plugin/src/import-transformer.ts new file mode 100644 index 000000000..25a5928b7 --- /dev/null +++ b/arkoala-arkts/memo-plugin/src/import-transformer.ts @@ -0,0 +1,42 @@ +import * as arkts from "@koalaui/libarkts" +import { AbstractVisitor } from "@koalaui/libarkts/plugins/src/AbstractVisitor" +import { RuntimeNames } from "./utils" + +function createContextTypeImportSpecifier(): arkts.ImportSpecifier { + return arkts.factory.createImportSpecifier( + arkts.factory.createIdentifier(RuntimeNames.CONTEXT_TYPE), + arkts.factory.createIdentifier(RuntimeNames.CONTEXT_TYPE), + ) +} + +function createIdTypeImportSpecifier(): arkts.ImportSpecifier { + return arkts.factory.createImportSpecifier( + arkts.factory.createIdentifier(RuntimeNames.ID_TYPE), + arkts.factory.createIdentifier(RuntimeNames.ID_TYPE), + ) +} + +function createContextTypesImportDeclaration(importSource?: string): arkts.EtsImportDeclaration { + return arkts.factory.createImportDeclaration( + arkts.factory.createStringLiteral(importSource ?? RuntimeNames.CONTEXT_TYPE_DEFAULT_IMPORT), + [createContextTypeImportSpecifier(), createIdTypeImportSpecifier()], + arkts.Es2pandaImportKinds.IMPORT_KINDS_TYPE, + true, + ) +} + +export class ImportTransformer extends AbstractVisitor { + visitor(node: arkts.AstNode): arkts.AstNode { + if (node instanceof arkts.EtsScript) { + return arkts.factory.updateEtsScript( + node, + [ + ...node.getChildren().filter(it => it instanceof arkts.EtsImportDeclaration), + createContextTypesImportDeclaration(), + ...node.getChildren().filter(it => !(it instanceof arkts.EtsImportDeclaration)), + ] + ) + } + return node + } +} diff --git a/arkoala-arkts/memo-plugin/src/memo-detector.ts b/arkoala-arkts/memo-plugin/src/memo-detector.ts new file mode 100644 index 000000000..1f7dfaa0d --- /dev/null +++ b/arkoala-arkts/memo-plugin/src/memo-detector.ts @@ -0,0 +1,22 @@ +import * as arkts from "@koalaui/libarkts" +import { AbstractVisitor } from "@koalaui/libarkts/plugins/src/AbstractVisitor" +import { RuntimeNames } from "./utils" + +export function hasMemoAnnotation(node: arkts.FunctionDeclaration) { + return arkts.getAnnotations(node).findIndex((it) => { + if (it.expr instanceof arkts.Identifier) + return it.expr.name === RuntimeNames.ANNOTATION + }) +} + +export class MemoDetector extends AbstractVisitor { + visitor(node: arkts.AstNode): arkts.AstNode { + console.log(" ".repeat(this.indentation) + node.constructor.name) + if (node instanceof arkts.FunctionDeclaration) { + if (hasMemoAnnotation(node)) { + console.log(`FOUND MEMO FUNCTION DECLARATION !!!`) + } + } + return this.visitEachChild(node) + } +} diff --git a/arkoala-arkts/memo-plugin/src/memo-transformer.ts b/arkoala-arkts/memo-plugin/src/memo-transformer.ts index 40661f7c2..e6c6b1b20 100644 --- a/arkoala-arkts/memo-plugin/src/memo-transformer.ts +++ b/arkoala-arkts/memo-plugin/src/memo-transformer.ts @@ -1,13 +1,6 @@ import * as arkts from "@koalaui/libarkts" -import { AbstractVisitor } from "@koalaui/libarkts/plugins/src/AbstractVisitor" - -export class MemoTransformer extends AbstractVisitor { - visitor(node: arkts.AstNode): arkts.AstNode { - console.log('>>> PLUGIN OUTPUT') - console.log(node.getChildren().length) - return node - } -} +import { MemoDetector } from "./memo-detector" +import { ImportTransformer } from "./import-transformer" export interface TransformerOptions { trace?: boolean, @@ -17,6 +10,9 @@ export default function memoTransformer( userPluginOptions?: TransformerOptions ) { return (node: arkts.EtsScript) => { - return new MemoTransformer().visitor(node) + const memoDetector = new MemoDetector() + memoDetector.visitor(node) + const importTransformer = new ImportTransformer() + return importTransformer.visitor(node) } } diff --git a/arkoala-arkts/memo-plugin/src/utils.ts b/arkoala-arkts/memo-plugin/src/utils.ts new file mode 100644 index 000000000..5d240fce2 --- /dev/null +++ b/arkoala-arkts/memo-plugin/src/utils.ts @@ -0,0 +1,8 @@ +export enum RuntimeNames { + __CONTEXT = "__context", + __ID = "__id", + ANNOTATION = "memo", + CONTEXT_TYPE = "__memo_context_type", + CONTEXT_TYPE_DEFAULT_IMPORT = "@koalaui/runtime", + ID_TYPE = "__memo_id_type", +} diff --git a/arkoala-arkts/memo-plugin/tsconfig.json b/arkoala-arkts/memo-plugin/tsconfig.json index df0b19348..ef0efa64d 100644 --- a/arkoala-arkts/memo-plugin/tsconfig.json +++ b/arkoala-arkts/memo-plugin/tsconfig.json @@ -7,6 +7,6 @@ "module": "CommonJS" }, "include": [ - "./src/memo-transformer.ts", + "./src/**/*.ts", ] } -- Gitee From a49b33771fcd0dbea0eafae5cd0d8df41c14019e Mon Sep 17 00:00:00 2001 From: Igor Loginov Date: Thu, 13 Feb 2025 11:04:49 +0300 Subject: [PATCH 05/14] Minor fix --- arkoala-arkts/memo-plugin/src/memo-detector.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arkoala-arkts/memo-plugin/src/memo-detector.ts b/arkoala-arkts/memo-plugin/src/memo-detector.ts index 1f7dfaa0d..886f262e2 100644 --- a/arkoala-arkts/memo-plugin/src/memo-detector.ts +++ b/arkoala-arkts/memo-plugin/src/memo-detector.ts @@ -6,7 +6,7 @@ export function hasMemoAnnotation(node: arkts.FunctionDeclaration) { return arkts.getAnnotations(node).findIndex((it) => { if (it.expr instanceof arkts.Identifier) return it.expr.name === RuntimeNames.ANNOTATION - }) + }) !== -1 } export class MemoDetector extends AbstractVisitor { -- Gitee From ed31052e3d64779ed0a898456acb973da7cd90ec Mon Sep 17 00:00:00 2001 From: Igor Loginov Date: Thu, 13 Feb 2025 11:37:54 +0300 Subject: [PATCH 06/14] fixes --- arkoala-arkts/libarkts/package.json | 3 +- .../to-be-generated/MemberExpression.ts | 8 ++++ .../libarkts/src/arkts-api/visitor.ts | 11 +++++ .../memo-plugin/src/AbstractVisitor.ts | 41 +++++++++++++++++++ .../memo-plugin/src/import-transformer.ts | 17 +++++++- .../memo-plugin/src/memo-detector.ts | 24 ++++++++--- .../memo-plugin/src/memo-transformer.ts | 15 +++++++ arkoala-arkts/memo-plugin/src/utils.ts | 15 +++++++ 8 files changed, 126 insertions(+), 8 deletions(-) create mode 100644 arkoala-arkts/memo-plugin/src/AbstractVisitor.ts diff --git a/arkoala-arkts/libarkts/package.json b/arkoala-arkts/libarkts/package.json index bf250ec0d..a5f7fa871 100644 --- a/arkoala-arkts/libarkts/package.json +++ b/arkoala-arkts/libarkts/package.json @@ -4,8 +4,7 @@ "main": "./build/src/es2panda.js", "types": "./build/src/arkts-api/index.d.ts", "exports": { - ".": "./build/src/arkts-api/index.js", - "./plugins/src/*": "./plugins/build/src/*.js" + ".": "./build/src/arkts-api/index.js" }, "files": [ "./build/*" diff --git a/arkoala-arkts/libarkts/src/arkts-api/to-be-generated/MemberExpression.ts b/arkoala-arkts/libarkts/src/arkts-api/to-be-generated/MemberExpression.ts index 790405568..f760db27a 100644 --- a/arkoala-arkts/libarkts/src/arkts-api/to-be-generated/MemberExpression.ts +++ b/arkoala-arkts/libarkts/src/arkts-api/to-be-generated/MemberExpression.ts @@ -61,4 +61,12 @@ export class MemberExpression extends AstNode { get kind(): Es2pandaMemberExpressionKind { return global.generatedEs2panda._MemberExpressionKindConst(global.context, this.peer) } + + get computed(): boolean { + return global.generatedEs2panda._MemberExpressionIsComputedConst(global.context, this.peer) + } + + get optional(): boolean { + return false // todo: no corresponding method in es2panda + } } \ No newline at end of file diff --git a/arkoala-arkts/libarkts/src/arkts-api/visitor.ts b/arkoala-arkts/libarkts/src/arkts-api/visitor.ts index af9e3606a..7c32de722 100644 --- a/arkoala-arkts/libarkts/src/arkts-api/visitor.ts +++ b/arkoala-arkts/libarkts/src/arkts-api/visitor.ts @@ -35,6 +35,7 @@ import { } from "../generated/Es2pandaEnums" import { nullptr } from "@koalaui/interop" import { AstNode } from "./peers/AstNode" +import { MemberExpression } from "../reexport-for-generated" type Visitor = (node: AstNode) => AstNode @@ -165,6 +166,16 @@ export function visitEachChild( node.hasDecl ) } + if (node instanceof MemberExpression) { + return factory.updateMemberExpression( + node, + nodeVisitor(node.object, visitor), + nodeVisitor(node.property, visitor), + node.kind, + node.computed, + node.optional + ) + } // TODO return node diff --git a/arkoala-arkts/memo-plugin/src/AbstractVisitor.ts b/arkoala-arkts/memo-plugin/src/AbstractVisitor.ts new file mode 100644 index 000000000..98e9d12a3 --- /dev/null +++ b/arkoala-arkts/memo-plugin/src/AbstractVisitor.ts @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2022-2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import * as ts from "@koalaui/libarkts" + +export abstract class AbstractVisitor { + constructor( + ) {} + + indentation = 0 + + withIndentation(exec: () => T) { + this.indentation++ + const result = exec() + this.indentation-- + return result + } + + abstract visitor(node: ts.AstNode): ts.AstNode + + visitEachChild(node: ts.AstNode): ts.AstNode { + return this.withIndentation(() => + ts.visitEachChild( + node, + it => this.visitor(it) + ) + ) + } +} diff --git a/arkoala-arkts/memo-plugin/src/import-transformer.ts b/arkoala-arkts/memo-plugin/src/import-transformer.ts index 25a5928b7..d0b5b3d6f 100644 --- a/arkoala-arkts/memo-plugin/src/import-transformer.ts +++ b/arkoala-arkts/memo-plugin/src/import-transformer.ts @@ -1,5 +1,20 @@ +/* + * Copyright (c) 2022-2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + import * as arkts from "@koalaui/libarkts" -import { AbstractVisitor } from "@koalaui/libarkts/plugins/src/AbstractVisitor" +import { AbstractVisitor } from "./AbstractVisitor" import { RuntimeNames } from "./utils" function createContextTypeImportSpecifier(): arkts.ImportSpecifier { diff --git a/arkoala-arkts/memo-plugin/src/memo-detector.ts b/arkoala-arkts/memo-plugin/src/memo-detector.ts index 886f262e2..54dd55019 100644 --- a/arkoala-arkts/memo-plugin/src/memo-detector.ts +++ b/arkoala-arkts/memo-plugin/src/memo-detector.ts @@ -1,12 +1,26 @@ +/* + * Copyright (c) 2022-2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + import * as arkts from "@koalaui/libarkts" -import { AbstractVisitor } from "@koalaui/libarkts/plugins/src/AbstractVisitor" +import { AbstractVisitor } from "./AbstractVisitor" import { RuntimeNames } from "./utils" export function hasMemoAnnotation(node: arkts.FunctionDeclaration) { - return arkts.getAnnotations(node).findIndex((it) => { - if (it.expr instanceof arkts.Identifier) - return it.expr.name === RuntimeNames.ANNOTATION - }) !== -1 + return arkts.getAnnotations(node).find((it) => + arkts.isIdentifier(it.expr) && it.expr.name === RuntimeNames.ANNOTATION + ) !== undefined } export class MemoDetector extends AbstractVisitor { diff --git a/arkoala-arkts/memo-plugin/src/memo-transformer.ts b/arkoala-arkts/memo-plugin/src/memo-transformer.ts index e6c6b1b20..1975ec2be 100644 --- a/arkoala-arkts/memo-plugin/src/memo-transformer.ts +++ b/arkoala-arkts/memo-plugin/src/memo-transformer.ts @@ -1,3 +1,18 @@ +/* + * Copyright (c) 2022-2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + import * as arkts from "@koalaui/libarkts" import { MemoDetector } from "./memo-detector" import { ImportTransformer } from "./import-transformer" diff --git a/arkoala-arkts/memo-plugin/src/utils.ts b/arkoala-arkts/memo-plugin/src/utils.ts index 5d240fce2..86d5e9730 100644 --- a/arkoala-arkts/memo-plugin/src/utils.ts +++ b/arkoala-arkts/memo-plugin/src/utils.ts @@ -1,3 +1,18 @@ +/* + * Copyright (c) 2022-2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + export enum RuntimeNames { __CONTEXT = "__context", __ID = "__id", -- Gitee From 1062943259ef2d028da08d2edfcb5a7901fe7b5e Mon Sep 17 00:00:00 2001 From: Igor Loginov Date: Thu, 13 Feb 2025 11:39:44 +0300 Subject: [PATCH 07/14] find -> some --- arkoala-arkts/memo-plugin/src/memo-detector.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arkoala-arkts/memo-plugin/src/memo-detector.ts b/arkoala-arkts/memo-plugin/src/memo-detector.ts index 54dd55019..82fbed32f 100644 --- a/arkoala-arkts/memo-plugin/src/memo-detector.ts +++ b/arkoala-arkts/memo-plugin/src/memo-detector.ts @@ -18,9 +18,9 @@ import { AbstractVisitor } from "./AbstractVisitor" import { RuntimeNames } from "./utils" export function hasMemoAnnotation(node: arkts.FunctionDeclaration) { - return arkts.getAnnotations(node).find((it) => + return arkts.getAnnotations(node).some((it) => arkts.isIdentifier(it.expr) && it.expr.name === RuntimeNames.ANNOTATION - ) !== undefined + ) } export class MemoDetector extends AbstractVisitor { -- Gitee From fedfe7e781000d3abbd6ae579a334553c415900d Mon Sep 17 00:00:00 2001 From: Igor Loginov Date: Thu, 13 Feb 2025 12:40:19 +0300 Subject: [PATCH 08/14] regeneration for 17216 + bridges for signature --- arkoala-arkts/libarkts/native/src/bridges.cc | 18 ++++++++ .../libarkts/native/src/generated/bridges.cc | 46 ------------------- .../libarkts/src/Es2pandaNativeModule.ts | 7 +++ .../src/arkts-api/utilities/public.ts | 15 +++++- .../src/generated/Es2pandaNativeModule.ts | 17 +------ .../generated/peers/ETSDynamicFunctionType.ts | 5 +- .../src/generated/peers/FunctionDecl.ts | 5 +- .../src/generated/peers/InterfaceDecl.ts | 5 +- arkoala-arkts/memo-plugin/demo/foo.sts | 1 + .../memo-plugin/src/memo-detector.ts | 3 ++ 10 files changed, 50 insertions(+), 72 deletions(-) diff --git a/arkoala-arkts/libarkts/native/src/bridges.cc b/arkoala-arkts/libarkts/native/src/bridges.cc index d7d313b73..755f513fc 100644 --- a/arkoala-arkts/libarkts/native/src/bridges.cc +++ b/arkoala-arkts/libarkts/native/src/bridges.cc @@ -329,3 +329,21 @@ KNativePointer impl_CreateClassDefinition1(KNativePointer context, KNativePointe return result; } KOALA_INTEROP_6(CreateClassDefinition1, KNativePointer, KNativePointer, KNativePointer, KNativePointerArray, KUInt, KInt, KInt); + +KNativePointer impl_CallExpressionSignature(KNativePointer context, KNativePointer classInstance) +{ + const auto _context = reinterpret_cast(context); + const auto _classInstance = reinterpret_cast(classInstance); + const auto result = GetImpl()->CallExpressionSignature(_context, _classInstance); + return result; +} +KOALA_INTEROP_2(CallExpressionSignature, KNativePointer, KNativePointer, KNativePointer) + +KNativePointer impl_SignatureFunction(KNativePointer context, KNativePointer classInstance) +{ + const auto _context = reinterpret_cast(context); + const auto _classInstance = reinterpret_cast(classInstance); + const auto result = GetImpl()->SignatureFunction(_context, _classInstance); + return result; +} +KOALA_INTEROP_2(SignatureFunction, KNativePointer, KNativePointer, KNativePointer) diff --git a/arkoala-arkts/libarkts/native/src/generated/bridges.cc b/arkoala-arkts/libarkts/native/src/generated/bridges.cc index 2a17ab86d..b3ec818e1 100644 --- a/arkoala-arkts/libarkts/native/src/generated/bridges.cc +++ b/arkoala-arkts/libarkts/native/src/generated/bridges.cc @@ -5207,24 +5207,6 @@ KNativePointer impl_BinaryExpressionRight(KNativePointer context, KNativePointer } KOALA_INTEROP_2(BinaryExpressionRight, KNativePointer, KNativePointer, KNativePointer); -KNativePointer impl_BinaryExpressionResultConst(KNativePointer context, KNativePointer receiver) -{ - const auto _context = reinterpret_cast(context); - const auto _receiver = reinterpret_cast(receiver); - auto result = GetImpl()->BinaryExpressionResultConst(_context, _receiver); - return (void*)result; -} -KOALA_INTEROP_2(BinaryExpressionResultConst, KNativePointer, KNativePointer, KNativePointer); - -KNativePointer impl_BinaryExpressionResult(KNativePointer context, KNativePointer receiver) -{ - const auto _context = reinterpret_cast(context); - const auto _receiver = reinterpret_cast(receiver); - auto result = GetImpl()->BinaryExpressionResult(_context, _receiver); - return result; -} -KOALA_INTEROP_2(BinaryExpressionResult, KNativePointer, KNativePointer, KNativePointer); - KInt impl_BinaryExpressionOperatorTypeConst(KNativePointer context, KNativePointer receiver) { const auto _context = reinterpret_cast(context); @@ -5482,24 +5464,6 @@ void impl_AssignmentExpressionSetLeft(KNativePointer context, KNativePointer rec } KOALA_INTEROP_V3(AssignmentExpressionSetLeft, KNativePointer, KNativePointer, KNativePointer); -KNativePointer impl_AssignmentExpressionResultConst(KNativePointer context, KNativePointer receiver) -{ - const auto _context = reinterpret_cast(context); - const auto _receiver = reinterpret_cast(receiver); - auto result = GetImpl()->AssignmentExpressionResultConst(_context, _receiver); - return (void*)result; -} -KOALA_INTEROP_2(AssignmentExpressionResultConst, KNativePointer, KNativePointer, KNativePointer); - -KNativePointer impl_AssignmentExpressionResult(KNativePointer context, KNativePointer receiver) -{ - const auto _context = reinterpret_cast(context); - const auto _receiver = reinterpret_cast(receiver); - auto result = GetImpl()->AssignmentExpressionResult(_context, _receiver); - return result; -} -KOALA_INTEROP_2(AssignmentExpressionResult, KNativePointer, KNativePointer, KNativePointer); - KInt impl_AssignmentExpressionOperatorTypeConst(KNativePointer context, KNativePointer receiver) { const auto _context = reinterpret_cast(context); @@ -6642,16 +6606,6 @@ KNativePointer impl_AnnotationUsageIrPropertiesPtrConst(KNativePointer context, } KOALA_INTEROP_2(AnnotationUsageIrPropertiesPtrConst, KNativePointer, KNativePointer, KNativePointer); -void impl_AnnotationUsageIrAddProperty(KNativePointer context, KNativePointer receiver, KNativePointer property) -{ - const auto _context = reinterpret_cast(context); - const auto _receiver = reinterpret_cast(receiver); - const auto _property = reinterpret_cast(property); - GetImpl()->AnnotationUsageIrAddProperty(_context, _receiver, _property); - return ; -} -KOALA_INTEROP_V3(AnnotationUsageIrAddProperty, KNativePointer, KNativePointer, KNativePointer); - void impl_AnnotationUsageIrSetProperties(KNativePointer context, KNativePointer receiver, KNativePointerArray properties, KUInt propertiesLen) { const auto _context = reinterpret_cast(context); diff --git a/arkoala-arkts/libarkts/src/Es2pandaNativeModule.ts b/arkoala-arkts/libarkts/src/Es2pandaNativeModule.ts index 78b2555cd..acc64055f 100644 --- a/arkoala-arkts/libarkts/src/Es2pandaNativeModule.ts +++ b/arkoala-arkts/libarkts/src/Es2pandaNativeModule.ts @@ -541,6 +541,13 @@ export class Es2pandaNativeModule { _ScopeSetParent(context: KPtr, ast: KPtr, scope: KPtr): void { throw new Error("Not implemented") } + + _CallExpressionSignature(context: KPtr, classInstance: KPtr): KPtr { + throw new Error("Not implemented") + } + _SignatureFunction(context: KPtr, classInstance: KPtr): KPtr { + throw new Error("Not implemented") + } } export function initEs2panda(): Es2pandaNativeModule { diff --git a/arkoala-arkts/libarkts/src/arkts-api/utilities/public.ts b/arkoala-arkts/libarkts/src/arkts-api/utilities/public.ts index ec5c19bfa..8f0f9148e 100644 --- a/arkoala-arkts/libarkts/src/arkts-api/utilities/public.ts +++ b/arkoala-arkts/libarkts/src/arkts-api/utilities/public.ts @@ -16,11 +16,12 @@ import { global } from "../static/global" import { throwError } from "../../utils" import { KNativePointer, nullptr, withStringResult } from "@koalaui/interop" -import { AnnotationUsageIr } from "../types" +import { AnnotationUsageIr, FunctionSignature } from "../types" import { unpackNodeArray, unpackNonNullableNode } from "./private" import { isClassDefinition, isFunctionDeclaration, isScriptFunction } from "../factory/nodeTests" import { Es2pandaContextState } from "../../generated/Es2pandaEnums" import { AstNode } from "../peers/AstNode" +import { CallExpression } from "../../generated" export function proceedToState(state: Es2pandaContextState): void { if (state <= global.es2panda._ContextState(global.context)) { @@ -54,6 +55,18 @@ export function rebindSubtree(node: AstNode): void { } export function getDecl(node: AstNode): AstNode | undefined { + if (node instanceof CallExpression) { + const signature = global.es2panda._CallExpressionSignature(global.context, node.peer) + if (signature === nullptr) { + return undefined + } + const decl = global.es2panda._SignatureFunction(global.context, signature) + if (decl === nullptr) { + return undefined + } + return unpackNonNullableNode(decl) + } + let decl: KNativePointer = node.peer decl = global.es2panda._AstNodeVariableConst(global.context, decl) diff --git a/arkoala-arkts/libarkts/src/generated/Es2pandaNativeModule.ts b/arkoala-arkts/libarkts/src/generated/Es2pandaNativeModule.ts index b15158853..b02c2870a 100644 --- a/arkoala-arkts/libarkts/src/generated/Es2pandaNativeModule.ts +++ b/arkoala-arkts/libarkts/src/generated/Es2pandaNativeModule.ts @@ -1648,12 +1648,6 @@ export class Es2pandaNativeModule { _BinaryExpressionRight(context: KNativePointer, receiver: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _BinaryExpressionResultConst(context: KNativePointer, receiver: KNativePointer): KNativePointer { - throw new Error("This methods was not overloaded by native module initialization") - } - _BinaryExpressionResult(context: KNativePointer, receiver: KNativePointer): KNativePointer { - throw new Error("This methods was not overloaded by native module initialization") - } _BinaryExpressionOperatorTypeConst(context: KNativePointer, receiver: KNativePointer): KInt { throw new Error("This methods was not overloaded by native module initialization") } @@ -1735,12 +1729,6 @@ export class Es2pandaNativeModule { _AssignmentExpressionSetLeft(context: KNativePointer, receiver: KNativePointer, expr: KNativePointer): void { throw new Error("This methods was not overloaded by native module initialization") } - _AssignmentExpressionResultConst(context: KNativePointer, receiver: KNativePointer): KNativePointer { - throw new Error("This methods was not overloaded by native module initialization") - } - _AssignmentExpressionResult(context: KNativePointer, receiver: KNativePointer): KNativePointer { - throw new Error("This methods was not overloaded by native module initialization") - } _AssignmentExpressionOperatorTypeConst(context: KNativePointer, receiver: KNativePointer): KInt { throw new Error("This methods was not overloaded by native module initialization") } @@ -2095,10 +2083,7 @@ export class Es2pandaNativeModule { _AnnotationUsageIrPropertiesPtrConst(context: KNativePointer, receiver: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _AnnotationUsageIrAddProperty(context: KNativePointer, receiver: KNativePointer, property: KNativePointer): KNativePointer { - throw new Error("This methods was not overloaded by native module initialization") - } - _AnnotationUsageIrSetProperties(context: KNativePointer, receiver: KNativePointer, properties: BigUint64Array, propertiesLen: KUInt): KNativePointer { + _AnnotationUsageIrSetProperties(context: KNativePointer, receiver: KNativePointer, properties: BigUint64Array, propertiesLen: KUInt): void { throw new Error("This methods was not overloaded by native module initialization") } _AnnotationUsageIrGetBaseNameConst(context: KNativePointer, receiver: KNativePointer): KNativePointer { diff --git a/arkoala-arkts/libarkts/src/generated/peers/ETSDynamicFunctionType.ts b/arkoala-arkts/libarkts/src/generated/peers/ETSDynamicFunctionType.ts index 56fe11d77..435391037 100644 --- a/arkoala-arkts/libarkts/src/generated/peers/ETSDynamicFunctionType.ts +++ b/arkoala-arkts/libarkts/src/generated/peers/ETSDynamicFunctionType.ts @@ -16,7 +16,6 @@ import { global, passNode, - passNodeArray, unpackNonNullableNode, unpackNodeArray, assertValidPeer, @@ -27,8 +26,8 @@ import { import { ETSFunctionType } from "./ETSFunctionType" export abstract class ETSDynamicFunctionType extends ETSFunctionType { - constructor(pointer: KNativePointer) { - super(pointer) + constructor(peer: KNativePointer) { + super(peer) console.warn("Warning: stub node ETSDynamicFunctionType") } } diff --git a/arkoala-arkts/libarkts/src/generated/peers/FunctionDecl.ts b/arkoala-arkts/libarkts/src/generated/peers/FunctionDecl.ts index ca69f5c8f..7707c85a5 100644 --- a/arkoala-arkts/libarkts/src/generated/peers/FunctionDecl.ts +++ b/arkoala-arkts/libarkts/src/generated/peers/FunctionDecl.ts @@ -16,7 +16,6 @@ import { global, passNode, - passNodeArray, unpackNonNullableNode, unpackNodeArray, assertValidPeer, @@ -27,8 +26,8 @@ import { import { ScriptFunction } from "./ScriptFunction" export abstract class FunctionDecl extends ScriptFunction { - constructor(pointer: KNativePointer) { - super(pointer) + constructor(peer: KNativePointer) { + super(peer) console.warn("Warning: stub node FunctionDecl") } } diff --git a/arkoala-arkts/libarkts/src/generated/peers/InterfaceDecl.ts b/arkoala-arkts/libarkts/src/generated/peers/InterfaceDecl.ts index 6de644923..76c426e68 100644 --- a/arkoala-arkts/libarkts/src/generated/peers/InterfaceDecl.ts +++ b/arkoala-arkts/libarkts/src/generated/peers/InterfaceDecl.ts @@ -16,7 +16,6 @@ import { global, passNode, - passNodeArray, unpackNonNullableNode, unpackNodeArray, assertValidPeer, @@ -27,8 +26,8 @@ import { import { TSInterfaceDeclaration } from "./TSInterfaceDeclaration" export abstract class InterfaceDecl extends TSInterfaceDeclaration { - constructor(pointer: KNativePointer) { - super(pointer) + constructor(peer: KNativePointer) { + super(peer) console.warn("Warning: stub node InterfaceDecl") } } diff --git a/arkoala-arkts/memo-plugin/demo/foo.sts b/arkoala-arkts/memo-plugin/demo/foo.sts index fa17c7559..99190e12c 100644 --- a/arkoala-arkts/memo-plugin/demo/foo.sts +++ b/arkoala-arkts/memo-plugin/demo/foo.sts @@ -9,6 +9,7 @@ function foo_wrapper() { function main() { console.log("start") const manager = GlobalStateManager.instance + ETSGLOBAL.foo_wrapper() const state = manager.computableState((context: StateContext): Int => { memoEntry(context, 0, ETSGLOBAL.foo_wrapper) return 20 diff --git a/arkoala-arkts/memo-plugin/src/memo-detector.ts b/arkoala-arkts/memo-plugin/src/memo-detector.ts index 82fbed32f..27d6eeccd 100644 --- a/arkoala-arkts/memo-plugin/src/memo-detector.ts +++ b/arkoala-arkts/memo-plugin/src/memo-detector.ts @@ -31,6 +31,9 @@ export class MemoDetector extends AbstractVisitor { console.log(`FOUND MEMO FUNCTION DECLARATION !!!`) } } + if (node instanceof arkts.CallExpression) { + console.log(arkts.getDecl(node)) // undefined ? + } return this.visitEachChild(node) } } -- Gitee From 720fa2ec8b446edbfe127853c948d6b4fb013fca Mon Sep 17 00:00:00 2001 From: Igor Loginov Date: Thu, 13 Feb 2025 15:12:14 +0300 Subject: [PATCH 09/14] draft --- .../src/arkts-api/utilities/public.ts | 29 +++---------------- arkoala-arkts/memo-plugin/demo/foo.sts | 3 +- .../memo-plugin/src/memo-detector.ts | 2 +- 3 files changed, 6 insertions(+), 28 deletions(-) diff --git a/arkoala-arkts/libarkts/src/arkts-api/utilities/public.ts b/arkoala-arkts/libarkts/src/arkts-api/utilities/public.ts index 8f0f9148e..74cdc84d8 100644 --- a/arkoala-arkts/libarkts/src/arkts-api/utilities/public.ts +++ b/arkoala-arkts/libarkts/src/arkts-api/utilities/public.ts @@ -16,12 +16,12 @@ import { global } from "../static/global" import { throwError } from "../../utils" import { KNativePointer, nullptr, withStringResult } from "@koalaui/interop" -import { AnnotationUsageIr, FunctionSignature } from "../types" +import { AnnotationUsageIr } from "../types" import { unpackNodeArray, unpackNonNullableNode } from "./private" import { isClassDefinition, isFunctionDeclaration, isScriptFunction } from "../factory/nodeTests" import { Es2pandaContextState } from "../../generated/Es2pandaEnums" import { AstNode } from "../peers/AstNode" -import { CallExpression } from "../../generated" +import { Identifier } from "../types" export function proceedToState(state: Es2pandaContextState): void { if (state <= global.es2panda._ContextState(global.context)) { @@ -55,29 +55,8 @@ export function rebindSubtree(node: AstNode): void { } export function getDecl(node: AstNode): AstNode | undefined { - if (node instanceof CallExpression) { - const signature = global.es2panda._CallExpressionSignature(global.context, node.peer) - if (signature === nullptr) { - return undefined - } - const decl = global.es2panda._SignatureFunction(global.context, signature) - if (decl === nullptr) { - return undefined - } - return unpackNonNullableNode(decl) - } - - let decl: KNativePointer = node.peer - - decl = global.es2panda._AstNodeVariableConst(global.context, decl) - if (decl === nullptr) { - return undefined - } - decl = global.es2panda._VariableDeclaration(global.context, decl) - if (decl === nullptr) { - return undefined - } - decl = global.es2panda._DeclNode(global.context, decl) + console.log(node) + const decl = global.es2panda._DeclarationFromIdentifier(global.context, node.peer) if (decl === nullptr) { return undefined } diff --git a/arkoala-arkts/memo-plugin/demo/foo.sts b/arkoala-arkts/memo-plugin/demo/foo.sts index 99190e12c..916c4b67c 100644 --- a/arkoala-arkts/memo-plugin/demo/foo.sts +++ b/arkoala-arkts/memo-plugin/demo/foo.sts @@ -1,6 +1,6 @@ import { GlobalStateManager, memoEntry, StateContext, memo, memo_foo } from "@koalaui/runtime" -@memo +@memo function foo_wrapper() { console.log("wrapper called") // memo_foo("hello") @@ -9,7 +9,6 @@ function foo_wrapper() { function main() { console.log("start") const manager = GlobalStateManager.instance - ETSGLOBAL.foo_wrapper() const state = manager.computableState((context: StateContext): Int => { memoEntry(context, 0, ETSGLOBAL.foo_wrapper) return 20 diff --git a/arkoala-arkts/memo-plugin/src/memo-detector.ts b/arkoala-arkts/memo-plugin/src/memo-detector.ts index 27d6eeccd..132106d79 100644 --- a/arkoala-arkts/memo-plugin/src/memo-detector.ts +++ b/arkoala-arkts/memo-plugin/src/memo-detector.ts @@ -31,7 +31,7 @@ export class MemoDetector extends AbstractVisitor { console.log(`FOUND MEMO FUNCTION DECLARATION !!!`) } } - if (node instanceof arkts.CallExpression) { + if (node instanceof arkts.Identifier && node.parent instanceof arkts.CallExpression) { console.log(arkts.getDecl(node)) // undefined ? } return this.visitEachChild(node) -- Gitee From 7c6d7110e0d273f8fba1f6e7e0ec9daee43bf220 Mon Sep 17 00:00:00 2001 From: Igor Loginov Date: Thu, 13 Feb 2025 16:58:46 +0300 Subject: [PATCH 10/14] Attempt to detect @memo --- arkoala-arkts/libarkts/native/src/bridges.cc | 9 + .../libarkts/native/src/generated/bridges.cc | 292 +++++++++++------- .../libarkts/src/Es2pandaNativeModule.ts | 3 + arkoala-arkts/libarkts/src/arkts-api/types.ts | 2 +- .../src/arkts-api/utilities/public.ts | 8 +- .../src/generated/Es2pandaNativeModule.ts | 69 +++-- .../src/generated/peers/AnnotationUsage.ts | 15 +- .../src/generated/peers/ETSFunctionType.ts | 22 +- .../src/generated/peers/ETSUnionType.ts | 2 +- .../memo-plugin/demo/arktsconfig.json | 2 +- arkoala-arkts/memo-plugin/demo/foo.sts | 2 +- arkoala-arkts/memo-plugin/demo/runtime.ts | 3 +- .../memo-plugin/runtime-api/index.sts | 3 +- .../memo-plugin/src/memo-detector.ts | 15 +- 14 files changed, 265 insertions(+), 182 deletions(-) diff --git a/arkoala-arkts/libarkts/native/src/bridges.cc b/arkoala-arkts/libarkts/native/src/bridges.cc index 755f513fc..6f57ec068 100644 --- a/arkoala-arkts/libarkts/native/src/bridges.cc +++ b/arkoala-arkts/libarkts/native/src/bridges.cc @@ -347,3 +347,12 @@ KNativePointer impl_SignatureFunction(KNativePointer context, KNativePointer cla return result; } KOALA_INTEROP_2(SignatureFunction, KNativePointer, KNativePointer, KNativePointer) + +KNativePointer impl_DeclarationFromIdentifier(KNativePointer context, KNativePointer identifier) +{ + const auto _context = reinterpret_cast(context); + const auto _identifier = reinterpret_cast(identifier); + const auto result = GetImpl()->DeclarationFromIdentifier(_context, _identifier); + return result; +} +KOALA_INTEROP_2(DeclarationFromIdentifier, KNativePointer, KNativePointer, KNativePointer) diff --git a/arkoala-arkts/libarkts/native/src/generated/bridges.cc b/arkoala-arkts/libarkts/native/src/generated/bridges.cc index b3ec818e1..dfbc913d1 100644 --- a/arkoala-arkts/libarkts/native/src/generated/bridges.cc +++ b/arkoala-arkts/libarkts/native/src/generated/bridges.cc @@ -184,115 +184,149 @@ KNativePointer impl_UpdateETSFunctionTypeIr(KNativePointer context, KNativePoint } KOALA_INTEROP_4(UpdateETSFunctionTypeIr, KNativePointer, KNativePointer, KNativePointer, KNativePointer, KInt); -KNativePointer impl_ETSFunctionTypeIrTypeParamsConst(KNativePointer context, KNativePointer receiver) +KNativePointer impl_CreateETSFunctionType(KNativePointer context, KNativePointer signature, KInt funcFlags) +{ + const auto _context = reinterpret_cast(context); + const auto _signature = reinterpret_cast(signature); + const auto _funcFlags = static_cast(funcFlags); + //auto result = GetImpl()->CreateETSFunctionType(_context, _signature, _funcFlags); + //return result; + return nullptr; +} +KOALA_INTEROP_3(CreateETSFunctionType, KNativePointer, KNativePointer, KNativePointer, KInt); + +KNativePointer impl_UpdateETSFunctionType(KNativePointer context, KNativePointer original, KNativePointer signature, KInt funcFlags) +{ + const auto _context = reinterpret_cast(context); + const auto _original = reinterpret_cast(original); + const auto _signature = reinterpret_cast(signature); + const auto _funcFlags = static_cast(funcFlags); + //auto result = GetImpl()->UpdateETSFunctionType(_context, _original, _signature, _funcFlags); + //return result; + return nullptr; +} +KOALA_INTEROP_4(UpdateETSFunctionType, KNativePointer, KNativePointer, KNativePointer, KNativePointer, KInt); + +KNativePointer impl_ETSFunctionTypeTypeParamsConst(KNativePointer context, KNativePointer receiver) { const auto _context = reinterpret_cast(context); const auto _receiver = reinterpret_cast(receiver); - auto result = GetImpl()->ETSFunctionTypeIrTypeParamsConst(_context, _receiver); - return (void*)result; + //auto result = GetImpl()->ETSFunctionTypeTypeParamsConst(_context, _receiver); + //return (void*)result; + return nullptr; } -KOALA_INTEROP_2(ETSFunctionTypeIrTypeParamsConst, KNativePointer, KNativePointer, KNativePointer); +KOALA_INTEROP_2(ETSFunctionTypeTypeParamsConst, KNativePointer, KNativePointer, KNativePointer); -KNativePointer impl_ETSFunctionTypeIrTypeParams(KNativePointer context, KNativePointer receiver) +KNativePointer impl_ETSFunctionTypeTypeParams(KNativePointer context, KNativePointer receiver) { const auto _context = reinterpret_cast(context); const auto _receiver = reinterpret_cast(receiver); - auto result = GetImpl()->ETSFunctionTypeIrTypeParams(_context, _receiver); - return result; + //auto result = GetImpl()->ETSFunctionTypeTypeParams(_context, _receiver); + //return result; + return nullptr; } -KOALA_INTEROP_2(ETSFunctionTypeIrTypeParams, KNativePointer, KNativePointer, KNativePointer); +KOALA_INTEROP_2(ETSFunctionTypeTypeParams, KNativePointer, KNativePointer, KNativePointer); -KNativePointer impl_ETSFunctionTypeIrParamsConst(KNativePointer context, KNativePointer receiver) +KNativePointer impl_ETSFunctionTypeParamsConst(KNativePointer context, KNativePointer receiver) { const auto _context = reinterpret_cast(context); const auto _receiver = reinterpret_cast(receiver); std::size_t length; - auto result = GetImpl()->ETSFunctionTypeIrParamsConst(_context, _receiver, &length); - return (void*)new std::vector(result, result + length); + //auto result = GetImpl()->ETSFunctionTypeParamsConst(_context, _receiver, &length); + //return (void*)new std::vector(result, result + length); + return nullptr; } -KOALA_INTEROP_2(ETSFunctionTypeIrParamsConst, KNativePointer, KNativePointer, KNativePointer); +KOALA_INTEROP_2(ETSFunctionTypeParamsConst, KNativePointer, KNativePointer, KNativePointer); -KNativePointer impl_ETSFunctionTypeIrReturnTypeConst(KNativePointer context, KNativePointer receiver) +KNativePointer impl_ETSFunctionTypeReturnTypeConst(KNativePointer context, KNativePointer receiver) { const auto _context = reinterpret_cast(context); const auto _receiver = reinterpret_cast(receiver); - auto result = GetImpl()->ETSFunctionTypeIrReturnTypeConst(_context, _receiver); - return (void*)result; + //auto result = GetImpl()->ETSFunctionTypeReturnTypeConst(_context, _receiver); + //return (void*)result; + return nullptr; } -KOALA_INTEROP_2(ETSFunctionTypeIrReturnTypeConst, KNativePointer, KNativePointer, KNativePointer); +KOALA_INTEROP_2(ETSFunctionTypeReturnTypeConst, KNativePointer, KNativePointer, KNativePointer); -KNativePointer impl_ETSFunctionTypeIrReturnType(KNativePointer context, KNativePointer receiver) +KNativePointer impl_ETSFunctionTypeReturnType(KNativePointer context, KNativePointer receiver) { const auto _context = reinterpret_cast(context); const auto _receiver = reinterpret_cast(receiver); - auto result = GetImpl()->ETSFunctionTypeIrReturnType(_context, _receiver); - return result; + //auto result = GetImpl()->ETSFunctionTypeReturnType(_context, _receiver); + //return result; + return nullptr; } -KOALA_INTEROP_2(ETSFunctionTypeIrReturnType, KNativePointer, KNativePointer, KNativePointer); +KOALA_INTEROP_2(ETSFunctionTypeReturnType, KNativePointer, KNativePointer, KNativePointer); -KNativePointer impl_ETSFunctionTypeIrFunctionalInterface(KNativePointer context, KNativePointer receiver) +KNativePointer impl_ETSFunctionTypeFunctionalInterface(KNativePointer context, KNativePointer receiver) { const auto _context = reinterpret_cast(context); const auto _receiver = reinterpret_cast(receiver); - auto result = GetImpl()->ETSFunctionTypeIrFunctionalInterface(_context, _receiver); - return result; + //auto result = GetImpl()->ETSFunctionTypeFunctionalInterface(_context, _receiver); + //return result; + return nullptr; } -KOALA_INTEROP_2(ETSFunctionTypeIrFunctionalInterface, KNativePointer, KNativePointer, KNativePointer); +KOALA_INTEROP_2(ETSFunctionTypeFunctionalInterface, KNativePointer, KNativePointer, KNativePointer); -KNativePointer impl_ETSFunctionTypeIrFunctionalInterfaceConst(KNativePointer context, KNativePointer receiver) +KNativePointer impl_ETSFunctionTypeFunctionalInterfaceConst(KNativePointer context, KNativePointer receiver) { const auto _context = reinterpret_cast(context); const auto _receiver = reinterpret_cast(receiver); - auto result = GetImpl()->ETSFunctionTypeIrFunctionalInterfaceConst(_context, _receiver); - return (void*)result; + //auto result = GetImpl()->ETSFunctionTypeFunctionalInterfaceConst(_context, _receiver); + //return (void*)result; + return nullptr; } -KOALA_INTEROP_2(ETSFunctionTypeIrFunctionalInterfaceConst, KNativePointer, KNativePointer, KNativePointer); +KOALA_INTEROP_2(ETSFunctionTypeFunctionalInterfaceConst, KNativePointer, KNativePointer, KNativePointer); -void impl_ETSFunctionTypeIrSetFunctionalInterface(KNativePointer context, KNativePointer receiver, KNativePointer functionalInterface) +void impl_ETSFunctionTypeSetFunctionalInterface(KNativePointer context, KNativePointer receiver, KNativePointer functionalInterface) { const auto _context = reinterpret_cast(context); const auto _receiver = reinterpret_cast(receiver); const auto _functionalInterface = reinterpret_cast(functionalInterface); - GetImpl()->ETSFunctionTypeIrSetFunctionalInterface(_context, _receiver, _functionalInterface); + //GetImpl()->ETSFunctionTypeSetFunctionalInterface(_context, _receiver, _functionalInterface); return ; } -KOALA_INTEROP_V3(ETSFunctionTypeIrSetFunctionalInterface, KNativePointer, KNativePointer, KNativePointer); +KOALA_INTEROP_V3(ETSFunctionTypeSetFunctionalInterface, KNativePointer, KNativePointer, KNativePointer); -KInt impl_ETSFunctionTypeIrFlags(KNativePointer context, KNativePointer receiver) +KInt impl_ETSFunctionTypeFlags(KNativePointer context, KNativePointer receiver) { const auto _context = reinterpret_cast(context); const auto _receiver = reinterpret_cast(receiver); - auto result = GetImpl()->ETSFunctionTypeIrFlags(_context, _receiver); - return result; + //auto result = GetImpl()->ETSFunctionTypeFlags(_context, _receiver); + //return result; + return 0; } -KOALA_INTEROP_2(ETSFunctionTypeIrFlags, KInt, KNativePointer, KNativePointer); +KOALA_INTEROP_2(ETSFunctionTypeFlags, KInt, KNativePointer, KNativePointer); -KBoolean impl_ETSFunctionTypeIrIsThrowingConst(KNativePointer context, KNativePointer receiver) +KBoolean impl_ETSFunctionTypeIsThrowingConst(KNativePointer context, KNativePointer receiver) { const auto _context = reinterpret_cast(context); const auto _receiver = reinterpret_cast(receiver); - auto result = GetImpl()->ETSFunctionTypeIrIsThrowingConst(_context, _receiver); - return result; + //auto result = GetImpl()->ETSFunctionTypeIsThrowingConst(_context, _receiver); + //return result; + return false; } -KOALA_INTEROP_2(ETSFunctionTypeIrIsThrowingConst, KBoolean, KNativePointer, KNativePointer); +KOALA_INTEROP_2(ETSFunctionTypeIsThrowingConst, KBoolean, KNativePointer, KNativePointer); -KBoolean impl_ETSFunctionTypeIrIsRethrowingConst(KNativePointer context, KNativePointer receiver) +KBoolean impl_ETSFunctionTypeIsRethrowingConst(KNativePointer context, KNativePointer receiver) { const auto _context = reinterpret_cast(context); const auto _receiver = reinterpret_cast(receiver); - auto result = GetImpl()->ETSFunctionTypeIrIsRethrowingConst(_context, _receiver); - return result; + //auto result = GetImpl()->ETSFunctionTypeIsRethrowingConst(_context, _receiver); + //return result; + return false; } -KOALA_INTEROP_2(ETSFunctionTypeIrIsRethrowingConst, KBoolean, KNativePointer, KNativePointer); +KOALA_INTEROP_2(ETSFunctionTypeIsRethrowingConst, KBoolean, KNativePointer, KNativePointer); -KBoolean impl_ETSFunctionTypeIrIsExtensionFunctionConst(KNativePointer context, KNativePointer receiver) +KBoolean impl_ETSFunctionTypeIsExtensionFunctionConst(KNativePointer context, KNativePointer receiver) { const auto _context = reinterpret_cast(context); const auto _receiver = reinterpret_cast(receiver); - auto result = GetImpl()->ETSFunctionTypeIrIsExtensionFunctionConst(_context, _receiver); - return result; + //auto result = GetImpl()->ETSFunctionTypeIsExtensionFunctionConst(_context, _receiver); + //return result; + return false; } -KOALA_INTEROP_2(ETSFunctionTypeIrIsExtensionFunctionConst, KBoolean, KNativePointer, KNativePointer); +KOALA_INTEROP_2(ETSFunctionTypeIsExtensionFunctionConst, KBoolean, KNativePointer, KNativePointer); KNativePointer impl_CreateTSTypeOperator(KNativePointer context, KNativePointer type, KInt operatorType) { @@ -2218,15 +2252,39 @@ KNativePointer impl_UpdateETSUnionTypeIr(KNativePointer context, KNativePointer } KOALA_INTEROP_4(UpdateETSUnionTypeIr, KNativePointer, KNativePointer, KNativePointer, KNativePointerArray, KUInt); -KNativePointer impl_ETSUnionTypeIrTypesConst(KNativePointer context, KNativePointer receiver) +KNativePointer impl_CreateETSUnionType(KNativePointer context, KNativePointerArray types, KUInt typesLen) +{ + const auto _context = reinterpret_cast(context); + const auto _types = reinterpret_cast(types); + const auto _typesLen = static_cast(typesLen); + //auto result = GetImpl()->CreateETSUnionType(_context, _types, _typesLen); + //return result; + return nullptr; +} +KOALA_INTEROP_3(CreateETSUnionType, KNativePointer, KNativePointer, KNativePointerArray, KUInt); + +KNativePointer impl_UpdateETSUnionType(KNativePointer context, KNativePointer original, KNativePointerArray types, KUInt typesLen) +{ + const auto _context = reinterpret_cast(context); + const auto _original = reinterpret_cast(original); + const auto _types = reinterpret_cast(types); + const auto _typesLen = static_cast(typesLen); + //auto result = GetImpl()->UpdateETSUnionType(_context, _original, _types, _typesLen); + //return result; + return nullptr; +} +KOALA_INTEROP_4(UpdateETSUnionType, KNativePointer, KNativePointer, KNativePointer, KNativePointerArray, KUInt); + +KNativePointer impl_ETSUnionTypeTypesConst(KNativePointer context, KNativePointer receiver) { const auto _context = reinterpret_cast(context); const auto _receiver = reinterpret_cast(receiver); std::size_t length; - auto result = GetImpl()->ETSUnionTypeIrTypesConst(_context, _receiver, &length); - return (void*)new std::vector(result, result + length); + //auto result = GetImpl()->ETSUnionTypeTypesConst(_context, _receiver, &length); + //return (void*)new std::vector(result, result + length); + return nullptr; } -KOALA_INTEROP_2(ETSUnionTypeIrTypesConst, KNativePointer, KNativePointer, KNativePointer); +KOALA_INTEROP_2(ETSUnionTypeTypesConst, KNativePointer, KNativePointer, KNativePointer); KNativePointer impl_CreateTSPropertySignature(KNativePointer context, KNativePointer key, KNativePointer typeAnnotation, KBoolean computed, KBoolean optional_arg, KBoolean readonly_arg) { @@ -5207,6 +5265,24 @@ KNativePointer impl_BinaryExpressionRight(KNativePointer context, KNativePointer } KOALA_INTEROP_2(BinaryExpressionRight, KNativePointer, KNativePointer, KNativePointer); +KNativePointer impl_BinaryExpressionResultConst(KNativePointer context, KNativePointer receiver) +{ + const auto _context = reinterpret_cast(context); + const auto _receiver = reinterpret_cast(receiver); + auto result = GetImpl()->BinaryExpressionResultConst(_context, _receiver); + return (void*)result; +} +KOALA_INTEROP_2(BinaryExpressionResultConst, KNativePointer, KNativePointer, KNativePointer); + +KNativePointer impl_BinaryExpressionResult(KNativePointer context, KNativePointer receiver) +{ + const auto _context = reinterpret_cast(context); + const auto _receiver = reinterpret_cast(receiver); + auto result = GetImpl()->BinaryExpressionResult(_context, _receiver); + return result; +} +KOALA_INTEROP_2(BinaryExpressionResult, KNativePointer, KNativePointer, KNativePointer); + KInt impl_BinaryExpressionOperatorTypeConst(KNativePointer context, KNativePointer receiver) { const auto _context = reinterpret_cast(context); @@ -5464,6 +5540,24 @@ void impl_AssignmentExpressionSetLeft(KNativePointer context, KNativePointer rec } KOALA_INTEROP_V3(AssignmentExpressionSetLeft, KNativePointer, KNativePointer, KNativePointer); +KNativePointer impl_AssignmentExpressionResultConst(KNativePointer context, KNativePointer receiver) +{ + const auto _context = reinterpret_cast(context); + const auto _receiver = reinterpret_cast(receiver); + auto result = GetImpl()->AssignmentExpressionResultConst(_context, _receiver); + return (void*)result; +} +KOALA_INTEROP_2(AssignmentExpressionResultConst, KNativePointer, KNativePointer, KNativePointer); + +KNativePointer impl_AssignmentExpressionResult(KNativePointer context, KNativePointer receiver) +{ + const auto _context = reinterpret_cast(context); + const auto _receiver = reinterpret_cast(receiver); + auto result = GetImpl()->AssignmentExpressionResult(_context, _receiver); + return result; +} +KOALA_INTEROP_2(AssignmentExpressionResult, KNativePointer, KNativePointer, KNativePointer); + KInt impl_AssignmentExpressionOperatorTypeConst(KNativePointer context, KNativePointer receiver) { const auto _context = reinterpret_cast(context); @@ -6548,25 +6642,6 @@ KNativePointer impl_AnnotationDeclarationGetBaseNameConst(KNativePointer context } KOALA_INTEROP_2(AnnotationDeclarationGetBaseNameConst, KNativePointer, KNativePointer, KNativePointer); -KNativePointer impl_CreateAnnotationUsageIr(KNativePointer context, KNativePointer expr) -{ - const auto _context = reinterpret_cast(context); - const auto _expr = reinterpret_cast(expr); - auto result = GetImpl()->CreateAnnotationUsageIr(_context, _expr); - return result; -} -KOALA_INTEROP_2(CreateAnnotationUsageIr, KNativePointer, KNativePointer, KNativePointer); - -KNativePointer impl_UpdateAnnotationUsageIr(KNativePointer context, KNativePointer original, KNativePointer expr) -{ - const auto _context = reinterpret_cast(context); - const auto _original = reinterpret_cast(original); - const auto _expr = reinterpret_cast(expr); - auto result = GetImpl()->UpdateAnnotationUsageIr(_context, _original, _expr); - return result; -} -KOALA_INTEROP_3(UpdateAnnotationUsageIr, KNativePointer, KNativePointer, KNativePointer, KNativePointer); - KNativePointer impl_AnnotationUsageIrExpr(KNativePointer context, KNativePointer receiver) { const auto _context = reinterpret_cast(context); @@ -6576,15 +6651,16 @@ KNativePointer impl_AnnotationUsageIrExpr(KNativePointer context, KNativePointer } KOALA_INTEROP_2(AnnotationUsageIrExpr, KNativePointer, KNativePointer, KNativePointer); -KNativePointer impl_AnnotationUsageIrProperties(KNativePointer context, KNativePointer receiver) +KNativePointer impl_AnnotationUsageProperties(KNativePointer context, KNativePointer receiver) { const auto _context = reinterpret_cast(context); const auto _receiver = reinterpret_cast(receiver); std::size_t length; - auto result = GetImpl()->AnnotationUsageIrProperties(_context, _receiver, &length); - return new std::vector(result, result + length); + //auto result = GetImpl()->AnnotationUsageProperties(_context, _receiver, &length); + //return new std::vector(result, result + length); + return nullptr; } -KOALA_INTEROP_2(AnnotationUsageIrProperties, KNativePointer, KNativePointer, KNativePointer); +KOALA_INTEROP_2(AnnotationUsageProperties, KNativePointer, KNativePointer, KNativePointer); KNativePointer impl_AnnotationUsageIrPropertiesConst(KNativePointer context, KNativePointer receiver) { @@ -6596,35 +6672,47 @@ KNativePointer impl_AnnotationUsageIrPropertiesConst(KNativePointer context, KNa } KOALA_INTEROP_2(AnnotationUsageIrPropertiesConst, KNativePointer, KNativePointer, KNativePointer); -KNativePointer impl_AnnotationUsageIrPropertiesPtrConst(KNativePointer context, KNativePointer receiver) +KNativePointer impl_AnnotationUsagePropertiesPtrConst(KNativePointer context, KNativePointer receiver) { const auto _context = reinterpret_cast(context); const auto _receiver = reinterpret_cast(receiver); std::size_t length; - auto result = GetImpl()->AnnotationUsageIrPropertiesPtrConst(_context, _receiver, &length); - return (void*)new std::vector(result, result + length); + //auto result = GetImpl()->AnnotationUsagePropertiesPtrConst(_context, _receiver, &length); + //return (void*)new std::vector(result, result + length); + return nullptr; } -KOALA_INTEROP_2(AnnotationUsageIrPropertiesPtrConst, KNativePointer, KNativePointer, KNativePointer); +KOALA_INTEROP_2(AnnotationUsagePropertiesPtrConst, KNativePointer, KNativePointer, KNativePointer); -void impl_AnnotationUsageIrSetProperties(KNativePointer context, KNativePointer receiver, KNativePointerArray properties, KUInt propertiesLen) +void impl_AnnotationUsageAddProperty(KNativePointer context, KNativePointer receiver, KNativePointer property) +{ + const auto _context = reinterpret_cast(context); + const auto _receiver = reinterpret_cast(receiver); + const auto _property = reinterpret_cast(property); + //GetImpl()->AnnotationUsageAddProperty(_context, _receiver, _property); + return ; +} +KOALA_INTEROP_V3(AnnotationUsageAddProperty, KNativePointer, KNativePointer, KNativePointer); + +void impl_AnnotationUsageSetProperties(KNativePointer context, KNativePointer receiver, KNativePointerArray properties, KUInt propertiesLen) { const auto _context = reinterpret_cast(context); const auto _receiver = reinterpret_cast(receiver); const auto _properties = reinterpret_cast(properties); const auto _propertiesLen = static_cast(propertiesLen); - GetImpl()->AnnotationUsageIrSetProperties(_context, _receiver, _properties, _propertiesLen); + //GetImpl()->AnnotationUsageSetProperties(_context, _receiver, _properties, _propertiesLen); return ; } -KOALA_INTEROP_V4(AnnotationUsageIrSetProperties, KNativePointer, KNativePointer, KNativePointerArray, KUInt); +KOALA_INTEROP_V4(AnnotationUsageSetProperties, KNativePointer, KNativePointer, KNativePointerArray, KUInt); -KNativePointer impl_AnnotationUsageIrGetBaseNameConst(KNativePointer context, KNativePointer receiver) +KNativePointer impl_AnnotationUsageGetBaseNameConst(KNativePointer context, KNativePointer receiver) { const auto _context = reinterpret_cast(context); const auto _receiver = reinterpret_cast(receiver); - auto result = GetImpl()->AnnotationUsageIrGetBaseNameConst(_context, _receiver); - return (void*)result; + //auto result = GetImpl()->AnnotationUsageGetBaseNameConst(_context, _receiver); + //return (void*)result; + return nullptr; } -KOALA_INTEROP_2(AnnotationUsageIrGetBaseNameConst, KNativePointer, KNativePointer, KNativePointer); +KOALA_INTEROP_2(AnnotationUsageGetBaseNameConst, KNativePointer, KNativePointer, KNativePointer); KNativePointer impl_CreateEmptyStatement(KNativePointer context) { @@ -9485,40 +9573,6 @@ KNativePointer impl_ImportExpressionSourceConst(KNativePointer context, KNativeP } KOALA_INTEROP_2(ImportExpressionSourceConst, KNativePointer, KNativePointer, KNativePointer); -KNativePointer impl_CreateETSNullTypeIr(KNativePointer context) -{ - const auto _context = reinterpret_cast(context); - auto result = GetImpl()->CreateETSNullTypeIr(_context); - return result; -} -KOALA_INTEROP_1(CreateETSNullTypeIr, KNativePointer, KNativePointer); - -KNativePointer impl_UpdateETSNullTypeIr(KNativePointer context, KNativePointer original) -{ - const auto _context = reinterpret_cast(context); - const auto _original = reinterpret_cast(original); - auto result = GetImpl()->UpdateETSNullTypeIr(_context, _original); - return result; -} -KOALA_INTEROP_2(UpdateETSNullTypeIr, KNativePointer, KNativePointer, KNativePointer); - -KNativePointer impl_CreateETSUndefinedTypeIr(KNativePointer context) -{ - const auto _context = reinterpret_cast(context); - auto result = GetImpl()->CreateETSUndefinedTypeIr(_context); - return result; -} -KOALA_INTEROP_1(CreateETSUndefinedTypeIr, KNativePointer, KNativePointer); - -KNativePointer impl_UpdateETSUndefinedTypeIr(KNativePointer context, KNativePointer original) -{ - const auto _context = reinterpret_cast(context); - const auto _original = reinterpret_cast(original); - auto result = GetImpl()->UpdateETSUndefinedTypeIr(_context, _original); - return result; -} -KOALA_INTEROP_2(UpdateETSUndefinedTypeIr, KNativePointer, KNativePointer, KNativePointer); - KNativePointer impl_CreateTypeofExpression(KNativePointer context, KNativePointer argument) { const auto _context = reinterpret_cast(context); diff --git a/arkoala-arkts/libarkts/src/Es2pandaNativeModule.ts b/arkoala-arkts/libarkts/src/Es2pandaNativeModule.ts index acc64055f..e62809f69 100644 --- a/arkoala-arkts/libarkts/src/Es2pandaNativeModule.ts +++ b/arkoala-arkts/libarkts/src/Es2pandaNativeModule.ts @@ -548,6 +548,9 @@ export class Es2pandaNativeModule { _SignatureFunction(context: KPtr, classInstance: KPtr): KPtr { throw new Error("Not implemented") } + _DeclarationFromIdentifier(context: KPtr, identifier: KPtr): KPtr { + throw new Error("Not implemented") + } } export function initEs2panda(): Es2pandaNativeModule { diff --git a/arkoala-arkts/libarkts/src/arkts-api/types.ts b/arkoala-arkts/libarkts/src/arkts-api/types.ts index f30ba0700..eb646292d 100644 --- a/arkoala-arkts/libarkts/src/arkts-api/types.ts +++ b/arkoala-arkts/libarkts/src/arkts-api/types.ts @@ -334,7 +334,7 @@ export class ETSUnionType extends AstNode { constructor(peer: KPtr) { assertValidPeer(peer, Es2pandaAstNodeType.AST_NODE_TYPE_ETS_UNION_TYPE) super(peer) - this.types = unpackNodeArray(global.generatedEs2panda._ETSUnionTypeIrTypesConst(global.context, this.peer)) + this.types = unpackNodeArray(global.generatedEs2panda._ETSUnionTypeTypesConst(global.context, this.peer)) } static create( diff --git a/arkoala-arkts/libarkts/src/arkts-api/utilities/public.ts b/arkoala-arkts/libarkts/src/arkts-api/utilities/public.ts index 74cdc84d8..24563c15e 100644 --- a/arkoala-arkts/libarkts/src/arkts-api/utilities/public.ts +++ b/arkoala-arkts/libarkts/src/arkts-api/utilities/public.ts @@ -16,8 +16,8 @@ import { global } from "../static/global" import { throwError } from "../../utils" import { KNativePointer, nullptr, withStringResult } from "@koalaui/interop" -import { AnnotationUsageIr } from "../types" -import { unpackNodeArray, unpackNonNullableNode } from "./private" +import { AnnotationUsageIr, MethodDefinition } from "../types" +import { passNode, unpackNodeArray, unpackNonNullableNode } from "./private" import { isClassDefinition, isFunctionDeclaration, isScriptFunction } from "../factory/nodeTests" import { Es2pandaContextState } from "../../generated/Es2pandaEnums" import { AstNode } from "../peers/AstNode" @@ -55,8 +55,8 @@ export function rebindSubtree(node: AstNode): void { } export function getDecl(node: AstNode): AstNode | undefined { - console.log(node) - const decl = global.es2panda._DeclarationFromIdentifier(global.context, node.peer) + const decl = global.es2panda._DeclarationFromIdentifier(global.context, passNode(node)) + console.log(decl) if (decl === nullptr) { return undefined } diff --git a/arkoala-arkts/libarkts/src/generated/Es2pandaNativeModule.ts b/arkoala-arkts/libarkts/src/generated/Es2pandaNativeModule.ts index b02c2870a..11ffc2dc0 100644 --- a/arkoala-arkts/libarkts/src/generated/Es2pandaNativeModule.ts +++ b/arkoala-arkts/libarkts/src/generated/Es2pandaNativeModule.ts @@ -73,46 +73,46 @@ export class Es2pandaNativeModule { _UpdateTSVoidKeyword(context: KNativePointer, original: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _CreateETSFunctionTypeIr(context: KNativePointer, signature: KNativePointer, funcFlags: KInt): KNativePointer { + _CreateETSFunctionType(context: KNativePointer, signature: KNativePointer, funcFlags: KInt): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _UpdateETSFunctionTypeIr(context: KNativePointer, original: KNativePointer, signature: KNativePointer, funcFlags: KInt): KNativePointer { + _UpdateETSFunctionType(context: KNativePointer, original: KNativePointer, signature: KNativePointer, funcFlags: KInt): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _ETSFunctionTypeIrTypeParamsConst(context: KNativePointer, receiver: KNativePointer): KNativePointer { + _ETSFunctionTypeTypeParamsConst(context: KNativePointer, receiver: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _ETSFunctionTypeIrTypeParams(context: KNativePointer, receiver: KNativePointer): KNativePointer { + _ETSFunctionTypeTypeParams(context: KNativePointer, receiver: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _ETSFunctionTypeIrParamsConst(context: KNativePointer, receiver: KNativePointer): KNativePointer { + _ETSFunctionTypeParamsConst(context: KNativePointer, receiver: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _ETSFunctionTypeIrReturnTypeConst(context: KNativePointer, receiver: KNativePointer): KNativePointer { + _ETSFunctionTypeReturnTypeConst(context: KNativePointer, receiver: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _ETSFunctionTypeIrReturnType(context: KNativePointer, receiver: KNativePointer): KNativePointer { + _ETSFunctionTypeReturnType(context: KNativePointer, receiver: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _ETSFunctionTypeIrFunctionalInterface(context: KNativePointer, receiver: KNativePointer): KNativePointer { + _ETSFunctionTypeFunctionalInterface(context: KNativePointer, receiver: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _ETSFunctionTypeIrFunctionalInterfaceConst(context: KNativePointer, receiver: KNativePointer): KNativePointer { + _ETSFunctionTypeFunctionalInterfaceConst(context: KNativePointer, receiver: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _ETSFunctionTypeIrSetFunctionalInterface(context: KNativePointer, receiver: KNativePointer, functionalInterface: KNativePointer): void { + _ETSFunctionTypeSetFunctionalInterface(context: KNativePointer, receiver: KNativePointer, functionalInterface: KNativePointer): void { throw new Error("This methods was not overloaded by native module initialization") } - _ETSFunctionTypeIrFlags(context: KNativePointer, receiver: KNativePointer): KInt { + _ETSFunctionTypeFlags(context: KNativePointer, receiver: KNativePointer): KInt { throw new Error("This methods was not overloaded by native module initialization") } - _ETSFunctionTypeIrIsThrowingConst(context: KNativePointer, receiver: KNativePointer): KBoolean { + _ETSFunctionTypeIsThrowingConst(context: KNativePointer, receiver: KNativePointer): KBoolean { throw new Error("This methods was not overloaded by native module initialization") } - _ETSFunctionTypeIrIsRethrowingConst(context: KNativePointer, receiver: KNativePointer): KBoolean { + _ETSFunctionTypeIsRethrowingConst(context: KNativePointer, receiver: KNativePointer): KBoolean { throw new Error("This methods was not overloaded by native module initialization") } - _ETSFunctionTypeIrIsExtensionFunctionConst(context: KNativePointer, receiver: KNativePointer): KBoolean { + _ETSFunctionTypeIsExtensionFunctionConst(context: KNativePointer, receiver: KNativePointer): KBoolean { throw new Error("This methods was not overloaded by native module initialization") } _CreateTSTypeOperator(context: KNativePointer, type: KNativePointer, operatorType: KInt): KNativePointer { @@ -703,13 +703,13 @@ export class Es2pandaNativeModule { _UpdateTSObjectKeyword(context: KNativePointer, original: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _CreateETSUnionTypeIr(context: KNativePointer, types: BigUint64Array, typesLen: KUInt): KNativePointer { + _CreateETSUnionType(context: KNativePointer, types: BigUint64Array, typesLen: KUInt): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _UpdateETSUnionTypeIr(context: KNativePointer, original: KNativePointer, types: BigUint64Array, typesLen: KUInt): KNativePointer { + _UpdateETSUnionType(context: KNativePointer, original: KNativePointer, types: BigUint64Array, typesLen: KUInt): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _ETSUnionTypeIrTypesConst(context: KNativePointer, receiver: KNativePointer): KNativePointer { + _ETSUnionTypeTypesConst(context: KNativePointer, receiver: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } _CreateTSPropertySignature(context: KNativePointer, key: KNativePointer, typeAnnotation: KNativePointer, computed: KBoolean, optional_arg: KBoolean, readonly_arg: KBoolean): KNativePointer { @@ -1648,6 +1648,12 @@ export class Es2pandaNativeModule { _BinaryExpressionRight(context: KNativePointer, receiver: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } + _BinaryExpressionResultConst(context: KNativePointer, receiver: KNativePointer): KNativePointer { + throw new Error("This methods was not overloaded by native module initialization") + } + _BinaryExpressionResult(context: KNativePointer, receiver: KNativePointer): KNativePointer { + throw new Error("This methods was not overloaded by native module initialization") + } _BinaryExpressionOperatorTypeConst(context: KNativePointer, receiver: KNativePointer): KInt { throw new Error("This methods was not overloaded by native module initialization") } @@ -1729,6 +1735,12 @@ export class Es2pandaNativeModule { _AssignmentExpressionSetLeft(context: KNativePointer, receiver: KNativePointer, expr: KNativePointer): void { throw new Error("This methods was not overloaded by native module initialization") } + _AssignmentExpressionResultConst(context: KNativePointer, receiver: KNativePointer): KNativePointer { + throw new Error("This methods was not overloaded by native module initialization") + } + _AssignmentExpressionResult(context: KNativePointer, receiver: KNativePointer): KNativePointer { + throw new Error("This methods was not overloaded by native module initialization") + } _AssignmentExpressionOperatorTypeConst(context: KNativePointer, receiver: KNativePointer): KInt { throw new Error("This methods was not overloaded by native module initialization") } @@ -2065,28 +2077,31 @@ export class Es2pandaNativeModule { _AnnotationDeclarationGetBaseNameConst(context: KNativePointer, receiver: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _CreateAnnotationUsageIr(context: KNativePointer, expr: KNativePointer): KNativePointer { + _CreateAnnotationUsage(context: KNativePointer, expr: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _UpdateAnnotationUsageIr(context: KNativePointer, original: KNativePointer, expr: KNativePointer): KNativePointer { + _UpdateAnnotationUsage(context: KNativePointer, original: KNativePointer, expr: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } _AnnotationUsageIrExpr(context: KNativePointer, receiver: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _AnnotationUsageIrProperties(context: KNativePointer, receiver: KNativePointer): KNativePointer { + _AnnotationUsageProperties(context: KNativePointer, receiver: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } _AnnotationUsageIrPropertiesConst(context: KNativePointer, receiver: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _AnnotationUsageIrPropertiesPtrConst(context: KNativePointer, receiver: KNativePointer): KNativePointer { + _AnnotationUsagePropertiesPtrConst(context: KNativePointer, receiver: KNativePointer): KNativePointer { + throw new Error("This methods was not overloaded by native module initialization") + } + _AnnotationUsageAddProperty(context: KNativePointer, receiver: KNativePointer, property: KNativePointer): void { throw new Error("This methods was not overloaded by native module initialization") } - _AnnotationUsageIrSetProperties(context: KNativePointer, receiver: KNativePointer, properties: BigUint64Array, propertiesLen: KUInt): void { + _AnnotationUsageSetProperties(context: KNativePointer, receiver: KNativePointer, properties: BigUint64Array, propertiesLen: KUInt): void { throw new Error("This methods was not overloaded by native module initialization") } - _AnnotationUsageIrGetBaseNameConst(context: KNativePointer, receiver: KNativePointer): KNativePointer { + _AnnotationUsageGetBaseNameConst(context: KNativePointer, receiver: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } _CreateEmptyStatement(context: KNativePointer): KNativePointer { @@ -2980,16 +2995,16 @@ export class Es2pandaNativeModule { _ImportExpressionSourceConst(context: KNativePointer, receiver: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _CreateETSNullTypeIr(context: KNativePointer): KNativePointer { + _CreateETSNullType(context: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _UpdateETSNullTypeIr(context: KNativePointer, original: KNativePointer): KNativePointer { + _UpdateETSNullType(context: KNativePointer, original: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _CreateETSUndefinedTypeIr(context: KNativePointer): KNativePointer { + _CreateETSUndefinedType(context: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _UpdateETSUndefinedTypeIr(context: KNativePointer, original: KNativePointer): KNativePointer { + _UpdateETSUndefinedType(context: KNativePointer, original: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } _CreateTypeofExpression(context: KNativePointer, argument: KNativePointer): KNativePointer { diff --git a/arkoala-arkts/libarkts/src/generated/peers/AnnotationUsage.ts b/arkoala-arkts/libarkts/src/generated/peers/AnnotationUsage.ts index a5daeeb65..0e61053c8 100644 --- a/arkoala-arkts/libarkts/src/generated/peers/AnnotationUsage.ts +++ b/arkoala-arkts/libarkts/src/generated/peers/AnnotationUsage.ts @@ -33,21 +33,18 @@ export class AnnotationUsage extends Statement { super(pointer) console.warn("Warning: stub node AnnotationUsage") } - createAnnotationUsage(expr: Expression): AnnotationUsage { - return new AnnotationUsage(global.generatedEs2panda._CreateAnnotationUsageIr(global.context, passNode(expr))) - } get expr(): Expression { return unpackNonNullableNode(global.generatedEs2panda._AnnotationUsageIrExpr(global.context, this.peer)) } - get properties(): readonly AstNode[] { - return unpackNodeArray(global.generatedEs2panda._AnnotationUsageIrProperties(global.context, this.peer)) - } + //get properties(): readonly AstNode[] { + // return unpackNodeArray(global.generatedEs2panda._AnnotationUsageProperties(global.context, this.peer)) + //} get propertiesConst(): readonly AstNode[] { return unpackNodeArray(global.generatedEs2panda._AnnotationUsageIrPropertiesConst(global.context, this.peer)) } - get propertiesPtrConst(): readonly AstNode[] { - return unpackNodeArray(global.generatedEs2panda._AnnotationUsageIrPropertiesPtrConst(global.context, this.peer)) - } + //get propertiesPtrConst(): readonly AstNode[] { + // return unpackNodeArray(global.generatedEs2panda._AnnotationUsagePropertiesPtrConst(global.context, this.peer)) + //} } export function isAnnotationUsage(node: AstNode): node is AnnotationUsage { return node instanceof AnnotationUsage diff --git a/arkoala-arkts/libarkts/src/generated/peers/ETSFunctionType.ts b/arkoala-arkts/libarkts/src/generated/peers/ETSFunctionType.ts index d8fe47ad8..1594f6367 100644 --- a/arkoala-arkts/libarkts/src/generated/peers/ETSFunctionType.ts +++ b/arkoala-arkts/libarkts/src/generated/peers/ETSFunctionType.ts @@ -37,37 +37,37 @@ export class ETSFunctionType extends TypeNode { console.warn("Warning: stub node ETSFunctionType") } get typeParamsConst(): TSTypeParameterDeclaration { - return unpackNonNullableNode(global.generatedEs2panda._ETSFunctionTypeIrTypeParamsConst(global.context, this.peer)) + return unpackNonNullableNode(global.generatedEs2panda._ETSFunctionTypeTypeParamsConst(global.context, this.peer)) } get typeParams(): TSTypeParameterDeclaration { - return unpackNonNullableNode(global.generatedEs2panda._ETSFunctionTypeIrTypeParams(global.context, this.peer)) + return unpackNonNullableNode(global.generatedEs2panda._ETSFunctionTypeTypeParams(global.context, this.peer)) } get paramsConst(): readonly Expression[] { - return unpackNodeArray(global.generatedEs2panda._ETSFunctionTypeIrParamsConst(global.context, this.peer)) + return unpackNodeArray(global.generatedEs2panda._ETSFunctionTypeParamsConst(global.context, this.peer)) } get returnTypeConst(): TypeNode { - return unpackNonNullableNode(global.generatedEs2panda._ETSFunctionTypeIrReturnTypeConst(global.context, this.peer)) + return unpackNonNullableNode(global.generatedEs2panda._ETSFunctionTypeReturnTypeConst(global.context, this.peer)) } get returnType(): TypeNode { - return unpackNonNullableNode(global.generatedEs2panda._ETSFunctionTypeIrReturnType(global.context, this.peer)) + return unpackNonNullableNode(global.generatedEs2panda._ETSFunctionTypeReturnType(global.context, this.peer)) } get functionalInterface(): TSInterfaceDeclaration { - return unpackNonNullableNode(global.generatedEs2panda._ETSFunctionTypeIrFunctionalInterface(global.context, this.peer)) + return unpackNonNullableNode(global.generatedEs2panda._ETSFunctionTypeFunctionalInterface(global.context, this.peer)) } get functionalInterfaceConst(): TSInterfaceDeclaration { - return unpackNonNullableNode(global.generatedEs2panda._ETSFunctionTypeIrFunctionalInterfaceConst(global.context, this.peer)) + return unpackNonNullableNode(global.generatedEs2panda._ETSFunctionTypeFunctionalInterfaceConst(global.context, this.peer)) } get flags(): Es2pandaScriptFunctionFlags { - return global.generatedEs2panda._ETSFunctionTypeIrFlags(global.context, this.peer) + return global.generatedEs2panda._ETSFunctionTypeFlags(global.context, this.peer) } get isThrowingConst(): boolean { - return global.generatedEs2panda._ETSFunctionTypeIrIsThrowingConst(global.context, this.peer) + return global.generatedEs2panda._ETSFunctionTypeIsThrowingConst(global.context, this.peer) } get isRethrowingConst(): boolean { - return global.generatedEs2panda._ETSFunctionTypeIrIsRethrowingConst(global.context, this.peer) + return global.generatedEs2panda._ETSFunctionTypeIsRethrowingConst(global.context, this.peer) } get isExtensionFunctionConst(): boolean { - return global.generatedEs2panda._ETSFunctionTypeIrIsExtensionFunctionConst(global.context, this.peer) + return global.generatedEs2panda._ETSFunctionTypeIsExtensionFunctionConst(global.context, this.peer) } } export function isETSFunctionType(node: AstNode): node is ETSFunctionType { diff --git a/arkoala-arkts/libarkts/src/generated/peers/ETSUnionType.ts b/arkoala-arkts/libarkts/src/generated/peers/ETSUnionType.ts index 25fea681f..46eff5cb3 100644 --- a/arkoala-arkts/libarkts/src/generated/peers/ETSUnionType.ts +++ b/arkoala-arkts/libarkts/src/generated/peers/ETSUnionType.ts @@ -33,7 +33,7 @@ export class ETSUnionType extends TypeNode { console.warn("Warning: stub node ETSUnionType") } get typesConst(): readonly TypeNode[] { - return unpackNodeArray(global.generatedEs2panda._ETSUnionTypeIrTypesConst(global.context, this.peer)) + return unpackNodeArray(global.generatedEs2panda._ETSUnionTypeTypesConst(global.context, this.peer)) } } export function isETSUnionType(node: AstNode): node is ETSUnionType { diff --git a/arkoala-arkts/memo-plugin/demo/arktsconfig.json b/arkoala-arkts/memo-plugin/demo/arktsconfig.json index 4812480ab..1cf397048 100644 --- a/arkoala-arkts/memo-plugin/demo/arktsconfig.json +++ b/arkoala-arkts/memo-plugin/demo/arktsconfig.json @@ -20,7 +20,7 @@ "plugins": [ { "transform": "..", - "stage": "parsed" + "stage": "checked" } ] }, diff --git a/arkoala-arkts/memo-plugin/demo/foo.sts b/arkoala-arkts/memo-plugin/demo/foo.sts index 916c4b67c..35df073ad 100644 --- a/arkoala-arkts/memo-plugin/demo/foo.sts +++ b/arkoala-arkts/memo-plugin/demo/foo.sts @@ -3,7 +3,7 @@ import { GlobalStateManager, memoEntry, StateContext, memo, memo_foo } from "@ko @memo function foo_wrapper() { console.log("wrapper called") - // memo_foo("hello") + memo_foo("hello") } function main() { diff --git a/arkoala-arkts/memo-plugin/demo/runtime.ts b/arkoala-arkts/memo-plugin/demo/runtime.ts index 6763c0867..db0ff874e 100644 --- a/arkoala-arkts/memo-plugin/demo/runtime.ts +++ b/arkoala-arkts/memo-plugin/demo/runtime.ts @@ -1,4 +1,5 @@ -/** @memo */ +// No real unmemoization for now +// /** @ memo */ export function memo_foo(arg0: string) { console.log(`MEMO FUNCTION FOO CALLED`) } diff --git a/arkoala-arkts/memo-plugin/runtime-api/index.sts b/arkoala-arkts/memo-plugin/runtime-api/index.sts index b88625f32..e23055ecf 100644 --- a/arkoala-arkts/memo-plugin/runtime-api/index.sts +++ b/arkoala-arkts/memo-plugin/runtime-api/index.sts @@ -9,4 +9,5 @@ export @interface memo {} export type __memo_context_type = StateContext export type __memo_id_type = KoalaCallsiteKey -@memo export declare function memo_foo(arg0: StateContext, arg1: KoalaCallsiteKey, arg2: String): void +//@memo export declare function memo_foo(arg0: StateContext, arg1: KoalaCallsiteKey, arg2: String): void +@memo export declare function memo_foo(arg2: String): void diff --git a/arkoala-arkts/memo-plugin/src/memo-detector.ts b/arkoala-arkts/memo-plugin/src/memo-detector.ts index 132106d79..de9cd7214 100644 --- a/arkoala-arkts/memo-plugin/src/memo-detector.ts +++ b/arkoala-arkts/memo-plugin/src/memo-detector.ts @@ -17,7 +17,7 @@ import * as arkts from "@koalaui/libarkts" import { AbstractVisitor } from "./AbstractVisitor" import { RuntimeNames } from "./utils" -export function hasMemoAnnotation(node: arkts.FunctionDeclaration) { +export function hasMemoAnnotation(node: arkts.ScriptFunction) { return arkts.getAnnotations(node).some((it) => arkts.isIdentifier(it.expr) && it.expr.name === RuntimeNames.ANNOTATION ) @@ -26,13 +26,16 @@ export function hasMemoAnnotation(node: arkts.FunctionDeclaration) { export class MemoDetector extends AbstractVisitor { visitor(node: arkts.AstNode): arkts.AstNode { console.log(" ".repeat(this.indentation) + node.constructor.name) - if (node instanceof arkts.FunctionDeclaration) { - if (hasMemoAnnotation(node)) { - console.log(`FOUND MEMO FUNCTION DECLARATION !!!`) + if (node instanceof arkts.MethodDefinition) { + if (hasMemoAnnotation(node.scriptFunction)) { + console.log(`FOUND MEMO METHOD DECLARATION !!!`) } } - if (node instanceof arkts.Identifier && node.parent instanceof arkts.CallExpression) { - console.log(arkts.getDecl(node)) // undefined ? + if (node instanceof arkts.Identifier) { + const decl = arkts.getDecl(node) + if (decl instanceof arkts.MethodDefinition && hasMemoAnnotation(decl.scriptFunction)) { + console.log(`FOUND MEMO METHOD USAGE !!!`) + } } return this.visitEachChild(node) } -- Gitee From fd3bdfa26f78754caf6e4d43ccca406b2f4b6c90 Mon Sep 17 00:00:00 2001 From: Igor Loginov Date: Fri, 14 Feb 2025 10:51:31 +0300 Subject: [PATCH 11/14] remove console.log --- arkoala-arkts/libarkts/src/arkts-api/utilities/public.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/arkoala-arkts/libarkts/src/arkts-api/utilities/public.ts b/arkoala-arkts/libarkts/src/arkts-api/utilities/public.ts index 24563c15e..dbc9a8b88 100644 --- a/arkoala-arkts/libarkts/src/arkts-api/utilities/public.ts +++ b/arkoala-arkts/libarkts/src/arkts-api/utilities/public.ts @@ -56,7 +56,6 @@ export function rebindSubtree(node: AstNode): void { export function getDecl(node: AstNode): AstNode | undefined { const decl = global.es2panda._DeclarationFromIdentifier(global.context, passNode(node)) - console.log(decl) if (decl === nullptr) { return undefined } -- Gitee From 45d3240ab3d721d7c24be19c62bd5cc34de268b1 Mon Sep 17 00:00:00 2001 From: Igor Loginov Date: Fri, 14 Feb 2025 11:14:21 +0300 Subject: [PATCH 12/14] regenerate + working demo with @memo detection --- .../libarkts/native/src/generated/bridges.cc | 252 +++++++++--------- arkoala-arkts/libarkts/src/arkts-api/types.ts | 2 +- .../src/generated/Es2pandaNativeModule.ts | 56 ++-- .../src/generated/peers/AnnotationUsage.ts | 15 +- .../generated/peers/ETSDynamicFunctionType.ts | 5 +- .../src/generated/peers/ETSFunctionType.ts | 22 +- .../src/generated/peers/ETSUnionType.ts | 2 +- .../src/generated/peers/FunctionDecl.ts | 5 +- .../src/generated/peers/InterfaceDecl.ts | 5 +- .../demo/arktsconfig-unmemoized.json | 2 +- .../memo-plugin/demo/arktsconfig.json | 2 +- .../memo-plugin/demo/{foo.sts => demo.sts} | 3 +- .../memo-plugin/demo/{foo.ts => demo.ts} | 5 +- arkoala-arkts/memo-plugin/demo/package.json | 11 +- arkoala-arkts/memo-plugin/demo/stub.sts | 3 + .../memo-plugin/demo/{runtime.ts => stub.ts} | 0 .../memo-plugin/demo/tsconfig-unmemoize.json | 2 +- arkoala-arkts/memo-plugin/package.json | 3 +- .../memo-plugin/runtime-api/index.sts | 3 - 19 files changed, 201 insertions(+), 197 deletions(-) rename arkoala-arkts/memo-plugin/demo/{foo.sts => demo.sts} (76%) rename arkoala-arkts/memo-plugin/demo/{foo.ts => demo.ts} (70%) create mode 100644 arkoala-arkts/memo-plugin/demo/stub.sts rename arkoala-arkts/memo-plugin/demo/{runtime.ts => stub.ts} (100%) diff --git a/arkoala-arkts/libarkts/native/src/generated/bridges.cc b/arkoala-arkts/libarkts/native/src/generated/bridges.cc index dfbc913d1..2a17ab86d 100644 --- a/arkoala-arkts/libarkts/native/src/generated/bridges.cc +++ b/arkoala-arkts/libarkts/native/src/generated/bridges.cc @@ -184,149 +184,115 @@ KNativePointer impl_UpdateETSFunctionTypeIr(KNativePointer context, KNativePoint } KOALA_INTEROP_4(UpdateETSFunctionTypeIr, KNativePointer, KNativePointer, KNativePointer, KNativePointer, KInt); -KNativePointer impl_CreateETSFunctionType(KNativePointer context, KNativePointer signature, KInt funcFlags) -{ - const auto _context = reinterpret_cast(context); - const auto _signature = reinterpret_cast(signature); - const auto _funcFlags = static_cast(funcFlags); - //auto result = GetImpl()->CreateETSFunctionType(_context, _signature, _funcFlags); - //return result; - return nullptr; -} -KOALA_INTEROP_3(CreateETSFunctionType, KNativePointer, KNativePointer, KNativePointer, KInt); - -KNativePointer impl_UpdateETSFunctionType(KNativePointer context, KNativePointer original, KNativePointer signature, KInt funcFlags) -{ - const auto _context = reinterpret_cast(context); - const auto _original = reinterpret_cast(original); - const auto _signature = reinterpret_cast(signature); - const auto _funcFlags = static_cast(funcFlags); - //auto result = GetImpl()->UpdateETSFunctionType(_context, _original, _signature, _funcFlags); - //return result; - return nullptr; -} -KOALA_INTEROP_4(UpdateETSFunctionType, KNativePointer, KNativePointer, KNativePointer, KNativePointer, KInt); - -KNativePointer impl_ETSFunctionTypeTypeParamsConst(KNativePointer context, KNativePointer receiver) +KNativePointer impl_ETSFunctionTypeIrTypeParamsConst(KNativePointer context, KNativePointer receiver) { const auto _context = reinterpret_cast(context); const auto _receiver = reinterpret_cast(receiver); - //auto result = GetImpl()->ETSFunctionTypeTypeParamsConst(_context, _receiver); - //return (void*)result; - return nullptr; + auto result = GetImpl()->ETSFunctionTypeIrTypeParamsConst(_context, _receiver); + return (void*)result; } -KOALA_INTEROP_2(ETSFunctionTypeTypeParamsConst, KNativePointer, KNativePointer, KNativePointer); +KOALA_INTEROP_2(ETSFunctionTypeIrTypeParamsConst, KNativePointer, KNativePointer, KNativePointer); -KNativePointer impl_ETSFunctionTypeTypeParams(KNativePointer context, KNativePointer receiver) +KNativePointer impl_ETSFunctionTypeIrTypeParams(KNativePointer context, KNativePointer receiver) { const auto _context = reinterpret_cast(context); const auto _receiver = reinterpret_cast(receiver); - //auto result = GetImpl()->ETSFunctionTypeTypeParams(_context, _receiver); - //return result; - return nullptr; + auto result = GetImpl()->ETSFunctionTypeIrTypeParams(_context, _receiver); + return result; } -KOALA_INTEROP_2(ETSFunctionTypeTypeParams, KNativePointer, KNativePointer, KNativePointer); +KOALA_INTEROP_2(ETSFunctionTypeIrTypeParams, KNativePointer, KNativePointer, KNativePointer); -KNativePointer impl_ETSFunctionTypeParamsConst(KNativePointer context, KNativePointer receiver) +KNativePointer impl_ETSFunctionTypeIrParamsConst(KNativePointer context, KNativePointer receiver) { const auto _context = reinterpret_cast(context); const auto _receiver = reinterpret_cast(receiver); std::size_t length; - //auto result = GetImpl()->ETSFunctionTypeParamsConst(_context, _receiver, &length); - //return (void*)new std::vector(result, result + length); - return nullptr; + auto result = GetImpl()->ETSFunctionTypeIrParamsConst(_context, _receiver, &length); + return (void*)new std::vector(result, result + length); } -KOALA_INTEROP_2(ETSFunctionTypeParamsConst, KNativePointer, KNativePointer, KNativePointer); +KOALA_INTEROP_2(ETSFunctionTypeIrParamsConst, KNativePointer, KNativePointer, KNativePointer); -KNativePointer impl_ETSFunctionTypeReturnTypeConst(KNativePointer context, KNativePointer receiver) +KNativePointer impl_ETSFunctionTypeIrReturnTypeConst(KNativePointer context, KNativePointer receiver) { const auto _context = reinterpret_cast(context); const auto _receiver = reinterpret_cast(receiver); - //auto result = GetImpl()->ETSFunctionTypeReturnTypeConst(_context, _receiver); - //return (void*)result; - return nullptr; + auto result = GetImpl()->ETSFunctionTypeIrReturnTypeConst(_context, _receiver); + return (void*)result; } -KOALA_INTEROP_2(ETSFunctionTypeReturnTypeConst, KNativePointer, KNativePointer, KNativePointer); +KOALA_INTEROP_2(ETSFunctionTypeIrReturnTypeConst, KNativePointer, KNativePointer, KNativePointer); -KNativePointer impl_ETSFunctionTypeReturnType(KNativePointer context, KNativePointer receiver) +KNativePointer impl_ETSFunctionTypeIrReturnType(KNativePointer context, KNativePointer receiver) { const auto _context = reinterpret_cast(context); const auto _receiver = reinterpret_cast(receiver); - //auto result = GetImpl()->ETSFunctionTypeReturnType(_context, _receiver); - //return result; - return nullptr; + auto result = GetImpl()->ETSFunctionTypeIrReturnType(_context, _receiver); + return result; } -KOALA_INTEROP_2(ETSFunctionTypeReturnType, KNativePointer, KNativePointer, KNativePointer); +KOALA_INTEROP_2(ETSFunctionTypeIrReturnType, KNativePointer, KNativePointer, KNativePointer); -KNativePointer impl_ETSFunctionTypeFunctionalInterface(KNativePointer context, KNativePointer receiver) +KNativePointer impl_ETSFunctionTypeIrFunctionalInterface(KNativePointer context, KNativePointer receiver) { const auto _context = reinterpret_cast(context); const auto _receiver = reinterpret_cast(receiver); - //auto result = GetImpl()->ETSFunctionTypeFunctionalInterface(_context, _receiver); - //return result; - return nullptr; + auto result = GetImpl()->ETSFunctionTypeIrFunctionalInterface(_context, _receiver); + return result; } -KOALA_INTEROP_2(ETSFunctionTypeFunctionalInterface, KNativePointer, KNativePointer, KNativePointer); +KOALA_INTEROP_2(ETSFunctionTypeIrFunctionalInterface, KNativePointer, KNativePointer, KNativePointer); -KNativePointer impl_ETSFunctionTypeFunctionalInterfaceConst(KNativePointer context, KNativePointer receiver) +KNativePointer impl_ETSFunctionTypeIrFunctionalInterfaceConst(KNativePointer context, KNativePointer receiver) { const auto _context = reinterpret_cast(context); const auto _receiver = reinterpret_cast(receiver); - //auto result = GetImpl()->ETSFunctionTypeFunctionalInterfaceConst(_context, _receiver); - //return (void*)result; - return nullptr; + auto result = GetImpl()->ETSFunctionTypeIrFunctionalInterfaceConst(_context, _receiver); + return (void*)result; } -KOALA_INTEROP_2(ETSFunctionTypeFunctionalInterfaceConst, KNativePointer, KNativePointer, KNativePointer); +KOALA_INTEROP_2(ETSFunctionTypeIrFunctionalInterfaceConst, KNativePointer, KNativePointer, KNativePointer); -void impl_ETSFunctionTypeSetFunctionalInterface(KNativePointer context, KNativePointer receiver, KNativePointer functionalInterface) +void impl_ETSFunctionTypeIrSetFunctionalInterface(KNativePointer context, KNativePointer receiver, KNativePointer functionalInterface) { const auto _context = reinterpret_cast(context); const auto _receiver = reinterpret_cast(receiver); const auto _functionalInterface = reinterpret_cast(functionalInterface); - //GetImpl()->ETSFunctionTypeSetFunctionalInterface(_context, _receiver, _functionalInterface); + GetImpl()->ETSFunctionTypeIrSetFunctionalInterface(_context, _receiver, _functionalInterface); return ; } -KOALA_INTEROP_V3(ETSFunctionTypeSetFunctionalInterface, KNativePointer, KNativePointer, KNativePointer); +KOALA_INTEROP_V3(ETSFunctionTypeIrSetFunctionalInterface, KNativePointer, KNativePointer, KNativePointer); -KInt impl_ETSFunctionTypeFlags(KNativePointer context, KNativePointer receiver) +KInt impl_ETSFunctionTypeIrFlags(KNativePointer context, KNativePointer receiver) { const auto _context = reinterpret_cast(context); const auto _receiver = reinterpret_cast(receiver); - //auto result = GetImpl()->ETSFunctionTypeFlags(_context, _receiver); - //return result; - return 0; + auto result = GetImpl()->ETSFunctionTypeIrFlags(_context, _receiver); + return result; } -KOALA_INTEROP_2(ETSFunctionTypeFlags, KInt, KNativePointer, KNativePointer); +KOALA_INTEROP_2(ETSFunctionTypeIrFlags, KInt, KNativePointer, KNativePointer); -KBoolean impl_ETSFunctionTypeIsThrowingConst(KNativePointer context, KNativePointer receiver) +KBoolean impl_ETSFunctionTypeIrIsThrowingConst(KNativePointer context, KNativePointer receiver) { const auto _context = reinterpret_cast(context); const auto _receiver = reinterpret_cast(receiver); - //auto result = GetImpl()->ETSFunctionTypeIsThrowingConst(_context, _receiver); - //return result; - return false; + auto result = GetImpl()->ETSFunctionTypeIrIsThrowingConst(_context, _receiver); + return result; } -KOALA_INTEROP_2(ETSFunctionTypeIsThrowingConst, KBoolean, KNativePointer, KNativePointer); +KOALA_INTEROP_2(ETSFunctionTypeIrIsThrowingConst, KBoolean, KNativePointer, KNativePointer); -KBoolean impl_ETSFunctionTypeIsRethrowingConst(KNativePointer context, KNativePointer receiver) +KBoolean impl_ETSFunctionTypeIrIsRethrowingConst(KNativePointer context, KNativePointer receiver) { const auto _context = reinterpret_cast(context); const auto _receiver = reinterpret_cast(receiver); - //auto result = GetImpl()->ETSFunctionTypeIsRethrowingConst(_context, _receiver); - //return result; - return false; + auto result = GetImpl()->ETSFunctionTypeIrIsRethrowingConst(_context, _receiver); + return result; } -KOALA_INTEROP_2(ETSFunctionTypeIsRethrowingConst, KBoolean, KNativePointer, KNativePointer); +KOALA_INTEROP_2(ETSFunctionTypeIrIsRethrowingConst, KBoolean, KNativePointer, KNativePointer); -KBoolean impl_ETSFunctionTypeIsExtensionFunctionConst(KNativePointer context, KNativePointer receiver) +KBoolean impl_ETSFunctionTypeIrIsExtensionFunctionConst(KNativePointer context, KNativePointer receiver) { const auto _context = reinterpret_cast(context); const auto _receiver = reinterpret_cast(receiver); - //auto result = GetImpl()->ETSFunctionTypeIsExtensionFunctionConst(_context, _receiver); - //return result; - return false; + auto result = GetImpl()->ETSFunctionTypeIrIsExtensionFunctionConst(_context, _receiver); + return result; } -KOALA_INTEROP_2(ETSFunctionTypeIsExtensionFunctionConst, KBoolean, KNativePointer, KNativePointer); +KOALA_INTEROP_2(ETSFunctionTypeIrIsExtensionFunctionConst, KBoolean, KNativePointer, KNativePointer); KNativePointer impl_CreateTSTypeOperator(KNativePointer context, KNativePointer type, KInt operatorType) { @@ -2252,39 +2218,15 @@ KNativePointer impl_UpdateETSUnionTypeIr(KNativePointer context, KNativePointer } KOALA_INTEROP_4(UpdateETSUnionTypeIr, KNativePointer, KNativePointer, KNativePointer, KNativePointerArray, KUInt); -KNativePointer impl_CreateETSUnionType(KNativePointer context, KNativePointerArray types, KUInt typesLen) -{ - const auto _context = reinterpret_cast(context); - const auto _types = reinterpret_cast(types); - const auto _typesLen = static_cast(typesLen); - //auto result = GetImpl()->CreateETSUnionType(_context, _types, _typesLen); - //return result; - return nullptr; -} -KOALA_INTEROP_3(CreateETSUnionType, KNativePointer, KNativePointer, KNativePointerArray, KUInt); - -KNativePointer impl_UpdateETSUnionType(KNativePointer context, KNativePointer original, KNativePointerArray types, KUInt typesLen) -{ - const auto _context = reinterpret_cast(context); - const auto _original = reinterpret_cast(original); - const auto _types = reinterpret_cast(types); - const auto _typesLen = static_cast(typesLen); - //auto result = GetImpl()->UpdateETSUnionType(_context, _original, _types, _typesLen); - //return result; - return nullptr; -} -KOALA_INTEROP_4(UpdateETSUnionType, KNativePointer, KNativePointer, KNativePointer, KNativePointerArray, KUInt); - -KNativePointer impl_ETSUnionTypeTypesConst(KNativePointer context, KNativePointer receiver) +KNativePointer impl_ETSUnionTypeIrTypesConst(KNativePointer context, KNativePointer receiver) { const auto _context = reinterpret_cast(context); const auto _receiver = reinterpret_cast(receiver); std::size_t length; - //auto result = GetImpl()->ETSUnionTypeTypesConst(_context, _receiver, &length); - //return (void*)new std::vector(result, result + length); - return nullptr; + auto result = GetImpl()->ETSUnionTypeIrTypesConst(_context, _receiver, &length); + return (void*)new std::vector(result, result + length); } -KOALA_INTEROP_2(ETSUnionTypeTypesConst, KNativePointer, KNativePointer, KNativePointer); +KOALA_INTEROP_2(ETSUnionTypeIrTypesConst, KNativePointer, KNativePointer, KNativePointer); KNativePointer impl_CreateTSPropertySignature(KNativePointer context, KNativePointer key, KNativePointer typeAnnotation, KBoolean computed, KBoolean optional_arg, KBoolean readonly_arg) { @@ -6642,6 +6584,25 @@ KNativePointer impl_AnnotationDeclarationGetBaseNameConst(KNativePointer context } KOALA_INTEROP_2(AnnotationDeclarationGetBaseNameConst, KNativePointer, KNativePointer, KNativePointer); +KNativePointer impl_CreateAnnotationUsageIr(KNativePointer context, KNativePointer expr) +{ + const auto _context = reinterpret_cast(context); + const auto _expr = reinterpret_cast(expr); + auto result = GetImpl()->CreateAnnotationUsageIr(_context, _expr); + return result; +} +KOALA_INTEROP_2(CreateAnnotationUsageIr, KNativePointer, KNativePointer, KNativePointer); + +KNativePointer impl_UpdateAnnotationUsageIr(KNativePointer context, KNativePointer original, KNativePointer expr) +{ + const auto _context = reinterpret_cast(context); + const auto _original = reinterpret_cast(original); + const auto _expr = reinterpret_cast(expr); + auto result = GetImpl()->UpdateAnnotationUsageIr(_context, _original, _expr); + return result; +} +KOALA_INTEROP_3(UpdateAnnotationUsageIr, KNativePointer, KNativePointer, KNativePointer, KNativePointer); + KNativePointer impl_AnnotationUsageIrExpr(KNativePointer context, KNativePointer receiver) { const auto _context = reinterpret_cast(context); @@ -6651,16 +6612,15 @@ KNativePointer impl_AnnotationUsageIrExpr(KNativePointer context, KNativePointer } KOALA_INTEROP_2(AnnotationUsageIrExpr, KNativePointer, KNativePointer, KNativePointer); -KNativePointer impl_AnnotationUsageProperties(KNativePointer context, KNativePointer receiver) +KNativePointer impl_AnnotationUsageIrProperties(KNativePointer context, KNativePointer receiver) { const auto _context = reinterpret_cast(context); const auto _receiver = reinterpret_cast(receiver); std::size_t length; - //auto result = GetImpl()->AnnotationUsageProperties(_context, _receiver, &length); - //return new std::vector(result, result + length); - return nullptr; + auto result = GetImpl()->AnnotationUsageIrProperties(_context, _receiver, &length); + return new std::vector(result, result + length); } -KOALA_INTEROP_2(AnnotationUsageProperties, KNativePointer, KNativePointer, KNativePointer); +KOALA_INTEROP_2(AnnotationUsageIrProperties, KNativePointer, KNativePointer, KNativePointer); KNativePointer impl_AnnotationUsageIrPropertiesConst(KNativePointer context, KNativePointer receiver) { @@ -6672,47 +6632,45 @@ KNativePointer impl_AnnotationUsageIrPropertiesConst(KNativePointer context, KNa } KOALA_INTEROP_2(AnnotationUsageIrPropertiesConst, KNativePointer, KNativePointer, KNativePointer); -KNativePointer impl_AnnotationUsagePropertiesPtrConst(KNativePointer context, KNativePointer receiver) +KNativePointer impl_AnnotationUsageIrPropertiesPtrConst(KNativePointer context, KNativePointer receiver) { const auto _context = reinterpret_cast(context); const auto _receiver = reinterpret_cast(receiver); std::size_t length; - //auto result = GetImpl()->AnnotationUsagePropertiesPtrConst(_context, _receiver, &length); - //return (void*)new std::vector(result, result + length); - return nullptr; + auto result = GetImpl()->AnnotationUsageIrPropertiesPtrConst(_context, _receiver, &length); + return (void*)new std::vector(result, result + length); } -KOALA_INTEROP_2(AnnotationUsagePropertiesPtrConst, KNativePointer, KNativePointer, KNativePointer); +KOALA_INTEROP_2(AnnotationUsageIrPropertiesPtrConst, KNativePointer, KNativePointer, KNativePointer); -void impl_AnnotationUsageAddProperty(KNativePointer context, KNativePointer receiver, KNativePointer property) +void impl_AnnotationUsageIrAddProperty(KNativePointer context, KNativePointer receiver, KNativePointer property) { const auto _context = reinterpret_cast(context); const auto _receiver = reinterpret_cast(receiver); const auto _property = reinterpret_cast(property); - //GetImpl()->AnnotationUsageAddProperty(_context, _receiver, _property); + GetImpl()->AnnotationUsageIrAddProperty(_context, _receiver, _property); return ; } -KOALA_INTEROP_V3(AnnotationUsageAddProperty, KNativePointer, KNativePointer, KNativePointer); +KOALA_INTEROP_V3(AnnotationUsageIrAddProperty, KNativePointer, KNativePointer, KNativePointer); -void impl_AnnotationUsageSetProperties(KNativePointer context, KNativePointer receiver, KNativePointerArray properties, KUInt propertiesLen) +void impl_AnnotationUsageIrSetProperties(KNativePointer context, KNativePointer receiver, KNativePointerArray properties, KUInt propertiesLen) { const auto _context = reinterpret_cast(context); const auto _receiver = reinterpret_cast(receiver); const auto _properties = reinterpret_cast(properties); const auto _propertiesLen = static_cast(propertiesLen); - //GetImpl()->AnnotationUsageSetProperties(_context, _receiver, _properties, _propertiesLen); + GetImpl()->AnnotationUsageIrSetProperties(_context, _receiver, _properties, _propertiesLen); return ; } -KOALA_INTEROP_V4(AnnotationUsageSetProperties, KNativePointer, KNativePointer, KNativePointerArray, KUInt); +KOALA_INTEROP_V4(AnnotationUsageIrSetProperties, KNativePointer, KNativePointer, KNativePointerArray, KUInt); -KNativePointer impl_AnnotationUsageGetBaseNameConst(KNativePointer context, KNativePointer receiver) +KNativePointer impl_AnnotationUsageIrGetBaseNameConst(KNativePointer context, KNativePointer receiver) { const auto _context = reinterpret_cast(context); const auto _receiver = reinterpret_cast(receiver); - //auto result = GetImpl()->AnnotationUsageGetBaseNameConst(_context, _receiver); - //return (void*)result; - return nullptr; + auto result = GetImpl()->AnnotationUsageIrGetBaseNameConst(_context, _receiver); + return (void*)result; } -KOALA_INTEROP_2(AnnotationUsageGetBaseNameConst, KNativePointer, KNativePointer, KNativePointer); +KOALA_INTEROP_2(AnnotationUsageIrGetBaseNameConst, KNativePointer, KNativePointer, KNativePointer); KNativePointer impl_CreateEmptyStatement(KNativePointer context) { @@ -9573,6 +9531,40 @@ KNativePointer impl_ImportExpressionSourceConst(KNativePointer context, KNativeP } KOALA_INTEROP_2(ImportExpressionSourceConst, KNativePointer, KNativePointer, KNativePointer); +KNativePointer impl_CreateETSNullTypeIr(KNativePointer context) +{ + const auto _context = reinterpret_cast(context); + auto result = GetImpl()->CreateETSNullTypeIr(_context); + return result; +} +KOALA_INTEROP_1(CreateETSNullTypeIr, KNativePointer, KNativePointer); + +KNativePointer impl_UpdateETSNullTypeIr(KNativePointer context, KNativePointer original) +{ + const auto _context = reinterpret_cast(context); + const auto _original = reinterpret_cast(original); + auto result = GetImpl()->UpdateETSNullTypeIr(_context, _original); + return result; +} +KOALA_INTEROP_2(UpdateETSNullTypeIr, KNativePointer, KNativePointer, KNativePointer); + +KNativePointer impl_CreateETSUndefinedTypeIr(KNativePointer context) +{ + const auto _context = reinterpret_cast(context); + auto result = GetImpl()->CreateETSUndefinedTypeIr(_context); + return result; +} +KOALA_INTEROP_1(CreateETSUndefinedTypeIr, KNativePointer, KNativePointer); + +KNativePointer impl_UpdateETSUndefinedTypeIr(KNativePointer context, KNativePointer original) +{ + const auto _context = reinterpret_cast(context); + const auto _original = reinterpret_cast(original); + auto result = GetImpl()->UpdateETSUndefinedTypeIr(_context, _original); + return result; +} +KOALA_INTEROP_2(UpdateETSUndefinedTypeIr, KNativePointer, KNativePointer, KNativePointer); + KNativePointer impl_CreateTypeofExpression(KNativePointer context, KNativePointer argument) { const auto _context = reinterpret_cast(context); diff --git a/arkoala-arkts/libarkts/src/arkts-api/types.ts b/arkoala-arkts/libarkts/src/arkts-api/types.ts index eb646292d..d83d07096 100644 --- a/arkoala-arkts/libarkts/src/arkts-api/types.ts +++ b/arkoala-arkts/libarkts/src/arkts-api/types.ts @@ -334,7 +334,7 @@ export class ETSUnionType extends AstNode { constructor(peer: KPtr) { assertValidPeer(peer, Es2pandaAstNodeType.AST_NODE_TYPE_ETS_UNION_TYPE) super(peer) - this.types = unpackNodeArray(global.generatedEs2panda._ETSUnionTypeTypesConst(global.context, this.peer)) + this.types = unpackNodeArray(global.generatedEs2panda._TSUnionTypeTypesConst(global.context, this.peer)) } static create( diff --git a/arkoala-arkts/libarkts/src/generated/Es2pandaNativeModule.ts b/arkoala-arkts/libarkts/src/generated/Es2pandaNativeModule.ts index 11ffc2dc0..d0bd3c804 100644 --- a/arkoala-arkts/libarkts/src/generated/Es2pandaNativeModule.ts +++ b/arkoala-arkts/libarkts/src/generated/Es2pandaNativeModule.ts @@ -73,46 +73,46 @@ export class Es2pandaNativeModule { _UpdateTSVoidKeyword(context: KNativePointer, original: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _CreateETSFunctionType(context: KNativePointer, signature: KNativePointer, funcFlags: KInt): KNativePointer { + _CreateETSFunctionTypeIr(context: KNativePointer, signature: KNativePointer, funcFlags: KInt): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _UpdateETSFunctionType(context: KNativePointer, original: KNativePointer, signature: KNativePointer, funcFlags: KInt): KNativePointer { + _UpdateETSFunctionTypeIr(context: KNativePointer, original: KNativePointer, signature: KNativePointer, funcFlags: KInt): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _ETSFunctionTypeTypeParamsConst(context: KNativePointer, receiver: KNativePointer): KNativePointer { + _ETSFunctionTypeIrTypeParamsConst(context: KNativePointer, receiver: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _ETSFunctionTypeTypeParams(context: KNativePointer, receiver: KNativePointer): KNativePointer { + _ETSFunctionTypeIrTypeParams(context: KNativePointer, receiver: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _ETSFunctionTypeParamsConst(context: KNativePointer, receiver: KNativePointer): KNativePointer { + _ETSFunctionTypeIrParamsConst(context: KNativePointer, receiver: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _ETSFunctionTypeReturnTypeConst(context: KNativePointer, receiver: KNativePointer): KNativePointer { + _ETSFunctionTypeIrReturnTypeConst(context: KNativePointer, receiver: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _ETSFunctionTypeReturnType(context: KNativePointer, receiver: KNativePointer): KNativePointer { + _ETSFunctionTypeIrReturnType(context: KNativePointer, receiver: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _ETSFunctionTypeFunctionalInterface(context: KNativePointer, receiver: KNativePointer): KNativePointer { + _ETSFunctionTypeIrFunctionalInterface(context: KNativePointer, receiver: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _ETSFunctionTypeFunctionalInterfaceConst(context: KNativePointer, receiver: KNativePointer): KNativePointer { + _ETSFunctionTypeIrFunctionalInterfaceConst(context: KNativePointer, receiver: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _ETSFunctionTypeSetFunctionalInterface(context: KNativePointer, receiver: KNativePointer, functionalInterface: KNativePointer): void { + _ETSFunctionTypeIrSetFunctionalInterface(context: KNativePointer, receiver: KNativePointer, functionalInterface: KNativePointer): void { throw new Error("This methods was not overloaded by native module initialization") } - _ETSFunctionTypeFlags(context: KNativePointer, receiver: KNativePointer): KInt { + _ETSFunctionTypeIrFlags(context: KNativePointer, receiver: KNativePointer): KInt { throw new Error("This methods was not overloaded by native module initialization") } - _ETSFunctionTypeIsThrowingConst(context: KNativePointer, receiver: KNativePointer): KBoolean { + _ETSFunctionTypeIrIsThrowingConst(context: KNativePointer, receiver: KNativePointer): KBoolean { throw new Error("This methods was not overloaded by native module initialization") } - _ETSFunctionTypeIsRethrowingConst(context: KNativePointer, receiver: KNativePointer): KBoolean { + _ETSFunctionTypeIrIsRethrowingConst(context: KNativePointer, receiver: KNativePointer): KBoolean { throw new Error("This methods was not overloaded by native module initialization") } - _ETSFunctionTypeIsExtensionFunctionConst(context: KNativePointer, receiver: KNativePointer): KBoolean { + _ETSFunctionTypeIrIsExtensionFunctionConst(context: KNativePointer, receiver: KNativePointer): KBoolean { throw new Error("This methods was not overloaded by native module initialization") } _CreateTSTypeOperator(context: KNativePointer, type: KNativePointer, operatorType: KInt): KNativePointer { @@ -703,13 +703,13 @@ export class Es2pandaNativeModule { _UpdateTSObjectKeyword(context: KNativePointer, original: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _CreateETSUnionType(context: KNativePointer, types: BigUint64Array, typesLen: KUInt): KNativePointer { + _CreateETSUnionTypeIr(context: KNativePointer, types: BigUint64Array, typesLen: KUInt): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _UpdateETSUnionType(context: KNativePointer, original: KNativePointer, types: BigUint64Array, typesLen: KUInt): KNativePointer { + _UpdateETSUnionTypeIr(context: KNativePointer, original: KNativePointer, types: BigUint64Array, typesLen: KUInt): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _ETSUnionTypeTypesConst(context: KNativePointer, receiver: KNativePointer): KNativePointer { + _ETSUnionTypeIrTypesConst(context: KNativePointer, receiver: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } _CreateTSPropertySignature(context: KNativePointer, key: KNativePointer, typeAnnotation: KNativePointer, computed: KBoolean, optional_arg: KBoolean, readonly_arg: KBoolean): KNativePointer { @@ -2077,31 +2077,31 @@ export class Es2pandaNativeModule { _AnnotationDeclarationGetBaseNameConst(context: KNativePointer, receiver: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _CreateAnnotationUsage(context: KNativePointer, expr: KNativePointer): KNativePointer { + _CreateAnnotationUsageIr(context: KNativePointer, expr: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _UpdateAnnotationUsage(context: KNativePointer, original: KNativePointer, expr: KNativePointer): KNativePointer { + _UpdateAnnotationUsageIr(context: KNativePointer, original: KNativePointer, expr: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } _AnnotationUsageIrExpr(context: KNativePointer, receiver: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _AnnotationUsageProperties(context: KNativePointer, receiver: KNativePointer): KNativePointer { + _AnnotationUsageIrProperties(context: KNativePointer, receiver: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } _AnnotationUsageIrPropertiesConst(context: KNativePointer, receiver: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _AnnotationUsagePropertiesPtrConst(context: KNativePointer, receiver: KNativePointer): KNativePointer { + _AnnotationUsageIrPropertiesPtrConst(context: KNativePointer, receiver: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _AnnotationUsageAddProperty(context: KNativePointer, receiver: KNativePointer, property: KNativePointer): void { + _AnnotationUsageIrAddProperty(context: KNativePointer, receiver: KNativePointer, property: KNativePointer): void { throw new Error("This methods was not overloaded by native module initialization") } - _AnnotationUsageSetProperties(context: KNativePointer, receiver: KNativePointer, properties: BigUint64Array, propertiesLen: KUInt): void { + _AnnotationUsageIrSetProperties(context: KNativePointer, receiver: KNativePointer, properties: BigUint64Array, propertiesLen: KUInt): void { throw new Error("This methods was not overloaded by native module initialization") } - _AnnotationUsageGetBaseNameConst(context: KNativePointer, receiver: KNativePointer): KNativePointer { + _AnnotationUsageIrGetBaseNameConst(context: KNativePointer, receiver: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } _CreateEmptyStatement(context: KNativePointer): KNativePointer { @@ -2995,16 +2995,16 @@ export class Es2pandaNativeModule { _ImportExpressionSourceConst(context: KNativePointer, receiver: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _CreateETSNullType(context: KNativePointer): KNativePointer { + _CreateETSNullTypeIr(context: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _UpdateETSNullType(context: KNativePointer, original: KNativePointer): KNativePointer { + _UpdateETSNullTypeIr(context: KNativePointer, original: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _CreateETSUndefinedType(context: KNativePointer): KNativePointer { + _CreateETSUndefinedTypeIr(context: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } - _UpdateETSUndefinedType(context: KNativePointer, original: KNativePointer): KNativePointer { + _UpdateETSUndefinedTypeIr(context: KNativePointer, original: KNativePointer): KNativePointer { throw new Error("This methods was not overloaded by native module initialization") } _CreateTypeofExpression(context: KNativePointer, argument: KNativePointer): KNativePointer { diff --git a/arkoala-arkts/libarkts/src/generated/peers/AnnotationUsage.ts b/arkoala-arkts/libarkts/src/generated/peers/AnnotationUsage.ts index 0e61053c8..a5daeeb65 100644 --- a/arkoala-arkts/libarkts/src/generated/peers/AnnotationUsage.ts +++ b/arkoala-arkts/libarkts/src/generated/peers/AnnotationUsage.ts @@ -33,18 +33,21 @@ export class AnnotationUsage extends Statement { super(pointer) console.warn("Warning: stub node AnnotationUsage") } + createAnnotationUsage(expr: Expression): AnnotationUsage { + return new AnnotationUsage(global.generatedEs2panda._CreateAnnotationUsageIr(global.context, passNode(expr))) + } get expr(): Expression { return unpackNonNullableNode(global.generatedEs2panda._AnnotationUsageIrExpr(global.context, this.peer)) } - //get properties(): readonly AstNode[] { - // return unpackNodeArray(global.generatedEs2panda._AnnotationUsageProperties(global.context, this.peer)) - //} + get properties(): readonly AstNode[] { + return unpackNodeArray(global.generatedEs2panda._AnnotationUsageIrProperties(global.context, this.peer)) + } get propertiesConst(): readonly AstNode[] { return unpackNodeArray(global.generatedEs2panda._AnnotationUsageIrPropertiesConst(global.context, this.peer)) } - //get propertiesPtrConst(): readonly AstNode[] { - // return unpackNodeArray(global.generatedEs2panda._AnnotationUsagePropertiesPtrConst(global.context, this.peer)) - //} + get propertiesPtrConst(): readonly AstNode[] { + return unpackNodeArray(global.generatedEs2panda._AnnotationUsageIrPropertiesPtrConst(global.context, this.peer)) + } } export function isAnnotationUsage(node: AstNode): node is AnnotationUsage { return node instanceof AnnotationUsage diff --git a/arkoala-arkts/libarkts/src/generated/peers/ETSDynamicFunctionType.ts b/arkoala-arkts/libarkts/src/generated/peers/ETSDynamicFunctionType.ts index 435391037..56fe11d77 100644 --- a/arkoala-arkts/libarkts/src/generated/peers/ETSDynamicFunctionType.ts +++ b/arkoala-arkts/libarkts/src/generated/peers/ETSDynamicFunctionType.ts @@ -16,6 +16,7 @@ import { global, passNode, + passNodeArray, unpackNonNullableNode, unpackNodeArray, assertValidPeer, @@ -26,8 +27,8 @@ import { import { ETSFunctionType } from "./ETSFunctionType" export abstract class ETSDynamicFunctionType extends ETSFunctionType { - constructor(peer: KNativePointer) { - super(peer) + constructor(pointer: KNativePointer) { + super(pointer) console.warn("Warning: stub node ETSDynamicFunctionType") } } diff --git a/arkoala-arkts/libarkts/src/generated/peers/ETSFunctionType.ts b/arkoala-arkts/libarkts/src/generated/peers/ETSFunctionType.ts index 1594f6367..d8fe47ad8 100644 --- a/arkoala-arkts/libarkts/src/generated/peers/ETSFunctionType.ts +++ b/arkoala-arkts/libarkts/src/generated/peers/ETSFunctionType.ts @@ -37,37 +37,37 @@ export class ETSFunctionType extends TypeNode { console.warn("Warning: stub node ETSFunctionType") } get typeParamsConst(): TSTypeParameterDeclaration { - return unpackNonNullableNode(global.generatedEs2panda._ETSFunctionTypeTypeParamsConst(global.context, this.peer)) + return unpackNonNullableNode(global.generatedEs2panda._ETSFunctionTypeIrTypeParamsConst(global.context, this.peer)) } get typeParams(): TSTypeParameterDeclaration { - return unpackNonNullableNode(global.generatedEs2panda._ETSFunctionTypeTypeParams(global.context, this.peer)) + return unpackNonNullableNode(global.generatedEs2panda._ETSFunctionTypeIrTypeParams(global.context, this.peer)) } get paramsConst(): readonly Expression[] { - return unpackNodeArray(global.generatedEs2panda._ETSFunctionTypeParamsConst(global.context, this.peer)) + return unpackNodeArray(global.generatedEs2panda._ETSFunctionTypeIrParamsConst(global.context, this.peer)) } get returnTypeConst(): TypeNode { - return unpackNonNullableNode(global.generatedEs2panda._ETSFunctionTypeReturnTypeConst(global.context, this.peer)) + return unpackNonNullableNode(global.generatedEs2panda._ETSFunctionTypeIrReturnTypeConst(global.context, this.peer)) } get returnType(): TypeNode { - return unpackNonNullableNode(global.generatedEs2panda._ETSFunctionTypeReturnType(global.context, this.peer)) + return unpackNonNullableNode(global.generatedEs2panda._ETSFunctionTypeIrReturnType(global.context, this.peer)) } get functionalInterface(): TSInterfaceDeclaration { - return unpackNonNullableNode(global.generatedEs2panda._ETSFunctionTypeFunctionalInterface(global.context, this.peer)) + return unpackNonNullableNode(global.generatedEs2panda._ETSFunctionTypeIrFunctionalInterface(global.context, this.peer)) } get functionalInterfaceConst(): TSInterfaceDeclaration { - return unpackNonNullableNode(global.generatedEs2panda._ETSFunctionTypeFunctionalInterfaceConst(global.context, this.peer)) + return unpackNonNullableNode(global.generatedEs2panda._ETSFunctionTypeIrFunctionalInterfaceConst(global.context, this.peer)) } get flags(): Es2pandaScriptFunctionFlags { - return global.generatedEs2panda._ETSFunctionTypeFlags(global.context, this.peer) + return global.generatedEs2panda._ETSFunctionTypeIrFlags(global.context, this.peer) } get isThrowingConst(): boolean { - return global.generatedEs2panda._ETSFunctionTypeIsThrowingConst(global.context, this.peer) + return global.generatedEs2panda._ETSFunctionTypeIrIsThrowingConst(global.context, this.peer) } get isRethrowingConst(): boolean { - return global.generatedEs2panda._ETSFunctionTypeIsRethrowingConst(global.context, this.peer) + return global.generatedEs2panda._ETSFunctionTypeIrIsRethrowingConst(global.context, this.peer) } get isExtensionFunctionConst(): boolean { - return global.generatedEs2panda._ETSFunctionTypeIsExtensionFunctionConst(global.context, this.peer) + return global.generatedEs2panda._ETSFunctionTypeIrIsExtensionFunctionConst(global.context, this.peer) } } export function isETSFunctionType(node: AstNode): node is ETSFunctionType { diff --git a/arkoala-arkts/libarkts/src/generated/peers/ETSUnionType.ts b/arkoala-arkts/libarkts/src/generated/peers/ETSUnionType.ts index 46eff5cb3..25fea681f 100644 --- a/arkoala-arkts/libarkts/src/generated/peers/ETSUnionType.ts +++ b/arkoala-arkts/libarkts/src/generated/peers/ETSUnionType.ts @@ -33,7 +33,7 @@ export class ETSUnionType extends TypeNode { console.warn("Warning: stub node ETSUnionType") } get typesConst(): readonly TypeNode[] { - return unpackNodeArray(global.generatedEs2panda._ETSUnionTypeTypesConst(global.context, this.peer)) + return unpackNodeArray(global.generatedEs2panda._ETSUnionTypeIrTypesConst(global.context, this.peer)) } } export function isETSUnionType(node: AstNode): node is ETSUnionType { diff --git a/arkoala-arkts/libarkts/src/generated/peers/FunctionDecl.ts b/arkoala-arkts/libarkts/src/generated/peers/FunctionDecl.ts index 7707c85a5..ca69f5c8f 100644 --- a/arkoala-arkts/libarkts/src/generated/peers/FunctionDecl.ts +++ b/arkoala-arkts/libarkts/src/generated/peers/FunctionDecl.ts @@ -16,6 +16,7 @@ import { global, passNode, + passNodeArray, unpackNonNullableNode, unpackNodeArray, assertValidPeer, @@ -26,8 +27,8 @@ import { import { ScriptFunction } from "./ScriptFunction" export abstract class FunctionDecl extends ScriptFunction { - constructor(peer: KNativePointer) { - super(peer) + constructor(pointer: KNativePointer) { + super(pointer) console.warn("Warning: stub node FunctionDecl") } } diff --git a/arkoala-arkts/libarkts/src/generated/peers/InterfaceDecl.ts b/arkoala-arkts/libarkts/src/generated/peers/InterfaceDecl.ts index 76c426e68..6de644923 100644 --- a/arkoala-arkts/libarkts/src/generated/peers/InterfaceDecl.ts +++ b/arkoala-arkts/libarkts/src/generated/peers/InterfaceDecl.ts @@ -16,6 +16,7 @@ import { global, passNode, + passNodeArray, unpackNonNullableNode, unpackNodeArray, assertValidPeer, @@ -26,8 +27,8 @@ import { import { TSInterfaceDeclaration } from "./TSInterfaceDeclaration" export abstract class InterfaceDecl extends TSInterfaceDeclaration { - constructor(peer: KNativePointer) { - super(peer) + constructor(pointer: KNativePointer) { + super(pointer) console.warn("Warning: stub node InterfaceDecl") } } diff --git a/arkoala-arkts/memo-plugin/demo/arktsconfig-unmemoized.json b/arkoala-arkts/memo-plugin/demo/arktsconfig-unmemoized.json index 561617515..6f7c6369b 100644 --- a/arkoala-arkts/memo-plugin/demo/arktsconfig-unmemoized.json +++ b/arkoala-arkts/memo-plugin/demo/arktsconfig-unmemoized.json @@ -18,5 +18,5 @@ ] } }, - "include": ["./build/unmemoized/runtime.ts"] + "include": ["./build/unmemoized/stub.ts"] } diff --git a/arkoala-arkts/memo-plugin/demo/arktsconfig.json b/arkoala-arkts/memo-plugin/demo/arktsconfig.json index 1cf397048..24a22d262 100644 --- a/arkoala-arkts/memo-plugin/demo/arktsconfig.json +++ b/arkoala-arkts/memo-plugin/demo/arktsconfig.json @@ -24,5 +24,5 @@ } ] }, - "include": ["./foo.sts"] + "include": ["./demo.sts"] } diff --git a/arkoala-arkts/memo-plugin/demo/foo.sts b/arkoala-arkts/memo-plugin/demo/demo.sts similarity index 76% rename from arkoala-arkts/memo-plugin/demo/foo.sts rename to arkoala-arkts/memo-plugin/demo/demo.sts index 35df073ad..b8bbf1932 100644 --- a/arkoala-arkts/memo-plugin/demo/foo.sts +++ b/arkoala-arkts/memo-plugin/demo/demo.sts @@ -1,4 +1,5 @@ -import { GlobalStateManager, memoEntry, StateContext, memo, memo_foo } from "@koalaui/runtime" +import { GlobalStateManager, memoEntry, StateContext, memo } from "@koalaui/runtime" +import { memo_foo } from "./stub" @memo function foo_wrapper() { diff --git a/arkoala-arkts/memo-plugin/demo/foo.ts b/arkoala-arkts/memo-plugin/demo/demo.ts similarity index 70% rename from arkoala-arkts/memo-plugin/demo/foo.ts rename to arkoala-arkts/memo-plugin/demo/demo.ts index 54756cc0e..311a765d3 100644 --- a/arkoala-arkts/memo-plugin/demo/foo.ts +++ b/arkoala-arkts/memo-plugin/demo/demo.ts @@ -1,5 +1,8 @@ +// This file is needed to check how unmemoized (by ts plugin) should look like +// It is not actually executed + import { GlobalStateManager, memoEntry, StateContext } from "@koalaui/runtime" -import { memo_foo } from "./runtime" +import { memo_foo } from "./stub" /** @memo */ function foo_wrapper() { diff --git a/arkoala-arkts/memo-plugin/demo/package.json b/arkoala-arkts/memo-plugin/demo/package.json index 5797f4426..863ce6347 100644 --- a/arkoala-arkts/memo-plugin/demo/package.json +++ b/arkoala-arkts/memo-plugin/demo/package.json @@ -5,11 +5,12 @@ "scripts": { "clean": "rimraf build", "unmemoize": "ets-tsc -p tsconfig-unmemoize.json", - "ts-like:compile": "npm run unmemoize && fast-arktsc --input-files ./arktsconfig-unmemoized.json --output-dir ./build --compiler ../../../incremental/tools/panda/arkts/arktsc --link-name runtime_stub && ninja ${NINJA_OPTIONS} -f build/build.ninja", - "arkts-like:compile": "../../../incremental/tools/panda/arkts/arktsc --arktsconfig ./arktsconfig.json --output ./build/foo.abc ./foo.sts", - "arkts-like:compile:capi": "../../../incremental/tools/panda/arkts/arktsc-capi --arktsconfig ./arktsconfig.json --output ./build/foo.abc --file ./foo.sts --dump-plugin-ast", - "run": "../../../incremental/tools/panda/node_modules/@panda/sdk/linux_host_tools/bin/ark --load-runtimes=ets --boot-panda-files=../../../incremental/tools/panda/node_modules/@panda/sdk/ets/etsstdlib.abc:../../../incremental/runtime/build/incremental.abc:build/runtime_stub.abc ./build/foo.abc @koalaui.runtime.foo.ETSGLOBAL::main", - "run:unmemoized": "npm run unmemoize && npm run ts-like:compile && ../../../incremental/tools/panda/node_modules/@panda/sdk/linux_host_tools/bin/ark --load-runtimes=ets --boot-panda-files=../../../incremental/tools/panda/node_modules/@panda/sdk/ets/etsstdlib.abc:../../../incremental/runtime/build/incremental.abc ./build/runtime_stub.abc @koalaui.runtime.foo.ETSGLOBAL::main" + "ts-like:compile": "npm run unmemoize && fast-arktsc --input-files ./arktsconfig-unmemoized.json --output-dir ./build --compiler ../../../incremental/tools/panda/arkts/arktsc --link-name stub && ninja ${NINJA_OPTIONS} -f build/build.ninja", + "arkts-like:compile": "../../../incremental/tools/panda/arkts/arktsc --arktsconfig ./arktsconfig.json --output ./build/demo.abc ./demo.sts", + "arkts-like:compile:capi": "../../../incremental/tools/panda/arkts/arktsc-capi --arktsconfig ./arktsconfig.json --output ./build/demo.abc --file ./demo.sts --dump-plugin-ast", + "run": "../../../incremental/tools/panda/node_modules/@panda/sdk/linux_host_tools/bin/ark --load-runtimes=ets --boot-panda-files=../../../incremental/tools/panda/node_modules/@panda/sdk/ets/etsstdlib.abc:../../../incremental/runtime/build/incremental.abc:build/stub.abc ./build/demo.abc @koalaui.runtime.demo.ETSGLOBAL::main", + "run:unmemoized": "npm run unmemoize && npm run ts-like:compile && ../../../incremental/tools/panda/node_modules/@panda/sdk/linux_host_tools/bin/ark --load-runtimes=ets --boot-panda-files=../../../incremental/tools/panda/node_modules/@panda/sdk/ets/etsstdlib.abc:../../../incremental/runtime/build/incremental.abc ./build/stub.abc @koalaui.runtime.demo.ETSGLOBAL::main", + "disasm": "../../../incremental/tools/panda/node_modules/@panda/sdk/linux_host_tools/bin/ark_disasm build/stub.abc build/stub.disasm" }, "devDependencies": { "@koalaui/ets-tsc": "4.9.5-r4", diff --git a/arkoala-arkts/memo-plugin/demo/stub.sts b/arkoala-arkts/memo-plugin/demo/stub.sts new file mode 100644 index 000000000..3805972dd --- /dev/null +++ b/arkoala-arkts/memo-plugin/demo/stub.sts @@ -0,0 +1,3 @@ +import { memo } from "@koalaui/runtime" + +@memo export declare function memo_foo(arg2: String): void \ No newline at end of file diff --git a/arkoala-arkts/memo-plugin/demo/runtime.ts b/arkoala-arkts/memo-plugin/demo/stub.ts similarity index 100% rename from arkoala-arkts/memo-plugin/demo/runtime.ts rename to arkoala-arkts/memo-plugin/demo/stub.ts diff --git a/arkoala-arkts/memo-plugin/demo/tsconfig-unmemoize.json b/arkoala-arkts/memo-plugin/demo/tsconfig-unmemoize.json index f845c8ed1..afa892abb 100644 --- a/arkoala-arkts/memo-plugin/demo/tsconfig-unmemoize.json +++ b/arkoala-arkts/memo-plugin/demo/tsconfig-unmemoize.json @@ -13,5 +13,5 @@ } ] }, - "include": ["./runtime.ts", "./foo.ts"] + "include": ["./demo.ts", "./stub.ts"] } diff --git a/arkoala-arkts/memo-plugin/package.json b/arkoala-arkts/memo-plugin/package.json index a182312f3..83de11ca6 100644 --- a/arkoala-arkts/memo-plugin/package.json +++ b/arkoala-arkts/memo-plugin/package.json @@ -4,6 +4,7 @@ "scripts": { "compile": "tsc -b .", "compile:libarkts": "npm run compile --prefix ../libarkts", - "demo:run": "npm run compile && npm run ts-like:compile --prefix demo && npm run arkts-like:compile:capi --prefix demo && npm run run --prefix demo" + "demo:run": "npm run clean --prefix demo && npm run compile && npm run ts-like:compile --prefix demo && npm run arkts-like:compile:capi --prefix demo && npm run run --prefix demo", + "demo:disasm": "npm run disasm --prefix demo" } } \ No newline at end of file diff --git a/arkoala-arkts/memo-plugin/runtime-api/index.sts b/arkoala-arkts/memo-plugin/runtime-api/index.sts index e23055ecf..90d3cc3aa 100644 --- a/arkoala-arkts/memo-plugin/runtime-api/index.sts +++ b/arkoala-arkts/memo-plugin/runtime-api/index.sts @@ -8,6 +8,3 @@ export { StateManager, State, Disposable, ComputableState, StateContext } from " export @interface memo {} export type __memo_context_type = StateContext export type __memo_id_type = KoalaCallsiteKey - -//@memo export declare function memo_foo(arg0: StateContext, arg1: KoalaCallsiteKey, arg2: String): void -@memo export declare function memo_foo(arg2: String): void -- Gitee From f6f28e2451228758ebbb4b6fc959ebb47268cd12 Mon Sep 17 00:00:00 2001 From: Igor Loginov Date: Fri, 14 Feb 2025 14:45:57 +0300 Subject: [PATCH 13/14] Working demo with parameters inserting --- arkoala-arkts/memo-plugin/demo/demo.sts | 2 - arkoala-arkts/memo-plugin/demo/demo.ts | 2 +- arkoala-arkts/memo-plugin/demo/stub.sts | 5 +- arkoala-arkts/memo-plugin/demo/stub.ts | 5 +- .../memo-plugin/src/AbstractVisitor.ts | 8 +-- .../memo-plugin/src/import-transformer.ts | 20 ++----- .../memo-plugin/src/memo-detector.ts | 53 ++++++++++++++++--- arkoala-arkts/memo-plugin/src/utils.ts | 36 +++++++++++++ 8 files changed, 94 insertions(+), 37 deletions(-) diff --git a/arkoala-arkts/memo-plugin/demo/demo.sts b/arkoala-arkts/memo-plugin/demo/demo.sts index b8bbf1932..74bb5f28f 100644 --- a/arkoala-arkts/memo-plugin/demo/demo.sts +++ b/arkoala-arkts/memo-plugin/demo/demo.sts @@ -3,12 +3,10 @@ import { memo_foo } from "./stub" @memo function foo_wrapper() { - console.log("wrapper called") memo_foo("hello") } function main() { - console.log("start") const manager = GlobalStateManager.instance const state = manager.computableState((context: StateContext): Int => { memoEntry(context, 0, ETSGLOBAL.foo_wrapper) diff --git a/arkoala-arkts/memo-plugin/demo/demo.ts b/arkoala-arkts/memo-plugin/demo/demo.ts index 311a765d3..a5990afd4 100644 --- a/arkoala-arkts/memo-plugin/demo/demo.ts +++ b/arkoala-arkts/memo-plugin/demo/demo.ts @@ -14,5 +14,5 @@ function main() { const state = manager.computableState((context: StateContext) => { memoEntry(context, 0, foo_wrapper) }) - state.value + console.log(state.value) } diff --git a/arkoala-arkts/memo-plugin/demo/stub.sts b/arkoala-arkts/memo-plugin/demo/stub.sts index 3805972dd..e444446f6 100644 --- a/arkoala-arkts/memo-plugin/demo/stub.sts +++ b/arkoala-arkts/memo-plugin/demo/stub.sts @@ -1,3 +1,4 @@ -import { memo } from "@koalaui/runtime" +import { memo, __memo_context_type, __memo_id_type } from "@koalaui/runtime" -@memo export declare function memo_foo(arg2: String): void \ No newline at end of file +@memo export declare function memo_foo(__memo_context: __memo_context_type, __memo_id: __memo_id_type, s: String): void +@memo export declare function memo_foo(s: String): void diff --git a/arkoala-arkts/memo-plugin/demo/stub.ts b/arkoala-arkts/memo-plugin/demo/stub.ts index db0ff874e..d036fa342 100644 --- a/arkoala-arkts/memo-plugin/demo/stub.ts +++ b/arkoala-arkts/memo-plugin/demo/stub.ts @@ -1,5 +1,4 @@ -// No real unmemoization for now -// /** @ memo */ -export function memo_foo(arg0: string) { +/** @memo */ +export function memo_foo(s: string) { console.log(`MEMO FUNCTION FOO CALLED`) } diff --git a/arkoala-arkts/memo-plugin/src/AbstractVisitor.ts b/arkoala-arkts/memo-plugin/src/AbstractVisitor.ts index 98e9d12a3..90c6c1665 100644 --- a/arkoala-arkts/memo-plugin/src/AbstractVisitor.ts +++ b/arkoala-arkts/memo-plugin/src/AbstractVisitor.ts @@ -13,7 +13,7 @@ * limitations under the License. */ -import * as ts from "@koalaui/libarkts" +import * as arkts from "@koalaui/libarkts" export abstract class AbstractVisitor { constructor( @@ -28,11 +28,11 @@ export abstract class AbstractVisitor { return result } - abstract visitor(node: ts.AstNode): ts.AstNode + abstract visitor(node: arkts.AstNode): arkts.AstNode - visitEachChild(node: ts.AstNode): ts.AstNode { + visitEachChild(node: arkts.AstNode): arkts.AstNode { return this.withIndentation(() => - ts.visitEachChild( + arkts.visitEachChild( node, it => this.visitor(it) ) diff --git a/arkoala-arkts/memo-plugin/src/import-transformer.ts b/arkoala-arkts/memo-plugin/src/import-transformer.ts index d0b5b3d6f..4037bcf65 100644 --- a/arkoala-arkts/memo-plugin/src/import-transformer.ts +++ b/arkoala-arkts/memo-plugin/src/import-transformer.ts @@ -15,25 +15,11 @@ import * as arkts from "@koalaui/libarkts" import { AbstractVisitor } from "./AbstractVisitor" -import { RuntimeNames } from "./utils" +import { createContextTypeImportSpecifier, createIdTypeImportSpecifier, RuntimeNames } from "./utils" -function createContextTypeImportSpecifier(): arkts.ImportSpecifier { - return arkts.factory.createImportSpecifier( - arkts.factory.createIdentifier(RuntimeNames.CONTEXT_TYPE), - arkts.factory.createIdentifier(RuntimeNames.CONTEXT_TYPE), - ) -} - -function createIdTypeImportSpecifier(): arkts.ImportSpecifier { - return arkts.factory.createImportSpecifier( - arkts.factory.createIdentifier(RuntimeNames.ID_TYPE), - arkts.factory.createIdentifier(RuntimeNames.ID_TYPE), - ) -} - -function createContextTypesImportDeclaration(importSource?: string): arkts.EtsImportDeclaration { +function createContextTypesImportDeclaration(): arkts.EtsImportDeclaration { return arkts.factory.createImportDeclaration( - arkts.factory.createStringLiteral(importSource ?? RuntimeNames.CONTEXT_TYPE_DEFAULT_IMPORT), + arkts.factory.createStringLiteral(RuntimeNames.CONTEXT_TYPE_DEFAULT_IMPORT), [createContextTypeImportSpecifier(), createIdTypeImportSpecifier()], arkts.Es2pandaImportKinds.IMPORT_KINDS_TYPE, true, diff --git a/arkoala-arkts/memo-plugin/src/memo-detector.ts b/arkoala-arkts/memo-plugin/src/memo-detector.ts index de9cd7214..db447f07c 100644 --- a/arkoala-arkts/memo-plugin/src/memo-detector.ts +++ b/arkoala-arkts/memo-plugin/src/memo-detector.ts @@ -15,7 +15,7 @@ import * as arkts from "@koalaui/libarkts" import { AbstractVisitor } from "./AbstractVisitor" -import { RuntimeNames } from "./utils" +import { createContextParameter, createIdParameter, RuntimeNames } from "./utils" export function hasMemoAnnotation(node: arkts.ScriptFunction) { return arkts.getAnnotations(node).some((it) => @@ -23,20 +23,57 @@ export function hasMemoAnnotation(node: arkts.ScriptFunction) { ) } +export function createHiddenParameters(withType: boolean): arkts.ETSParameterExpression[] { + return [createContextParameter(withType), createIdParameter(withType)] +} + export class MemoDetector extends AbstractVisitor { - visitor(node: arkts.AstNode): arkts.AstNode { + visitor(beforeChildren: arkts.AstNode): arkts.AstNode { + // TODO: Remove (currently annotations are lost on visitor) + const methodDefinitionHasMemoAnnotation = + beforeChildren instanceof arkts.MethodDefinition && hasMemoAnnotation(beforeChildren.scriptFunction) + + const node = this.visitEachChild(beforeChildren) console.log(" ".repeat(this.indentation) + node.constructor.name) if (node instanceof arkts.MethodDefinition) { - if (hasMemoAnnotation(node.scriptFunction)) { - console.log(`FOUND MEMO METHOD DECLARATION !!!`) + if (methodDefinitionHasMemoAnnotation) { + console.log("MEMO SCRIPT FUNCTION") + // TODO: fix + const updatedNode = arkts.factory.updateMethodDefinition( + node, + 2, + node.name, + arkts.factory.createFunctionExpression( + arkts.factory.updateScriptFunction( + node.scriptFunction, + node.scriptFunction.body, + undefined, + node.scriptFunction.scriptFunctionFlags, + node.scriptFunction.modifiers, + false, + node.scriptFunction.ident, + [...createHiddenParameters(true), ...node.scriptFunction.parameters] + ), + ), + node.modifiers, + false + ) + console.log("END") + return updatedNode } } - if (node instanceof arkts.Identifier) { - const decl = arkts.getDecl(node) + if (node instanceof arkts.CallExpression) { + const expr = node.expression + const decl = arkts.getDecl(expr) if (decl instanceof arkts.MethodDefinition && hasMemoAnnotation(decl.scriptFunction)) { - console.log(`FOUND MEMO METHOD USAGE !!!`) + return arkts.factory.updateCallExpression( + node, + node.expression, + undefined, + [...createHiddenParameters(false), ...node.arguments] + ) } } - return this.visitEachChild(node) + return node } } diff --git a/arkoala-arkts/memo-plugin/src/utils.ts b/arkoala-arkts/memo-plugin/src/utils.ts index 86d5e9730..0e3c4b606 100644 --- a/arkoala-arkts/memo-plugin/src/utils.ts +++ b/arkoala-arkts/memo-plugin/src/utils.ts @@ -13,11 +13,47 @@ * limitations under the License. */ +import * as arkts from "@koalaui/libarkts" + export enum RuntimeNames { __CONTEXT = "__context", __ID = "__id", ANNOTATION = "memo", + CONTEXT = "__memo_context", CONTEXT_TYPE = "__memo_context_type", CONTEXT_TYPE_DEFAULT_IMPORT = "@koalaui/runtime", + ID = "__memo_id", ID_TYPE = "__memo_id_type", } + +export function createContextTypeImportSpecifier(): arkts.ImportSpecifier { + return arkts.factory.createImportSpecifier( + arkts.factory.createIdentifier(RuntimeNames.CONTEXT_TYPE), + arkts.factory.createIdentifier(RuntimeNames.CONTEXT_TYPE), + ) +} + +export function createIdTypeImportSpecifier(): arkts.ImportSpecifier { + return arkts.factory.createImportSpecifier( + arkts.factory.createIdentifier(RuntimeNames.ID_TYPE), + arkts.factory.createIdentifier(RuntimeNames.ID_TYPE), + ) +} + +export function createContextParameter(withType: boolean): arkts.ETSParameterExpression { + return arkts.factory.createParameterDeclaration( + arkts.factory.createIdentifier(RuntimeNames.CONTEXT, + withType ? arkts.factory.createIdentifier(RuntimeNames.CONTEXT_TYPE) : undefined + ), + undefined + ) +} + +export function createIdParameter(withType: boolean): arkts.ETSParameterExpression { + return arkts.factory.createParameterDeclaration( + arkts.factory.createIdentifier(RuntimeNames.ID, + withType ? arkts.factory.createIdentifier(RuntimeNames.ID_TYPE) : undefined + ), + undefined + ) +} -- Gitee From 99b95e5085b5354474815900c0bd9c06a9b4726e Mon Sep 17 00:00:00 2001 From: Igor Loginov Date: Fri, 14 Feb 2025 14:58:52 +0300 Subject: [PATCH 14/14] returned this cool line --- arkoala-arkts/libarkts/package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/arkoala-arkts/libarkts/package.json b/arkoala-arkts/libarkts/package.json index a5f7fa871..c5edbbda6 100644 --- a/arkoala-arkts/libarkts/package.json +++ b/arkoala-arkts/libarkts/package.json @@ -4,7 +4,8 @@ "main": "./build/src/es2panda.js", "types": "./build/src/arkts-api/index.d.ts", "exports": { - ".": "./build/src/arkts-api/index.js" + ".": "./build/src/arkts-api/index.js", + "./plugins/*": "./plugins/build/src/*.js" }, "files": [ "./build/*" -- Gitee