| Index: src/parser.cc
|
| diff --git a/src/parser.cc b/src/parser.cc
|
| index 1486e9b2b37c5684369fbbc30c2a8c35bf124a44..a386848d33d125907b0198eb24aa1f134e1ad268 100644
|
| --- a/src/parser.cc
|
| +++ b/src/parser.cc
|
| @@ -115,11 +115,7 @@ class Parser {
|
| // Returns NULL if parsing failed.
|
| FunctionLiteral* ParseProgram(Handle<String> source,
|
| bool in_global_context);
|
| - FunctionLiteral* ParseLazy(Handle<String> source,
|
| - Handle<String> name,
|
| - int start_position,
|
| - int end_position,
|
| - bool is_expression);
|
| + FunctionLiteral* ParseLazy(Handle<SharedFunctionInfo> info);
|
| FunctionLiteral* ParseJson(Handle<String> source);
|
|
|
| // The minimum number of contiguous assignment that will
|
| @@ -1587,21 +1583,20 @@ FunctionLiteral* Parser::ParseProgram(Handle<String> source,
|
| }
|
|
|
|
|
| -FunctionLiteral* Parser::ParseLazy(Handle<String> source,
|
| - Handle<String> name,
|
| - int start_position,
|
| - int end_position,
|
| - bool is_expression) {
|
| +FunctionLiteral* Parser::ParseLazy(Handle<SharedFunctionInfo> info) {
|
| CompilationZoneScope zone_scope(DONT_DELETE_ON_EXIT);
|
| HistogramTimerScope timer(&Counters::parse_lazy);
|
| + Handle<String> source(String::cast(script_->source()));
|
| Counters::total_parse_size.Increment(source->length());
|
|
|
| + Handle<String> name(String::cast(info->name()));
|
| fni_ = new FuncNameInferrer();
|
| fni_->PushEnclosingName(name);
|
|
|
| // Initialize parser state.
|
| source->TryFlatten();
|
| - scanner_.Initialize(source, start_position, end_position, JAVASCRIPT);
|
| + scanner_.Initialize(source, info->start_position(), info->end_position(),
|
| + JAVASCRIPT);
|
| ASSERT(target_stack_ == NULL);
|
| mode_ = PARSE_EAGERLY;
|
|
|
| @@ -1616,7 +1611,8 @@ FunctionLiteral* Parser::ParseLazy(Handle<String> source,
|
| LexicalScope lexical_scope(this, scope);
|
| TemporaryScope temp_scope(this);
|
|
|
| - FunctionLiteralType type = is_expression ? EXPRESSION : DECLARATION;
|
| + FunctionLiteralType type =
|
| + info->is_expression() ? EXPRESSION : DECLARATION;
|
| bool ok = true;
|
| result = ParseFunctionLiteral(name, RelocInfo::kNoPosition, type, &ok);
|
| // Make sure the results agree.
|
| @@ -1637,6 +1633,7 @@ FunctionLiteral* Parser::ParseLazy(Handle<String> source,
|
| return result;
|
| }
|
|
|
| +
|
| FunctionLiteral* Parser::ParseJson(Handle<String> source) {
|
| CompilationZoneScope zone_scope(DONT_DELETE_ON_EXIT);
|
|
|
| @@ -5475,12 +5472,6 @@ RegExpTree* RegExpParser::ParseCharacterClass() {
|
| // ----------------------------------------------------------------------------
|
| // The Parser interface.
|
|
|
| -// MakeAST() is just a wrapper for the corresponding Parser calls
|
| -// so we don't have to expose the entire Parser class in the .h file.
|
| -
|
| -static bool always_allow_natives_syntax = false;
|
| -
|
| -
|
| ParserMessage::~ParserMessage() {
|
| for (int i = 0; i < args().length(); i++)
|
| DeleteArray(args()[i]);
|
| @@ -5515,9 +5506,7 @@ ScriptDataImpl* PartialPreParse(Handle<String> source,
|
| v8::Extension* extension) {
|
| Handle<Script> no_script;
|
| bool allow_natives_syntax =
|
| - always_allow_natives_syntax ||
|
| - FLAG_allow_natives_syntax ||
|
| - Bootstrapper::IsActive();
|
| + FLAG_allow_natives_syntax || Bootstrapper::IsActive();
|
| PartialPreParser parser(no_script, allow_natives_syntax, extension);
|
| if (!parser.PreParseProgram(source, stream)) return NULL;
|
| // Extract the accumulated data from the recorder as a single
|
| @@ -5575,9 +5564,7 @@ ScriptDataImpl* PreParse(Handle<String> source,
|
| v8::Extension* extension) {
|
| Handle<Script> no_script;
|
| bool allow_natives_syntax =
|
| - always_allow_natives_syntax ||
|
| - FLAG_allow_natives_syntax ||
|
| - Bootstrapper::IsActive();
|
| + FLAG_allow_natives_syntax || Bootstrapper::IsActive();
|
| CompletePreParser parser(no_script, allow_natives_syntax, extension);
|
| if (!parser.PreParseProgram(source, stream)) return NULL;
|
| // Extract the accumulated data from the recorder as a single
|
| @@ -5609,15 +5596,15 @@ bool ParseRegExp(FlatStringReader* input,
|
| }
|
|
|
|
|
| +// MakeAST is just a wrapper for the corresponding Parser calls so we don't
|
| +// have to expose the entire Parser class in the .h file.
|
| FunctionLiteral* MakeAST(bool compile_in_global_context,
|
| Handle<Script> script,
|
| v8::Extension* extension,
|
| ScriptDataImpl* pre_data,
|
| bool is_json) {
|
| bool allow_natives_syntax =
|
| - always_allow_natives_syntax ||
|
| - FLAG_allow_natives_syntax ||
|
| - Bootstrapper::IsActive();
|
| + FLAG_allow_natives_syntax || Bootstrapper::IsActive();
|
| AstBuildingParser parser(script, allow_natives_syntax, extension, pre_data);
|
| if (pre_data != NULL && pre_data->has_error()) {
|
| Scanner::Location loc = pre_data->MessageLocation();
|
| @@ -5643,20 +5630,10 @@ FunctionLiteral* MakeAST(bool compile_in_global_context,
|
| }
|
|
|
|
|
| -FunctionLiteral* MakeLazyAST(Handle<Script> script,
|
| - Handle<String> name,
|
| - int start_position,
|
| - int end_position,
|
| - bool is_expression) {
|
| - bool allow_natives_syntax_before = always_allow_natives_syntax;
|
| - always_allow_natives_syntax = true;
|
| - AstBuildingParser parser(script, true, NULL, NULL); // always allow
|
| - always_allow_natives_syntax = allow_natives_syntax_before;
|
| - // Parse the function by pointing to the function source in the script source.
|
| - Handle<String> script_source(String::cast(script->source()));
|
| - FunctionLiteral* result =
|
| - parser.ParseLazy(script_source, name,
|
| - start_position, end_position, is_expression);
|
| +FunctionLiteral* MakeLazyAST(Handle<SharedFunctionInfo> info) {
|
| + Handle<Script> script(Script::cast(info->script()));
|
| + AstBuildingParser parser(script, true, NULL, NULL);
|
| + FunctionLiteral* result = parser.ParseLazy(info);
|
| return result;
|
| }
|
|
|
|
|