| Index: src/parser.cc
|
| diff --git a/src/parser.cc b/src/parser.cc
|
| index 8f921affe9c4d46b1c54248e5f26a7ff73d95ac2..6437241af4a2c0480f5cd7c9aac03216c3ff237c 100644
|
| --- a/src/parser.cc
|
| +++ b/src/parser.cc
|
| @@ -532,14 +532,13 @@ Parser::FunctionState::~FunctionState() {
|
| // ----------------------------------------------------------------------------
|
| // Implementation of Parser
|
|
|
| -Parser::Parser(Handle<Script> script,
|
| +Parser::Parser(CompilationInfo* info,
|
| int parser_flags,
|
| v8::Extension* extension,
|
| - ScriptDataImpl* pre_data,
|
| - Zone* zone)
|
| - : isolate_(script->GetIsolate()),
|
| - symbol_cache_(pre_data ? pre_data->symbol_count() : 0, zone),
|
| - script_(script),
|
| + ScriptDataImpl* pre_data)
|
| + : isolate_(info->isolate()),
|
| + symbol_cache_(pre_data ? pre_data->symbol_count() : 0, info->zone()),
|
| + script_(info->script()),
|
| scanner_(isolate_->unicode_cache()),
|
| reusable_preparser_(NULL),
|
| top_scope_(NULL),
|
| @@ -553,7 +552,9 @@ Parser::Parser(Handle<Script> script,
|
| allow_modules_((parser_flags & kAllowModules) != 0),
|
| stack_overflow_(false),
|
| parenthesized_function_(false),
|
| - zone_(zone) {
|
| + zone_(info->zone()),
|
| + info_(info) {
|
| + ASSERT(!script_.is_null());
|
| isolate_->set_ast_node_id(0);
|
| if ((parser_flags & kLanguageModeMask) == EXTENDED_MODE) {
|
| scanner().SetHarmonyScoping(true);
|
| @@ -564,8 +565,8 @@ Parser::Parser(Handle<Script> script,
|
| }
|
|
|
|
|
| -FunctionLiteral* Parser::ParseProgram(CompilationInfo* info) {
|
| - ZoneScope zone_scope(info->zone(), DONT_DELETE_ON_EXIT);
|
| +FunctionLiteral* Parser::ParseProgram() {
|
| + ZoneScope zone_scope(zone(), DONT_DELETE_ON_EXIT);
|
|
|
| HistogramTimerScope timer(isolate()->counters()->parse());
|
| Handle<String> source(String::cast(script_->source()));
|
| @@ -581,11 +582,11 @@ FunctionLiteral* Parser::ParseProgram(CompilationInfo* info) {
|
| ExternalTwoByteStringUtf16CharacterStream stream(
|
| Handle<ExternalTwoByteString>::cast(source), 0, source->length());
|
| scanner_.Initialize(&stream);
|
| - return DoParseProgram(info, source, &zone_scope);
|
| + return DoParseProgram(info(), source, &zone_scope);
|
| } else {
|
| GenericStringUtf16CharacterStream stream(source, 0, source->length());
|
| scanner_.Initialize(&stream);
|
| - return DoParseProgram(info, source, &zone_scope);
|
| + return DoParseProgram(info(), source, &zone_scope);
|
| }
|
| }
|
|
|
| @@ -662,13 +663,13 @@ FunctionLiteral* Parser::DoParseProgram(CompilationInfo* info,
|
| }
|
|
|
|
|
| -FunctionLiteral* Parser::ParseLazy(CompilationInfo* info) {
|
| - ZoneScope zone_scope(info->zone(), DONT_DELETE_ON_EXIT);
|
| +FunctionLiteral* Parser::ParseLazy() {
|
| + ZoneScope zone_scope(zone(), DONT_DELETE_ON_EXIT);
|
| HistogramTimerScope timer(isolate()->counters()->parse_lazy());
|
| Handle<String> source(String::cast(script_->source()));
|
| isolate()->counters()->total_parse_size()->Increment(source->length());
|
|
|
| - Handle<SharedFunctionInfo> shared_info = info->shared_info();
|
| + Handle<SharedFunctionInfo> shared_info = info()->shared_info();
|
| // Initialize parser state.
|
| source->TryFlatten();
|
| if (source->IsExternalTwoByteString()) {
|
| @@ -676,22 +677,21 @@ FunctionLiteral* Parser::ParseLazy(CompilationInfo* info) {
|
| Handle<ExternalTwoByteString>::cast(source),
|
| shared_info->start_position(),
|
| shared_info->end_position());
|
| - FunctionLiteral* result = ParseLazy(info, &stream, &zone_scope);
|
| + FunctionLiteral* result = ParseLazy(&stream, &zone_scope);
|
| return result;
|
| } else {
|
| GenericStringUtf16CharacterStream stream(source,
|
| shared_info->start_position(),
|
| shared_info->end_position());
|
| - FunctionLiteral* result = ParseLazy(info, &stream, &zone_scope);
|
| + FunctionLiteral* result = ParseLazy(&stream, &zone_scope);
|
| return result;
|
| }
|
| }
|
|
|
|
|
| -FunctionLiteral* Parser::ParseLazy(CompilationInfo* info,
|
| - Utf16CharacterStream* source,
|
| +FunctionLiteral* Parser::ParseLazy(Utf16CharacterStream* source,
|
| ZoneScope* zone_scope) {
|
| - Handle<SharedFunctionInfo> shared_info = info->shared_info();
|
| + Handle<SharedFunctionInfo> shared_info = info()->shared_info();
|
| scanner_.Initialize(source);
|
| ASSERT(top_scope_ == NULL);
|
| ASSERT(target_stack_ == NULL);
|
| @@ -708,16 +708,16 @@ FunctionLiteral* Parser::ParseLazy(CompilationInfo* info,
|
| {
|
| // Parse the function literal.
|
| Scope* scope = NewScope(top_scope_, GLOBAL_SCOPE);
|
| - info->SetGlobalScope(scope);
|
| - if (!info->closure().is_null()) {
|
| - scope = Scope::DeserializeScopeChain(info->closure()->context(), scope,
|
| + info()->SetGlobalScope(scope);
|
| + if (!info()->closure().is_null()) {
|
| + scope = Scope::DeserializeScopeChain(info()->closure()->context(), scope,
|
| zone());
|
| }
|
| FunctionState function_state(this, scope, isolate());
|
| - ASSERT(scope->language_mode() != STRICT_MODE || !info->is_classic_mode());
|
| + ASSERT(scope->language_mode() != STRICT_MODE || !info()->is_classic_mode());
|
| ASSERT(scope->language_mode() != EXTENDED_MODE ||
|
| - info->is_extended_mode());
|
| - ASSERT(info->language_mode() == shared_info->language_mode());
|
| + info()->is_extended_mode());
|
| + ASSERT(info()->language_mode() == shared_info->language_mode());
|
| scope->SetLanguageMode(shared_info->language_mode());
|
| FunctionLiteral::Type type = shared_info->is_expression()
|
| ? (shared_info->is_anonymous()
|
| @@ -6041,16 +6041,15 @@ bool ParserApi::Parse(CompilationInfo* info, int parsing_flags) {
|
| }
|
| if (info->is_lazy()) {
|
| ASSERT(!info->is_eval());
|
| - Parser parser(script, parsing_flags, NULL, NULL, info->zone());
|
| + Parser parser(info, parsing_flags, NULL, NULL);
|
| if (info->shared_info()->is_function()) {
|
| - result = parser.ParseLazy(info);
|
| + result = parser.ParseLazy();
|
| } else {
|
| - result = parser.ParseProgram(info);
|
| + result = parser.ParseProgram();
|
| }
|
| } else {
|
| ScriptDataImpl* pre_data = info->pre_parse_data();
|
| - Parser parser(script, parsing_flags, info->extension(), pre_data,
|
| - info->zone());
|
| + Parser parser(info, parsing_flags, info->extension(), pre_data);
|
| if (pre_data != NULL && pre_data->has_error()) {
|
| Scanner::Location loc = pre_data->MessageLocation();
|
| const char* message = pre_data->BuildMessage();
|
| @@ -6063,7 +6062,7 @@ bool ParserApi::Parse(CompilationInfo* info, int parsing_flags) {
|
| DeleteArray(args.start());
|
| ASSERT(info->isolate()->has_pending_exception());
|
| } else {
|
| - result = parser.ParseProgram(info);
|
| + result = parser.ParseProgram();
|
| }
|
| }
|
| info->SetFunction(result);
|
|
|