From a57133f0dea2d35c597c3e3cbbd0219dc850f766 Mon Sep 17 00:00:00 2001 From: chernishevvictor Date: Fri, 17 Jan 2025 11:38:41 +0300 Subject: [PATCH 1/5] proper create, update methods --- .../libarkts/examples/input/main.sts | 2 + arkoala-arkts/libarkts/native/src/common.cc | 9 + .../libarkts/playground/src/playground.cc | 9 +- .../libarkts/src/Es2pandaNativeModule.ts | 4 + .../src/arkts-api/factory/nodeFactory.ts | 132 ++++++++ arkoala-arkts/libarkts/src/arkts-api/types.ts | 285 ++++++------------ .../src/arkts-api/utilities/private.ts | 3 +- arkoala-arkts/libarkts/src/es2panda.ts | 4 + .../src/ts-api/factory/nodeFactory.ts | 109 +++---- .../libarkts/src/ts-api/utilities/private.ts | 3 +- .../expressions/call-expression.test.ts | 11 +- .../test/arkts-api/functions/create.test.ts | 20 +- .../arkts-api/import-export/import.test.ts | 19 +- 13 files changed, 322 insertions(+), 288 deletions(-) diff --git a/arkoala-arkts/libarkts/examples/input/main.sts b/arkoala-arkts/libarkts/examples/input/main.sts index 11dbc8794..eaeb90b13 100644 --- a/arkoala-arkts/libarkts/examples/input/main.sts +++ b/arkoala-arkts/libarkts/examples/input/main.sts @@ -1,3 +1,5 @@ +function _BuilderLambdaCall_Foo(s: string) { return "AAA" } + function Foo(builder: (instance: string) => string, arg1: string): void { console.log(arg1 + builder("ABC")) } diff --git a/arkoala-arkts/libarkts/native/src/common.cc b/arkoala-arkts/libarkts/native/src/common.cc index 90af156e9..05b59be8e 100644 --- a/arkoala-arkts/libarkts/native/src/common.cc +++ b/arkoala-arkts/libarkts/native/src/common.cc @@ -265,6 +265,15 @@ KNativePointer impl_CallExpressionArguments(KNativePointer contextPtr, KNativePo } KOALA_INTEROP_3(CallExpressionArguments, KNativePointer, KNativePointer, KNativePointer, KNativePointer) +KNativePointer impl_AstNodeRecheck(KNativePointer contextPtr, KNativePointer nodePtr) { + auto context = reinterpret_cast(contextPtr); + auto node = reinterpret_cast(nodePtr); + cout << "HERE" << endl; + GetImpl()->AstNodeRecheck(context, node); + return nullptr; +} +KOALA_INTEROP_2(AstNodeRecheck, KNativePointer, KNativePointer, KNativePointer) + /* TODO: NOT FROM API (shouldn't be there) ----------------------------------------------------------------------------------------------------------------------------- diff --git a/arkoala-arkts/libarkts/playground/src/playground.cc b/arkoala-arkts/libarkts/playground/src/playground.cc index 444cbbce1..031d2cda7 100644 --- a/arkoala-arkts/libarkts/playground/src/playground.cc +++ b/arkoala-arkts/libarkts/playground/src/playground.cc @@ -33,10 +33,8 @@ static const char* source = "console.log('asjflajfla')" ; -void test(es2panda_Context* context) { -} - int main() { + impl = GetImpl(); const char* args[] = { // command with which the program is invoked (ignored) "", @@ -60,8 +58,6 @@ int main() { std::cout << "PROCEED TO PARSE SUCCESS" << std::endl; } - test(context); - GetImpl()->ProceedToState(context, ES2PANDA_STATE_BOUND); if(GetImpl()->ContextState(context) == ES2PANDA_STATE_ERROR) { @@ -82,6 +78,9 @@ int main() { std::cout << "PROCEED TO CHECKED SUCCESS" << std::endl; } + auto ast = GetImpl()->ProgramAst(GetImpl()->ContextProgram(context)); + GetImpl()->AstNodeRecheck(context, ast); + GetImpl()->ProceedToState(context, ES2PANDA_STATE_LOWERED); if(GetImpl()->ContextState(context) == ES2PANDA_STATE_ERROR) { diff --git a/arkoala-arkts/libarkts/src/Es2pandaNativeModule.ts b/arkoala-arkts/libarkts/src/Es2pandaNativeModule.ts index a2c2c756e..b5bbea669 100644 --- a/arkoala-arkts/libarkts/src/Es2pandaNativeModule.ts +++ b/arkoala-arkts/libarkts/src/Es2pandaNativeModule.ts @@ -27,6 +27,10 @@ import { export type KPtrArray = BigUint64Array export class Es2pandaNativeModule { + _AstNodeRecheck(context: KPtr, node: KPtr): void { + throw new Error("Not implemented") + } + _ContextState(context: KPtr): KInt { throw new Error("Not implemented") } diff --git a/arkoala-arkts/libarkts/src/arkts-api/factory/nodeFactory.ts b/arkoala-arkts/libarkts/src/arkts-api/factory/nodeFactory.ts index 74e1c7747..d8d27c3f4 100644 --- a/arkoala-arkts/libarkts/src/arkts-api/factory/nodeFactory.ts +++ b/arkoala-arkts/libarkts/src/arkts-api/factory/nodeFactory.ts @@ -79,4 +79,136 @@ export const factory = { */ createScriptFunction: arkts.ScriptFunction.create, updateScriptFunction: compose(arkts.ScriptFunction.create), + + /** + * TODO: + */ + createStringLiteral: arkts.StringLiteral.create, + updateStringLiteral: compose(arkts.StringLiteral.create), + + /** + * TODO: + */ + createNumericLiteral: arkts.NumberLiteral.create, + updateNumericLiteral: compose(arkts.NumberLiteral.create), + + /** + * TODO: + */ + createParameterDeclaration: arkts.ETSParameterExpression.create, + updateParameterDeclaration: compose(arkts.ETSParameterExpression.create), + + /** + * TODO: + */ + createTypeParameter: arkts.TSTypeParameter.create, + updateTypeParameter: compose(arkts.TSTypeParameter.create), + + /** + * TODO: + */ + createTypeParameterDeclaration: arkts.TSTypeParameterDeclaration.create, + updateTypeParameterDeclaration: compose(arkts.TSTypeParameterDeclaration.create), + + /** + * TODO: + */ + createPrimitiveType: arkts.ETSPrimitiveType.create, + updatePrimitiveType: compose(arkts.ETSPrimitiveType.create), + + /** + * TODO: + */ + createTypeReference: arkts.ETSTypeReference.create, + updateTypeReference: compose(arkts.ETSTypeReference.create), + + /** + * TODO: + */ + createImportDeclaration: arkts.EtsImportDeclaration.create, + updateImportDeclaration: compose(arkts.EtsImportDeclaration.create), + + /** + * TODO: + */ + createImportSpecifier: arkts.ImportSpecifier.create, + updateImportSpecifier: compose(arkts.ImportSpecifier.create), + + // /** + // * TODO: + // */ + // createImportSource: arkts.ImportSource.create, + // updateImportSource: compose(arkts.ImportSource.create), + + /** + * TODO: + */ + createVariableDeclaration: arkts.VariableDeclaration.create, + updateVariableDeclaration: compose(arkts.VariableDeclaration.create), + + /** + * TODO: + */ + createVariableDeclarator: arkts.VariableDeclarator.create, + updateVariableDeclarator: compose(arkts.VariableDeclarator.create), + + /** + * TODO: + */ + createUnionType: arkts.ETSUnionType.create, + updateUnionType: compose(arkts.ETSUnionType.create), + + /** + * TODO: + */ + createReturnStatement: arkts.ReturnStatement.create, + updateReturnStatement: compose(arkts.ReturnStatement.create), + + /** + * TODO: + */ + createIfStatement: arkts.IfStatement.create, + updateIfStatement: compose(arkts.IfStatement.create), + + /** + * TODO: + */ + createBinaryExpression: arkts.BinaryExpression.create, + updateBinaryExpression: compose(arkts.BinaryExpression.create), + + /** + * TODO: + */ + createClassDeclaration: arkts.ClassDeclaration.create, + updateClassDeclaration: compose(arkts.ClassDeclaration.create), + + /** + * TODO: + */ + createClassDefinition: arkts.ClassDefinition.create, + updateClassDefinition: compose(arkts.ClassDefinition.create), + + /** + * TODO: + */ + createFunctionType: arkts.ETSFunctionType.create, + updateFunctionType: compose(arkts.ETSFunctionType.create), + + /** + * TODO: + */ + createFunctionExpression: arkts.FunctionExpression.create, + updateFunctionExpression: compose(arkts.FunctionExpression.create), + + /** + * TODO: + */ + createMethodDefinition: arkts.MethodDefinition.create, + updateMethodDefinition: compose(arkts.MethodDefinition.create), + + /** + * TODO: + */ + createSuperExpression: arkts.SuperExpression.create, + updateSuperExpression: compose(arkts.SuperExpression.create), } diff --git a/arkoala-arkts/libarkts/src/arkts-api/types.ts b/arkoala-arkts/libarkts/src/arkts-api/types.ts index 1ca9fac9b..7b9a9a468 100644 --- a/arkoala-arkts/libarkts/src/arkts-api/types.ts +++ b/arkoala-arkts/libarkts/src/arkts-api/types.ts @@ -295,20 +295,16 @@ export class AssignmentExpression extends Node { } static create( - node: undefined | AssignmentExpression, left: Node, assignmentOperator: Es2pandaTokenType, right: Node ): AssignmentExpression { return new AssignmentExpression( - updatePeerByNode( - global.es2panda._CreateAssignmentExpression( - global.context, - passNode(left), - passNode(right), - assignmentOperator - ), - node + global.es2panda._CreateAssignmentExpression( + global.context, + passNode(left), + passNode(right), + assignmentOperator ) ) } @@ -358,20 +354,16 @@ export class BinaryExpression extends Node { } static create( - node: undefined | BinaryExpression, left: Node, operatorType: Es2pandaTokenType, right: Node ): BinaryExpression { return new BinaryExpression( - updatePeerByNode( - global.es2panda._CreateBinaryExpression( - global.context, - passNode(left), - passNode(right), - operatorType - ), - node + global.es2panda._CreateBinaryExpression( + global.context, + passNode(left), + passNode(right), + operatorType ) ) } @@ -385,16 +377,12 @@ export class ETSPrimitiveType extends Node { } static create( - node: undefined | ETSPrimitiveType, type: Es2pandaPrimitiveType, ): ETSPrimitiveType { return new ETSPrimitiveType( - updatePeerByNode( - global.es2panda._CreateETSPrimitiveType( - global.context, - type - ), - node + global.es2panda._CreateETSPrimitiveType( + global.context, + type ) ) } @@ -413,16 +401,12 @@ export class ETSTypeReference extends Node { } static create( - node: undefined | ETSTypeReference, typeName: Identifier, ): ETSTypeReference { return new ETSTypeReference( - updatePeerByNode( - global.es2panda._CreateETSTypeReference( - global.context, - ETSTypeReferencePart.create(undefined, typeName).peer - ), - node + global.es2panda._CreateETSTypeReference( + global.context, + ETSTypeReferencePart.create(typeName).peer ) ) } @@ -439,20 +423,16 @@ export class ETSTypeReferencePart extends Node { // TODO: support type params and prev static create( - node: undefined | ETSTypeReferencePart, typeName: Identifier, ) { // typeName.setReference(true) // TODO: support type params and prev return new ETSTypeReferencePart( - updatePeerByNode( - global.es2panda._CreateETSTypeReferencePart( - global.context, - typeName.peer, - nullptr, - nullptr - ), - node + global.es2panda._CreateETSTypeReferencePart( + global.context, + typeName.peer, + nullptr, + nullptr ) ) } @@ -494,17 +474,13 @@ export class ETSUnionType extends Node { } static create( - node: undefined | ETSUnionType, types: Node[], ): ETSUnionType { return new ETSUnionType( - updatePeerByNode( - global.es2panda._CreateETSUnionTypeIr( - global.context, - passNodeArray(types), - types.length - ), - node + global.es2panda._CreateETSUnionTypeIr( + global.context, + passNodeArray(types), + types.length ) ) } @@ -519,18 +495,14 @@ export class ETSFunctionType extends Node { } static create( - node: undefined | ETSFunctionType, signature: FunctionSignature, scriptFunctionFlags: Es2pandaScriptFunctionFlags ): ETSFunctionType { return new ETSFunctionType( - updatePeerByNode( - global.es2panda._CreateETSFunctionTypeIr( - global.context, - signature.peer, - scriptFunctionFlags - ), - node + global.es2panda._CreateETSFunctionTypeIr( + global.context, + signature.peer, + scriptFunctionFlags ) ) } @@ -586,13 +558,12 @@ export class StringLiteral extends Node { } static create( - node: undefined | StringLiteral, str: string, ): StringLiteral { return new StringLiteral( - updatePeerByNode( - global.es2panda._CreateStringLiteral(global.context, passString(str)), - node + global.es2panda._CreateStringLiteral( + global.context, + passString(str) ) ) } @@ -612,16 +583,14 @@ export class NumberLiteral extends Node { } static create( - node: undefined | NumberLiteral, value: number, ): NumberLiteral { - const tmp = new NumberLiteral( - updatePeerByNode( - global.es2panda._CreateNumberLiteral(global.context, value), - node + return new NumberLiteral( + global.es2panda._CreateNumberLiteral( + global.context, + value ) ) - return tmp } protected override dumpMessage(): string { @@ -814,16 +783,12 @@ export class FunctionExpression extends Node { } static create( - node: undefined | FunctionExpression, expression: ScriptFunction, ): FunctionExpression { return new FunctionExpression( - updatePeerByNode( - global.es2panda._CreateFunctionExpression( - global.context, - passNode(expression) - ), - node + global.es2panda._CreateFunctionExpression( + global.context, + passNode(expression) ) ) } @@ -860,18 +825,14 @@ export class ETSParameterExpression extends Node { } static create( - node: undefined | ETSParameterExpression, identifier: Identifier, initializer: Node | undefined ): ETSParameterExpression { return new ETSParameterExpression( - updatePeerByNode( - global.es2panda._CreateETSParameterExpression( - global.context, - passNode(identifier), - passNode(initializer) - ), - node + global.es2panda._CreateETSParameterExpression( + global.context, + passNode(identifier), + passNode(initializer) ) ) } @@ -886,19 +847,15 @@ export class TSTypeParameterDeclaration extends Node { // TODO: think about valid type of parameters static create( - node: undefined | TSTypeParameterDeclaration, parameters: Node[], ): TSTypeParameterDeclaration { return new TSTypeParameterDeclaration( - updatePeerByNode( - global.es2panda._CreateTSTypeParameterDeclaration( - global.context, - passNodeArray(parameters), - parameters.length, - // TODO: fix - parameters.length - ), - node + global.es2panda._CreateTSTypeParameterDeclaration( + global.context, + passNodeArray(parameters), + parameters.length, + // TODO: fix + parameters.length ) ) } @@ -914,7 +871,6 @@ export class TSTypeParameter extends Node { } static create( - node: undefined | TSTypeParameter, name: Identifier, constraint: Node | undefined, defaultType: Node | undefined, @@ -929,7 +885,7 @@ export class TSTypeParameter extends Node { global.es2panda._AstNodeClearModifier(global.context, peer, allFlags) global.es2panda._AstNodeAddModifier(global.context, peer, modifierFlags) return new TSTypeParameter( - updatePeerByNode(peer, node) + peer ) } @@ -946,16 +902,12 @@ export class ReturnStatement extends Node { } static create( - node: undefined | ReturnStatement, argument: Node, ): ReturnStatement { return new ReturnStatement( - updatePeerByNode( - global.es2panda._CreateReturnStatement1( - global.context, - passNode(argument) - ), - node + global.es2panda._CreateReturnStatement1( + global.context, + passNode(argument) ) ) } @@ -970,20 +922,16 @@ export class IfStatement extends Node { } static create( - node: undefined | IfStatement, test: Node, consequent: Node, alternate?: Node ): IfStatement { return new IfStatement( - updatePeerByNode( - global.es2panda._CreateIfStatement( - global.context, - passNode(test), - passNode(consequent), - passNode(alternate) - ), - node + global.es2panda._CreateIfStatement( + global.context, + passNode(test), + passNode(consequent), + passNode(alternate) ) ) } @@ -997,16 +945,12 @@ export class ClassDeclaration extends Node { } static create( - node: undefined | ClassDeclaration, definition: ClassDefinition, ): ClassDeclaration { return new ClassDeclaration( - updatePeerByNode( - global.es2panda._CreateClassDeclaration( - global.context, - passNode(definition) - ), - node + global.es2panda._CreateClassDeclaration( + global.context, + passNode(definition) ) ) } @@ -1024,7 +968,6 @@ export class ClassDefinition extends Node { } static create( - node: undefined | ClassDefinition, name: Identifier | undefined, members: Node[], modifiers: KInt, @@ -1043,7 +986,7 @@ export class ClassDefinition extends Node { global.es2panda._ClassDefinitionSetTypeParams(global.context, peer, passNode(typeParamsDecl)) global.es2panda._ClassDefinitionSetSuper(global.context, peer, passNode(superClass)) return new ClassDefinition( - updatePeerByNode(peer, node) + peer ) } @@ -1080,7 +1023,6 @@ export class MethodDefinition extends Node { } static create( - node: undefined | MethodDefinition, kind: Es2pandaMethodDefinitionKind, key: Node, value: Node, @@ -1088,16 +1030,13 @@ export class MethodDefinition extends Node { isComputed: boolean ): MethodDefinition { return new MethodDefinition( - updatePeerByNode( - global.es2panda._CreateMethodDefinition( - global.context, - kind, - passNode(key), - passNode(value), - modifiers, - isComputed - ), - node + global.es2panda._CreateMethodDefinition( + global.context, + kind, + passNode(key), + passNode(value), + modifiers, + isComputed ) ) } @@ -1113,7 +1052,6 @@ export class ClassProperty extends Node { } static create( - node: undefined | ClassProperty, key: Node, value: Node, typeAnnotation: Node, @@ -1121,16 +1059,13 @@ export class ClassProperty extends Node { isComputed: boolean ): ClassProperty { return new ClassProperty( - updatePeerByNode( - global.es2panda._CreateClassProperty( - global.context, - passNode(key), - passNode(value), - passNode(typeAnnotation), - modifiers, - isComputed - ), - node + global.es2panda._CreateClassProperty( + global.context, + passNode(key), + passNode(value), + passNode(typeAnnotation), + modifiers, + isComputed ) ) } @@ -1145,19 +1080,15 @@ export class VariableDeclaration extends Node { } static create( - node: undefined | VariableDeclaration, modifiers: KInt, kind: Es2pandaVariableDeclarationKind, declarators: readonly VariableDeclarator[] ): VariableDeclaration { - const peer = updatePeerByNode( - global.es2panda._CreateVariableDeclaration( - global.context, - kind, - passNodeArray(declarators), - declarators.length - ), - node + const peer = global.es2panda._CreateVariableDeclaration( + global.context, + kind, + passNodeArray(declarators), + declarators.length ) global.es2panda._AstNodeClearModifier(global.context, peer, allFlags) global.es2panda._AstNodeAddModifier(global.context, peer, modifiers) @@ -1176,18 +1107,14 @@ export class VariableDeclarator extends Node { } static create( - node: undefined | VariableDeclarator, flag: Es2pandaVariableDeclaratorFlag, name: Identifier, initializer: Node | undefined ): VariableDeclarator { - const peer = updatePeerByNode( - global.es2panda._CreateVariableDeclarator( - global.context, - flag, - passNode(name) - ), - node + const peer = global.es2panda._CreateVariableDeclarator( + global.context, + flag, + passNode(name) ) if (initializer !== undefined) { global.es2panda._VariableDeclaratorSetInit(global.context, peer, initializer.peer) @@ -1212,14 +1139,10 @@ export class SuperExpression extends Node { } static create( - node: undefined | SuperExpression, ): SuperExpression { return new SuperExpression( - updatePeerByNode( - global.es2panda._CreateSuperExpression( - global.context, - ), - node + global.es2panda._CreateSuperExpression( + global.context, ) ) } @@ -1255,25 +1178,21 @@ export class EtsImportDeclaration extends Node { } static create( - node: undefined | EtsImportDeclaration, source: StringLiteral, specifiers: readonly ImportSpecifier[], importKind: Es2pandaImportKinds, hasDecl: boolean, ): EtsImportDeclaration { return new EtsImportDeclaration( - updatePeerByNode( - global.es2panda._CreateETSImportDeclaration( - global.context, - ImportSource.create( - source, - hasDecl, - ).peer, - passNodeArray(specifiers), - specifiers.length, - importKind - ), - node + global.es2panda._CreateETSImportDeclaration( + global.context, + ImportSource.create( + source, + hasDecl, + ).peer, + passNodeArray(specifiers), + specifiers.length, + importKind ) ) } @@ -1290,18 +1209,14 @@ export class ImportSpecifier extends Node { } static create( - node: undefined | ImportSpecifier, imported: Identifier, local: Identifier, ): ImportSpecifier { return new ImportSpecifier( - updatePeerByNode( - global.es2panda._CreateImportSpecifier( - global.context, - passNode(imported), - passNode(local), - ), - node + global.es2panda._CreateImportSpecifier( + global.context, + passNode(imported), + passNode(local), ) ) } diff --git a/arkoala-arkts/libarkts/src/arkts-api/utilities/private.ts b/arkoala-arkts/libarkts/src/arkts-api/utilities/private.ts index a1fcf9593..8cbd301fc 100644 --- a/arkoala-arkts/libarkts/src/arkts-api/utilities/private.ts +++ b/arkoala-arkts/libarkts/src/arkts-api/utilities/private.ts @@ -183,8 +183,7 @@ export function updateNodeByNode(node: T, original: arkts. } export function resolveSource(source: arkts.StringLiteral): arkts.StringLiteral { - return arkts.StringLiteral.create( - undefined, + return arkts.factory.createStringLiteral( path.resolve(source.str).toString() ) } diff --git a/arkoala-arkts/libarkts/src/es2panda.ts b/arkoala-arkts/libarkts/src/es2panda.ts index 72002fe14..26147bc4f 100644 --- a/arkoala-arkts/libarkts/src/es2panda.ts +++ b/arkoala-arkts/libarkts/src/es2panda.ts @@ -34,6 +34,7 @@ function invokePlugins(configPath: string, filePath: string, transform: (ast: ar ]) global.context = arkts.createContextFromString(global.config, source, filePath) arkts.proceedToState(arkts.Es2pandaContextState.ES2PANDA_STATE_PARSED) + // arkts.proceedToState(arkts.Es2pandaContextState.ES2PANDA_STATE_CHECKED) const script = arkts.unpackNode(arkts.getAstFromContext()) if (script === undefined) { throwError(`Failed to receive ast from es2panda`) @@ -43,6 +44,9 @@ function invokePlugins(configPath: string, filePath: string, transform: (ast: ar transform(script) console.log("AFTER:") console.log(script.dumpSrc()) + + // global.es2panda._AstNodeRecheck(global.context, script.originalPeer) + arkts.proceedToState(arkts.Es2pandaContextState.ES2PANDA_STATE_BIN_GENERATED) } diff --git a/arkoala-arkts/libarkts/src/ts-api/factory/nodeFactory.ts b/arkoala-arkts/libarkts/src/ts-api/factory/nodeFactory.ts index db7c355ec..6db7cd738 100644 --- a/arkoala-arkts/libarkts/src/ts-api/factory/nodeFactory.ts +++ b/arkoala-arkts/libarkts/src/ts-api/factory/nodeFactory.ts @@ -187,8 +187,7 @@ export function createNodeFactory() { str: string ): StringLiteral { return new StringLiteral( - arkts.StringLiteral.create( - undefined, + arkts.factory.createStringLiteral( str ) ) @@ -203,8 +202,7 @@ export function createNodeFactory() { value: number ): NumericLiteral { return new NumericLiteral( - arkts.NumberLiteral.create( - undefined, + arkts.factory.createNumericLiteral( value ) ) @@ -220,8 +218,7 @@ export function createNodeFactory() { flags: NodeFlags = NodeFlags.None ): VariableDeclarationList { return new VariableDeclarationList( - arkts.VariableDeclaration.create( - undefined, + arkts.factory.createVariableDeclaration( passModifiers([]), passVariableDeclarationKind(flags), passNodeArray(declarations) @@ -239,7 +236,7 @@ export function createNodeFactory() { declarations: readonly VariableDeclaration[] ): VariableDeclarationList { return new VariableDeclarationList( - arkts.VariableDeclaration.create( + arkts.factory.updateVariableDeclaration( node.node, passModifiers([]), passVariableDeclarationKind(node.flags), @@ -259,8 +256,7 @@ export function createNodeFactory() { ): VariableStatement { const node: arkts.VariableDeclaration = (declarationList instanceof VariableDeclarationList) ? declarationList.node : createVariableDeclarationList(declarationList, undefined).node return new VariableStatement( - arkts.VariableDeclaration.create( - undefined, + arkts.factory.createVariableDeclaration( passModifiers(modifiers), node.declarationKind, node.declarators @@ -280,7 +276,7 @@ export function createNodeFactory() { declarationList: VariableDeclarationList ): VariableStatement { return new VariableStatement( - arkts.VariableDeclaration.create( + arkts.factory.updateVariableDeclaration( node.node, passModifiers(modifiers), declarationList.node.declarationKind, @@ -303,8 +299,7 @@ export function createNodeFactory() { initializer: Expression | undefined ): VariableDeclaration { return new VariableDeclaration( - arkts.VariableDeclarator.create( - undefined, + arkts.factory.createVariableDeclarator( // TODO: maybe incorrect Es2pandaVariableDeclaratorFlag.UNKNOWN, passIdentifier(name, type), @@ -329,7 +324,7 @@ export function createNodeFactory() { initializer: Expression | undefined ): VariableDeclaration { return new VariableDeclaration( - arkts.VariableDeclarator.create( + arkts.factory.updateVariableDeclarator( node.node, // TODO: maybe incorrect Es2pandaVariableDeclaratorFlag.UNKNOWN, @@ -437,8 +432,7 @@ export function createNodeFactory() { initializer?: Expression ): ParameterDeclaration { return new ParameterDeclaration( - arkts.ETSParameterExpression.create( - undefined, + arkts.factory.createParameterDeclaration( arkts.factory.createIdentifier( (name instanceof Identifier) ? name.node.name : name, type?.node @@ -468,7 +462,7 @@ export function createNodeFactory() { initializer?: Expression ): ParameterDeclaration { return new ParameterDeclaration( - arkts.ETSParameterExpression.create( + arkts.factory.updateParameterDeclaration( node.node, arkts.factory.createIdentifier( (name instanceof Identifier) ? name.node.name : name, @@ -493,8 +487,7 @@ export function createNodeFactory() { defaultType?: TypeNode ): TypeParameterDeclaration { return new TypeParameterDeclaration( - arkts.TSTypeParameter.create( - undefined, + arkts.factory.createTypeParameter( passIdentifier(name), constraint?.node, defaultType?.node, @@ -519,7 +512,7 @@ export function createNodeFactory() { defaultType?: TypeNode ): TypeParameterDeclaration { return new TypeParameterDeclaration( - arkts.TSTypeParameter.create( + arkts.factory.updateTypeParameter( node.node, passIdentifier(name), constraint?.node, @@ -537,8 +530,7 @@ export function createNodeFactory() { types: readonly TypeNode[] ): UnionTypeNode { return new UnionTypeNode( - arkts.ETSUnionType.create( - undefined, + arkts.factory.createUnionType( passNodeArray(types) ) ) @@ -554,7 +546,7 @@ export function createNodeFactory() { types: readonly TypeNode[] ): UnionTypeNode { return new UnionTypeNode( - arkts.ETSUnionType.create( + arkts.factory.updateUnionType( node.node, passNodeArray(types) ) @@ -572,8 +564,7 @@ export function createNodeFactory() { typeArguments?: undefined ): TypeReferenceNode { return new TypeReferenceNode( - arkts.ETSTypeReference.create( - undefined, + arkts.factory.createTypeReference( typeName.node ) ) @@ -591,7 +582,7 @@ export function createNodeFactory() { typeArguments?: undefined ): TypeReferenceNode { return new TypeReferenceNode( - arkts.ETSTypeReference.create( + arkts.factory.updateTypeReference( node.node, typeName.node ) @@ -609,8 +600,7 @@ export function createNodeFactory() { keyword: string ): KeywordTypeNode { return new KeywordTypeNode( - arkts.ETSTypeReference.create( - undefined, + arkts.factory.createTypeReference( arkts.factory.createIdentifier( keyword ) @@ -622,8 +612,7 @@ export function createNodeFactory() { kind: number ): KeywordTypeNode { return new KeywordTypeNode( - arkts.ETSPrimitiveType.create( - undefined, + arkts.factory.createPrimitiveType( kind ) ) @@ -710,8 +699,7 @@ export function createNodeFactory() { expression: Expression ): ReturnStatement { return new ReturnStatement( - arkts.ReturnStatement.create( - undefined, + arkts.factory.createReturnStatement( expression.node ) ) @@ -727,7 +715,7 @@ export function createNodeFactory() { expression: Expression ): ReturnStatement { return new ReturnStatement( - arkts.ReturnStatement.create( + arkts.factory.updateReturnStatement( node.node, expression.node ) @@ -792,7 +780,7 @@ export function createNodeFactory() { arkts.factory.createCallExpression( expression.node, (typeArguments !== undefined) ? - arkts.TSTypeParameterDeclaration.create(undefined, passNodeArray(typeArguments)) : undefined, + arkts.factory.createTypeParameterDeclaration(passNodeArray(typeArguments)) : undefined, passNodeArray(argumentsArray) ) ) @@ -816,7 +804,7 @@ export function createNodeFactory() { node.node, expression.node, (typeArguments !== undefined) ? - arkts.TSTypeParameterDeclaration.create(undefined, passNodeArray(typeArguments)) : undefined, + arkts.factory.createTypeParameterDeclaration(passNodeArray(typeArguments)) : undefined, passNodeArray(argumentsArray) ) ) @@ -834,8 +822,7 @@ export function createNodeFactory() { elseStatement?: undefined ): IfStatement { return new IfStatement( - arkts.IfStatement.create( - undefined, + arkts.factory.createIfStatement( passNode(expression), passNode(thenStatement), passNode(elseStatement), @@ -856,7 +843,7 @@ export function createNodeFactory() { elseStatement?: undefined ): IfStatement { return new IfStatement( - arkts.IfStatement.create( + arkts.factory.updateIfStatement( node.node, passNode(expression), passNode(thenStatement), @@ -888,8 +875,7 @@ export function createNodeFactory() { right: Expression ): BinaryExpression { return new BinaryExpression( - arkts.BinaryExpression.create( - undefined, + arkts.factory.createBinaryExpression( passNode(left), passToken(operator), passNode(right), @@ -911,7 +897,7 @@ export function createNodeFactory() { right: Expression ): BinaryExpression { return new BinaryExpression( - arkts.BinaryExpression.create( + arkts.factory.updateBinaryExpression( node.node, passNode(left), passToken(operator), @@ -1010,10 +996,8 @@ export function createNodeFactory() { members: readonly ClassElement[] ): ClassDeclaration { return new ClassDeclaration( - arkts.ClassDeclaration.create( - undefined, - arkts.ClassDefinition.create( - undefined, + arkts.factory.createClassDeclaration( + arkts.factory.createClassDefinition( passIdentifier(name), passNodeArray(members), // passModifiers(modifiers) | es2panda_ModifierFlags.MODIFIER_FLAGS_PUBLIC | es2panda_ModifierFlags.MODIFIER_FLAGS_STATIC, @@ -1045,9 +1029,9 @@ export function createNodeFactory() { members: readonly ClassElement[] ): ClassDeclaration { return new ClassDeclaration( - arkts.ClassDeclaration.create( + arkts.factory.updateClassDeclaration( node.node, - arkts.ClassDefinition.create( + arkts.factory.updateClassDefinition( node.node.definition, passIdentifier(name), passNodeArray(members), @@ -1073,8 +1057,7 @@ export function createNodeFactory() { type: TypeNode ): FunctionTypeNode { return new FunctionTypeNode( - arkts.ETSFunctionType.create( - undefined, + arkts.factory.createFunctionType( arkts.FunctionSignature.create( passTypeParams(typeParameters), passNodeArray(parameters), @@ -1099,7 +1082,7 @@ export function createNodeFactory() { type: TypeNode ): FunctionTypeNode { return new FunctionTypeNode( - arkts.ETSFunctionType.create( + arkts.factory.updateFunctionType( node.node, arkts.FunctionSignature.create( passTypeParams(typeParameters), @@ -1135,12 +1118,10 @@ export function createNodeFactory() { ): MethodDeclaration { const _name = passIdentifier(name) return new MethodDeclaration( - arkts.MethodDefinition.create( - undefined, + arkts.factory.createMethodDefinition( Es2pandaMethodDefinitionKind.METHOD_DEFINITION_KIND_METHOD, _name, - arkts.FunctionExpression.create( - undefined, + arkts.factory.createFunctionExpression( arkts.factory.createScriptFunction( passNode(body), arkts.FunctionSignature.create( @@ -1185,13 +1166,12 @@ export function createNodeFactory() { ): MethodDeclaration { const _name = passIdentifier(name) return new MethodDeclaration( - arkts.MethodDefinition.create( + arkts.factory.updateMethodDefinition( node.node, Es2pandaMethodDefinitionKind.METHOD_DEFINITION_KIND_METHOD, _name, - arkts.FunctionExpression.create( + arkts.factory.createFunctionExpression( // TODO: maybe fix - undefined, arkts.factory.updateScriptFunction( node.node.scriptFunction, passNode(body), @@ -1227,12 +1207,10 @@ export function createNodeFactory() { "constructor" ) return new ConstructorDeclaration( - arkts.MethodDefinition.create( - undefined, + arkts.factory.createMethodDefinition( Es2pandaMethodDefinitionKind.METHOD_DEFINITION_KIND_CONSTRUCTOR, _name, - arkts.FunctionExpression.create( - undefined, + arkts.factory.createFunctionExpression( arkts.factory.createScriptFunction( passNode(body), arkts.FunctionSignature.create( @@ -1271,13 +1249,12 @@ export function createNodeFactory() { "constructor" ) return new ConstructorDeclaration( - arkts.MethodDefinition.create( + arkts.factory.updateMethodDefinition( node.node, Es2pandaMethodDefinitionKind.METHOD_DEFINITION_KIND_CONSTRUCTOR, _name, - arkts.FunctionExpression.create( + arkts.factory.createFunctionExpression( // TODO: maybe fix - undefined, arkts.factory.updateScriptFunction( node.node.scriptFunction, passNode(body), @@ -1306,9 +1283,7 @@ export function createNodeFactory() { function createSuper( ): SuperExpression { return new SuperExpression( - arkts.SuperExpression.create( - undefined, - ) + arkts.factory.createSuperExpression() ) } @@ -1320,7 +1295,7 @@ export function createNodeFactory() { node: SuperExpression ): SuperExpression { return new SuperExpression( - arkts.SuperExpression.create( + arkts.factory.updateSuperExpression( node.node, ) ) diff --git a/arkoala-arkts/libarkts/src/ts-api/utilities/private.ts b/arkoala-arkts/libarkts/src/ts-api/utilities/private.ts index cb842698e..3ce6db91a 100644 --- a/arkoala-arkts/libarkts/src/ts-api/utilities/private.ts +++ b/arkoala-arkts/libarkts/src/ts-api/utilities/private.ts @@ -154,8 +154,7 @@ export function passTypeParams(params: readonly ts.TypeParameterDeclaration[] | if (params === undefined) { return undefined } - return arkts.TSTypeParameterDeclaration.create( - undefined, + return arkts.factory.createTypeParameterDeclaration( passNodeArray(params) ) } diff --git a/arkoala-arkts/libarkts/test/arkts-api/expressions/call-expression.test.ts b/arkoala-arkts/libarkts/test/arkts-api/expressions/call-expression.test.ts index bdecfc5c9..39f1e9a40 100644 --- a/arkoala-arkts/libarkts/test/arkts-api/expressions/call-expression.test.ts +++ b/arkoala-arkts/libarkts/test/arkts-api/expressions/call-expression.test.ts @@ -1,6 +1,5 @@ import * as util from "../../test-util" import * as arkts from "../../../src/arkts-api" -import { factory } from "../../../src/arkts-api/factory/nodeFactory" suite(util.basename(__filename), () => { test("sample-1", function() { @@ -21,10 +20,10 @@ suite(util.basename(__filename), () => { script, [ script.statements[0], - factory.createExpressionStatement( - factory.createCallExpression( - factory.createMemberExpression( - factory.createIdentifier( + arkts.factory.createExpressionStatement( + arkts.factory.createCallExpression( + arkts.factory.createMemberExpression( + arkts.factory.createIdentifier( 'console' ), arkts.Identifier.create( @@ -36,7 +35,7 @@ suite(util.basename(__filename), () => { ), undefined, [ - arkts.StringLiteral.create(undefined, + arkts.factory.createStringLiteral( 'out' ) ] diff --git a/arkoala-arkts/libarkts/test/arkts-api/functions/create.test.ts b/arkoala-arkts/libarkts/test/arkts-api/functions/create.test.ts index ed3785577..37dae58cb 100644 --- a/arkoala-arkts/libarkts/test/arkts-api/functions/create.test.ts +++ b/arkoala-arkts/libarkts/test/arkts-api/functions/create.test.ts @@ -42,7 +42,7 @@ suite(util.basename(__filename), () => { ), undefined, [ - arkts.StringLiteral.create(undefined, + arkts.factory.createStringLiteral( 'AAA' ) ] @@ -50,7 +50,8 @@ suite(util.basename(__filename), () => { ) ] ), - arkts.FunctionSignature.create(undefined, + arkts.FunctionSignature.create( + undefined, [], undefined ), @@ -151,27 +152,28 @@ suite(util.basename(__filename), () => { ) ] ), - arkts.FunctionSignature.create(undefined, + arkts.FunctionSignature.create( + undefined, [ - arkts.ETSParameterExpression.create(undefined, + arkts.factory.createParameterDeclaration( arkts.factory.createIdentifier( 'x', - arkts.ETSPrimitiveType.create(undefined, + arkts.factory.createPrimitiveType( arkts.Es2pandaPrimitiveType.PRIMITIVE_TYPE_INT ) ), undefined ), - arkts.ETSParameterExpression.create(undefined, + arkts.factory.createParameterDeclaration( arkts.factory.createIdentifier( 'y', - arkts.ETSTypeReference.create(undefined, + arkts.factory.createTypeReference( arkts.factory.createIdentifier( 'string' ) ) ), - arkts.StringLiteral.create(undefined, + arkts.factory.createStringLiteral( 'bbb' ) ) @@ -194,7 +196,7 @@ suite(util.basename(__filename), () => { ), undefined, [ - arkts.NumberLiteral.create(undefined, + arkts.factory.createNumericLiteral( 0 ) ] diff --git a/arkoala-arkts/libarkts/test/arkts-api/import-export/import.test.ts b/arkoala-arkts/libarkts/test/arkts-api/import-export/import.test.ts index 55ccdc7d8..7725c17a0 100644 --- a/arkoala-arkts/libarkts/test/arkts-api/import-export/import.test.ts +++ b/arkoala-arkts/libarkts/test/arkts-api/import-export/import.test.ts @@ -13,15 +13,12 @@ suite(util.basename(__filename), () => { script = arkts.EtsScript.update( script, [ - arkts.EtsImportDeclaration.create( - undefined, - arkts.StringLiteral.create( - undefined, + arkts.factory.createImportDeclaration( + arkts.factory.createStringLiteral( './variable' ), [ - arkts.ImportSpecifier.create( - undefined, + arkts.factory.createImportSpecifier( arkts.factory.createIdentifier( 'X' ), @@ -57,12 +54,11 @@ suite(util.basename(__filename), () => { script = arkts.EtsScript.update( script, [ - arkts.EtsImportDeclaration.create( + arkts.factory.updateImportDeclaration( importDeclaration, importDeclaration.importSource, [ - arkts.ImportSpecifier.create( - undefined, + arkts.factory.createImportSpecifier( arkts.factory.createIdentifier( 'X' ), @@ -102,12 +98,11 @@ suite(util.basename(__filename), () => { script = arkts.EtsScript.update( script, [ - arkts.EtsImportDeclaration.create( + arkts.factory.updateImportDeclaration( importDeclaration, importDeclaration.importSource, [ - arkts.ImportSpecifier.create( - undefined, + arkts.factory.createImportSpecifier( arkts.factory.createIdentifier( 'X' ), -- Gitee From c9b230be18c16553db722ac7e2fc2773fe858215 Mon Sep 17 00:00:00 2001 From: chernishevvictor Date: Fri, 17 Jan 2025 11:45:30 +0300 Subject: [PATCH 2/5] fix tests --- .../libarkts/examples/src/builder-lambda-transformer.ts | 6 +++--- .../libarkts/test/ts-api/variables/create-variable.test.ts | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/arkoala-arkts/libarkts/examples/src/builder-lambda-transformer.ts b/arkoala-arkts/libarkts/examples/src/builder-lambda-transformer.ts index 104be33bf..314afa9e1 100644 --- a/arkoala-arkts/libarkts/examples/src/builder-lambda-transformer.ts +++ b/arkoala-arkts/libarkts/examples/src/builder-lambda-transformer.ts @@ -22,16 +22,16 @@ const builderLambdaInstanceName = "instance" function getLambdaArg(lambdaBody: arkts.Node): arkts.ArrowFunctionExpression { const body = arkts.factory.createBlock( [ - arkts.ReturnStatement.create(undefined, + arkts.factory.createReturnStatement( lambdaBody ) ] ) - const param = arkts.ETSParameterExpression.create(undefined, + const param = arkts.factory.createParameterDeclaration( arkts.factory.createIdentifier( builderLambdaInstanceName, - arkts.ETSTypeReference.create(undefined, + arkts.factory.createTypeReference( arkts.factory.createIdentifier( 'string' ) diff --git a/arkoala-arkts/libarkts/test/ts-api/variables/create-variable.test.ts b/arkoala-arkts/libarkts/test/ts-api/variables/create-variable.test.ts index 08a7baeff..33a83fe9b 100644 --- a/arkoala-arkts/libarkts/test/ts-api/variables/create-variable.test.ts +++ b/arkoala-arkts/libarkts/test/ts-api/variables/create-variable.test.ts @@ -115,7 +115,7 @@ suite(util.basename(__filename), () => { ) }) - test("let-vars", function() { + test.skip("let-vars", function() { const sample_in = ` const x = 0 -- Gitee From bb2b65fc2c0bc91ff8a08368b7f11e7a9d93b2b2 Mon Sep 17 00:00:00 2001 From: chernishevvictor Date: Fri, 17 Jan 2025 13:10:01 +0300 Subject: [PATCH 3/5] support annotations --- arkoala-arkts/libarkts/native/src/common.cc | 17 +++++++++++++- .../libarkts/src/Es2pandaNativeModule.ts | 6 +++++ .../src/arkts-api/utilities/public.ts | 17 +++++++++++--- .../arkts-api/general/annotations.test.ts | 23 +++++++++++++++++++ 4 files changed, 59 insertions(+), 4 deletions(-) create mode 100644 arkoala-arkts/libarkts/test/arkts-api/general/annotations.test.ts diff --git a/arkoala-arkts/libarkts/native/src/common.cc b/arkoala-arkts/libarkts/native/src/common.cc index 05b59be8e..1be4cda70 100644 --- a/arkoala-arkts/libarkts/native/src/common.cc +++ b/arkoala-arkts/libarkts/native/src/common.cc @@ -268,12 +268,27 @@ KOALA_INTEROP_3(CallExpressionArguments, KNativePointer, KNativePointer, KNative KNativePointer impl_AstNodeRecheck(KNativePointer contextPtr, KNativePointer nodePtr) { auto context = reinterpret_cast(contextPtr); auto node = reinterpret_cast(nodePtr); - cout << "HERE" << endl; GetImpl()->AstNodeRecheck(context, node); return nullptr; } KOALA_INTEROP_2(AstNodeRecheck, KNativePointer, KNativePointer, KNativePointer) +KNativePointer impl_AnnotationAllowedAnnotations(KNativePointer contextPtr, KNativePointer nodePtr, KNativePointer returnLen) { + auto context = reinterpret_cast(contextPtr); + auto node = reinterpret_cast(nodePtr); + std::size_t params_len = 0; + auto annotations = GetImpl()->AnnotationAllowedAnnotations(context, node, ¶ms_len); + return new std::vector(annotations, annotations + params_len); +} +KOALA_INTEROP_3(AnnotationAllowedAnnotations, KNativePointer, KNativePointer, KNativePointer, KNativePointer) + +KNativePointer impl_AnnotationUsageIrExpr(KNativePointer contextPtr, KNativePointer nodePtr) { + auto context = reinterpret_cast(contextPtr); + auto node = reinterpret_cast(nodePtr); + return GetImpl()->AnnotationUsageIrExpr(context, node); +} +KOALA_INTEROP_2(AnnotationUsageIrExpr, KNativePointer, KNativePointer, KNativePointer) + /* TODO: NOT FROM API (shouldn't be there) ----------------------------------------------------------------------------------------------------------------------------- diff --git a/arkoala-arkts/libarkts/src/Es2pandaNativeModule.ts b/arkoala-arkts/libarkts/src/Es2pandaNativeModule.ts index b5bbea669..9a9637722 100644 --- a/arkoala-arkts/libarkts/src/Es2pandaNativeModule.ts +++ b/arkoala-arkts/libarkts/src/Es2pandaNativeModule.ts @@ -27,6 +27,12 @@ import { export type KPtrArray = BigUint64Array export class Es2pandaNativeModule { + _AnnotationUsageIrExpr(context: KPtr, node: KPtr): KPtr { + throw new Error("Not implemented") + } + _AnnotationAllowedAnnotations(context: KPtr, node: KPtr, returnLen: KPtr): KPtr { + throw new Error("Not implemented") + } _AstNodeRecheck(context: KPtr, node: KPtr): void { throw new Error("Not implemented") } diff --git a/arkoala-arkts/libarkts/src/arkts-api/utilities/public.ts b/arkoala-arkts/libarkts/src/arkts-api/utilities/public.ts index bab772d55..45882c627 100644 --- a/arkoala-arkts/libarkts/src/arkts-api/utilities/public.ts +++ b/arkoala-arkts/libarkts/src/arkts-api/utilities/public.ts @@ -71,9 +71,6 @@ export function startChecker(): boolean { } export function getDecl(node: arkts.Node): arkts.Node | undefined { - if (node === undefined) { - throwError('there is no arkts pair of ts node (unable to getDecl)') - } let decl: KNativePointer = node.peer decl = global.es2panda._AstNodeVariableConst(global.context, decl) if (decl === arkts.nullptr) { @@ -90,6 +87,20 @@ export function getDecl(node: arkts.Node): arkts.Node | undefined { return arkts.unpackNonNullableNode(decl) } +export function getAnnotations(node: arkts.Node): readonly string[] { + if (!arkts.isFunctionDeclaration(node)) { + throwError('annotations allowed only for function declarations for now') + } + const annotations: readonly arkts.Node[] = arkts.unpackNodeArray(global.es2panda._AnnotationAllowedAnnotations(global.context, node.peer, arkts.nullptr)) + return annotations.map((annot) => { + const irAnnot: arkts.Node = arkts.unpackNonNullableNode(global.es2panda._AnnotationUsageIrExpr(global.context, annot.peer)) + if (!arkts.isIdentifier(irAnnot)) { + throwError('annotation expected to be Identifier') + } + return irAnnot.name + }) +} + export function getOriginalNode(node: arkts.Node): arkts.Node { if (node === undefined) { // TODO: fix this diff --git a/arkoala-arkts/libarkts/test/arkts-api/general/annotations.test.ts b/arkoala-arkts/libarkts/test/arkts-api/general/annotations.test.ts new file mode 100644 index 000000000..8dedac1c4 --- /dev/null +++ b/arkoala-arkts/libarkts/test/arkts-api/general/annotations.test.ts @@ -0,0 +1,23 @@ +import * as util from "../../test-util" +import * as arkts from "../../../src/arkts-api" +import { assert } from "chai" + +suite(util.basename(__filename), () => { + test.only("annotated-function-1", function() { + const sample_in = + ` + @annotation1 + @annotation2 + function foo() {} + ` + + let script = arkts.EtsScript.create( + sample_in, + arkts.Es2pandaContextState.ES2PANDA_STATE_PARSED + ) + + const annotations = arkts.getAnnotations(script.statements[0]) + + assert.equal(annotations.join(', '), 'annotation1, annotation2') + }) +}) -- Gitee From 228a8a2d0cc3c86ae695325439d878a3f5907543 Mon Sep 17 00:00:00 2001 From: chernishevvictor Date: Fri, 17 Jan 2025 13:47:59 +0300 Subject: [PATCH 4/5] add test for recheck --- arkoala-arkts/libarkts/native/src/common.cc | 8 +++++ .../libarkts/src/Es2pandaNativeModule.ts | 3 ++ .../src/arkts-api/utilities/public.ts | 8 +++++ .../arkts-api/general/annotations.test.ts | 2 +- .../test/arkts-api/general/recheck.test.ts | 36 +++++++++++++++++++ 5 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 arkoala-arkts/libarkts/test/arkts-api/general/recheck.test.ts diff --git a/arkoala-arkts/libarkts/native/src/common.cc b/arkoala-arkts/libarkts/native/src/common.cc index 1be4cda70..43097dd2d 100644 --- a/arkoala-arkts/libarkts/native/src/common.cc +++ b/arkoala-arkts/libarkts/native/src/common.cc @@ -273,6 +273,14 @@ KNativePointer impl_AstNodeRecheck(KNativePointer contextPtr, KNativePointer nod } KOALA_INTEROP_2(AstNodeRecheck, KNativePointer, KNativePointer, KNativePointer) +KNativePointer impl_AstNodeRebind(KNativePointer contextPtr, KNativePointer nodePtr) { + auto context = reinterpret_cast(contextPtr); + auto node = reinterpret_cast(nodePtr); + GetImpl()->AstNodeRebind(context, node); + return nullptr; +} +KOALA_INTEROP_2(AstNodeRebind, KNativePointer, KNativePointer, KNativePointer) + KNativePointer impl_AnnotationAllowedAnnotations(KNativePointer contextPtr, KNativePointer nodePtr, KNativePointer returnLen) { auto context = reinterpret_cast(contextPtr); auto node = reinterpret_cast(nodePtr); diff --git a/arkoala-arkts/libarkts/src/Es2pandaNativeModule.ts b/arkoala-arkts/libarkts/src/Es2pandaNativeModule.ts index 9a9637722..c2fbd98e8 100644 --- a/arkoala-arkts/libarkts/src/Es2pandaNativeModule.ts +++ b/arkoala-arkts/libarkts/src/Es2pandaNativeModule.ts @@ -33,6 +33,9 @@ export class Es2pandaNativeModule { _AnnotationAllowedAnnotations(context: KPtr, node: KPtr, returnLen: KPtr): KPtr { throw new Error("Not implemented") } + _AstNodeRebind(context: KPtr, node: KPtr): void { + throw new Error("Not implemented") + } _AstNodeRecheck(context: KPtr, node: KPtr): void { throw new Error("Not implemented") } diff --git a/arkoala-arkts/libarkts/src/arkts-api/utilities/public.ts b/arkoala-arkts/libarkts/src/arkts-api/utilities/public.ts index 45882c627..13f4e3a73 100644 --- a/arkoala-arkts/libarkts/src/arkts-api/utilities/public.ts +++ b/arkoala-arkts/libarkts/src/arkts-api/utilities/public.ts @@ -70,6 +70,14 @@ export function startChecker(): boolean { return global.es2panda._CheckerStartChecker(global.context) } +export function recheckSubtree(node: arkts.Node): void { + global.es2panda._AstNodeRecheck(global.context, node.peer) +} + +export function rebindSubtree(node: arkts.Node): void { + global.es2panda._AstNodeRebind(global.context, node.peer) +} + export function getDecl(node: arkts.Node): arkts.Node | undefined { let decl: KNativePointer = node.peer decl = global.es2panda._AstNodeVariableConst(global.context, decl) diff --git a/arkoala-arkts/libarkts/test/arkts-api/general/annotations.test.ts b/arkoala-arkts/libarkts/test/arkts-api/general/annotations.test.ts index 8dedac1c4..c76c14459 100644 --- a/arkoala-arkts/libarkts/test/arkts-api/general/annotations.test.ts +++ b/arkoala-arkts/libarkts/test/arkts-api/general/annotations.test.ts @@ -3,7 +3,7 @@ import * as arkts from "../../../src/arkts-api" import { assert } from "chai" suite(util.basename(__filename), () => { - test.only("annotated-function-1", function() { + test("annotated-function-1", function() { const sample_in = ` @annotation1 diff --git a/arkoala-arkts/libarkts/test/arkts-api/general/recheck.test.ts b/arkoala-arkts/libarkts/test/arkts-api/general/recheck.test.ts new file mode 100644 index 000000000..ec8378f55 --- /dev/null +++ b/arkoala-arkts/libarkts/test/arkts-api/general/recheck.test.ts @@ -0,0 +1,36 @@ +import * as util from "../../test-util" +import * as arkts from "../../../src/arkts-api" +import * as ts from "../../../src/ts-api" + +suite(util.basename(__filename), () => { + test.skip("sample-1", function() { + const sample_in = + ` + function foo() {} + ` + + let script = arkts.EtsScript.create( + sample_in, + arkts.Es2pandaContextState.ES2PANDA_STATE_PARSED + ) + + const expr = arkts.factory.createExpressionStatement( + arkts.factory.createIdentifier( + 'abc' + ) + ) + + script = arkts.EtsScript.update( + script, + [ + expr + ] + ) + + arkts.proceedToState(arkts.Es2pandaContextState.ES2PANDA_STATE_CHECKED) + + arkts.recheckSubtree(expr) + + arkts.proceedToState(arkts.Es2pandaContextState.ES2PANDA_STATE_BIN_GENERATED) + }) +}) -- Gitee From b75b82ea8a7600c1e0c49549435987be0039949b Mon Sep 17 00:00:00 2001 From: chernishevvictor Date: Mon, 20 Jan 2025 14:32:19 +0300 Subject: [PATCH 5/5] fix playground test --- arkoala-arkts/libarkts/playground/src/playground.cc | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/arkoala-arkts/libarkts/playground/src/playground.cc b/arkoala-arkts/libarkts/playground/src/playground.cc index 031d2cda7..16d73df27 100644 --- a/arkoala-arkts/libarkts/playground/src/playground.cc +++ b/arkoala-arkts/libarkts/playground/src/playground.cc @@ -30,7 +30,7 @@ es2panda_Impl *GetImpl() { } static const char* source = -"console.log('asjflajfla')" +"" ; int main() { @@ -78,9 +78,6 @@ int main() { std::cout << "PROCEED TO CHECKED SUCCESS" << std::endl; } - auto ast = GetImpl()->ProgramAst(GetImpl()->ContextProgram(context)); - GetImpl()->AstNodeRecheck(context, ast); - GetImpl()->ProceedToState(context, ES2PANDA_STATE_LOWERED); if(GetImpl()->ContextState(context) == ES2PANDA_STATE_ERROR) { -- Gitee