From 5bc1f135b7f2bee581eea8291f09e927964251d7 Mon Sep 17 00:00:00 2001 From: Ali Mohammad Pur Date: Sat, 25 Feb 2023 11:44:43 +0330 Subject: [PATCH] Tests: Implement multi-value returns in test-wasm --- Tests/LibWasm/test-wasm.cpp | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/Tests/LibWasm/test-wasm.cpp b/Tests/LibWasm/test-wasm.cpp index c882b95a3f..81bd472774 100644 --- a/Tests/LibWasm/test-wasm.cpp +++ b/Tests/LibWasm/test-wasm.cpp @@ -252,15 +252,22 @@ JS_DEFINE_NATIVE_FUNCTION(WebAssemblyModule::wasm_invoke) if (result.values().is_empty()) return JS::js_null(); - JS::Value return_value; - result.values().first().value().visit( - [&](auto const& value) { return_value = JS::Value(static_cast(value)); }, - [&](i32 value) { return_value = JS::Value(static_cast(value)); }, - [&](i64 value) { return_value = JS::Value(JS::BigInt::create(vm, Crypto::SignedBigInteger { value })); }, - [&](Wasm::Reference const& reference) { - reference.ref().visit( - [&](const Wasm::Reference::Null&) { return_value = JS::js_null(); }, - [&](const auto& ref) { return_value = JS::Value(static_cast(ref.address.value())); }); - }); - return return_value; + auto to_js_value = [&](Wasm::Value const& value) { + return value.value().visit( + [](auto const& value) { return JS::Value(static_cast(value)); }, + [](i32 value) { return JS::Value(static_cast(value)); }, + [&](i64 value) { return JS::Value(JS::BigInt::create(vm, Crypto::SignedBigInteger { value })); }, + [](Wasm::Reference const& reference) { + return reference.ref().visit( + [](const Wasm::Reference::Null&) { return JS::js_null(); }, + [](const auto& ref) { return JS::Value(static_cast(ref.address.value())); }); + }); + }; + + if (result.values().size() == 1) + return to_js_value(result.values().first()); + + return JS::Array::create_from(*vm.current_realm(), result.values(), [&](Wasm::Value value) { + return to_js_value(value); + }); }