diff options
author | Alon Zakai <alonzakai@gmail.com> | 2016-04-18 11:47:04 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2016-04-18 11:47:04 -0700 |
commit | b08aa103597b00a2b4a54d81cde6454f3082b4d5 (patch) | |
tree | 23ffae7e36e0f61729303fa2f5a720e495c2253e /src/wasm-interpreter.h | |
parent | c611306758e6c811642623500a51b0da52758303 (diff) | |
download | binaryen-b08aa103597b00a2b4a54d81cde6454f3082b4d5.tar.gz binaryen-b08aa103597b00a2b4a54d81cde6454f3082b4d5.tar.bz2 binaryen-b08aa103597b00a2b4a54d81cde6454f3082b4d5.zip |
index locals, so that get_local and set_local have just an index, and local names are kept on the Function object (#354)
Diffstat (limited to 'src/wasm-interpreter.h')
-rw-r--r-- | src/wasm-interpreter.h | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/src/wasm-interpreter.h b/src/wasm-interpreter.h index 528f812d0..8f3f09ed1 100644 --- a/src/wasm-interpreter.h +++ b/src/wasm-interpreter.h @@ -156,18 +156,21 @@ private: << arguments.size() << " arguments." << std::endl; abort(); } - for (size_t i = 0; i < arguments.size(); i++) { - if (function->params[i].type != arguments[i].type) { - std::cerr << "Function `" << function->name << "` expects type " - << printWasmType(function->params[i].type) - << " for parameter " << i << ", got " - << printWasmType(arguments[i].type) << "." << std::endl; - abort(); + for (size_t i = 0; i < function->getNumLocals(); i++) { + if (i < arguments.size()) { + assert(function->isParam(i)); + if (function->params[i] != arguments[i].type) { + std::cerr << "Function `" << function->name << "` expects type " + << printWasmType(function->params[i]) + << " for parameter " << i << ", got " + << printWasmType(arguments[i].type) << "." << std::endl; + abort(); + } + locals[function->getLocalName(i)] = arguments[i]; + } else { + assert(function->isVar(i)); + locals[function->getLocalName(i)].type = function->getLocalType(i); } - locals[function->params[i].name] = arguments[i]; - } - for (auto& local : function->vars) { - locals[local.name].type = local.type; } } }; @@ -356,14 +359,14 @@ private: Flow visitGetLocal(GetLocal *curr) { NOTE_ENTER("GetLocal"); - IString name = curr->name; + IString name = scope.function->getLocalName(curr->index); NOTE_NAME(name); NOTE_EVAL1(scope.locals[name]); return scope.locals[name]; } Flow visitSetLocal(SetLocal *curr) { NOTE_ENTER("SetLocal"); - IString name = curr->name; + IString name = scope.function->getLocalName(curr->index); Flow flow = visit(curr->value); if (flow.breaking()) return flow; NOTE_NAME(name); |