diff options
author | Lars Knoll <lars.knoll@digia.com> | 2012-10-25 16:31:12 +0200 |
---|---|---|
committer | Erik Verbruggen <erik.verbruggen@digia.com> | 2012-11-12 09:40:06 +0100 |
commit | fa3b6bd3fc7f2cc7060286b7c8ad14450533a5a6 (patch) | |
tree | 39b714b2956d0b94bb35a77913f5b3208a1d5459 /qv4codegen.cpp | |
parent | bc42b47a117df146bf57a0bd6ec43acd515de4d6 (diff) |
Allow Const's as operands to Binop
This allows us to use expressions such as
%x = %y + const
in the IR.
This still requires an implementation for moth.
Change-Id: I134e96ddad08bcbe4f3ea5fa27c5338a96acac80
Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
Diffstat (limited to 'qv4codegen.cpp')
-rw-r--r-- | qv4codegen.cpp | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/qv4codegen.cpp b/qv4codegen.cpp index 8f8db30349..0276cd3686 100644 --- a/qv4codegen.cpp +++ b/qv4codegen.cpp @@ -489,20 +489,22 @@ IR::Expr *Codegen::binop(IR::AluOp op, IR::Expr *left, IR::Expr *right) } } - if (!left->asTemp()) { + if (!left->asTemp() && !left->asConst()) { const unsigned t = _block->newTemp(); move(_block->TEMP(t), left); left = _block->TEMP(t); } - if (!right->asTemp()) { + if (!right->asTemp() && !right->asConst()) { const unsigned t = _block->newTemp(); move(_block->TEMP(t), right); right = _block->TEMP(t); } - assert(left->asTemp() && right->asTemp()); - return _block->BINOP(op, left->asTemp(), right->asTemp()); + assert(left->asTemp() || left->asConst()); + assert(right->asTemp() || right->asConst()); + + return _block->BINOP(op, left, right); } IR::Expr *Codegen::call(IR::Expr *base, IR::ExprList *args) |