| Index: vm/parser.cc
|
| ===================================================================
|
| --- vm/parser.cc (revision 4719)
|
| +++ vm/parser.cc (working copy)
|
| @@ -265,6 +265,22 @@
|
| }
|
|
|
|
|
| +RawDouble* Parser::CurrentDoubleLiteral() const {
|
| + LiteralToken& token = LiteralToken::Handle();
|
| + token ^= tokens_.TokenAt(token_index_);
|
| + ASSERT(token.kind() == Token::kDOUBLE);
|
| + return reinterpret_cast<RawDouble*>(token.value());
|
| +}
|
| +
|
| +
|
| +RawInteger* Parser::CurrentIntegerLiteral() const {
|
| + LiteralToken& token = LiteralToken::Handle();
|
| + token ^= tokens_.TokenAt(token_index_);
|
| + ASSERT(token.kind() == Token::kINTEGER);
|
| + return reinterpret_cast<RawInteger*>(token.value());
|
| +}
|
| +
|
| +
|
| // A QualIdent is an optionally qualified identifier.
|
| struct QualIdent {
|
| QualIdent() {
|
| @@ -7554,10 +7570,7 @@
|
| primary = new LoadLocalNode(token_index_, *local);
|
| ConsumeToken();
|
| } else if (CurrentToken() == Token::kINTEGER) {
|
| - String* int_literal = CurrentLiteral();
|
| - ASSERT(int_literal != NULL);
|
| - ASSERT(int_literal->Length() > 0);
|
| - const Integer& literal = Integer::ZoneHandle(Integer::New(*int_literal));
|
| + const Integer& literal = Integer::ZoneHandle(CurrentIntegerLiteral());
|
| primary = new LiteralNode(token_index_, literal);
|
| ConsumeToken();
|
| } else if (CurrentToken() == Token::kTRUE) {
|
| @@ -7576,11 +7589,7 @@
|
| SetAllowFunctionLiterals(saved_mode);
|
| ExpectToken(Token::kRPAREN);
|
| } else if (CurrentToken() == Token::kDOUBLE) {
|
| - String* double_literal = CurrentLiteral();
|
| - ASSERT(double_literal != NULL);
|
| - ASSERT(double_literal->Length() > 0);
|
| - Double& double_value =
|
| - Double::ZoneHandle(Double::NewCanonical(*double_literal));
|
| + Double& double_value = Double::ZoneHandle(CurrentDoubleLiteral());
|
| if (double_value.IsNull()) {
|
| ErrorMsg("invalid double literal");
|
| }
|
|
|