Index: src/parser.h |
diff --git a/src/parser.h b/src/parser.h |
index c65a4ca5f3a46b08a91e139849301e736f3bd888..1a90d1b2f263866617b63f2821529c02d776d3e6 100644 |
--- a/src/parser.h |
+++ b/src/parser.h |
@@ -163,17 +163,17 @@ class ScriptDataImpl : public ScriptData { |
}; |
-class ParserApi { |
+class PreParserApi { |
public: |
- // Parses the source code represented by the compilation info and sets its |
- // function literal. Returns false (and deallocates any allocated AST |
- // nodes) if parsing failed. |
- static bool Parse(CompilationInfo* info, int flags); |
- |
- // Generic preparser generating full preparse data. |
+ // Pre-parse a character stream and return full preparse data. |
+ // |
+ // This interface is here instead of in preparser.h because it instantiates a |
+ // preparser recorder object that is suited to the parser's purposes. Also, |
+ // the preparser doesn't know about ScriptDataImpl. |
static ScriptDataImpl* PreParse(Utf16CharacterStream* source); |
}; |
+ |
// ---------------------------------------------------------------------------- |
// REGEXP PARSING |
@@ -425,18 +425,34 @@ class SingletonLogger; |
class Parser { |
public: |
- Parser(CompilationInfo* info, |
- int parsing_flags, // Combination of ParsingFlags |
- v8::Extension* extension, |
- ScriptDataImpl* pre_data); |
+ explicit Parser(CompilationInfo* info); |
virtual ~Parser() { |
delete reusable_preparser_; |
reusable_preparser_ = NULL; |
} |
+ bool allow_natives_syntax() const { return allow_natives_syntax_; } |
+ bool allow_lazy() const { return allow_lazy_; } |
+ bool allow_modules() { return scanner().HarmonyModules(); } |
+ bool allow_harmony_scoping() { return scanner().HarmonyScoping(); } |
+ bool allow_generators() const { return allow_generators_; } |
+ |
+ void set_allow_natives_syntax(bool allow) { allow_natives_syntax_ = allow; } |
+ void set_allow_lazy(bool allow) { allow_lazy_ = allow; } |
+ void set_allow_modules(bool allow) { scanner().SetHarmonyModules(allow); } |
+ void set_allow_harmony_scoping(bool allow) { |
+ scanner().SetHarmonyScoping(allow); |
+ } |
+ void set_allow_generators(bool allow) { allow_generators_ = allow; } |
+ |
+ // Parses the source code represented by the compilation info and sets its |
+ // function literal. Returns false (and deallocates any allocated AST |
+ // nodes) if parsing failed. |
+ static bool Parse(CompilationInfo* info) { return Parser(info).Parse(); } |
+ bool Parse(); |
+ |
// Returns NULL if parsing failed. |
FunctionLiteral* ParseProgram(); |
- FunctionLiteral* ParseLazy(); |
void ReportMessageAt(Scanner::Location loc, |
const char* message, |
@@ -550,6 +566,7 @@ class Parser { |
Mode old_mode_; |
}; |
+ FunctionLiteral* ParseLazy(); |
FunctionLiteral* ParseLazy(Utf16CharacterStream* source, |
ZoneScope* zone_scope); |
@@ -568,10 +585,15 @@ class Parser { |
void ReportMessage(const char* message, Vector<const char*> args); |
void ReportMessage(const char* message, Vector<Handle<String> > args); |
+ void set_pre_parse_data(ScriptDataImpl *data) { |
+ pre_parse_data_ = data; |
+ symbol_cache_.Initialize(data ? data->symbol_count() : 0, zone()); |
+ } |
+ |
bool inside_with() const { return top_scope_->inside_with(); } |
Scanner& scanner() { return scanner_; } |
Mode mode() const { return mode_; } |
- ScriptDataImpl* pre_data() const { return pre_data_; } |
+ ScriptDataImpl* pre_parse_data() const { return pre_parse_data_; } |
bool is_extended_mode() { |
ASSERT(top_scope_ != NULL); |
return top_scope_->is_extended_mode(); |
@@ -833,13 +855,13 @@ class Parser { |
FunctionState* current_function_state_; |
Target* target_stack_; // for break, continue statements |
v8::Extension* extension_; |
- ScriptDataImpl* pre_data_; |
+ ScriptDataImpl* pre_parse_data_; |
FuncNameInferrer* fni_; |
Mode mode_; |
bool allow_natives_syntax_; |
bool allow_lazy_; |
- bool allow_modules_; |
+ bool allow_generators_; |
bool stack_overflow_; |
// If true, the next (and immediately following) function literal is |
// preceded by a parenthesis. |