Skip to content

Commit 8d0727f

Browse files
authored
v8: enhance signature mimatch message in getModuleFunction (proxy-wasm#82)
Signed-off-by: mathetake <[email protected]>
1 parent 3ab843b commit 8d0727f

File tree

1 file changed

+16
-6
lines changed

1 file changed

+16
-6
lines changed

src/v8/v8.cc

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -587,10 +587,15 @@ void V8::getModuleFunctionImpl(std::string_view function_name,
587587
return;
588588
}
589589
const wasm::Func *func = it->second.get();
590-
if (!equalValTypes(func->type()->params(), convertArgsTupleToValTypes<std::tuple<Args...>>()) ||
591-
!equalValTypes(func->type()->results(), convertArgsTupleToValTypes<std::tuple<>>())) {
590+
auto arg_valtypes = convertArgsTupleToValTypes<std::tuple<Args...>>();
591+
auto result_valtypes = convertArgsTupleToValTypes<std::tuple<>>();
592+
if (!equalValTypes(func->type()->params(), arg_valtypes) ||
593+
!equalValTypes(func->type()->results(), result_valtypes)) {
592594
fail(FailState::UnableToInitializeCode,
593-
std::string("Bad function signature for: ") + std::string(function_name));
595+
"Bad function signature for: " + std::string(function_name) +
596+
", want: " + printValTypes(arg_valtypes) + " -> " + printValTypes(result_valtypes) +
597+
", but the module exports: " + printValTypes(func->type()->params()) + " -> " +
598+
printValTypes(result_valtypes));
594599
*function = nullptr;
595600
return;
596601
}
@@ -614,10 +619,15 @@ void V8::getModuleFunctionImpl(std::string_view function_name,
614619
return;
615620
}
616621
const wasm::Func *func = it->second.get();
617-
if (!equalValTypes(func->type()->params(), convertArgsTupleToValTypes<std::tuple<Args...>>()) ||
618-
!equalValTypes(func->type()->results(), convertArgsTupleToValTypes<std::tuple<R>>())) {
622+
auto arg_valtypes = convertArgsTupleToValTypes<std::tuple<Args...>>();
623+
auto result_valtypes = convertArgsTupleToValTypes<std::tuple<R>>();
624+
if (!equalValTypes(func->type()->params(), arg_valtypes) ||
625+
!equalValTypes(func->type()->results(), result_valtypes)) {
619626
fail(FailState::UnableToInitializeCode,
620-
"Bad function signature for: " + std::string(function_name));
627+
"Bad function signature for: " + std::string(function_name) +
628+
", want: " + printValTypes(arg_valtypes) + " -> " + printValTypes(result_valtypes) +
629+
", but the module exports: " + printValTypes(func->type()->params()) + " -> " +
630+
printValTypes(result_valtypes));
621631
*function = nullptr;
622632
return;
623633
}

0 commit comments

Comments
 (0)