summaryrefslogtreecommitdiff
path: root/src/parser/wast-parser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/parser/wast-parser.cpp')
-rw-r--r--src/parser/wast-parser.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/parser/wast-parser.cpp b/src/parser/wast-parser.cpp
index 87060b9fc..9473da9fb 100644
--- a/src/parser/wast-parser.cpp
+++ b/src/parser/wast-parser.cpp
@@ -397,11 +397,15 @@ Result<WASTScript> wast(Lexer& in) {
while (!in.empty()) {
size_t line = in.position().line;
auto cmd = command(in);
- if (cmd.getErr() && cmds.empty()) {
+ if (auto* err = cmd.getErr(); err && cmds.empty()) {
// The entire script might be a single module comprising a sequence of
// module fields with a top-level `(module ...)`.
auto wasm = std::make_shared<Module>();
- CHECK_ERR(parseModule(*wasm, in.buffer));
+ auto parsed = parseModule(*wasm, in.buffer);
+ if (parsed.getErr()) {
+ // No, that wasn't the problem. Return the original error.
+ return Err{err->msg};
+ }
cmds.push_back({WASTModule{std::move(wasm)}, line});
return cmds;
}