| Index: src/typing.cc
|
| diff --git a/src/typing.cc b/src/typing.cc
|
| index 727c104ab5fd77d7f4427447bda7be43a3944f73..4220d2110db1118138f309f963dc19f99a059582 100644
|
| --- a/src/typing.cc
|
| +++ b/src/typing.cc
|
| @@ -404,6 +404,8 @@ void AstTyper::VisitUnaryOperation(UnaryOperation* expr) {
|
| RECURSE(Visit(expr->expression()));
|
|
|
| // Collect type feedback.
|
| + Handle<Type> op_type = oracle()->UnaryType(expr->UnaryOperationFeedbackId());
|
| + NarrowLowerType(expr->expression(), op_type);
|
| if (expr->op() == Token::NOT) {
|
| // TODO(rossberg): only do in test or value context.
|
| expr->expression()->RecordToBooleanTypeFeedback(oracle());
|
| @@ -417,6 +419,16 @@ void AstTyper::VisitUnaryOperation(UnaryOperation* expr) {
|
| case Token::VOID:
|
| NarrowType(expr, Bounds(Type::Undefined(), isolate_));
|
| break;
|
| + case Token::ADD:
|
| + case Token::SUB: {
|
| + Type* upper = *expr->expression()->bounds().upper;
|
| + if (!upper->Is(Type::Number())) upper = Type::Number();
|
| + NarrowType(expr, Bounds(Type::Smi(), upper, isolate_));
|
| + break;
|
| + }
|
| + case Token::BIT_NOT:
|
| + NarrowType(expr, Bounds(Type::Smi(), Type::Signed32(), isolate_));
|
| + break;
|
| case Token::TYPEOF:
|
| NarrowType(expr, Bounds(Type::InternalizedString(), isolate_));
|
| break;
|
|
|