diff options
Diffstat (limited to 'src/wasm/wasm.cpp')
-rw-r--r-- | src/wasm/wasm.cpp | 31 |
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(); } |