summaryrefslogtreecommitdiff
path: root/src/wasm/wasm.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/wasm/wasm.cpp')
-rw-r--r--src/wasm/wasm.cpp31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/wasm/wasm.cpp b/src/wasm/wasm.cpp
index cd1fb716c..2921f4974 100644
--- a/src/wasm/wasm.cpp
+++ b/src/wasm/wasm.cpp
@@ -245,6 +245,17 @@ const char* getExpressionName(Expression* curr) {
return "array.set";
case Expression::Id::ArrayLenId:
return "array.len";
+ case Expression::Id::RefAsId:
+ switch (curr->cast<RefAs>()->op) {
+ case RefAsFunc:
+ return "ref.as_func";
+ case RefAsData:
+ return "ref.as_data";
+ case RefAsI31:
+ return "ref.as_i31";
+ default:
+ WASM_UNREACHABLE("unimplemented ref.is_*");
+ }
case Expression::Id::NumExpressionIds:
WASM_UNREACHABLE("invalid expr id");
}
@@ -1153,6 +1164,26 @@ void ArrayLen::finalize() {
}
}
+void RefAs::finalize() {
+ if (value->type == Type::unreachable) {
+ type = Type::unreachable;
+ return;
+ }
+ switch (op) {
+ case RefAsFunc:
+ type = Type::funcref;
+ break;
+ case RefAsData:
+ type = Type::dataref;
+ break;
+ case RefAsI31:
+ type = Type::i31ref;
+ break;
+ default:
+ WASM_UNREACHABLE("unimplemented ref.is_*");
+ }
+}
+
size_t Function::getNumParams() { return sig.params.size(); }
size_t Function::getNumVars() { return vars.size(); }