From fcd9380eda412382b42cea248c3ed433b0c8a986 Mon Sep 17 00:00:00 2001 From: "sandholm@chromium.org" Date: Wed, 11 May 2011 11:56:15 +0000 Subject: [PATCH] JSON.parse improvement. Call "LookupSymbol" rather than "NewString" for property string tokens. Review URL: http://codereview.chromium.org/7004016 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@7859 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/parser.cc | 17 ++++++++++++++++- src/parser.h | 2 ++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/parser.cc b/src/parser.cc index 9e4031ad7..683854138 100644 --- a/src/parser.cc +++ b/src/parser.cc @@ -4084,6 +4084,21 @@ Handle JsonParser::GetString() { } +Handle JsonParser::GetSymbol() { + int literal_length = scanner_.literal_length(); + if (literal_length == 0) { + return isolate()->factory()->empty_string(); + } + if (scanner_.is_literal_ascii()) { + return isolate()->factory()->LookupAsciiSymbol( + scanner_.literal_ascii_string()); + } else { + return isolate()->factory()->LookupTwoByteSymbol( + scanner_.literal_uc16_string()); + } +} + + // Parse any JSON value. Handle JsonParser::ParseJsonValue() { Token::Value token = scanner_.Next(); @@ -4125,7 +4140,7 @@ Handle JsonParser::ParseJsonObject() { if (scanner_.Next() != Token::STRING) { return ReportUnexpectedToken(); } - Handle key = GetString(); + Handle key = GetSymbol(); if (scanner_.Next() != Token::COLON) { return ReportUnexpectedToken(); } diff --git a/src/parser.h b/src/parser.h index f50e2e3c6..d420d0302 100644 --- a/src/parser.h +++ b/src/parser.h @@ -814,6 +814,8 @@ class JsonParser BASE_EMBEDDED { Handle ReportUnexpectedToken() { return Handle::null(); } // Converts the currently parsed literal to a JavaScript String. Handle GetString(); + // Converts the currently parsed literal to a JavaScript Symbol String. + Handle GetSymbol(); Isolate* isolate_; JsonScanner scanner_; -- 2.34.1