| Index: src/parser.cc | 
| =================================================================== | 
| --- src/parser.cc	(revision 8322) | 
| +++ src/parser.cc	(working copy) | 
| @@ -2545,18 +2545,26 @@ | 
| int position = scanner().location().beg_pos; | 
| Expression* expression = ParseUnaryExpression(CHECK_OK); | 
|  | 
| -    // Compute some expressions involving only number literals. | 
| -    if (expression != NULL && expression->AsLiteral() && | 
| -        expression->AsLiteral()->handle()->IsNumber()) { | 
| -      double value = expression->AsLiteral()->handle()->Number(); | 
| -      switch (op) { | 
| -        case Token::ADD: | 
| -          return expression; | 
| -        case Token::SUB: | 
| -          return NewNumberLiteral(-value); | 
| -        case Token::BIT_NOT: | 
| -          return NewNumberLiteral(~DoubleToInt32(value)); | 
| -        default: break; | 
| +    if (expression != NULL && (expression->AsLiteral() != NULL)) { | 
| +      Handle<Object> literal = expression->AsLiteral()->handle(); | 
| +      if (op == Token::NOT) { | 
| +        // Convert the literal to a boolean condition and negate it. | 
| +        bool condition = literal->ToBoolean()->IsTrue(); | 
| +        Handle<Object> result(isolate()->heap()->ToBoolean(!condition)); | 
| +        return new(zone()) Literal(result); | 
| +      } else if (literal->IsNumber()) { | 
| +        // Compute some expressions involving only number literals. | 
| +        double value = literal->Number(); | 
| +        switch (op) { | 
| +          case Token::ADD: | 
| +            return expression; | 
| +          case Token::SUB: | 
| +            return NewNumberLiteral(-value); | 
| +          case Token::BIT_NOT: | 
| +            return NewNumberLiteral(~DoubleToInt32(value)); | 
| +          default: | 
| +            break; | 
| +        } | 
| } | 
| } | 
|  | 
|  |