diff options
Diffstat (limited to 'src/parser/wat-parser.cpp')
-rw-r--r-- | src/parser/wat-parser.cpp | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/src/parser/wat-parser.cpp b/src/parser/wat-parser.cpp index 95dfa1405..a9ee2a189 100644 --- a/src/parser/wat-parser.cpp +++ b/src/parser/wat-parser.cpp @@ -80,9 +80,13 @@ Result<> parseDefs(Ctx& ctx, for (auto& def : defs) { ctx.index = def.index; WithPosition with(ctx, def.pos); - auto parsed = parser(ctx); - CHECK_ERR(parsed); - assert(parsed); + if (auto parsed = parser(ctx)) { + CHECK_ERR(parsed); + } else { + auto im = import_(ctx); + assert(im); + CHECK_ERR(im); + } } return Ok{}; } @@ -174,9 +178,13 @@ Result<> parseModule(Module& wasm, std::string_view input) { ctx.index = i; CHECK_ERR(ctx.visitFunctionStart(wasm.functions[i].get())); WithPosition with(ctx, decls.funcDefs[i].pos); - auto parsed = func(ctx); - CHECK_ERR(parsed); - assert(parsed); + if (auto parsed = func(ctx)) { + CHECK_ERR(parsed); + } else { + auto im = import_(ctx); + assert(im); + CHECK_ERR(im); + } } // Parse exports. |