diff options
author | Alon Zakai <alonzakai@gmail.com> | 2015-11-26 15:05:09 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2015-11-26 15:05:09 -0800 |
commit | d029c2fe9570c04060e3586eb3369e778200be57 (patch) | |
tree | 4cefdc5bd0a532aeb002c4d9bed3b180dc60b9b8 /src/wasm2asm.h | |
parent | 3aa164ab9a7b447f6c5f52e5ac4d0faf65e68eac (diff) | |
download | binaryen-d029c2fe9570c04060e3586eb3369e778200be57.tar.gz binaryen-d029c2fe9570c04060e3586eb3369e778200be57.tar.bz2 binaryen-d029c2fe9570c04060e3586eb3369e778200be57.zip |
wasm2asm progress
Diffstat (limited to 'src/wasm2asm.h')
-rw-r--r-- | src/wasm2asm.h | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/wasm2asm.h b/src/wasm2asm.h index 0b81597f4..8c143b535 100644 --- a/src/wasm2asm.h +++ b/src/wasm2asm.h @@ -456,7 +456,7 @@ Ref Wasm2AsmBuilder::processFunctionBody(Expression* curr, IString result) { theCall[2]->push_back(makeName(temp)); } if (result != NO_RESULT) { - theCall = ValueBuilder::makeAssign(makeName(result), theCall); + theCall = ValueBuilder::makeAssign(ValueBuilder::makeName(result), theCall); } ret[1]->push_back(theCall); return ret; @@ -468,8 +468,16 @@ Ref Wasm2AsmBuilder::processFunctionBody(Expression* curr, IString result) { abort(); // XXX TODO } void visitGetLocal(GetLocal *curr) override { + return ValueBuilder::makeName(fromName(curr->name)); } void visitSetLocal(SetLocal *curr) override { + if (!isStatement(curr)) { + return ValueBuilder::makeAssign(ValueBuilder::makeName(fromName(curr->name)), visit(curr->value, EXPRESSION_RESULT)); + } + Ref ret = blockify(visit(curr->value, result)); + // the output was assigned to result, so we can just assign it to our target + ret[1]->push_back(ValueBuilder::makeAssign(ValueBuilder::makeName(fromName(curr->name)), ValueBuilder::makeName(result))); + return ret; } void visitLoad(Load *curr) override { } |