From 8a24ee6d62b97074478bcc1b604476d3464c8e8b Mon Sep 17 00:00:00 2001 From: dcode Date: Mon, 7 Sep 2020 04:29:07 +0200 Subject: [PATCH] rm -r gc --- src/asmjs/asm_v_wasm.cpp | 9 ----- src/binaryen-c.cpp | 6 ---- src/ir/abstract.h | 6 ---- src/literal.h | 3 -- src/parsing.h | 3 -- src/passes/ConstHoisting.cpp | 3 -- src/passes/FuncCastEmulation.cpp | 6 ---- src/passes/InstrumentLocals.cpp | 37 -------------------- src/shell-interface.h | 3 -- src/tools/fuzzing.h | 38 --------------------- src/tools/spec-wrapper.h | 9 ----- src/tools/wasm-reduce.cpp | 15 --------- src/wasm-binary.h | 9 ----- src/wasm-builder.h | 6 ---- src/wasm-interpreter.h | 6 ---- src/wasm-type.h | 11 +++--- src/wasm/literal.cpp | 39 ---------------------- src/wasm/wasm-binary.cpp | 6 ---- src/wasm/wasm-s-parser.cpp | 9 ----- src/wasm/wasm-stack.cpp | 9 ----- src/wasm/wasm-type.cpp | 32 +++--------------- src/wasm/wasm-validator.cpp | 6 ---- test/binaryen.js/exception-handling.js.txt | 2 +- test/binaryen.js/kitchen-sink.js.txt | 4 +-- test/example/c-api-kitchen-sink.txt | 2 +- test/example/typeinfo.cpp | 6 ++-- test/example/typeinfo.txt | 6 ++-- 27 files changed, 18 insertions(+), 273 deletions(-) diff --git a/src/asmjs/asm_v_wasm.cpp b/src/asmjs/asm_v_wasm.cpp index 184512db4dd..ddcb27d3dc9 100644 --- a/src/asmjs/asm_v_wasm.cpp +++ b/src/asmjs/asm_v_wasm.cpp @@ -56,9 +56,6 @@ AsmType wasmToAsmType(Type type) { assert(false && "v128 not implemented yet"); case Type::funcref: case Type::externref: - case Type::anyref: - case Type::eqref: - case Type::i31ref: case Type::exnref: assert(false && "reference types are not supported by asm2wasm"); case Type::none: @@ -86,12 +83,6 @@ char getSig(Type type) { return 'F'; case Type::externref: return 'X'; - case Type::anyref: - return 'A'; - case Type::eqref: - return 'Q'; - case Type::i31ref: - return 'I'; case Type::exnref: return 'E'; case Type::none: diff --git a/src/binaryen-c.cpp b/src/binaryen-c.cpp index 588c22fb374..1cbcfd7d1fb 100644 --- a/src/binaryen-c.cpp +++ b/src/binaryen-c.cpp @@ -74,12 +74,9 @@ BinaryenLiteral toBinaryenLiteral(Literal x) { } break; case Type::externref: - case Type::anyref: - case Type::eqref: case Type::exnref: assert(x.isNull()); break; - case Type::i31ref: case Type::none: case Type::unreachable: WASM_UNREACHABLE("unexpected type"); @@ -102,11 +99,8 @@ Literal fromBinaryenLiteral(BinaryenLiteral x) { case Type::funcref: return Literal::makeFunc(x.func); case Type::externref: - case Type::anyref: - case Type::eqref: case Type::exnref: return Literal::makeNull(Type(x.type)); - case Type::i31ref: case Type::none: case Type::unreachable: WASM_UNREACHABLE("unexpected type"); diff --git a/src/ir/abstract.h b/src/ir/abstract.h index 7e1541130df..b00537bf59f 100644 --- a/src/ir/abstract.h +++ b/src/ir/abstract.h @@ -103,9 +103,6 @@ inline UnaryOp getUnary(Type type, Op op) { } case Type::funcref: case Type::externref: - case Type::anyref: - case Type::eqref: - case Type::i31ref: case Type::exnref: case Type::none: case Type::unreachable: { @@ -270,9 +267,6 @@ inline BinaryOp getBinary(Type type, Op op) { } case Type::funcref: case Type::externref: - case Type::anyref: - case Type::eqref: - case Type::i31ref: case Type::exnref: case Type::none: case Type::unreachable: { diff --git a/src/literal.h b/src/literal.h index bece53f7012..1c3fa1788b0 100644 --- a/src/literal.h +++ b/src/literal.h @@ -576,9 +576,6 @@ template<> struct less { return memcmp(a.getv128Ptr(), b.getv128Ptr(), 16) < 0; case wasm::Type::funcref: case wasm::Type::externref: - case wasm::Type::anyref: - case wasm::Type::eqref: - case wasm::Type::i31ref: case wasm::Type::exnref: case wasm::Type::none: case wasm::Type::unreachable: diff --git a/src/parsing.h b/src/parsing.h index bdfdfdabc0a..663b901fdce 100644 --- a/src/parsing.h +++ b/src/parsing.h @@ -265,9 +265,6 @@ parseConst(cashew::IString s, Type type, MixedArena& allocator) { case Type::v128: case Type::funcref: case Type::externref: - case Type::anyref: - case Type::eqref: - case Type::i31ref: case Type::exnref: WASM_UNREACHABLE("unexpected const type"); case Type::none: diff --git a/src/passes/ConstHoisting.cpp b/src/passes/ConstHoisting.cpp index a5b168cb281..e3583d3bbfd 100644 --- a/src/passes/ConstHoisting.cpp +++ b/src/passes/ConstHoisting.cpp @@ -96,9 +96,6 @@ struct ConstHoisting : public WalkerPass> { case Type::v128: case Type::funcref: case Type::externref: - case Type::anyref: - case Type::eqref: - case Type::i31ref: case Type::exnref: { return false; } diff --git a/src/passes/FuncCastEmulation.cpp b/src/passes/FuncCastEmulation.cpp index f30f6549e79..160895f23be 100644 --- a/src/passes/FuncCastEmulation.cpp +++ b/src/passes/FuncCastEmulation.cpp @@ -67,9 +67,6 @@ static Expression* toABI(Expression* value, Module* module) { } case Type::funcref: case Type::externref: - case Type::anyref: - case Type::eqref: - case Type::i31ref: case Type::exnref: { WASM_UNREACHABLE("reference types cannot be converted to i64"); } @@ -113,9 +110,6 @@ static Expression* fromABI(Expression* value, Type type, Module* module) { } case Type::funcref: case Type::externref: - case Type::anyref: - case Type::eqref: - case Type::i31ref: case Type::exnref: { WASM_UNREACHABLE("reference types cannot be converted from i64"); } diff --git a/src/passes/InstrumentLocals.cpp b/src/passes/InstrumentLocals.cpp index 449d9687902..491fa10d38e 100644 --- a/src/passes/InstrumentLocals.cpp +++ b/src/passes/InstrumentLocals.cpp @@ -102,15 +102,6 @@ struct InstrumentLocals : public WalkerPass> { case Type::externref: import = get_externref; break; - case Type::anyref: - import = get_anyref; - break; - case Type::eqref: - import = get_eqref; - break; - case Type::i31ref: - import = get_i31ref; - break; case Type::exnref: import = get_exnref; break; @@ -157,15 +148,6 @@ struct InstrumentLocals : public WalkerPass> { case Type::externref: import = set_externref; break; - case Type::anyref: - import = set_anyref; - break; - case Type::eqref: - import = set_eqref; - break; - case Type::i31ref: - import = set_i31ref; - break; case Type::exnref: import = set_exnref; break; @@ -208,25 +190,6 @@ struct InstrumentLocals : public WalkerPass> { set_externref, {Type::i32, Type::i32, Type::externref}, Type::externref); - // TODO (GC) - // if (curr->features.hasGC()) { - // addImport( - // curr, get_anyref, {Type::i32, Type::i32, Type::anyref}, - // Type::anyref); - // addImport( - // curr, set_anyref, {Type::i32, Type::i32, Type::anyref}, - // Type::anyref); - // addImport( - // curr, get_eqref, {Type::i32, Type::i32, Type::eqref}, Type::eqref); - // addImport( - // curr, set_eqref, {Type::i32, Type::i32, Type::eqref}, Type::eqref); - // addImport( - // curr, get_i31ref, {Type::i32, Type::i32, Type::i31ref}, - // Type::i31ref); - // addImport( - // curr, set_i31ref, {Type::i32, Type::i32, Type::i31ref}, - // Type::i31ref); - // } } if (curr->features.hasExceptionHandling()) { addImport( diff --git a/src/shell-interface.h b/src/shell-interface.h index acf65e86d0b..92f562b48c2 100644 --- a/src/shell-interface.h +++ b/src/shell-interface.h @@ -117,12 +117,9 @@ struct ShellExternalInterface : ModuleInstance::ExternalInterface { assert(false && "v128 not implemented yet"); case Type::funcref: case Type::externref: - case Type::anyref: - case Type::eqref: case Type::exnref: globals[import->name] = {Literal::makeNull(import->type)}; break; - case Type::i31ref: case Type::none: case Type::unreachable: WASM_UNREACHABLE("unexpected type"); diff --git a/src/tools/fuzzing.h b/src/tools/fuzzing.h index 98c2884da09..c203cabfaa2 100644 --- a/src/tools/fuzzing.h +++ b/src/tools/fuzzing.h @@ -322,14 +322,6 @@ class TranslateToFuzzReader { case Type::funcref: case Type::exnref: break; - case Type::anyref: - // TODO (GC) - // includes externref, funcref, exnref, eqref (incl. subtypes) - case Type::eqref: - // TODO (GC) - // includes i31ref, concrete structs and arrays - case Type::i31ref: - WASM_UNREACHABLE("TODO: GC types"); default: break; } @@ -1366,9 +1358,6 @@ class TranslateToFuzzReader { } case Type::funcref: case Type::externref: - case Type::anyref: - case Type::eqref: - case Type::i31ref: case Type::exnref: case Type::none: case Type::unreachable: @@ -1472,9 +1461,6 @@ class TranslateToFuzzReader { } case Type::funcref: case Type::externref: - case Type::anyref: - case Type::eqref: - case Type::i31ref: case Type::exnref: case Type::none: case Type::unreachable: @@ -1603,9 +1589,6 @@ class TranslateToFuzzReader { case Type::v128: case Type::funcref: case Type::externref: - case Type::anyref: - case Type::eqref: - case Type::i31ref: case Type::exnref: case Type::none: case Type::unreachable: @@ -1650,9 +1633,6 @@ class TranslateToFuzzReader { case Type::v128: case Type::funcref: case Type::externref: - case Type::anyref: - case Type::eqref: - case Type::i31ref: case Type::exnref: case Type::none: case Type::unreachable: @@ -1720,9 +1700,6 @@ class TranslateToFuzzReader { case Type::v128: case Type::funcref: case Type::externref: - case Type::anyref: - case Type::eqref: - case Type::i31ref: case Type::exnref: case Type::none: case Type::unreachable: @@ -1749,9 +1726,6 @@ class TranslateToFuzzReader { case Type::v128: case Type::funcref: case Type::externref: - case Type::anyref: - case Type::eqref: - case Type::i31ref: case Type::exnref: case Type::none: case Type::unreachable: @@ -1861,9 +1835,6 @@ class TranslateToFuzzReader { } case Type::funcref: case Type::externref: - case Type::anyref: - case Type::eqref: - case Type::i31ref: case Type::exnref: return makeTrivial(type); case Type::none: @@ -2008,9 +1979,6 @@ class TranslateToFuzzReader { } case Type::funcref: case Type::externref: - case Type::anyref: - case Type::eqref: - case Type::i31ref: case Type::exnref: case Type::none: case Type::unreachable: @@ -2247,9 +2215,6 @@ class TranslateToFuzzReader { } case Type::funcref: case Type::externref: - case Type::anyref: - case Type::eqref: - case Type::i31ref: case Type::exnref: case Type::none: case Type::unreachable: @@ -2456,9 +2421,6 @@ class TranslateToFuzzReader { case Type::v128: case Type::funcref: case Type::externref: - case Type::anyref: - case Type::eqref: - case Type::i31ref: case Type::exnref: case Type::none: case Type::unreachable: diff --git a/src/tools/spec-wrapper.h b/src/tools/spec-wrapper.h index 8410f493a18..c073a994cc8 100644 --- a/src/tools/spec-wrapper.h +++ b/src/tools/spec-wrapper.h @@ -55,18 +55,9 @@ static std::string generateSpecWrapper(Module& wasm) { case Type::externref: ret += "(ref.null extern)"; break; - case Type::anyref: - ret += "(ref.null any)"; - break; - case Type::eqref: - ret += "(ref.null eq)"; - break; case Type::exnref: ret += "(ref.null exn)"; break; - case Type::i31ref: - ret += "(i31.new (i32.const 0))"; - break; case Type::none: case Type::unreachable: WASM_UNREACHABLE("unexpected type"); diff --git a/src/tools/wasm-reduce.cpp b/src/tools/wasm-reduce.cpp index e6fad6d3d67..1a7c3544daa 100644 --- a/src/tools/wasm-reduce.cpp +++ b/src/tools/wasm-reduce.cpp @@ -597,9 +597,6 @@ struct Reducer case Type::v128: case Type::funcref: case Type::externref: - case Type::anyref: - case Type::eqref: - case Type::i31ref: case Type::exnref: continue; // not implemented yet case Type::none: @@ -625,9 +622,6 @@ struct Reducer case Type::v128: case Type::funcref: case Type::externref: - case Type::anyref: - case Type::eqref: - case Type::i31ref: case Type::exnref: continue; // not implemented yet case Type::none: @@ -653,9 +647,6 @@ struct Reducer case Type::v128: case Type::funcref: case Type::externref: - case Type::anyref: - case Type::eqref: - case Type::i31ref: case Type::exnref: continue; // not implemented yet case Type::none: @@ -681,9 +672,6 @@ struct Reducer case Type::v128: case Type::funcref: case Type::externref: - case Type::anyref: - case Type::eqref: - case Type::i31ref: case Type::exnref: continue; // not implemented yet case Type::none: @@ -695,9 +683,6 @@ struct Reducer case Type::v128: case Type::funcref: case Type::externref: - case Type::anyref: - case Type::eqref: - case Type::i31ref: case Type::exnref: continue; // not implemented yet case Type::none: diff --git a/src/wasm-binary.h b/src/wasm-binary.h index 54ff6e2c1e3..8f540b80d5b 100644 --- a/src/wasm-binary.h +++ b/src/wasm-binary.h @@ -990,15 +990,6 @@ inline S32LEB binaryType(Type type) { case Type::externref: ret = BinaryConsts::EncodedType::externref; break; - case Type::anyref: - ret = BinaryConsts::EncodedType::anyref; - break; - case Type::eqref: - ret = BinaryConsts::EncodedType::eqref; - break; - case Type::i31ref: - ret = BinaryConsts::EncodedType::i31ref; - break; case Type::exnref: ret = BinaryConsts::EncodedType::exnref; break; diff --git a/src/wasm-builder.h b/src/wasm-builder.h index 70739f809fe..4b3364976a2 100644 --- a/src/wasm-builder.h +++ b/src/wasm-builder.h @@ -630,8 +630,6 @@ class Builder { } return makeRefNull(value.type); case Type::externref: - case Type::anyref: - case Type::eqref: case Type::exnref: // TODO: ExceptionPackage? assert(value.isNull()); return makeRefNull(value.type); @@ -826,12 +824,8 @@ class Builder { } case Type::funcref: case Type::externref: - case Type::anyref: - case Type::eqref: case Type::exnref: return ExpressionManipulator::refNull(curr); - case Type::i31ref: - WASM_UNREACHABLE("TODO: i31ref"); // (i31.new (i32.const 0)) case Type::none: return ExpressionManipulator::nop(curr); case Type::unreachable: diff --git a/src/wasm-interpreter.h b/src/wasm-interpreter.h index 5d138c4ec4f..44cac9d4960 100644 --- a/src/wasm-interpreter.h +++ b/src/wasm-interpreter.h @@ -1646,9 +1646,6 @@ template class ModuleInstanceBase { return Literal(load128(addr).data()); case Type::funcref: case Type::externref: - case Type::anyref: - case Type::eqref: - case Type::i31ref: case Type::exnref: case Type::none: case Type::unreachable: @@ -1705,9 +1702,6 @@ template class ModuleInstanceBase { break; case Type::funcref: case Type::externref: - case Type::anyref: - case Type::eqref: - case Type::i31ref: case Type::exnref: case Type::none: case Type::unreachable: diff --git a/src/wasm-type.h b/src/wasm-type.h index ac4bc132c4e..769a48043e2 100644 --- a/src/wasm-type.h +++ b/src/wasm-type.h @@ -49,9 +49,6 @@ class Type { v128, funcref, externref, - anyref, - eqref, - i31ref, exnref, _last_basic_id = exnref }; @@ -91,10 +88,10 @@ class Type { // │ v128 ║ x │ │ x │ x │ V │ ┘ // ├─ Aliases ───╫───┼───┼───┼───┤───────┤ // │ funcref ║ x │ │ x │ x │ f n │ ┐ Ref - // │ externref ║ x │ │ x │ x │ f? n │ │ f_unc - // │ anyref ║ x │ │ x │ x │ f? n │ │ n_ullable - // │ eqref ║ x │ │ x │ x │ n │ │ - // │ i31ref ║ x │ │ x │ x │ │ │ + // │ externref ║ x │ │ x │ x │ f? n │ │ f_unc, n_ullable + // │ anyref ║ x │ │ x │ x │ f? n │ │ ┐ + // │ eqref ║ x │ │ x │ x │ n │ │ │ TODO (GC) + // │ i31ref ║ x │ │ x │ x │ │ │ ┘ // │ exnref ║ x │ │ x │ x │ n │ │ // ├─ Compound ──╫───┼───┼───┼───┤───────┤ │ // │ Ref ║ │ x │ x │ x │ f? n? │◄┘ diff --git a/src/wasm/literal.cpp b/src/wasm/literal.cpp index f9ec69bdfde..9647973091a 100644 --- a/src/wasm/literal.cpp +++ b/src/wasm/literal.cpp @@ -69,11 +69,8 @@ Literal::Literal(const Literal& other) : type(other.type) { case Type::none: break; case Type::externref: - case Type::anyref: - case Type::eqref: break; // null case Type::funcref: - case Type::i31ref: case Type::exnref: case Type::unreachable: WASM_UNREACHABLE("unexpected type"); @@ -220,14 +217,11 @@ void Literal::getBits(uint8_t (&buf)[16]) const { case Type::funcref: break; case Type::externref: - case Type::anyref: - case Type::eqref: case Type::exnref: if (isNull()) { break; } // falls through - case Type::i31ref: case Type::none: case Type::unreachable: WASM_UNREACHABLE("invalid type"); @@ -380,14 +374,6 @@ std::ostream& operator<<(std::ostream& o, Literal literal) { o << "funcref(" << literal.getFunc() << ")"; } break; - case Type::anyref: - assert(literal.isNull()); - o << "anyref(null)"; - break; - case Type::eqref: - assert(literal.isNull()); - o << "eqref(null)"; - break; case Type::exnref: if (literal.isNull()) { o << "exnref(null)"; @@ -399,7 +385,6 @@ std::ostream& operator<<(std::ostream& o, Literal literal) { assert(literal.isNull()); o << "externref(null)"; break; - case Type::i31ref: case Type::unreachable: WASM_UNREACHABLE("invalid type"); } @@ -623,9 +608,6 @@ Literal Literal::eqz() const { case Type::v128: case Type::funcref: case Type::externref: - case Type::anyref: - case Type::eqref: - case Type::i31ref: case Type::exnref: case Type::none: case Type::unreachable: @@ -647,9 +629,6 @@ Literal Literal::neg() const { case Type::v128: case Type::funcref: case Type::externref: - case Type::anyref: - case Type::eqref: - case Type::i31ref: case Type::exnref: case Type::none: case Type::unreachable: @@ -671,9 +650,6 @@ Literal Literal::abs() const { case Type::v128: case Type::funcref: case Type::externref: - case Type::anyref: - case Type::eqref: - case Type::i31ref: case Type::exnref: case Type::none: case Type::unreachable: @@ -778,9 +754,6 @@ Literal Literal::add(const Literal& other) const { case Type::v128: case Type::funcref: case Type::externref: - case Type::anyref: - case Type::eqref: - case Type::i31ref: case Type::exnref: case Type::none: case Type::unreachable: @@ -802,9 +775,6 @@ Literal Literal::sub(const Literal& other) const { case Type::v128: case Type::funcref: case Type::externref: - case Type::anyref: - case Type::eqref: - case Type::i31ref: case Type::exnref: case Type::none: case Type::unreachable: @@ -897,9 +867,6 @@ Literal Literal::mul(const Literal& other) const { case Type::v128: case Type::funcref: case Type::externref: - case Type::anyref: - case Type::eqref: - case Type::i31ref: case Type::exnref: case Type::none: case Type::unreachable: @@ -1153,9 +1120,6 @@ Literal Literal::eq(const Literal& other) const { case Type::v128: case Type::funcref: case Type::externref: - case Type::anyref: - case Type::eqref: - case Type::i31ref: case Type::exnref: case Type::none: case Type::unreachable: @@ -1177,9 +1141,6 @@ Literal Literal::ne(const Literal& other) const { case Type::v128: case Type::funcref: case Type::externref: - case Type::anyref: - case Type::eqref: - case Type::i31ref: case Type::exnref: case Type::none: case Type::unreachable: diff --git a/src/wasm/wasm-binary.cpp b/src/wasm/wasm-binary.cpp index af37231718d..15855dbc0a9 100644 --- a/src/wasm/wasm-binary.cpp +++ b/src/wasm/wasm-binary.cpp @@ -1136,12 +1136,6 @@ Type WasmBinaryBuilder::getType() { return Type::funcref; case BinaryConsts::EncodedType::externref: return Type::externref; - case BinaryConsts::EncodedType::anyref: - return Type::anyref; - case BinaryConsts::EncodedType::eqref: - return Type::eqref; - case BinaryConsts::EncodedType::i31ref: - return Type::i31ref; case BinaryConsts::EncodedType::exnref: return Type::exnref; default: diff --git a/src/wasm/wasm-s-parser.cpp b/src/wasm/wasm-s-parser.cpp index 1b974e668e4..6cb0498e4b4 100644 --- a/src/wasm/wasm-s-parser.cpp +++ b/src/wasm/wasm-s-parser.cpp @@ -869,15 +869,6 @@ Type SExpressionWasmBuilder::stringToType(const char* str, if (strncmp(str, "externref", 9) == 0 && (prefix || str[9] == 0)) { return Type::externref; } - if (strncmp(str, "anyref", 6) == 0 && (prefix || str[6] == 0)) { - return Type::anyref; - } - if (strncmp(str, "eqref", 5) == 0 && (prefix || str[5] == 0)) { - return Type::eqref; - } - if (strncmp(str, "i31ref", 6) == 0 && (prefix || str[6] == 0)) { - return Type::i31ref; - } if (strncmp(str, "exnref", 6) == 0 && (prefix || str[6] == 0)) { return Type::exnref; } diff --git a/src/wasm/wasm-stack.cpp b/src/wasm/wasm-stack.cpp index 79c8d6f75da..aee5079c2e9 100644 --- a/src/wasm/wasm-stack.cpp +++ b/src/wasm/wasm-stack.cpp @@ -190,9 +190,6 @@ void BinaryInstWriter::visitLoad(Load* curr) { return; case Type::funcref: case Type::externref: - case Type::anyref: - case Type::eqref: - case Type::i31ref: case Type::exnref: case Type::none: WASM_UNREACHABLE("unexpected type"); @@ -294,9 +291,6 @@ void BinaryInstWriter::visitStore(Store* curr) { break; case Type::funcref: case Type::externref: - case Type::anyref: - case Type::eqref: - case Type::i31ref: case Type::exnref: case Type::none: case Type::unreachable: @@ -699,9 +693,6 @@ void BinaryInstWriter::visitConst(Const* curr) { } case Type::funcref: case Type::externref: - case Type::anyref: - case Type::eqref: - case Type::i31ref: case Type::exnref: case Type::none: case Type::unreachable: diff --git a/src/wasm/wasm-type.cpp b/src/wasm/wasm-type.cpp index 9ef0d469252..956c4dffc01 100644 --- a/src/wasm/wasm-type.cpp +++ b/src/wasm/wasm-type.cpp @@ -256,12 +256,10 @@ std::unordered_map indices = { {TypeInfo(HeapType(HeapType::FuncKind), true), Type::funcref}, {TypeInfo({Type::externref}), Type::externref}, {TypeInfo(HeapType(HeapType::ExternKind), true), Type::externref}, - {TypeInfo({Type::anyref}), Type::anyref}, - {TypeInfo(HeapType(HeapType::AnyKind), true), Type::anyref}, - {TypeInfo({Type::eqref}), Type::eqref}, - {TypeInfo(HeapType(HeapType::EqKind), true), Type::eqref}, - {TypeInfo({Type::i31ref}), Type::i31ref}, - {TypeInfo(HeapType(HeapType::I31Kind), false), Type::i31ref}, + // TODO (GC): Add canonical ids + // * `(ref null any) == anyref` + // * `(ref null eq) == eqref` + // * `(ref i31) == i31ref` {TypeInfo({Type::exnref}), Type::exnref}, {TypeInfo(HeapType(HeapType::ExnKind), true), Type::exnref}, }; @@ -408,9 +406,6 @@ unsigned Type::getByteSize() const { return 16; case Type::funcref: case Type::externref: - case Type::anyref: - case Type::eqref: - case Type::i31ref: case Type::exnref: case Type::none: case Type::unreachable: @@ -454,10 +449,6 @@ FeatureSet Type::getFeatures() const { case Type::funcref: case Type::externref: return FeatureSet::ReferenceTypes; - case Type::anyref: - case Type::eqref: - case Type::i31ref: - WASM_UNREACHABLE("TODO: GC types"); case Type::exnref: return FeatureSet::ReferenceTypes | FeatureSet::ExceptionHandling; default: @@ -485,12 +476,6 @@ HeapType Type::getHeapType() const { return HeapType::FuncKind; case externref: return HeapType::ExternKind; - case anyref: - return HeapType::AnyKind; - case eqref: - return HeapType::EqKind; - case i31ref: - return HeapType::I31Kind; case exnref: return HeapType::ExnKind; default: @@ -743,15 +728,6 @@ std::ostream& operator<<(std::ostream& os, Type type) { case Type::externref: os << "externref"; break; - case Type::anyref: - os << "anyref"; - break; - case Type::eqref: - os << "eqref"; - break; - case Type::i31ref: - os << "i31ref"; - break; case Type::exnref: os << "exnref"; break; diff --git a/src/wasm/wasm-validator.cpp b/src/wasm/wasm-validator.cpp index 532b8c8905d..a2eb5f117e5 100644 --- a/src/wasm/wasm-validator.cpp +++ b/src/wasm/wasm-validator.cpp @@ -1265,9 +1265,6 @@ void FunctionValidator::validateMemBytes(uint8_t bytes, break; case Type::funcref: case Type::externref: - case Type::anyref: - case Type::eqref: - case Type::i31ref: case Type::exnref: case Type::none: WASM_UNREACHABLE("unexpected type"); @@ -2077,9 +2074,6 @@ void FunctionValidator::validateAlignment( break; case Type::funcref: case Type::externref: - case Type::anyref: - case Type::eqref: - case Type::i31ref: case Type::exnref: case Type::none: WASM_UNREACHABLE("invalid type"); diff --git a/test/binaryen.js/exception-handling.js.txt b/test/binaryen.js/exception-handling.js.txt index 8d62e9fed17..d590d0b4b82 100644 --- a/test/binaryen.js/exception-handling.js.txt +++ b/test/binaryen.js/exception-handling.js.txt @@ -29,6 +29,6 @@ ) getExpressionInfo(throw) = {"id":43,"type":1,"event":"e"} -getExpressionInfo(br_on_exn) = {"id":45,"type":12,"name":"l","event":"e"} +getExpressionInfo(br_on_exn) = {"id":45,"type":9,"name":"l","event":"e"} getExpressionInfo(rethrow) = {"id":44,"type":1} getExpressionInfo(try) = {"id":42,"type":0} diff --git a/test/binaryen.js/kitchen-sink.js.txt b/test/binaryen.js/kitchen-sink.js.txt index 0bb3f47447f..917525eebcd 100644 --- a/test/binaryen.js/kitchen-sink.js.txt +++ b/test/binaryen.js/kitchen-sink.js.txt @@ -16,8 +16,8 @@ // 7 // BinaryenTypeExternref: 8 // 8 - // BinaryenTypeExnref: 12 - // 12 + // BinaryenTypeExnref: 9 + // 9 // BinaryenTypeAuto: -1 // 2,2 // 2,2 diff --git a/test/example/c-api-kitchen-sink.txt b/test/example/c-api-kitchen-sink.txt index ae72b007811..288174b9981 100644 --- a/test/example/c-api-kitchen-sink.txt +++ b/test/example/c-api-kitchen-sink.txt @@ -7,7 +7,7 @@ // BinaryenTypeVec128: 6 // BinaryenTypeFuncref: 7 // BinaryenTypeExternref: 8 - // BinaryenTypeExnref: 12 + // BinaryenTypeExnref: 9 // BinaryenTypeAuto: -1 BinaryenFeatureMVP: 0 BinaryenFeatureAtomics: 1 diff --git a/test/example/typeinfo.cpp b/test/example/typeinfo.cpp index 55fd18c47a7..ac01c6a1b8c 100644 --- a/test/example/typeinfo.cpp +++ b/test/example/typeinfo.cpp @@ -22,21 +22,21 @@ void test_compound() { assert(Type(extern_, false).getID() == Type(sameExtern, false).getID()); HeapType any(HeapType::AnyKind); - assert(Type(any, true).getID() == Type::anyref); + // assert(Type(any, true).getID() == Type::anyref); assert(Type(any, false).getID() == Type(any, false).getID()); assert(Type(any, false).getID() != Type(any, true).getID()); HeapType sameAny(HeapType::AnyKind); assert(Type(any, false).getID() == Type(sameAny, false).getID()); HeapType eq(HeapType::EqKind); - assert(Type(eq, true).getID() == Type::eqref); + // assert(Type(eq, true).getID() == Type::eqref); assert(Type(eq, false).getID() == Type(eq, false).getID()); assert(Type(eq, false).getID() != Type(eq, true).getID()); HeapType sameEq(HeapType::EqKind); assert(Type(eq, false).getID() == Type(sameEq, false).getID()); HeapType i31(HeapType::I31Kind); - assert(Type(i31, false).getID() == Type::i31ref); + // assert(Type(i31, false).getID() == Type::i31ref); assert(Type(i31, false).getID() == Type(i31, false).getID()); assert(Type(i31, false).getID() != Type(i31, true).getID()); HeapType sameI31(HeapType::I31Kind); diff --git a/test/example/typeinfo.txt b/test/example/typeinfo.txt index 4ba62892527..95706d5e28b 100644 --- a/test/example/typeinfo.txt +++ b/test/example/typeinfo.txt @@ -6,14 +6,14 @@ extern externref (ref extern) any -anyref +(ref null any) (ref any) eq -eqref +(ref null eq) (ref eq) i31 (ref null i31) -i31ref +(ref i31) exn exnref (ref exn)