From 7d81c5c546156c605d5146e541ba80e01a4f7f26 Mon Sep 17 00:00:00 2001 From: Su Yihan Date: Tue, 24 Oct 2023 16:30:55 +0800 Subject: [PATCH] fix union type in dynamiccall Signed-off-by: Su Yihan --- src/backend/binaryen/wasm_expr_gen.ts | 1 + tests/samples/any_func_call.ts | 19 +++++++++++++++++++ tools/validate/wamr/validation.json | 5 +++++ 3 files changed, 25 insertions(+) diff --git a/src/backend/binaryen/wasm_expr_gen.ts b/src/backend/binaryen/wasm_expr_gen.ts index 54b0086b..fa69829b 100644 --- a/src/backend/binaryen/wasm_expr_gen.ts +++ b/src/backend/binaryen/wasm_expr_gen.ts @@ -1313,6 +1313,7 @@ export class WASMExpressionGen { const methodName = value.name; const owner = value.owner; switch (owner.type.kind) { + case ValueTypeKind.UNION: case ValueTypeKind.ANY: { /* Fallback to libdyntype */ let invokeArgs = [owner]; diff --git a/tests/samples/any_func_call.ts b/tests/samples/any_func_call.ts index c277542c..2f24fd52 100644 --- a/tests/samples/any_func_call.ts +++ b/tests/samples/any_func_call.ts @@ -198,3 +198,22 @@ export function anyFuncCallWithNoCast() { b.log(); b.increase(); } + +class A1 { + test() { + console.log(1); + } +} +class B1 { + a?: A1 = new A1(); + fun() { + if (this.a) { + this.a.test(); + } + } +} + +export function unionFuncCall() { + const b = new B1(); + b.fun(); +} diff --git a/tools/validate/wamr/validation.json b/tools/validate/wamr/validation.json index b0cdd5d7..4fecb8a5 100644 --- a/tools/validate/wamr/validation.json +++ b/tools/validate/wamr/validation.json @@ -271,6 +271,11 @@ "name": "anyFuncCallWithNoCast", "args": [], "result": "Page class\n1" + }, + { + "name": "unionFuncCall", + "args": [], + "result": "1" } ] },