diff --git a/arkoala-arkts/libarkts/src/arkts-api/types.ts b/arkoala-arkts/libarkts/src/arkts-api/types.ts index d83d0709658f2378f9a8bf90924864e7f4977cb0..5ea6cd62528de8404a3981f70a35f350fc40dd54 100644 --- a/arkoala-arkts/libarkts/src/arkts-api/types.ts +++ b/arkoala-arkts/libarkts/src/arkts-api/types.ts @@ -146,34 +146,49 @@ export class ExpressionStatement extends AstNode { readonly expression: AstNode } +// TODO: the CallExpression idl Create signature doesn't include +// the trailing block at all. +// Need to clarify with the compiler people if they will provide +// create signature with a trailing block argument. export class CallExpression extends AstNode { constructor(peer: KPtr) { assertValidPeer(peer, Es2pandaAstNodeType.AST_NODE_TYPE_CALL_EXPRESSION) super(peer) - this.expression = unpackNonNullableNode(global.generatedEs2panda._CallExpressionCallee(global.context, this.peer)) - this.arguments = unpackNodeArray(global.generatedEs2panda._CallExpressionArguments(global.context, this.peer)) + this.expression = unpackNonNullableNode( + global.generatedEs2panda._CallExpressionCallee(global.context, this.peer)) + this.arguments = unpackNodeArray( + global.generatedEs2panda._CallExpressionArguments(global.context, this.peer)) + this.trailingBlock = unpackNode( + global.generatedEs2panda._CallExpressionTrailingBlockConst(global.context, this.peer)) } static create( expression: AstNode, typeParamsDecl: TSTypeParameterDeclaration | undefined, - args: readonly AstNode[] | undefined + args: readonly AstNode[] | undefined, + trailingBlock: AstNode | undefined = undefined ): CallExpression { - return new CallExpression( - global.generatedEs2panda._CreateCallExpression( - global.context, - passNode(expression), - passNodeArray(args), - args?.length ?? 0, - passNode(typeParamsDecl), - false, - false - ) + const peer = global.generatedEs2panda._CreateCallExpression( + global.context, + passNode(expression), + passNodeArray(args), + args?.length ?? 0, + passNode(typeParamsDecl), + false, + false ) + const call = new CallExpression(peer) + if (trailingBlock) { + global.generatedEs2panda._CallExpressionSetTrailingBlock( + global.context, peer, trailingBlock?.peer + ) + } + return call } readonly expression: AstNode // Expression readonly arguments: readonly AstNode[] + readonly trailingBlock: AstNode|undefined // BlockStatement } export class AssignmentExpression extends AstNode { diff --git a/arkoala-arkts/libarkts/src/arkts-api/visitor.ts b/arkoala-arkts/libarkts/src/arkts-api/visitor.ts index 7c32de72275a859c85b41cc601d361d950e77302..2816a102105e4eadd9d5592ff92233dbf8e2232f 100644 --- a/arkoala-arkts/libarkts/src/arkts-api/visitor.ts +++ b/arkoala-arkts/libarkts/src/arkts-api/visitor.ts @@ -70,7 +70,8 @@ export function visitEachChild( node, nodeVisitor(node.expression, visitor), undefined, // TODO - nodesVisitor(node.arguments, visitor) + nodesVisitor(node.arguments, visitor), + nodeVisitor(node.trailingBlock, visitor) ) } if (node instanceof FunctionDeclaration) { diff --git a/arkoala-arkts/trivial/user/src/sts/hello.sts b/arkoala-arkts/trivial/user/src/sts/hello.sts index 2c01dc061b7901b12b815ea5296dbe371b62089e..41c42c50e77df8a917c5b8494489635b438fcf3a 100644 --- a/arkoala-arkts/trivial/user/src/sts/hello.sts +++ b/arkoala-arkts/trivial/user/src/sts/hello.sts @@ -9,7 +9,7 @@ import { Color } from "@ohos.arkui" struct MyStateSample { @State color: Color = Color.White build() { - Column({ space: 20 } as ColumnOptions, () => { + Column({ space: 20 } as ColumnOptions) { Text("Hello World!") .fontColor(this.color) Button('change') @@ -17,7 +17,7 @@ struct MyStateSample { this.color = Color.Red }) - }) + } .width(100) .height(300)