diff --git a/ets2panda/checker/types/signature.cpp b/ets2panda/checker/types/signature.cpp index 5ced79c41120e511b5f411031ffe5a045c8275b0..4533d51d309bd4531ecd1e4ea21d85ee0b66feaf 100644 --- a/ets2panda/checker/types/signature.cpp +++ b/ets2panda/checker/types/signature.cpp @@ -51,6 +51,10 @@ Signature *Signature::Substitute(TypeRelation *relation, const Substitution *sub if (newParamType != param->TsType()) { anyChange = true; newParam = param->Copy(allocator, param->Declaration()); + if (newParamType->IsETSVoidType()) { + // since `void` is not allowed to be used as param type + newParamType = checker->GlobalETSUndefinedType(); + } newParam->SetTsType(newParamType); } newSigInfo->params.push_back(newParam); diff --git a/ets2panda/test/runtime/ets/voidTypeArg.ets b/ets2panda/test/runtime/ets/voidTypeArg.ets index 66c7cee2db95bbecc20c51e4655eec6c7eb92a84..e9367a44f66f9e5518b4d47d82fdbfe4dccd8c77 100644 --- a/ets2panda/test/runtime/ets/voidTypeArg.ets +++ b/ets2panda/test/runtime/ets/voidTypeArg.ets @@ -17,9 +17,17 @@ function foo(a0: T): T { return a0; } +type Fn = (e: T) => void; + +function test(arg: Fn) {} + function main() : void { foo(undefined); let bfoo = foo(undefined); arktest.assertEQ(bfoo, undefined) + + test((e) => { + arktest.assertEQ(e, undefined) + }) }