From 2d4aa6295bc12b85d36aaae9d05e15db66045fa4 Mon Sep 17 00:00:00 2001 From: "lrn@chromium.org" Date: Thu, 18 Nov 2010 13:07:02 +0000 Subject: [PATCH] Extract scanner base/JS/JSON and move base and JS to scanner-base. Remove templates from prescanner. Review URL: http://codereview.chromium.org/5136002 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@5854 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/conversions.cc | 10 - src/conversions.h | 5 - src/parser.cc | 12 +- src/parser.h | 6 +- src/prescanner.h | 112 ++---- src/scanner-base.cc | 713 ++++++++++++++++++++++++++++++++++++ src/scanner-base.h | 305 +++++++++++++++- src/scanner.cc | 858 ++++---------------------------------------- src/scanner.h | 305 +++------------- test/cctest/test-parsing.cc | 8 +- 10 files changed, 1180 insertions(+), 1154 deletions(-) diff --git a/src/conversions.cc b/src/conversions.cc index c0dbf73..19fa777 100644 --- a/src/conversions.cc +++ b/src/conversions.cc @@ -39,16 +39,6 @@ namespace v8 { namespace internal { -int HexValue(uc32 c) { - if ('0' <= c && c <= '9') - return c - '0'; - if ('a' <= c && c <= 'f') - return c - 'a' + 10; - if ('A' <= c && c <= 'F') - return c - 'A' + 10; - return -1; -} - namespace { // C++-style iterator adaptor for StringInputBuffer diff --git a/src/conversions.h b/src/conversions.h index 9e32a0c..312e6ae 100644 --- a/src/conversions.h +++ b/src/conversions.h @@ -75,11 +75,6 @@ static inline uint32_t DoubleToUint32(double x) { } -// Returns the value (0 .. 15) of a hexadecimal character c. -// If c is not a legal hexadecimal character, returns a value < 0. -int HexValue(uc32 c); - - // Enumeration for allowing octals and ignoring junk when converting // strings to numbers. enum ConversionFlags { diff --git a/src/parser.cc b/src/parser.cc index a9ba0e7..c454099 100644 --- a/src/parser.cc +++ b/src/parser.cc @@ -728,7 +728,7 @@ FunctionLiteral* Parser::ParseProgram(Handle source, // Initialize parser state. source->TryFlatten(); - scanner_.Initialize(source, JAVASCRIPT); + scanner_.Initialize(source); ASSERT(target_stack_ == NULL); if (pre_data_ != NULL) pre_data_->Initialize(); @@ -791,8 +791,7 @@ FunctionLiteral* Parser::ParseLazy(Handle info) { // Initialize parser state. source->TryFlatten(); - scanner_.Initialize(source, info->start_position(), info->end_position(), - JAVASCRIPT); + scanner_.Initialize(source, info->start_position(), info->end_position()); ASSERT(target_stack_ == NULL); mode_ = PARSE_EAGERLY; @@ -3613,7 +3612,7 @@ Expression* Parser::NewThrowError(Handle constructor, Handle JsonParser::ParseJson(Handle source) { source->TryFlatten(); - scanner_.Initialize(source, JSON); + scanner_.Initialize(source); Handle result = ParseJsonValue(); if (result.is_null() || scanner_.Next() != Token::EOS) { if (scanner_.stack_overflow()) { @@ -4641,10 +4640,9 @@ int ScriptDataImpl::ReadNumber(byte** source) { static ScriptDataImpl* DoPreParse(UTF16Buffer* stream, bool allow_lazy, PartialParserRecorder* recorder) { - typedef preparser::Scanner PreScanner; - PreScanner scanner; + preparser::Scanner scanner; scanner.Initialize(stream); - preparser::PreParser preparser; + preparser::PreParser preparser; if (!preparser.PreParseProgram(&scanner, recorder, allow_lazy)) { Top::StackOverflow(); return NULL; diff --git a/src/parser.h b/src/parser.h index 64f621c..e15a7fa 100644 --- a/src/parser.h +++ b/src/parser.h @@ -682,7 +682,7 @@ class Parser { Expression* ParseV8Intrinsic(bool* ok); INLINE(Token::Value peek()) { return scanner_.peek(); } - INLINE(Token::Value Next()) { return scanner_.Next(); } + INLINE(Token::Value Next()) { return scanner_.NextCheckStack(); } INLINE(void Consume(Token::Value token)); void Expect(Token::Value token, bool* ok); bool Check(Token::Value token); @@ -760,7 +760,7 @@ class Parser { ZoneList > symbol_cache_; Handle