aboutsummaryrefslogtreecommitdiffstats
path: root/qv4codegen.cpp
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@digia.com>2012-10-25 16:31:12 +0200
committerErik Verbruggen <erik.verbruggen@digia.com>2012-11-12 09:40:06 +0100
commitfa3b6bd3fc7f2cc7060286b7c8ad14450533a5a6 (patch)
tree39b714b2956d0b94bb35a77913f5b3208a1d5459 /qv4codegen.cpp
parentbc42b47a117df146bf57a0bd6ec43acd515de4d6 (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.cpp10
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)