diff options
author | Sergio Ahumada <sergio.ahumada@digia.com> | 2013-03-19 09:25:14 +0100 |
---|---|---|
committer | Sergio Ahumada <sergio.ahumada@digia.com> | 2013-03-19 09:56:31 +0100 |
commit | 6313e1fe4c27755adde87e62db1c2f9fac534ae4 (patch) | |
tree | c57bb29f65e02fbfcc07895a8cc2903fff9300ba /src/3rdparty/v8/src/parser.h | |
parent | b5a49a260d03249c386f1b63c249089383dd81fa (diff) | |
parent | cac65e7a222b848a735a974b0aeb43209b0cfa18 (diff) | |
download | qtjsbackend-6313e1fe4c27755adde87e62db1c2f9fac534ae4.tar.gz |
Merge branch 'dev' into stable
This starts Qt 5.1 release cycle
Change-Id: I892bbc73c276842894a720f761ce31ad1b015672
Diffstat (limited to 'src/3rdparty/v8/src/parser.h')
-rw-r--r-- | src/3rdparty/v8/src/parser.h | 77 |
1 files changed, 45 insertions, 32 deletions
diff --git a/src/3rdparty/v8/src/parser.h b/src/3rdparty/v8/src/parser.h index b4d8825..93fd1b8 100644 --- a/src/3rdparty/v8/src/parser.h +++ b/src/3rdparty/v8/src/parser.h @@ -175,12 +175,6 @@ class ParserApi { static ScriptDataImpl* PreParse(Utf16CharacterStream* source, v8::Extension* extension, int flags); - - // Preparser that only does preprocessing that makes sense if only used - // immediately after. - static ScriptDataImpl* PartialPreParse(Handle<String> source, - v8::Extension* extension, - int flags); }; // ---------------------------------------------------------------------------- @@ -200,12 +194,12 @@ class BufferedZoneList { // Adds element at end of list. This element is buffered and can // be read using last() or removed using RemoveLast until a new Add or until // RemoveLast or GetList has been called. - void Add(T* value) { + void Add(T* value, Zone* zone) { if (last_ != NULL) { if (list_ == NULL) { - list_ = new ZoneList<T*>(initial_size); + list_ = new(zone) ZoneList<T*>(initial_size, zone); } - list_->Add(last_); + list_->Add(last_, zone); } last_ = value; } @@ -250,12 +244,12 @@ class BufferedZoneList { return length + ((last_ == NULL) ? 0 : 1); } - ZoneList<T*>* GetList() { + ZoneList<T*>* GetList(Zone* zone) { if (list_ == NULL) { - list_ = new ZoneList<T*>(initial_size); + list_ = new(zone) ZoneList<T*>(initial_size, zone); } if (last_ != NULL) { - list_->Add(last_); + list_->Add(last_, zone); last_ = NULL; } return list_; @@ -270,7 +264,7 @@ class BufferedZoneList { // Accumulates RegExp atoms and assertions into lists of terms and alternatives. class RegExpBuilder: public ZoneObject { public: - RegExpBuilder(); + explicit RegExpBuilder(Zone* zone); void AddCharacter(uc16 character); // "Adds" an empty expression. Does nothing except consume a // following quantifier @@ -285,7 +279,7 @@ class RegExpBuilder: public ZoneObject { void FlushCharacters(); void FlushText(); void FlushTerms(); - Zone* zone() { return zone_; } + Zone* zone() const { return zone_; } Zone* zone_; bool pending_empty_; @@ -306,11 +300,13 @@ class RegExpParser { public: RegExpParser(FlatStringReader* in, Handle<String>* error, - bool multiline_mode); + bool multiline_mode, + Zone* zone); static bool ParseRegExp(FlatStringReader* input, bool multiline, - RegExpCompileData* result); + RegExpCompileData* result, + Zone* zone); RegExpTree* ParsePattern(); RegExpTree* ParseDisjunction(); @@ -368,9 +364,10 @@ class RegExpParser { public: RegExpParserState(RegExpParserState* previous_state, SubexpressionType group_type, - int disjunction_capture_index) + int disjunction_capture_index, + Zone* zone) : previous_state_(previous_state), - builder_(new RegExpBuilder()), + builder_(new(zone) RegExpBuilder(zone)), group_type_(group_type), disjunction_capture_index_(disjunction_capture_index) {} // Parser state of containing expression, if any. @@ -397,7 +394,7 @@ class RegExpParser { }; Isolate* isolate() { return isolate_; } - Zone* zone() { return isolate_->zone(); } + Zone* zone() const { return zone_; } uc32 current() { return current_; } bool has_more() { return has_more_; } @@ -407,6 +404,7 @@ class RegExpParser { void ScanForCaptures(); Isolate* isolate_; + Zone* zone_; Handle<String>* error_; ZoneList<RegExpCapture*>* captures_; FlatStringReader* in_; @@ -430,7 +428,7 @@ class SingletonLogger; class Parser { public: - Parser(Handle<Script> script, + Parser(CompilationInfo* info, int parsing_flags, // Combination of ParsingFlags v8::Extension* extension, ScriptDataImpl* pre_data); @@ -440,8 +438,8 @@ class Parser { } // Returns NULL if parsing failed. - FunctionLiteral* ParseProgram(CompilationInfo* info); - FunctionLiteral* ParseLazy(CompilationInfo* info); + FunctionLiteral* ParseProgram(); + FunctionLiteral* ParseLazy(); void ReportMessageAt(Scanner::Location loc, const char* message, @@ -456,7 +454,7 @@ class Parser { // construct a hashable id, so if more than 2^17 are allowed, this // should be checked. static const int kMaxNumFunctionParameters = 32766; - static const int kMaxNumFunctionLocals = 32767; + static const int kMaxNumFunctionLocals = 131071; // 2^17-1 enum Mode { PARSE_LAZILY, @@ -538,15 +536,28 @@ class Parser { AstNodeFactory<AstConstructionVisitor> factory_; }; + class ParsingModeScope BASE_EMBEDDED { + public: + ParsingModeScope(Parser* parser, Mode mode) + : parser_(parser), + old_mode_(parser->mode()) { + parser_->mode_ = mode; + } + ~ParsingModeScope() { + parser_->mode_ = old_mode_; + } + private: + Parser* parser_; + Mode old_mode_; + }; - - FunctionLiteral* ParseLazy(CompilationInfo* info, - Utf16CharacterStream* source, + FunctionLiteral* ParseLazy(Utf16CharacterStream* source, ZoneScope* zone_scope); Isolate* isolate() { return isolate_; } - Zone* zone() { return isolate_->zone(); } + Zone* zone() const { return zone_; } + CompilationInfo* info() const { return info_; } // Called by ParseProgram after setting up the scanner. FunctionLiteral* DoParseProgram(CompilationInfo* info, @@ -568,7 +579,7 @@ class Parser { return top_scope_->is_extended_mode(); } Scope* DeclarationScope(VariableMode mode) { - return (mode == LET || mode == CONST_HARMONY) + return IsLexicalVariableMode(mode) ? top_scope_ : top_scope_->DeclarationScope(); } @@ -579,10 +590,10 @@ class Parser { // which is set to false if parsing failed; it is unchanged otherwise. // By making the 'exception handling' explicit, we are forced to check // for failure at the call sites. - void* ParseSourceElements(ZoneList<Statement*>* processor, - int end_token, bool is_eval, bool* ok); + void* ParseSourceElements(ZoneList<Statement*>* processor, int end_token, + bool is_eval, bool is_global, bool* ok); Statement* ParseModuleElement(ZoneStringList* labels, bool* ok); - Block* ParseModuleDeclaration(ZoneStringList* names, bool* ok); + Statement* ParseModuleDeclaration(ZoneStringList* names, bool* ok); Module* ParseModule(bool* ok); Module* ParseModuleLiteral(bool* ok); Module* ParseModulePath(bool* ok); @@ -767,7 +778,7 @@ class Parser { // Parser support VariableProxy* NewUnresolved(Handle<String> name, VariableMode mode, - Interface* interface = Interface::NewValue()); + Interface* interface); void Declare(Declaration* declaration, bool resolve, bool* ok); bool TargetStackContainsLabel(Handle<String> label); @@ -834,6 +845,8 @@ class Parser { // so never lazily compile it. bool parenthesized_function_; + Zone* zone_; + CompilationInfo* info_; friend class BlockState; friend class FunctionState; }; |