aboutsummaryrefslogtreecommitdiffstats
path: root/qv4ir.cpp
diff options
context:
space:
mode:
authorRoberto Raggi <roberto.raggi@nokia.com>2012-05-28 20:17:13 +0200
committerRoberto Raggi <roberto.raggi@nokia.com>2012-05-28 20:17:13 +0200
commit5b0f452f4d5d4b63df6c914131ecef4352af768d (patch)
tree3cdd5a19c84f9a2bd08fe14aef7f1710ca57bcbe /qv4ir.cpp
parent81dda7e324497ab607e60f4ed022db9983e33352 (diff)
Implement instanceof
Diffstat (limited to 'qv4ir.cpp')
-rw-r--r--qv4ir.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/qv4ir.cpp b/qv4ir.cpp
index d106721a2f..6718c62848 100644
--- a/qv4ir.cpp
+++ b/qv4ir.cpp
@@ -143,6 +143,9 @@ const char *opname(AluOp op)
case OpStrictEqual: return "===";
case OpStrictNotEqual: return "!==";
+ case OpInstanceof: return "instanceof";
+ case OpIn: return "in";
+
case OpAnd: return "&&";
case OpOr: return "||";
@@ -175,6 +178,8 @@ AluOp binaryOperator(int op)
case QSOperator::StrictNotEqual: return OpStrictNotEqual;
case QSOperator::Sub: return OpSub;
case QSOperator::URShift: return OpURShift;
+ case QSOperator::InstanceOf: return OpInstanceof;
+ case QSOperator::In: return OpIn;
default: return OpInvalid;
}
}
@@ -351,6 +356,8 @@ Type Binop::typeForOp(AluOp op, Expr *left, Expr *right)
case OpNotEqual:
case OpStrictEqual:
case OpStrictNotEqual:
+ case OpInstanceof:
+ case OpIn:
return BoolType;
} // switch
@@ -589,6 +596,11 @@ Expr *BasicBlock::BINOP(AluOp op, Expr *left, Expr *right)
case OpSub: return CONST(ty, c1->value - c2->value);
case OpURShift: return CONST(ty, unsigned(c1->value) >> int(c2->value));
+ case OpInstanceof:
+ case OpIn:
+ Q_ASSERT(!"unreachabe");
+ break;
+
case OpIfTrue: // unary ops
case OpNot:
case OpUMinus: