Chromium Code Reviews| Index: src/parser.cc |
| diff --git a/src/parser.cc b/src/parser.cc |
| index 0f842ad8dadd975dc46e9a5282ddd85256baad15..dceab9c97755821c96200473944ffa37ed1783d7 100644 |
| --- a/src/parser.cc |
| +++ b/src/parser.cc |
| @@ -551,6 +551,11 @@ bool ParserTraits::IsEvalOrArguments(Handle<String> identifier) const { |
| } |
| +int ParserTraits::NextMaterializedLiteralIndex() { |
| + return parser_->current_function_state_->NextMaterializedLiteralIndex(); |
| +} |
| + |
| + |
| void ParserTraits::ReportMessageAt(Scanner::Location source_location, |
| const char* message, |
| Vector<const char*> args) { |
| @@ -601,6 +606,28 @@ Handle<String> ParserTraits::GetSymbol() { |
| return parser_->LookupSymbol(symbol_id); |
| } |
| + |
| +Handle<String> ParserTraits::NextLiteralString(PretenureFlag tenured) { |
| + Scanner& scanner = parser_->scanner(); |
| + if (scanner.is_next_literal_ascii()) { |
| + return parser_->isolate_->factory()->NewStringFromAscii( |
| + scanner.next_literal_ascii_string(), tenured); |
| + } else { |
| + return parser_->isolate_->factory()->NewStringFromTwoByte( |
| + scanner.next_literal_utf16_string(), tenured); |
| + } |
| +} |
| + |
| + |
| +Expression* ParserTraits::NewRegExpLiteral(Handle<String> js_pattern, |
| + Handle<String> js_flags, |
| + int literal_index, |
| + int pos) { |
| + return parser_->factory() |
| + ->NewRegExpLiteral(js_pattern, js_flags, literal_index, pos); |
|
ulan
2014/02/11 11:44:40
Please break the line in arguments.
marja
2014/02/11 11:50:49
Done.
|
| +} |
| + |
| + |
| Parser::Parser(CompilationInfo* info) |
| : ParserBase<ParserTraits>(&scanner_, |
| info->isolate()->stack_guard()->real_climit(), |
| @@ -3834,26 +3861,6 @@ Expression* Parser::ParseObjectLiteral(bool* ok) { |
| } |
| -Expression* Parser::ParseRegExpLiteral(bool seen_equal, bool* ok) { |
| - int pos = peek_position(); |
| - if (!scanner().ScanRegExpPattern(seen_equal)) { |
| - Next(); |
| - ReportMessage("unterminated_regexp", Vector<const char*>::empty()); |
| - *ok = false; |
| - return NULL; |
| - } |
| - |
| - int literal_index = current_function_state_->NextMaterializedLiteralIndex(); |
| - |
| - Handle<String> js_pattern = NextLiteralString(TENURED); |
| - scanner().ScanRegExpFlags(); |
| - Handle<String> js_flags = NextLiteralString(TENURED); |
| - Next(); |
| - |
| - return factory()->NewRegExpLiteral(js_pattern, js_flags, literal_index, pos); |
| -} |
| - |
| - |
| ZoneList<Expression*>* Parser::ParseArguments(bool* ok) { |
| // Arguments :: |
| // '(' (AssignmentExpression)*[','] ')' |