namespace wasm {
static std::string generateSpecWrapper(Module& wasm) {
std::string ret;
for (auto& exp : wasm.exports) {
auto* func = wasm.getFunctionOrNull(exp->value);
if (!func) {
continue; }
ret += std::string("(invoke \"hangLimitInitializer\") (invoke \"") +
exp->name.str + "\" ";
for (const auto& param : func->sig.params) {
TODO_SINGLE_COMPOUND(param);
switch (param.getBasic()) {
case Type::i32:
ret += "(i32.const 0)";
break;
case Type::i64:
ret += "(i64.const 0)";
break;
case Type::f32:
ret += "(f32.const 0)";
break;
case Type::f64:
ret += "(f64.const 0)";
break;
case Type::v128:
ret += "(v128.const i32x4 0 0 0 0)";
break;
case Type::funcref:
ret += "(ref.null func)";
break;
case Type::externref:
ret += "(ref.null extern)";
break;
case Type::exnref:
ret += "(ref.null exn)";
break;
case Type::anyref:
ret += "(ref.null any)";
break;
case Type::eqref:
ret += "(ref.null eq)";
break;
case Type::i31ref:
WASM_UNREACHABLE("TODO: i31ref");
case Type::none:
case Type::unreachable:
WASM_UNREACHABLE("unexpected type");
}
ret += " ";
}
ret += ") ";
}
return ret;
}
}