diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/wasm-interpreter.h | 16 | ||||
-rw-r--r-- | src/wasm-s-parser.h | 11 |
2 files changed, 22 insertions, 5 deletions
diff --git a/src/wasm-interpreter.h b/src/wasm-interpreter.h index 918b65f02..527fd1abf 100644 --- a/src/wasm-interpreter.h +++ b/src/wasm-interpreter.h @@ -1,3 +1,4 @@ + // // Simple WebAssembly interpreter, designed to be embeddable in JavaScript, so it // can function as a polyfill. @@ -129,12 +130,12 @@ private: doIndent(std::cout, indent); std::cout << "visit " << name << " :\n"; indent++; - doIndent(std::cout, indent); - expression->print(std::cout, indent) << '\n'; - indent++; + //doIndent(std::cout, indent); + //expression->print(std::cout, indent) << '\n'; + //indent++; } ~IndentHandler() { - indent--; + //indent--; indent--; doIndent(std::cout, indent); std::cout << "exit " << name << '\n'; @@ -675,10 +676,17 @@ private: assert(function); FunctionScope scope(function, arguments); +#ifdef WASM_INTERPRETER_DEBUG + std::cout << "entering " << function->name << '\n'; +#endif + Literal ret = ExpressionRunner(*this, scope).visit(function->body).value; if (function->result == none) ret = Literal(); assert(function->result == ret.type); callDepth--; +#ifdef WASM_INTERPRETER_DEBUG + std::cout << "exiting " << function->name << '\n'; +#endif return ret; } diff --git a/src/wasm-s-parser.h b/src/wasm-s-parser.h index e92f56eea..677052984 100644 --- a/src/wasm-s-parser.h +++ b/src/wasm-s-parser.h @@ -849,6 +849,15 @@ private: return ret; } + Expression* makeMaybeBlock(Element &s, size_t i) { + if (s.size() == i+1) return parseExpression(s[i]); + auto ret = allocator.alloc<Block>(); + for (; i < s.size(); i++) { + ret->list.push_back(parseExpression(s[i])); + } + return ret; + } + Expression* makeLoop(Element& s) { auto ret = allocator.alloc<Loop>(); size_t i = 1; @@ -860,7 +869,7 @@ private: ret->in = s[i]->str(); i++; } - ret->body = parseExpression(s[i]); + ret->body = makeMaybeBlock(s, i); return ret; } |