Fix LiteralCompareTypeof breakage introduced in r15723
authorjkummerow@chromium.org <jkummerow@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Wed, 17 Jul 2013 14:58:00 +0000 (14:58 +0000)
committerjkummerow@chromium.org <jkummerow@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Wed, 17 Jul 2013 14:58:00 +0000 (14:58 +0000)
R=danno@chromium.org

Review URL: https://codereview.chromium.org/19556003

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@15725 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

src/arm/full-codegen-arm.cc
src/ast.cc
src/hydrogen.cc
src/ia32/full-codegen-ia32.cc
src/mips/full-codegen-mips.cc
src/x64/full-codegen-x64.cc

index 9040a75..0638720 100644 (file)
@@ -4598,7 +4598,7 @@ void FullCodeGenerator::EmitLiteralCompareTypeof(Expression* expr,
                          &if_true, &if_false, &fall_through);
 
   { AccumulatorValueContext context(this);
-    VisitForTypeofValue(sub_expr);
+    VisitForTypeofValue(sub_expr->AsUnaryOperation()->expression());
   }
   PrepareForBailoutBeforeSplit(expr, true, if_true, if_false);
 
index f34c7bb..779391f 100644 (file)
@@ -363,7 +363,7 @@ static bool MatchLiteralCompareTypeof(Expression* left,
                                       Expression** expr,
                                       Handle<String>* check) {
   if (IsTypeof(left) && right->IsStringLiteral() && Token::IsEqualityOp(op)) {
-    *expr = left->AsUnaryOperation()->expression();
+    *expr = left;
     *check = Handle<String>::cast(right->AsLiteral()->value());
     return true;
   }
index 154027f..3a15984 100644 (file)
@@ -8135,7 +8135,8 @@ void HOptimizedGraphBuilder::HandleLiteralCompareTypeof(CompareOperation* expr,
                                                         Expression* sub_expr,
                                                         Handle<String> check) {
   CHECK_ALIVE(VisitForValue(sub_expr));
-  HValue* value = Pop();
+  HTypeof* htypeof = HTypeof::cast(Pop());
+  HValue* value = htypeof->value();
   HTypeofIsAndBranch* instr = new(zone()) HTypeofIsAndBranch(value, check);
   instr->set_position(expr->position());
   return ast_context()->ReturnControl(instr, expr->id());
index 5b14afb..fcfefaa 100644 (file)
@@ -4608,7 +4608,7 @@ void FullCodeGenerator::EmitLiteralCompareTypeof(Expression* expr,
                          &if_true, &if_false, &fall_through);
 
   { AccumulatorValueContext context(this);
-    VisitForTypeofValue(sub_expr);
+    VisitForTypeofValue(sub_expr->AsUnaryOperation()->expression());
   }
   PrepareForBailoutBeforeSplit(expr, true, if_true, if_false);
 
index 43325df..f4d02d2 100644 (file)
@@ -4632,7 +4632,7 @@ void FullCodeGenerator::EmitLiteralCompareTypeof(Expression* expr,
                          &if_true, &if_false, &fall_through);
 
   { AccumulatorValueContext context(this);
-    VisitForTypeofValue(sub_expr);
+    VisitForTypeofValue(sub_expr->AsUnaryOperation()->expression());
   }
   PrepareForBailoutBeforeSplit(expr, true, if_true, if_false);
 
index 66bc38b..47e8c46 100644 (file)
@@ -4592,7 +4592,7 @@ void FullCodeGenerator::EmitLiteralCompareTypeof(Expression* expr,
                          &if_true, &if_false, &fall_through);
 
   { AccumulatorValueContext context(this);
-    VisitForTypeofValue(sub_expr);
+    VisitForTypeofValue(sub_expr->AsUnaryOperation()->expression());
   }
   PrepareForBailoutBeforeSplit(expr, true, if_true, if_false);