Chromium Code Reviews| Index: src/ia32/full-codegen-ia32.cc |
| diff --git a/src/ia32/full-codegen-ia32.cc b/src/ia32/full-codegen-ia32.cc |
| index f46a30a5e29ff2e03008ddb204d2df391cda85ae..ecb2c9001c3524746aea18b2ec3525b99f07773e 100644 |
| --- a/src/ia32/full-codegen-ia32.cc |
| +++ b/src/ia32/full-codegen-ia32.cc |
| @@ -3930,25 +3930,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); |
| @@ -3998,8 +3986,20 @@ 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) { |
| + { AccumulatorValueContext context(this); |
|
fschneider
2011/06/21 11:36:08
Same comment as on ARM.
Steven
2011/06/22 10:00:53
Done.
|
| + VisitForTypeofValue(expr); |
| + } |
| + PrepareForBailoutBeforeSplit(TOS_REG, true, if_true, if_false); |
| + |
| + __ cmp(eax, isolate()->factory()->undefined_value()); |
| + Split(equal, if_true, if_false, fall_through); |
| } |