diff -r f43e399ab622 -r 633176823669 jitcraft/BytecodeCompiler.cpp --- a/jitcraft/BytecodeCompiler.cpp Tue Jun 26 00:58:55 2012 -0700 +++ b/jitcraft/BytecodeCompiler.cpp Wed Jun 27 02:21:56 2012 -0700 @@ -152,12 +152,22 @@ } void +BytecodeCompiler::visitForALU(Type *needed, Expression *node) +{ + node->accept(this); + if (needed->isFloat() && !node->type()->isFloat()) + __ cvt_i2f(); +} + +void BytecodeCompiler::visit(BinaryExpression *node) { - node->left()->accept(this); - node->right()->accept(this); + visitForALU(node->type(), node->left()); + visitForALU(node->type(), node->right()); Opcode op = TokenToOpcode(node->token()); + if (node->type()->isFloat()) + op = (Opcode)(int(op) + (OP_ADD_F - OP_ADD)); __ binary(op); } @@ -256,12 +266,18 @@ } void -BytecodeCompiler::visit(IntegerLiteralExpression *node) +BytecodeCompiler::visit(IntegerLiteral *node) { __ int_(node->value()); } void +BytecodeCompiler::visit(FloatLiteral *node) +{ + __ float_((float)node->value()); +} + +void BytecodeCompiler::visit(VariableDeclaration *node) { Variable *var = node->variable();