Index: src/mips/full-codegen-mips.cc |
diff --git a/src/mips/full-codegen-mips.cc b/src/mips/full-codegen-mips.cc |
index 1f1780ec2e5bd7b42c5a6a3ccbf155e7c9eb68ec..59e2a3601b554419d5c34356720d8d8d04d2d661 100644 |
--- a/src/mips/full-codegen-mips.cc |
+++ b/src/mips/full-codegen-mips.cc |
@@ -3983,26 +3983,13 @@ void FullCodeGenerator::VisitForTypeofValue(Expression* expr) { |
} |
} |
- |
-bool FullCodeGenerator::TryLiteralCompare(Token::Value op, |
- Expression* left, |
- Expression* right, |
- Label* if_true, |
- Label* if_false, |
- Label* fall_through) { |
- if (op != Token::EQ && op != Token::EQ_STRICT) return false; |
- |
- // Check for the pattern: typeof <expression> == <string literal>. |
- Literal* right_literal = right->AsLiteral(); |
- if (right_literal == NULL) return false; |
- Handle<Object> right_literal_value = right_literal->handle(); |
- if (!right_literal_value->IsString()) return false; |
- UnaryOperation* left_unary = left->AsUnaryOperation(); |
- if (left_unary == NULL || left_unary->op() != Token::TYPEOF) return false; |
- Handle<String> check = Handle<String>::cast(right_literal_value); |
- |
+void FullCodeGenerator::EmitLiteralCompareTypeof(Expression* expr, |
+ Handle<String> check, |
+ Label* if_true, |
+ Label* if_false, |
+ Label* fall_through) { |
{ AccumulatorValueContext context(this); |
- VisitForTypeofValue(left_unary->expression()); |
+ VisitForTypeofValue(expr); |
} |
PrepareForBailoutBeforeSplit(TOS_REG, true, if_true, if_false); |
@@ -4056,8 +4043,18 @@ bool FullCodeGenerator::TryLiteralCompare(Token::Value op, |
} else { |
if (if_false != fall_through) __ jmp(if_false); |
} |
+} |
- return true; |
+ |
+void FullCodeGenerator::EmitLiteralCompareUndefined(Expression* expr, |
+ Label* if_true, |
+ Label* if_false, |
+ Label* fall_through) { |
+ VisitForAccumulatorValue(expr); |
+ PrepareForBailoutBeforeSplit(TOS_REG, true, if_true, if_false); |
+ |
+ __ LoadRoot(at, Heap::kUndefinedValueRootIndex); |
+ Split(eq, v0, Operand(at), if_true, if_false, fall_through); |
} |
@@ -4077,14 +4074,12 @@ void FullCodeGenerator::VisitCompareOperation(CompareOperation* expr) { |
// First we try a fast inlined version of the compare when one of |
// the operands is a literal. |
- Token::Value op = expr->op(); |
- Expression* left = expr->left(); |
- Expression* right = expr->right(); |
- if (TryLiteralCompare(op, left, right, if_true, if_false, fall_through)) { |
+ if (TryLiteralCompare(expr, if_true, if_false, fall_through)) { |
context()->Plug(if_true, if_false); |
return; |
} |
+ Token::Value op = expr->op(); |
VisitForStackValue(expr->left()); |
switch (op) { |
case Token::IN: |