diff options
author | Thomas Lively <tlively@google.com> | 2022-11-15 08:39:03 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-15 08:39:03 -0800 |
commit | b2054b72b7daa89b7ad161c0693befad06a20c90 (patch) | |
tree | 3f2691dadc7af9ee6c86d701ebfebcb8e525c843 /src/wasm/wasm-s-parser.cpp | |
parent | 8225e485a24c5fa6fffb0c9f0a3ee8615bcfa0d9 (diff) | |
download | binaryen-b2054b72b7daa89b7ad161c0693befad06a20c90.tar.gz binaryen-b2054b72b7daa89b7ad161c0693befad06a20c90.tar.bz2 binaryen-b2054b72b7daa89b7ad161c0693befad06a20c90.zip |
Make `call_ref` type annotations mandatory (#5246)
They were optional for a while to allow users to gracefully transition to using
them, but now make them mandatory to match the upstream WasmGC spec.
Diffstat (limited to 'src/wasm/wasm-s-parser.cpp')
-rw-r--r-- | src/wasm/wasm-s-parser.cpp | 35 |
1 files changed, 10 insertions, 25 deletions
diff --git a/src/wasm/wasm-s-parser.cpp b/src/wasm/wasm-s-parser.cpp index a9fd2de77..ab6230442 100644 --- a/src/wasm/wasm-s-parser.cpp +++ b/src/wasm/wasm-s-parser.cpp @@ -2744,35 +2744,20 @@ Expression* SExpressionWasmBuilder::makeTupleExtract(Element& s) { } Expression* SExpressionWasmBuilder::makeCallRef(Element& s, bool isReturn) { - Index operandsStart = 1; - std::optional<HeapType> sigType; - try { - sigType = parseHeapType(*s[1]); - operandsStart = 2; - } catch (ParseException& p) { - // The type annotation is required for return_call_ref but temporarily - // optional for call_ref. - if (isReturn) { - throw; - } - } + HeapType sigType = parseHeapType(*s[1]); std::vector<Expression*> operands; - parseOperands(s, operandsStart, s.size() - 1, operands); + parseOperands(s, 2, s.size() - 1, operands); auto* target = parseExpression(s[s.size() - 1]); - if (sigType) { - if (!sigType->isSignature()) { - throw ParseException( - std::string(isReturn ? "return_call_ref" : "call_ref") + - " type annotation should be a signature", - s.line, - s.col); - } - return Builder(wasm).makeCallRef( - target, operands, sigType->getSignature().results, isReturn); + if (!sigType.isSignature()) { + throw ParseException( + std::string(isReturn ? "return_call_ref" : "call_ref") + + " type annotation should be a signature", + s.line, + s.col); } - return ValidatingBuilder(wasm, s.line, s.col) - .validateAndMakeCallRef(target, operands, isReturn); + return Builder(wasm).makeCallRef( + target, operands, sigType.getSignature().results, isReturn); } Expression* SExpressionWasmBuilder::makeI31New(Element& s) { |