summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/wasm-interpreter.h16
-rw-r--r--src/wasm-s-parser.h11
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;
}