diff options
-rwxr-xr-x | check.py | 2 | ||||
-rw-r--r-- | src/wasm-interpreter.h | 16 | ||||
-rw-r--r-- | src/wasm-s-parser.h | 11 |
3 files changed, 23 insertions, 6 deletions
@@ -84,7 +84,7 @@ if len(requested) == 0: # 'address' : filed issue, test looks invalid # 'labels', 'switch': todo once switch is stable # 'memory' XXX TODO - spec_tests = [os.path.join('spec', t + '.wast') for t in ['conversions', 'endianness', 'exports', 'f32_cmp', 'f32', 'f64_cmp', 'f64', 'fac', 'float_exprs', 'forward', 'func_ptrs', 'functions', 'has_feature', 'i32', 'i64', 'imports', 'int_exprs', 'int_literals', 'left-to-right', 'memory_redundancy', 'memory_trap', 'names', 'resizing', 'runaway-recursion', 'select', 'store_retval', 'traps']] + spec_tests = [os.path.join('spec', t + '.wast') for t in ['conversions', 'endianness', 'exports', 'f32_cmp', 'f32', 'f64_cmp', 'f64', 'fac', 'float_exprs', 'forward', 'func_ptrs', 'functions', 'has_feature', 'i32', 'i64', 'imports', 'int_exprs', 'int_literals', 'left-to-right', 'memory', 'memory_redundancy', 'memory_trap', 'names', 'resizing', 'runaway-recursion', 'select', 'store_retval', 'traps']] else: spec_tests = requested[:] 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; } |