| OLD | NEW | 
|     1 // Copyright 2015 the V8 project authors. All rights reserved. |     1 // Copyright 2015 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/typing-asm.h" |     5 #include "src/typing-asm.h" | 
|     6  |     6  | 
|     7 #include <limits> |     7 #include <limits> | 
|     8  |     8  | 
|     9 #include "src/v8.h" |     9 #include "src/v8.h" | 
|    10  |    10  | 
| (...skipping 1263 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1274             } |  1274             } | 
|  1275           } else { |  1275           } else { | 
|  1276             if (intish_ > kMaxUncombinedMultiplicativeSteps) { |  1276             if (intish_ > kMaxUncombinedMultiplicativeSteps) { | 
|  1277               FAIL(expr, "too many consecutive multiplicative ops"); |  1277               FAIL(expr, "too many consecutive multiplicative ops"); | 
|  1278             } |  1278             } | 
|  1279           } |  1279           } | 
|  1280           IntersectResult(expr, cache_.kAsmInt); |  1280           IntersectResult(expr, cache_.kAsmInt); | 
|  1281           return; |  1281           return; | 
|  1282         } |  1282         } | 
|  1283       } else if (expr->op() == Token::MUL && expr->right()->IsLiteral() && |  1283       } else if (expr->op() == Token::MUL && expr->right()->IsLiteral() && | 
|  1284                  right_type->Is(cache_.kAsmDouble)) { |  1284                  right_type->Is(cache_.kAsmDouble) && | 
 |  1285                  expr->right()->AsLiteral()->raw_value()->ContainsDot() && | 
 |  1286                  expr->right()->AsLiteral()->raw_value()->AsNumber() == 1.0) { | 
|  1285         // For unary +, expressed as x * 1.0 |  1287         // For unary +, expressed as x * 1.0 | 
|  1286         if (expr->left()->IsCall() && expr->op() == Token::MUL && |  1288         if (expr->left()->IsCall() && | 
|  1287             Type::Number()->Is(expr->left()->bounds().upper)) { |  1289             Type::Number()->Is(expr->left()->bounds().upper)) { | 
|  1288           // Force the return types of foreign functions. |  1290           // Force the return types of foreign functions. | 
|  1289           expr->left()->set_bounds(Bounds(cache_.kAsmDouble)); |  1291           expr->left()->set_bounds(Bounds(cache_.kAsmDouble)); | 
 |  1292           left_type = expr->left()->bounds().upper; | 
 |  1293         } | 
 |  1294         if (!(expr->left()->IsProperty() && | 
 |  1295               Type::Number()->Is(expr->left()->bounds().upper))) { | 
 |  1296           if (!left_type->Is(cache_.kAsmSigned) && | 
 |  1297               !left_type->Is(cache_.kAsmUnsigned) && | 
 |  1298               !left_type->Is(cache_.kAsmFixnum) && | 
 |  1299               !left_type->Is(cache_.kAsmFloatQ) && | 
 |  1300               !left_type->Is(cache_.kAsmDoubleQ)) { | 
 |  1301             FAIL( | 
 |  1302                 expr->left(), | 
 |  1303                 "unary + only allowed on signed, unsigned, float?, or double?"); | 
 |  1304           } | 
|  1290         } |  1305         } | 
|  1291         IntersectResult(expr, cache_.kAsmDouble); |  1306         IntersectResult(expr, cache_.kAsmDouble); | 
|  1292         return; |  1307         return; | 
|  1293       } else if (expr->op() == Token::MUL && left_type->Is(cache_.kAsmDouble) && |  1308       } else if (expr->op() == Token::MUL && left_type->Is(cache_.kAsmDouble) && | 
|  1294                  expr->right()->IsLiteral() && |  1309                  expr->right()->IsLiteral() && | 
|  1295                  !expr->right()->AsLiteral()->raw_value()->ContainsDot() && |  1310                  !expr->right()->AsLiteral()->raw_value()->ContainsDot() && | 
|  1296                  expr->right()->AsLiteral()->raw_value()->AsNumber() == -1.0) { |  1311                  expr->right()->AsLiteral()->raw_value()->AsNumber() == -1.0) { | 
|  1297         // For unary -, expressed as x * -1 |  1312         // For unary -, expressed as x * -1 | 
|  1298         expr->right()->set_bounds(Bounds(cache_.kAsmDouble)); |  1313         expr->right()->set_bounds(Bounds(cache_.kAsmDouble)); | 
|  1299         IntersectResult(expr, cache_.kAsmDouble); |  1314         IntersectResult(expr, cache_.kAsmDouble); | 
| (...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1600 } |  1615 } | 
|  1601  |  1616  | 
|  1602  |  1617  | 
|  1603 void AsmTyper::VisitRewritableExpression(RewritableExpression* expr) { |  1618 void AsmTyper::VisitRewritableExpression(RewritableExpression* expr) { | 
|  1604   RECURSE(Visit(expr->expression())); |  1619   RECURSE(Visit(expr->expression())); | 
|  1605 } |  1620 } | 
|  1606  |  1621  | 
|  1607  |  1622  | 
|  1608 }  // namespace internal |  1623 }  // namespace internal | 
|  1609 }  // namespace v8 |  1624 }  // namespace v8 | 
| OLD | NEW |