| OLD | NEW | 
|---|
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #include "src/ast.h" | 5 #include "src/ast.h" | 
| 6 | 6 | 
| 7 #include <cmath>  // For isfinite. | 7 #include <cmath>  // For isfinite. | 
| 8 #include "src/builtins.h" | 8 #include "src/builtins.h" | 
| 9 #include "src/code-stubs.h" | 9 #include "src/code-stubs.h" | 
| 10 #include "src/contexts.h" | 10 #include "src/contexts.h" | 
| (...skipping 438 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 449 void BinaryOperation::RecordToBooleanTypeFeedback(TypeFeedbackOracle* oracle) { | 449 void BinaryOperation::RecordToBooleanTypeFeedback(TypeFeedbackOracle* oracle) { | 
| 450   // TODO(olivf) If this Operation is used in a test context, then the right | 450   // TODO(olivf) If this Operation is used in a test context, then the right | 
| 451   // hand side has a ToBoolean stub and we want to collect the type information. | 451   // hand side has a ToBoolean stub and we want to collect the type information. | 
| 452   // However the GraphBuilder expects it to be on the instruction corresponding | 452   // However the GraphBuilder expects it to be on the instruction corresponding | 
| 453   // to the TestContext, therefore we have to store it here and not on the | 453   // to the TestContext, therefore we have to store it here and not on the | 
| 454   // right hand operand. | 454   // right hand operand. | 
| 455   set_to_boolean_types(oracle->ToBooleanTypes(right()->test_id())); | 455   set_to_boolean_types(oracle->ToBooleanTypes(right()->test_id())); | 
| 456 } | 456 } | 
| 457 | 457 | 
| 458 | 458 | 
| 459 bool BinaryOperation::ResultOverwriteAllowed() const { |  | 
| 460   switch (op()) { |  | 
| 461     case Token::COMMA: |  | 
| 462     case Token::OR: |  | 
| 463     case Token::AND: |  | 
| 464       return false; |  | 
| 465     case Token::BIT_OR: |  | 
| 466     case Token::BIT_XOR: |  | 
| 467     case Token::BIT_AND: |  | 
| 468     case Token::SHL: |  | 
| 469     case Token::SAR: |  | 
| 470     case Token::SHR: |  | 
| 471     case Token::ADD: |  | 
| 472     case Token::SUB: |  | 
| 473     case Token::MUL: |  | 
| 474     case Token::DIV: |  | 
| 475     case Token::MOD: |  | 
| 476       return true; |  | 
| 477     default: |  | 
| 478       UNREACHABLE(); |  | 
| 479   } |  | 
| 480   return false; |  | 
| 481 } |  | 
| 482 |  | 
| 483 |  | 
| 484 static bool IsTypeof(Expression* expr) { | 459 static bool IsTypeof(Expression* expr) { | 
| 485   UnaryOperation* maybe_unary = expr->AsUnaryOperation(); | 460   UnaryOperation* maybe_unary = expr->AsUnaryOperation(); | 
| 486   return maybe_unary != NULL && maybe_unary->op() == Token::TYPEOF; | 461   return maybe_unary != NULL && maybe_unary->op() == Token::TYPEOF; | 
| 487 } | 462 } | 
| 488 | 463 | 
| 489 | 464 | 
| 490 // Check for the pattern: typeof <expression> equals <string literal>. | 465 // Check for the pattern: typeof <expression> equals <string literal>. | 
| 491 static bool MatchLiteralCompareTypeof(Expression* left, | 466 static bool MatchLiteralCompareTypeof(Expression* left, | 
| 492                                       Token::Value op, | 467                                       Token::Value op, | 
| 493                                       Expression* right, | 468                                       Expression* right, | 
| (...skipping 555 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1049 // static | 1024 // static | 
| 1050 bool Literal::Match(void* literal1, void* literal2) { | 1025 bool Literal::Match(void* literal1, void* literal2) { | 
| 1051   const AstValue* x = static_cast<Literal*>(literal1)->raw_value(); | 1026   const AstValue* x = static_cast<Literal*>(literal1)->raw_value(); | 
| 1052   const AstValue* y = static_cast<Literal*>(literal2)->raw_value(); | 1027   const AstValue* y = static_cast<Literal*>(literal2)->raw_value(); | 
| 1053   return (x->IsString() && y->IsString() && *x->AsString() == *y->AsString()) || | 1028   return (x->IsString() && y->IsString() && *x->AsString() == *y->AsString()) || | 
| 1054          (x->IsNumber() && y->IsNumber() && x->AsNumber() == y->AsNumber()); | 1029          (x->IsNumber() && y->IsNumber() && x->AsNumber() == y->AsNumber()); | 
| 1055 } | 1030 } | 
| 1056 | 1031 | 
| 1057 | 1032 | 
| 1058 } }  // namespace v8::internal | 1033 } }  // namespace v8::internal | 
| OLD | NEW | 
|---|