From 9ed1fe1ac42342f063a4ceeae5086c5ff6f1f971 Mon Sep 17 00:00:00 2001 From: "jkummerow@chromium.org" Date: Wed, 17 Jul 2013 15:58:59 +0000 Subject: [PATCH] Better fix for LiteralCompareTypeof This reverts r15725 and replaces it with the following one-liner in hydrogen.cc's HandleLiteralCompareTypeof: - CHECK_ALIVE(VisitForValue(sub_expr)); + CHECK_ALIVE(VisitForTypeOf(sub_expr)); R=danno@chromium.org Review URL: https://codereview.chromium.org/19523005 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@15728 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/arm/full-codegen-arm.cc | 2 +- src/ast.cc | 2 +- src/hydrogen.cc | 5 ++--- src/ia32/full-codegen-ia32.cc | 2 +- src/mips/full-codegen-mips.cc | 2 +- src/x64/full-codegen-x64.cc | 2 +- 6 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/arm/full-codegen-arm.cc b/src/arm/full-codegen-arm.cc index 0638720f3..9040a75a3 100644 --- a/src/arm/full-codegen-arm.cc +++ b/src/arm/full-codegen-arm.cc @@ -4598,7 +4598,7 @@ void FullCodeGenerator::EmitLiteralCompareTypeof(Expression* expr, &if_true, &if_false, &fall_through); { AccumulatorValueContext context(this); - VisitForTypeofValue(sub_expr->AsUnaryOperation()->expression()); + VisitForTypeofValue(sub_expr); } PrepareForBailoutBeforeSplit(expr, true, if_true, if_false); diff --git a/src/ast.cc b/src/ast.cc index 779391f1c..f34c7bb24 100644 --- a/src/ast.cc +++ b/src/ast.cc @@ -363,7 +363,7 @@ static bool MatchLiteralCompareTypeof(Expression* left, Expression** expr, Handle* check) { if (IsTypeof(left) && right->IsStringLiteral() && Token::IsEqualityOp(op)) { - *expr = left; + *expr = left->AsUnaryOperation()->expression(); *check = Handle::cast(right->AsLiteral()->value()); return true; } diff --git a/src/hydrogen.cc b/src/hydrogen.cc index 3a1598431..6744dbb10 100644 --- a/src/hydrogen.cc +++ b/src/hydrogen.cc @@ -8134,9 +8134,8 @@ void HOptimizedGraphBuilder::VisitArithmeticExpression(BinaryOperation* expr) { void HOptimizedGraphBuilder::HandleLiteralCompareTypeof(CompareOperation* expr, Expression* sub_expr, Handle check) { - CHECK_ALIVE(VisitForValue(sub_expr)); - HTypeof* htypeof = HTypeof::cast(Pop()); - HValue* value = htypeof->value(); + CHECK_ALIVE(VisitForTypeOf(sub_expr)); + HValue* value = Pop(); HTypeofIsAndBranch* instr = new(zone()) HTypeofIsAndBranch(value, check); instr->set_position(expr->position()); return ast_context()->ReturnControl(instr, expr->id()); diff --git a/src/ia32/full-codegen-ia32.cc b/src/ia32/full-codegen-ia32.cc index fcfefaae5..5b14afbf0 100644 --- a/src/ia32/full-codegen-ia32.cc +++ b/src/ia32/full-codegen-ia32.cc @@ -4608,7 +4608,7 @@ void FullCodeGenerator::EmitLiteralCompareTypeof(Expression* expr, &if_true, &if_false, &fall_through); { AccumulatorValueContext context(this); - VisitForTypeofValue(sub_expr->AsUnaryOperation()->expression()); + VisitForTypeofValue(sub_expr); } PrepareForBailoutBeforeSplit(expr, true, if_true, if_false); diff --git a/src/mips/full-codegen-mips.cc b/src/mips/full-codegen-mips.cc index f4d02d236..43325dfb2 100644 --- a/src/mips/full-codegen-mips.cc +++ b/src/mips/full-codegen-mips.cc @@ -4632,7 +4632,7 @@ void FullCodeGenerator::EmitLiteralCompareTypeof(Expression* expr, &if_true, &if_false, &fall_through); { AccumulatorValueContext context(this); - VisitForTypeofValue(sub_expr->AsUnaryOperation()->expression()); + VisitForTypeofValue(sub_expr); } PrepareForBailoutBeforeSplit(expr, true, if_true, if_false); diff --git a/src/x64/full-codegen-x64.cc b/src/x64/full-codegen-x64.cc index 47e8c465d..66bc38b26 100644 --- a/src/x64/full-codegen-x64.cc +++ b/src/x64/full-codegen-x64.cc @@ -4592,7 +4592,7 @@ void FullCodeGenerator::EmitLiteralCompareTypeof(Expression* expr, &if_true, &if_false, &fall_through); { AccumulatorValueContext context(this); - VisitForTypeofValue(sub_expr->AsUnaryOperation()->expression()); + VisitForTypeofValue(sub_expr); } PrepareForBailoutBeforeSplit(expr, true, if_true, if_false); -- 2.34.1