summaryrefslogtreecommitdiff
path: root/src/wasm-interpreter.h
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2016-04-18 11:47:04 -0700
committerAlon Zakai <alonzakai@gmail.com>2016-04-18 11:47:04 -0700
commitb08aa103597b00a2b4a54d81cde6454f3082b4d5 (patch)
tree23ffae7e36e0f61729303fa2f5a720e495c2253e /src/wasm-interpreter.h
parentc611306758e6c811642623500a51b0da52758303 (diff)
downloadbinaryen-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.h29
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);