Index: src/parser.cc |
diff --git a/src/parser.cc b/src/parser.cc |
index 3d48c9c58551d5dd61a44ce7785bc8c6fae80388..7690e92d520988de3fbae454f38049341ac6b20d 100644 |
--- a/src/parser.cc |
+++ b/src/parser.cc |
@@ -5344,43 +5344,42 @@ bool Parser::ParseRegExp(FlatStringReader* input, |
} |
-FunctionLiteral* Parser::MakeAST(bool compile_in_global_context, |
- Handle<Script> script, |
- v8::Extension* extension, |
- ScriptDataImpl* pre_data, |
- bool is_json) { |
- bool allow_natives_syntax = |
- 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(); |
- const char* message = pre_data->BuildMessage(); |
- Vector<const char*> args = pre_data->BuildArgs(); |
- parser.ReportMessageAt(loc, message, args); |
- DeleteArray(message); |
- for (int i = 0; i < args.length(); i++) { |
- DeleteArray(args[i]); |
- } |
- DeleteArray(args.start()); |
- return NULL; |
- } |
- Handle<String> source = Handle<String>(String::cast(script->source())); |
- FunctionLiteral* result; |
- if (is_json) { |
- ASSERT(compile_in_global_context); |
- result = parser.ParseJson(source); |
+bool Parser::Parse(CompilationInfo* info) { |
+ ASSERT(info->function() == NULL); |
+ FunctionLiteral* result = NULL; |
+ Handle<Script> script = info->script(); |
+ if (info->is_lazy()) { |
+ AstBuildingParser parser(script, true, NULL, NULL); |
+ result = parser.ParseLazy(info->shared_info()); |
} else { |
- result = parser.ParseProgram(source, compile_in_global_context); |
+ bool allow_natives_syntax = |
+ FLAG_allow_natives_syntax || Bootstrapper::IsActive(); |
+ ScriptDataImpl* pre_data = info->pre_parse_data(); |
+ AstBuildingParser parser(script, allow_natives_syntax, info->extension(), |
+ pre_data); |
+ if (pre_data != NULL && pre_data->has_error()) { |
+ Scanner::Location loc = pre_data->MessageLocation(); |
+ const char* message = pre_data->BuildMessage(); |
+ Vector<const char*> args = pre_data->BuildArgs(); |
+ parser.ReportMessageAt(loc, message, args); |
+ DeleteArray(message); |
+ for (int i = 0; i < args.length(); i++) { |
+ DeleteArray(args[i]); |
+ } |
+ DeleteArray(args.start()); |
+ ASSERT(Top::has_pending_exception()); |
+ } else { |
+ Handle<String> source = Handle<String>(String::cast(script->source())); |
+ // JSON is always global. |
+ ASSERT(!info->is_json() || info->is_global()); |
+ result = info->is_json() |
+ ? parser.ParseJson(source) |
+ : parser.ParseProgram(source, info->is_global()); |
+ } |
} |
- return result; |
-} |
- |
-FunctionLiteral* Parser::MakeLazyAST(Handle<SharedFunctionInfo> info) { |
- Handle<Script> script(Script::cast(info->script())); |
- AstBuildingParser parser(script, true, NULL, NULL); |
- FunctionLiteral* result = parser.ParseLazy(info); |
- return result; |
+ info->SetFunction(result); |
+ return (result != NULL); |
} |
#undef NEW |