| OLD | NEW | 
|---|
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. | 
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without | 
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are | 
| 4 // met: | 4 // met: | 
| 5 // | 5 // | 
| 6 //     * Redistributions of source code must retain the above copyright | 6 //     * Redistributions of source code must retain the above copyright | 
| 7 //       notice, this list of conditions and the following disclaimer. | 7 //       notice, this list of conditions and the following disclaimer. | 
| 8 //     * Redistributions in binary form must reproduce the above | 8 //     * Redistributions in binary form must reproduce the above | 
| 9 //       copyright notice, this list of conditions and the following | 9 //       copyright notice, this list of conditions and the following | 
| 10 //       disclaimer in the documentation and/or other materials provided | 10 //       disclaimer in the documentation and/or other materials provided | 
| (...skipping 468 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 479   ~BlockState() { parser_->top_scope_ = outer_scope_; } | 479   ~BlockState() { parser_->top_scope_ = outer_scope_; } | 
| 480 | 480 | 
| 481  private: | 481  private: | 
| 482   Parser* parser_; | 482   Parser* parser_; | 
| 483   Scope* outer_scope_; | 483   Scope* outer_scope_; | 
| 484 }; | 484 }; | 
| 485 | 485 | 
| 486 | 486 | 
| 487 Parser::FunctionState::FunctionState(Parser* parser, | 487 Parser::FunctionState::FunctionState(Parser* parser, | 
| 488                                      Scope* scope, | 488                                      Scope* scope, | 
|  | 489                                      bool is_generator, | 
| 489                                      Isolate* isolate) | 490                                      Isolate* isolate) | 
| 490     : next_materialized_literal_index_(JSFunction::kLiteralsPrefixSize), | 491     : next_materialized_literal_index_(JSFunction::kLiteralsPrefixSize), | 
| 491       next_handler_index_(0), | 492       next_handler_index_(0), | 
| 492       expected_property_count_(0), | 493       expected_property_count_(0), | 
|  | 494       is_generator_(is_generator), | 
| 493       only_simple_this_property_assignments_(false), | 495       only_simple_this_property_assignments_(false), | 
| 494       this_property_assignments_(isolate->factory()->empty_fixed_array()), | 496       this_property_assignments_(isolate->factory()->empty_fixed_array()), | 
| 495       parser_(parser), | 497       parser_(parser), | 
| 496       outer_function_state_(parser->current_function_state_), | 498       outer_function_state_(parser->current_function_state_), | 
| 497       outer_scope_(parser->top_scope_), | 499       outer_scope_(parser->top_scope_), | 
| 498       saved_ast_node_id_(isolate->ast_node_id()), | 500       saved_ast_node_id_(isolate->ast_node_id()), | 
| 499       factory_(isolate, parser->zone()) { | 501       factory_(isolate, parser->zone()) { | 
| 500   parser->top_scope_ = scope; | 502   parser->top_scope_ = scope; | 
| 501   parser->current_function_state_ = this; | 503   parser->current_function_state_ = this; | 
| 502   isolate->set_ast_node_id(BailoutId::FirstUsable().ToInt()); | 504   isolate->set_ast_node_id(BailoutId::FirstUsable().ToInt()); | 
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 635     scope->set_start_position(0); | 637     scope->set_start_position(0); | 
| 636     scope->set_end_position(source->length()); | 638     scope->set_end_position(source->length()); | 
| 637 | 639 | 
| 638     // Compute the parsing mode. | 640     // Compute the parsing mode. | 
| 639     Mode mode = (FLAG_lazy && allow_lazy_) ? PARSE_LAZILY : PARSE_EAGERLY; | 641     Mode mode = (FLAG_lazy && allow_lazy_) ? PARSE_LAZILY : PARSE_EAGERLY; | 
| 640     if (allow_natives_syntax_ || extension_ != NULL || scope->is_eval_scope()) { | 642     if (allow_natives_syntax_ || extension_ != NULL || scope->is_eval_scope()) { | 
| 641       mode = PARSE_EAGERLY; | 643       mode = PARSE_EAGERLY; | 
| 642     } | 644     } | 
| 643     ParsingModeScope parsing_mode(this, mode); | 645     ParsingModeScope parsing_mode(this, mode); | 
| 644 | 646 | 
| 645     FunctionState function_state(this, scope, isolate());  // Enters 'scope'. | 647     bool is_generator = false; | 
|  | 648     // Enters 'scope'. | 
|  | 649     FunctionState function_state(this, scope, is_generator, isolate()); | 
|  | 650 | 
| 646     top_scope_->SetLanguageMode(info->language_mode()); | 651     top_scope_->SetLanguageMode(info->language_mode()); | 
| 647     ZoneList<Statement*>* body = new(zone()) ZoneList<Statement*>(16, zone()); | 652     ZoneList<Statement*>* body = new(zone()) ZoneList<Statement*>(16, zone()); | 
| 648     bool ok = true; | 653     bool ok = true; | 
| 649     int beg_loc = scanner().location().beg_pos; | 654     int beg_loc = scanner().location().beg_pos; | 
| 650     ParseSourceElements(body, Token::EOS, info->is_eval(), true, &ok); | 655     ParseSourceElements(body, Token::EOS, info->is_eval(), true, &ok); | 
| 651     if (ok && !top_scope_->is_classic_mode()) { | 656     if (ok && !top_scope_->is_classic_mode()) { | 
| 652       CheckOctalLiteral(beg_loc, scanner().location().end_pos, &ok); | 657       CheckOctalLiteral(beg_loc, scanner().location().end_pos, &ok); | 
| 653     } | 658     } | 
| 654 | 659 | 
| 655     if (ok && is_extended_mode()) { | 660     if (ok && is_extended_mode()) { | 
| (...skipping 17 matching lines...) Expand all  Loading... | 
| 673           body, | 678           body, | 
| 674           function_state.materialized_literal_count(), | 679           function_state.materialized_literal_count(), | 
| 675           function_state.expected_property_count(), | 680           function_state.expected_property_count(), | 
| 676           function_state.handler_count(), | 681           function_state.handler_count(), | 
| 677           function_state.only_simple_this_property_assignments(), | 682           function_state.only_simple_this_property_assignments(), | 
| 678           function_state.this_property_assignments(), | 683           function_state.this_property_assignments(), | 
| 679           0, | 684           0, | 
| 680           FunctionLiteral::kNoDuplicateParameters, | 685           FunctionLiteral::kNoDuplicateParameters, | 
| 681           FunctionLiteral::ANONYMOUS_EXPRESSION, | 686           FunctionLiteral::ANONYMOUS_EXPRESSION, | 
| 682           FunctionLiteral::kGlobalOrEval, | 687           FunctionLiteral::kGlobalOrEval, | 
| 683           FunctionLiteral::kNotParenthesized); | 688           FunctionLiteral::kNotParenthesized, | 
|  | 689           FunctionLiteral::kNotGenerator); | 
| 684       result->set_ast_properties(factory()->visitor()->ast_properties()); | 690       result->set_ast_properties(factory()->visitor()->ast_properties()); | 
| 685     } else if (stack_overflow_) { | 691     } else if (stack_overflow_) { | 
| 686       isolate()->StackOverflow(); | 692       isolate()->StackOverflow(); | 
| 687     } | 693     } | 
| 688   } | 694   } | 
| 689 | 695 | 
| 690   // Make sure the target stack is empty. | 696   // Make sure the target stack is empty. | 
| 691   ASSERT(target_stack_ == NULL); | 697   ASSERT(target_stack_ == NULL); | 
| 692 | 698 | 
| 693   // If there was a syntax error we have to get rid of the AST | 699   // If there was a syntax error we have to get rid of the AST | 
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 747   FunctionLiteral* result = NULL; | 753   FunctionLiteral* result = NULL; | 
| 748 | 754 | 
| 749   { | 755   { | 
| 750     // Parse the function literal. | 756     // Parse the function literal. | 
| 751     Scope* scope = NewScope(top_scope_, GLOBAL_SCOPE); | 757     Scope* scope = NewScope(top_scope_, GLOBAL_SCOPE); | 
| 752     info()->SetGlobalScope(scope); | 758     info()->SetGlobalScope(scope); | 
| 753     if (!info()->closure().is_null()) { | 759     if (!info()->closure().is_null()) { | 
| 754       scope = Scope::DeserializeScopeChain(info()->closure()->context(), scope, | 760       scope = Scope::DeserializeScopeChain(info()->closure()->context(), scope, | 
| 755                                            zone()); | 761                                            zone()); | 
| 756     } | 762     } | 
| 757     FunctionState function_state(this, scope, isolate()); | 763     bool is_generator = false;  // Top scope is not a generator. | 
|  | 764     FunctionState function_state(this, scope, is_generator, isolate()); | 
| 758     ASSERT(scope->language_mode() != STRICT_MODE || !info()->is_classic_mode()); | 765     ASSERT(scope->language_mode() != STRICT_MODE || !info()->is_classic_mode()); | 
| 759     ASSERT(scope->language_mode() != EXTENDED_MODE || | 766     ASSERT(scope->language_mode() != EXTENDED_MODE || | 
| 760            info()->is_extended_mode()); | 767            info()->is_extended_mode()); | 
| 761     ASSERT(info()->language_mode() == shared_info->language_mode()); | 768     ASSERT(info()->language_mode() == shared_info->language_mode()); | 
| 762     scope->SetLanguageMode(shared_info->language_mode()); | 769     scope->SetLanguageMode(shared_info->language_mode()); | 
| 763     FunctionLiteral::Type type = shared_info->is_expression() | 770     FunctionLiteral::Type type = shared_info->is_expression() | 
| 764         ? (shared_info->is_anonymous() | 771         ? (shared_info->is_anonymous() | 
| 765               ? FunctionLiteral::ANONYMOUS_EXPRESSION | 772               ? FunctionLiteral::ANONYMOUS_EXPRESSION | 
| 766               : FunctionLiteral::NAMED_EXPRESSION) | 773               : FunctionLiteral::NAMED_EXPRESSION) | 
| 767         : FunctionLiteral::DECLARATION; | 774         : FunctionLiteral::DECLARATION; | 
| 768     bool ok = true; | 775     bool ok = true; | 
| 769     result = ParseFunctionLiteral(name, | 776     result = ParseFunctionLiteral(name, | 
| 770                                   false,  // Strict mode name already checked. | 777                                   false,  // Strict mode name already checked. | 
|  | 778                                   shared_info->is_generator(), | 
| 771                                   RelocInfo::kNoPosition, | 779                                   RelocInfo::kNoPosition, | 
| 772                                   type, | 780                                   type, | 
| 773                                   &ok); | 781                                   &ok); | 
| 774     // Make sure the results agree. | 782     // Make sure the results agree. | 
| 775     ASSERT(ok == (result != NULL)); | 783     ASSERT(ok == (result != NULL)); | 
| 776   } | 784   } | 
| 777 | 785 | 
| 778   // Make sure the target stack is empty. | 786   // Make sure the target stack is empty. | 
| 779   ASSERT(target_stack_ == NULL); | 787   ASSERT(target_stack_ == NULL); | 
| 780 | 788 | 
| (...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1125   //    Statement | 1133   //    Statement | 
| 1126   //    FunctionDeclaration | 1134   //    FunctionDeclaration | 
| 1127   // | 1135   // | 
| 1128   // In harmony mode we allow additionally the following productions | 1136   // In harmony mode we allow additionally the following productions | 
| 1129   // ModuleElement: | 1137   // ModuleElement: | 
| 1130   //    LetDeclaration | 1138   //    LetDeclaration | 
| 1131   //    ConstDeclaration | 1139   //    ConstDeclaration | 
| 1132   //    ModuleDeclaration | 1140   //    ModuleDeclaration | 
| 1133   //    ImportDeclaration | 1141   //    ImportDeclaration | 
| 1134   //    ExportDeclaration | 1142   //    ExportDeclaration | 
|  | 1143   //    GeneratorDeclaration | 
| 1135 | 1144 | 
| 1136   switch (peek()) { | 1145   switch (peek()) { | 
| 1137     case Token::FUNCTION: | 1146     case Token::FUNCTION: | 
| 1138       return ParseFunctionDeclaration(NULL, ok); | 1147       return ParseFunctionDeclaration(NULL, ok); | 
| 1139     case Token::LET: | 1148     case Token::LET: | 
| 1140     case Token::CONST: | 1149     case Token::CONST: | 
| 1141       return ParseVariableStatement(kModuleElement, NULL, ok); | 1150       return ParseVariableStatement(kModuleElement, NULL, ok); | 
| 1142     case Token::IMPORT: | 1151     case Token::IMPORT: | 
| 1143       return ParseImportDeclaration(ok); | 1152       return ParseImportDeclaration(ok); | 
| 1144     case Token::EXPORT: | 1153     case Token::EXPORT: | 
| (...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1423 | 1432 | 
| 1424   return block; | 1433   return block; | 
| 1425 } | 1434 } | 
| 1426 | 1435 | 
| 1427 | 1436 | 
| 1428 Statement* Parser::ParseExportDeclaration(bool* ok) { | 1437 Statement* Parser::ParseExportDeclaration(bool* ok) { | 
| 1429   // ExportDeclaration: | 1438   // ExportDeclaration: | 
| 1430   //    'export' Identifier (',' Identifier)* ';' | 1439   //    'export' Identifier (',' Identifier)* ';' | 
| 1431   //    'export' VariableDeclaration | 1440   //    'export' VariableDeclaration | 
| 1432   //    'export' FunctionDeclaration | 1441   //    'export' FunctionDeclaration | 
|  | 1442   //    'export' GeneratorDeclaration | 
| 1433   //    'export' ModuleDeclaration | 1443   //    'export' ModuleDeclaration | 
| 1434   // | 1444   // | 
| 1435   // TODO(ES6): implement structuring ExportSpecifiers | 1445   // TODO(ES6): implement structuring ExportSpecifiers | 
| 1436 | 1446 | 
| 1437   Expect(Token::EXPORT, CHECK_OK); | 1447   Expect(Token::EXPORT, CHECK_OK); | 
| 1438 | 1448 | 
| 1439   Statement* result = NULL; | 1449   Statement* result = NULL; | 
| 1440   ZoneStringList names(1, zone()); | 1450   ZoneStringList names(1, zone()); | 
| 1441   switch (peek()) { | 1451   switch (peek()) { | 
| 1442     case Token::IDENTIFIER: { | 1452     case Token::IDENTIFIER: { | 
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1502                                      bool* ok) { | 1512                                      bool* ok) { | 
| 1503   // (Ecma 262 5th Edition, clause 14): | 1513   // (Ecma 262 5th Edition, clause 14): | 
| 1504   // SourceElement: | 1514   // SourceElement: | 
| 1505   //    Statement | 1515   //    Statement | 
| 1506   //    FunctionDeclaration | 1516   //    FunctionDeclaration | 
| 1507   // | 1517   // | 
| 1508   // In harmony mode we allow additionally the following productions | 1518   // In harmony mode we allow additionally the following productions | 
| 1509   // BlockElement (aka SourceElement): | 1519   // BlockElement (aka SourceElement): | 
| 1510   //    LetDeclaration | 1520   //    LetDeclaration | 
| 1511   //    ConstDeclaration | 1521   //    ConstDeclaration | 
|  | 1522   //    GeneratorDeclaration | 
| 1512 | 1523 | 
| 1513   switch (peek()) { | 1524   switch (peek()) { | 
| 1514     case Token::FUNCTION: | 1525     case Token::FUNCTION: | 
| 1515       return ParseFunctionDeclaration(NULL, ok); | 1526       return ParseFunctionDeclaration(NULL, ok); | 
| 1516     case Token::LET: | 1527     case Token::LET: | 
| 1517     case Token::CONST: | 1528     case Token::CONST: | 
| 1518       return ParseVariableStatement(kModuleElement, NULL, ok); | 1529       return ParseVariableStatement(kModuleElement, NULL, ok); | 
| 1519     default: | 1530     default: | 
| 1520       return ParseStatement(labels, ok); | 1531       return ParseStatement(labels, ok); | 
| 1521   } | 1532   } | 
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1621     } | 1632     } | 
| 1622 | 1633 | 
| 1623     case Token::FUNCTION: { | 1634     case Token::FUNCTION: { | 
| 1624       // FunctionDeclaration is only allowed in the context of SourceElements | 1635       // FunctionDeclaration is only allowed in the context of SourceElements | 
| 1625       // (Ecma 262 5th Edition, clause 14): | 1636       // (Ecma 262 5th Edition, clause 14): | 
| 1626       // SourceElement: | 1637       // SourceElement: | 
| 1627       //    Statement | 1638       //    Statement | 
| 1628       //    FunctionDeclaration | 1639       //    FunctionDeclaration | 
| 1629       // Common language extension is to allow function declaration in place | 1640       // Common language extension is to allow function declaration in place | 
| 1630       // of any statement. This language extension is disabled in strict mode. | 1641       // of any statement. This language extension is disabled in strict mode. | 
|  | 1642       // | 
|  | 1643       // In Harmony mode, this case also handles the extension: | 
|  | 1644       // Statement: | 
|  | 1645       //    GeneratorDeclaration | 
| 1631       if (!top_scope_->is_classic_mode()) { | 1646       if (!top_scope_->is_classic_mode()) { | 
| 1632         ReportMessageAt(scanner().peek_location(), "strict_function", | 1647         ReportMessageAt(scanner().peek_location(), "strict_function", | 
| 1633                         Vector<const char*>::empty()); | 1648                         Vector<const char*>::empty()); | 
| 1634         *ok = false; | 1649         *ok = false; | 
| 1635         return NULL; | 1650         return NULL; | 
| 1636       } | 1651       } | 
| 1637       return ParseFunctionDeclaration(NULL, ok); | 1652       return ParseFunctionDeclaration(NULL, ok); | 
| 1638     } | 1653     } | 
| 1639 | 1654 | 
| 1640     case Token::DEBUGGER: | 1655     case Token::DEBUGGER: | 
| (...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1883       factory()->NewSharedFunctionInfoLiteral(shared); | 1898       factory()->NewSharedFunctionInfoLiteral(shared); | 
| 1884   return factory()->NewExpressionStatement( | 1899   return factory()->NewExpressionStatement( | 
| 1885       factory()->NewAssignment( | 1900       factory()->NewAssignment( | 
| 1886           Token::INIT_VAR, proxy, lit, RelocInfo::kNoPosition)); | 1901           Token::INIT_VAR, proxy, lit, RelocInfo::kNoPosition)); | 
| 1887 } | 1902 } | 
| 1888 | 1903 | 
| 1889 | 1904 | 
| 1890 Statement* Parser::ParseFunctionDeclaration(ZoneStringList* names, bool* ok) { | 1905 Statement* Parser::ParseFunctionDeclaration(ZoneStringList* names, bool* ok) { | 
| 1891   // FunctionDeclaration :: | 1906   // FunctionDeclaration :: | 
| 1892   //   'function' Identifier '(' FormalParameterListopt ')' '{' FunctionBody '}' | 1907   //   'function' Identifier '(' FormalParameterListopt ')' '{' FunctionBody '}' | 
|  | 1908   // GeneratorDeclaration :: | 
|  | 1909   //   'function' '*' Identifier '(' FormalParameterListopt ')' | 
|  | 1910   //      '{' FunctionBody '}' | 
| 1893   Expect(Token::FUNCTION, CHECK_OK); | 1911   Expect(Token::FUNCTION, CHECK_OK); | 
| 1894   int function_token_position = scanner().location().beg_pos; | 1912   int function_token_position = scanner().location().beg_pos; | 
|  | 1913   bool is_generator = FLAG_harmony_generators && Check(Token::MUL); | 
| 1895   bool is_strict_reserved = false; | 1914   bool is_strict_reserved = false; | 
| 1896   Handle<String> name = ParseIdentifierOrStrictReservedWord( | 1915   Handle<String> name = ParseIdentifierOrStrictReservedWord( | 
| 1897       &is_strict_reserved, CHECK_OK); | 1916       &is_strict_reserved, CHECK_OK); | 
| 1898   FunctionLiteral* fun = ParseFunctionLiteral(name, | 1917   FunctionLiteral* fun = ParseFunctionLiteral(name, | 
| 1899                                               is_strict_reserved, | 1918                                               is_strict_reserved, | 
|  | 1919                                               is_generator, | 
| 1900                                               function_token_position, | 1920                                               function_token_position, | 
| 1901                                               FunctionLiteral::DECLARATION, | 1921                                               FunctionLiteral::DECLARATION, | 
| 1902                                               CHECK_OK); | 1922                                               CHECK_OK); | 
| 1903   // Even if we're not at the top-level of the global or a function | 1923   // Even if we're not at the top-level of the global or a function | 
| 1904   // scope, we treat it as such and introduce the function with its | 1924   // scope, we treat it as such and introduce the function with its | 
| 1905   // initial value upon entering the corresponding scope. | 1925   // initial value upon entering the corresponding scope. | 
| 1906   // In extended mode, a function behaves as a lexical binding, except in the | 1926   // In extended mode, a function behaves as a lexical binding, except in the | 
| 1907   // global scope. | 1927   // global scope. | 
| 1908   VariableMode mode = | 1928   VariableMode mode = | 
| 1909       is_extended_mode() && !top_scope_->is_global_scope() ? LET : VAR; | 1929       is_extended_mode() && !top_scope_->is_global_scope() ? LET : VAR; | 
| (...skipping 1087 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2997         factory()->NewBinaryOperation(Token::COMMA, result, right, position); | 3017         factory()->NewBinaryOperation(Token::COMMA, result, right, position); | 
| 2998   } | 3018   } | 
| 2999   return result; | 3019   return result; | 
| 3000 } | 3020 } | 
| 3001 | 3021 | 
| 3002 | 3022 | 
| 3003 // Precedence = 2 | 3023 // Precedence = 2 | 
| 3004 Expression* Parser::ParseAssignmentExpression(bool accept_IN, bool* ok) { | 3024 Expression* Parser::ParseAssignmentExpression(bool accept_IN, bool* ok) { | 
| 3005   // AssignmentExpression :: | 3025   // AssignmentExpression :: | 
| 3006   //   ConditionalExpression | 3026   //   ConditionalExpression | 
|  | 3027   //   YieldExpression | 
| 3007   //   LeftHandSideExpression AssignmentOperator AssignmentExpression | 3028   //   LeftHandSideExpression AssignmentOperator AssignmentExpression | 
| 3008 | 3029 | 
|  | 3030   if (peek() == Token::YIELD && is_generator()) { | 
|  | 3031     return ParseYieldExpression(ok); | 
|  | 3032   } | 
|  | 3033 | 
| 3009   if (fni_ != NULL) fni_->Enter(); | 3034   if (fni_ != NULL) fni_->Enter(); | 
| 3010   Expression* expression = ParseConditionalExpression(accept_IN, CHECK_OK); | 3035   Expression* expression = ParseConditionalExpression(accept_IN, CHECK_OK); | 
| 3011 | 3036 | 
| 3012   if (!Token::IsAssignmentOp(peek())) { | 3037   if (!Token::IsAssignmentOp(peek())) { | 
| 3013     if (fni_ != NULL) fni_->Leave(); | 3038     if (fni_ != NULL) fni_->Leave(); | 
| 3014     // Parsed conditional expression only (no assignment). | 3039     // Parsed conditional expression only (no assignment). | 
| 3015     return expression; | 3040     return expression; | 
| 3016   } | 3041   } | 
| 3017 | 3042 | 
| 3018   // Signal a reference error if the expression is an invalid left-hand | 3043   // Signal a reference error if the expression is an invalid left-hand | 
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 3067     } else { | 3092     } else { | 
| 3068       fni_->RemoveLastFunction(); | 3093       fni_->RemoveLastFunction(); | 
| 3069     } | 3094     } | 
| 3070     fni_->Leave(); | 3095     fni_->Leave(); | 
| 3071   } | 3096   } | 
| 3072 | 3097 | 
| 3073   return factory()->NewAssignment(op, expression, right, pos); | 3098   return factory()->NewAssignment(op, expression, right, pos); | 
| 3074 } | 3099 } | 
| 3075 | 3100 | 
| 3076 | 3101 | 
|  | 3102 Expression* Parser::ParseYieldExpression(bool* ok) { | 
|  | 3103   // YieldExpression :: | 
|  | 3104   //   'yield' '*'? AssignmentExpression | 
|  | 3105   int position = scanner().peek_location().beg_pos; | 
|  | 3106   Expect(Token::YIELD, CHECK_OK); | 
|  | 3107   bool is_yield_star = Check(Token::MUL); | 
|  | 3108   Expression* expression = ParseAssignmentExpression(false, CHECK_OK); | 
|  | 3109   return factory()->NewYield(expression, is_yield_star, position); | 
|  | 3110 } | 
|  | 3111 | 
|  | 3112 | 
| 3077 // Precedence = 3 | 3113 // Precedence = 3 | 
| 3078 Expression* Parser::ParseConditionalExpression(bool accept_IN, bool* ok) { | 3114 Expression* Parser::ParseConditionalExpression(bool accept_IN, bool* ok) { | 
| 3079   // ConditionalExpression :: | 3115   // ConditionalExpression :: | 
| 3080   //   LogicalOrExpression | 3116   //   LogicalOrExpression | 
| 3081   //   LogicalOrExpression '?' AssignmentExpression ':' AssignmentExpression | 3117   //   LogicalOrExpression '?' AssignmentExpression ':' AssignmentExpression | 
| 3082 | 3118 | 
| 3083   // We start using the binary expression parser for prec >= 4 only! | 3119   // We start using the binary expression parser for prec >= 4 only! | 
| 3084   Expression* expression = ParseBinaryExpression(4, accept_IN, CHECK_OK); | 3120   Expression* expression = ParseBinaryExpression(4, accept_IN, CHECK_OK); | 
| 3085   if (peek() != Token::CONDITIONAL) return expression; | 3121   if (peek() != Token::CONDITIONAL) return expression; | 
| 3086   Consume(Token::CONDITIONAL); | 3122   Consume(Token::CONDITIONAL); | 
| (...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 3443                                                          bool* ok) { | 3479                                                          bool* ok) { | 
| 3444   // MemberExpression :: | 3480   // MemberExpression :: | 
| 3445   //   (PrimaryExpression | FunctionLiteral) | 3481   //   (PrimaryExpression | FunctionLiteral) | 
| 3446   //     ('[' Expression ']' | '.' Identifier | Arguments)* | 3482   //     ('[' Expression ']' | '.' Identifier | Arguments)* | 
| 3447 | 3483 | 
| 3448   // Parse the initial primary or function expression. | 3484   // Parse the initial primary or function expression. | 
| 3449   Expression* result = NULL; | 3485   Expression* result = NULL; | 
| 3450   if (peek() == Token::FUNCTION) { | 3486   if (peek() == Token::FUNCTION) { | 
| 3451     Expect(Token::FUNCTION, CHECK_OK); | 3487     Expect(Token::FUNCTION, CHECK_OK); | 
| 3452     int function_token_position = scanner().location().beg_pos; | 3488     int function_token_position = scanner().location().beg_pos; | 
|  | 3489     bool is_generator = FLAG_harmony_generators && Check(Token::MUL); | 
| 3453     Handle<String> name; | 3490     Handle<String> name; | 
| 3454     bool is_strict_reserved_name = false; | 3491     bool is_strict_reserved_name = false; | 
| 3455     if (peek_any_identifier()) { | 3492     if (peek_any_identifier()) { | 
| 3456       name = ParseIdentifierOrStrictReservedWord(&is_strict_reserved_name, | 3493       name = ParseIdentifierOrStrictReservedWord(&is_strict_reserved_name, | 
| 3457                                                  CHECK_OK); | 3494                                                  CHECK_OK); | 
| 3458     } | 3495     } | 
| 3459     FunctionLiteral::Type type = name.is_null() | 3496     FunctionLiteral::Type type = name.is_null() | 
| 3460         ? FunctionLiteral::ANONYMOUS_EXPRESSION | 3497         ? FunctionLiteral::ANONYMOUS_EXPRESSION | 
| 3461         : FunctionLiteral::NAMED_EXPRESSION; | 3498         : FunctionLiteral::NAMED_EXPRESSION; | 
| 3462     result = ParseFunctionLiteral(name, | 3499     result = ParseFunctionLiteral(name, | 
| 3463                                   is_strict_reserved_name, | 3500                                   is_strict_reserved_name, | 
|  | 3501                                   is_generator, | 
| 3464                                   function_token_position, | 3502                                   function_token_position, | 
| 3465                                   type, | 3503                                   type, | 
| 3466                                   CHECK_OK); | 3504                                   CHECK_OK); | 
| 3467   } else { | 3505   } else { | 
| 3468     result = ParsePrimaryExpression(CHECK_OK); | 3506     result = ParsePrimaryExpression(CHECK_OK); | 
| 3469   } | 3507   } | 
| 3470 | 3508 | 
| 3471   while (true) { | 3509   while (true) { | 
| 3472     switch (peek()) { | 3510     switch (peek()) { | 
| 3473       case Token::LBRACK: { | 3511       case Token::LBRACK: { | 
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 3597       Consume(Token::TRUE_LITERAL); | 3635       Consume(Token::TRUE_LITERAL); | 
| 3598       result = factory()->NewLiteral(isolate()->factory()->true_value()); | 3636       result = factory()->NewLiteral(isolate()->factory()->true_value()); | 
| 3599       break; | 3637       break; | 
| 3600 | 3638 | 
| 3601     case Token::FALSE_LITERAL: | 3639     case Token::FALSE_LITERAL: | 
| 3602       Consume(Token::FALSE_LITERAL); | 3640       Consume(Token::FALSE_LITERAL); | 
| 3603       result = factory()->NewLiteral(isolate()->factory()->false_value()); | 3641       result = factory()->NewLiteral(isolate()->factory()->false_value()); | 
| 3604       break; | 3642       break; | 
| 3605 | 3643 | 
| 3606     case Token::IDENTIFIER: | 3644     case Token::IDENTIFIER: | 
|  | 3645     case Token::YIELD: | 
| 3607     case Token::FUTURE_STRICT_RESERVED_WORD: { | 3646     case Token::FUTURE_STRICT_RESERVED_WORD: { | 
| 3608       Handle<String> name = ParseIdentifier(CHECK_OK); | 3647       Handle<String> name = ParseIdentifier(CHECK_OK); | 
| 3609       if (fni_ != NULL) fni_->PushVariableName(name); | 3648       if (fni_ != NULL) fni_->PushVariableName(name); | 
| 3610       // The name may refer to a module instance object, so its type is unknown. | 3649       // The name may refer to a module instance object, so its type is unknown. | 
| 3611 #ifdef DEBUG | 3650 #ifdef DEBUG | 
| 3612       if (FLAG_print_interface_details) | 3651       if (FLAG_print_interface_details) | 
| 3613         PrintF("# Variable %s ", name->ToAsciiArray()); | 3652         PrintF("# Variable %s ", name->ToAsciiArray()); | 
| 3614 #endif | 3653 #endif | 
| 3615       Interface* interface = Interface::NewUnknown(zone()); | 3654       Interface* interface = Interface::NewUnknown(zone()); | 
| 3616       result = top_scope_->NewUnresolved( | 3655       result = top_scope_->NewUnresolved( | 
| (...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 4002       next == Token::STRING || is_keyword) { | 4041       next == Token::STRING || is_keyword) { | 
| 4003     Handle<String> name; | 4042     Handle<String> name; | 
| 4004     if (is_keyword) { | 4043     if (is_keyword) { | 
| 4005       name = isolate_->factory()->InternalizeUtf8String(Token::String(next)); | 4044       name = isolate_->factory()->InternalizeUtf8String(Token::String(next)); | 
| 4006     } else { | 4045     } else { | 
| 4007       name = GetSymbol(CHECK_OK); | 4046       name = GetSymbol(CHECK_OK); | 
| 4008     } | 4047     } | 
| 4009     FunctionLiteral* value = | 4048     FunctionLiteral* value = | 
| 4010         ParseFunctionLiteral(name, | 4049         ParseFunctionLiteral(name, | 
| 4011                              false,   // reserved words are allowed here | 4050                              false,   // reserved words are allowed here | 
|  | 4051                              false,   // not a generator | 
| 4012                              RelocInfo::kNoPosition, | 4052                              RelocInfo::kNoPosition, | 
| 4013                              FunctionLiteral::ANONYMOUS_EXPRESSION, | 4053                              FunctionLiteral::ANONYMOUS_EXPRESSION, | 
| 4014                              CHECK_OK); | 4054                              CHECK_OK); | 
| 4015     // Allow any number of parameters for compatibilty with JSC. | 4055     // Allow any number of parameters for compatibilty with JSC. | 
| 4016     // Specification only allows zero parameters for get and one for set. | 4056     // Specification only allows zero parameters for get and one for set. | 
| 4017     return factory()->NewObjectLiteralProperty(is_getter, value); | 4057     return factory()->NewObjectLiteralProperty(is_getter, value); | 
| 4018   } else { | 4058   } else { | 
| 4019     ReportUnexpectedToken(next); | 4059     ReportUnexpectedToken(next); | 
| 4020     *ok = false; | 4060     *ok = false; | 
| 4021     return NULL; | 4061     return NULL; | 
| (...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 4303   int properties_; | 4343   int properties_; | 
| 4304   LanguageMode mode_; | 4344   LanguageMode mode_; | 
| 4305   // For error messages. | 4345   // For error messages. | 
| 4306   const char* message_; | 4346   const char* message_; | 
| 4307   const char* argument_opt_; | 4347   const char* argument_opt_; | 
| 4308 }; | 4348 }; | 
| 4309 | 4349 | 
| 4310 | 4350 | 
| 4311 FunctionLiteral* Parser::ParseFunctionLiteral(Handle<String> function_name, | 4351 FunctionLiteral* Parser::ParseFunctionLiteral(Handle<String> function_name, | 
| 4312                                               bool name_is_strict_reserved, | 4352                                               bool name_is_strict_reserved, | 
|  | 4353                                               bool is_generator, | 
| 4313                                               int function_token_position, | 4354                                               int function_token_position, | 
| 4314                                               FunctionLiteral::Type type, | 4355                                               FunctionLiteral::Type type, | 
| 4315                                               bool* ok) { | 4356                                               bool* ok) { | 
| 4316   // Function :: | 4357   // Function :: | 
| 4317   //   '(' FormalParameterList? ')' '{' FunctionBody '}' | 4358   //   '(' FormalParameterList? ')' '{' FunctionBody '}' | 
| 4318 | 4359 | 
| 4319   // Anonymous functions were passed either the empty symbol or a null | 4360   // Anonymous functions were passed either the empty symbol or a null | 
| 4320   // handle as the function name.  Remember if we were passed a non-empty | 4361   // handle as the function name.  Remember if we were passed a non-empty | 
| 4321   // handle to decide whether to invoke function name inference. | 4362   // handle to decide whether to invoke function name inference. | 
| 4322   bool should_infer_name = function_name.is_null(); | 4363   bool should_infer_name = function_name.is_null(); | 
| (...skipping 14 matching lines...) Expand all  Loading... | 
| 4337   int materialized_literal_count = -1; | 4378   int materialized_literal_count = -1; | 
| 4338   int expected_property_count = -1; | 4379   int expected_property_count = -1; | 
| 4339   int handler_count = 0; | 4380   int handler_count = 0; | 
| 4340   bool only_simple_this_property_assignments; | 4381   bool only_simple_this_property_assignments; | 
| 4341   Handle<FixedArray> this_property_assignments; | 4382   Handle<FixedArray> this_property_assignments; | 
| 4342   FunctionLiteral::ParameterFlag duplicate_parameters = | 4383   FunctionLiteral::ParameterFlag duplicate_parameters = | 
| 4343       FunctionLiteral::kNoDuplicateParameters; | 4384       FunctionLiteral::kNoDuplicateParameters; | 
| 4344   FunctionLiteral::IsParenthesizedFlag parenthesized = parenthesized_function_ | 4385   FunctionLiteral::IsParenthesizedFlag parenthesized = parenthesized_function_ | 
| 4345       ? FunctionLiteral::kIsParenthesized | 4386       ? FunctionLiteral::kIsParenthesized | 
| 4346       : FunctionLiteral::kNotParenthesized; | 4387       : FunctionLiteral::kNotParenthesized; | 
|  | 4388   FunctionLiteral::IsGeneratorFlag generator = is_generator | 
|  | 4389       ? FunctionLiteral::kIsGenerator | 
|  | 4390       : FunctionLiteral::kNotGenerator; | 
| 4347   AstProperties ast_properties; | 4391   AstProperties ast_properties; | 
| 4348   // Parse function body. | 4392   // Parse function body. | 
| 4349   { FunctionState function_state(this, scope, isolate()); | 4393   { FunctionState function_state(this, scope, is_generator, isolate()); | 
| 4350     top_scope_->SetScopeName(function_name); | 4394     top_scope_->SetScopeName(function_name); | 
| 4351 | 4395 | 
| 4352     //  FormalParameterList :: | 4396     //  FormalParameterList :: | 
| 4353     //    '(' (Identifier)*[','] ')' | 4397     //    '(' (Identifier)*[','] ')' | 
| 4354     Expect(Token::LPAREN, CHECK_OK); | 4398     Expect(Token::LPAREN, CHECK_OK); | 
| 4355     scope->set_start_position(scanner().location().beg_pos); | 4399     scope->set_start_position(scanner().location().beg_pos); | 
| 4356     Scanner::Location name_loc = Scanner::Location::invalid(); | 4400     Scanner::Location name_loc = Scanner::Location::invalid(); | 
| 4357     Scanner::Location dupe_loc = Scanner::Location::invalid(); | 4401     Scanner::Location dupe_loc = Scanner::Location::invalid(); | 
| 4358     Scanner::Location reserved_loc = Scanner::Location::invalid(); | 4402     Scanner::Location reserved_loc = Scanner::Location::invalid(); | 
| 4359 | 4403 | 
| (...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 4577                                     body, | 4621                                     body, | 
| 4578                                     materialized_literal_count, | 4622                                     materialized_literal_count, | 
| 4579                                     expected_property_count, | 4623                                     expected_property_count, | 
| 4580                                     handler_count, | 4624                                     handler_count, | 
| 4581                                     only_simple_this_property_assignments, | 4625                                     only_simple_this_property_assignments, | 
| 4582                                     this_property_assignments, | 4626                                     this_property_assignments, | 
| 4583                                     num_parameters, | 4627                                     num_parameters, | 
| 4584                                     duplicate_parameters, | 4628                                     duplicate_parameters, | 
| 4585                                     type, | 4629                                     type, | 
| 4586                                     FunctionLiteral::kIsFunction, | 4630                                     FunctionLiteral::kIsFunction, | 
| 4587                                     parenthesized); | 4631                                     parenthesized, | 
|  | 4632                                     generator); | 
| 4588   function_literal->set_function_token_position(function_token_position); | 4633   function_literal->set_function_token_position(function_token_position); | 
| 4589   function_literal->set_ast_properties(&ast_properties); | 4634   function_literal->set_ast_properties(&ast_properties); | 
| 4590 | 4635 | 
| 4591   if (fni_ != NULL && should_infer_name) fni_->AddFunction(function_literal); | 4636   if (fni_ != NULL && should_infer_name) fni_->AddFunction(function_literal); | 
| 4592   return function_literal; | 4637   return function_literal; | 
| 4593 } | 4638 } | 
| 4594 | 4639 | 
| 4595 | 4640 | 
| 4596 preparser::PreParser::PreParseResult Parser::LazyParseFunctionLiteral( | 4641 preparser::PreParser::PreParseResult Parser::LazyParseFunctionLiteral( | 
| 4597     SingletonLogger* logger) { | 4642     SingletonLogger* logger) { | 
| 4598   HistogramTimerScope preparse_scope(isolate()->counters()->pre_parse()); | 4643   HistogramTimerScope preparse_scope(isolate()->counters()->pre_parse()); | 
| 4599   ASSERT_EQ(Token::LBRACE, scanner().current_token()); | 4644   ASSERT_EQ(Token::LBRACE, scanner().current_token()); | 
| 4600 | 4645 | 
| 4601   if (reusable_preparser_ == NULL) { | 4646   if (reusable_preparser_ == NULL) { | 
| 4602     intptr_t stack_limit = isolate()->stack_guard()->real_climit(); | 4647     intptr_t stack_limit = isolate()->stack_guard()->real_climit(); | 
| 4603     bool do_allow_lazy = true; | 4648     bool do_allow_lazy = true; | 
| 4604     reusable_preparser_ = new preparser::PreParser(&scanner_, | 4649     reusable_preparser_ = new preparser::PreParser(&scanner_, | 
| 4605                                                    NULL, | 4650                                                    NULL, | 
| 4606                                                    stack_limit, | 4651                                                    stack_limit, | 
| 4607                                                    do_allow_lazy, | 4652                                                    do_allow_lazy, | 
| 4608                                                    allow_natives_syntax_, | 4653                                                    allow_natives_syntax_, | 
| 4609                                                    allow_modules_); | 4654                                                    allow_modules_, | 
|  | 4655                                                    FLAG_harmony_generators); | 
| 4610   } | 4656   } | 
| 4611   preparser::PreParser::PreParseResult result = | 4657   preparser::PreParser::PreParseResult result = | 
| 4612       reusable_preparser_->PreParseLazyFunction(top_scope_->language_mode(), | 4658       reusable_preparser_->PreParseLazyFunction(top_scope_->language_mode(), | 
|  | 4659                                                 is_generator(), | 
| 4613                                                 logger); | 4660                                                 logger); | 
| 4614   return result; | 4661   return result; | 
| 4615 } | 4662 } | 
| 4616 | 4663 | 
| 4617 | 4664 | 
| 4618 Expression* Parser::ParseV8Intrinsic(bool* ok) { | 4665 Expression* Parser::ParseV8Intrinsic(bool* ok) { | 
| 4619   // CallRuntime :: | 4666   // CallRuntime :: | 
| 4620   //   '%' Identifier Arguments | 4667   //   '%' Identifier Arguments | 
| 4621 | 4668 | 
| 4622   Expect(Token::MOD, CHECK_OK); | 4669   Expect(Token::MOD, CHECK_OK); | 
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 4665 | 4712 | 
| 4666   // We have a valid intrinsics call or a call to a builtin. | 4713   // We have a valid intrinsics call or a call to a builtin. | 
| 4667   return factory()->NewCallRuntime(name, function, args); | 4714   return factory()->NewCallRuntime(name, function, args); | 
| 4668 } | 4715 } | 
| 4669 | 4716 | 
| 4670 | 4717 | 
| 4671 bool Parser::peek_any_identifier() { | 4718 bool Parser::peek_any_identifier() { | 
| 4672   Token::Value next = peek(); | 4719   Token::Value next = peek(); | 
| 4673   return next == Token::IDENTIFIER || | 4720   return next == Token::IDENTIFIER || | 
| 4674          next == Token::FUTURE_RESERVED_WORD || | 4721          next == Token::FUTURE_RESERVED_WORD || | 
| 4675          next == Token::FUTURE_STRICT_RESERVED_WORD; | 4722          next == Token::FUTURE_STRICT_RESERVED_WORD || | 
|  | 4723          next == Token::YIELD; | 
| 4676 } | 4724 } | 
| 4677 | 4725 | 
| 4678 | 4726 | 
| 4679 void Parser::Consume(Token::Value token) { | 4727 void Parser::Consume(Token::Value token) { | 
| 4680   Token::Value next = Next(); | 4728   Token::Value next = Next(); | 
| 4681   USE(next); | 4729   USE(next); | 
| 4682   USE(token); | 4730   USE(token); | 
| 4683   ASSERT(next == token); | 4731   ASSERT(next == token); | 
| 4684 } | 4732 } | 
| 4685 | 4733 | 
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 4737 | 4785 | 
| 4738 | 4786 | 
| 4739 Literal* Parser::GetLiteralTheHole() { | 4787 Literal* Parser::GetLiteralTheHole() { | 
| 4740   return factory()->NewLiteral(isolate()->factory()->the_hole_value()); | 4788   return factory()->NewLiteral(isolate()->factory()->the_hole_value()); | 
| 4741 } | 4789 } | 
| 4742 | 4790 | 
| 4743 | 4791 | 
| 4744 // Parses an identifier that is valid for the current scope, in particular it | 4792 // Parses an identifier that is valid for the current scope, in particular it | 
| 4745 // fails on strict mode future reserved keywords in a strict scope. | 4793 // fails on strict mode future reserved keywords in a strict scope. | 
| 4746 Handle<String> Parser::ParseIdentifier(bool* ok) { | 4794 Handle<String> Parser::ParseIdentifier(bool* ok) { | 
| 4747   if (!top_scope_->is_classic_mode()) { | 4795   Token::Value next = Next(); | 
| 4748     Expect(Token::IDENTIFIER, ok); | 4796   if (next == Token::IDENTIFIER || | 
| 4749   } else if (!Check(Token::IDENTIFIER)) { | 4797       (top_scope_->is_classic_mode() && | 
| 4750     Expect(Token::FUTURE_STRICT_RESERVED_WORD, ok); | 4798        (next == Token::FUTURE_STRICT_RESERVED_WORD || | 
|  | 4799         (next == Token::YIELD && !is_generator())))) { | 
|  | 4800     return GetSymbol(ok); | 
|  | 4801   } else { | 
|  | 4802     ReportUnexpectedToken(next); | 
|  | 4803     *ok = false; | 
|  | 4804     return Handle<String>(); | 
| 4751   } | 4805   } | 
| 4752   if (!*ok) return Handle<String>(); |  | 
| 4753   return GetSymbol(ok); |  | 
| 4754 } | 4806 } | 
| 4755 | 4807 | 
| 4756 | 4808 | 
| 4757 // Parses and identifier or a strict mode future reserved word, and indicate | 4809 // Parses and identifier or a strict mode future reserved word, and indicate | 
| 4758 // whether it is strict mode future reserved. | 4810 // whether it is strict mode future reserved. | 
| 4759 Handle<String> Parser::ParseIdentifierOrStrictReservedWord( | 4811 Handle<String> Parser::ParseIdentifierOrStrictReservedWord( | 
| 4760     bool* is_strict_reserved, bool* ok) { | 4812     bool* is_strict_reserved, bool* ok) { | 
| 4761   *is_strict_reserved = false; | 4813   Token::Value next = Next(); | 
| 4762   if (!Check(Token::IDENTIFIER)) { | 4814   if (next == Token::IDENTIFIER) { | 
| 4763     Expect(Token::FUTURE_STRICT_RESERVED_WORD, ok); | 4815     *is_strict_reserved = false; | 
|  | 4816   } else if (next == Token::FUTURE_STRICT_RESERVED_WORD || | 
|  | 4817              (next == Token::YIELD && !is_generator())) { | 
| 4764     *is_strict_reserved = true; | 4818     *is_strict_reserved = true; | 
|  | 4819   } else { | 
|  | 4820     ReportUnexpectedToken(next); | 
|  | 4821     *ok = false; | 
|  | 4822     return Handle<String>(); | 
| 4765   } | 4823   } | 
| 4766   if (!*ok) return Handle<String>(); |  | 
| 4767   return GetSymbol(ok); | 4824   return GetSymbol(ok); | 
| 4768 } | 4825 } | 
| 4769 | 4826 | 
| 4770 | 4827 | 
| 4771 Handle<String> Parser::ParseIdentifierName(bool* ok) { | 4828 Handle<String> Parser::ParseIdentifierName(bool* ok) { | 
| 4772   Token::Value next = Next(); | 4829   Token::Value next = Next(); | 
| 4773   if (next != Token::IDENTIFIER && | 4830   if (next != Token::IDENTIFIER && | 
| 4774       next != Token::FUTURE_RESERVED_WORD && | 4831       next != Token::FUTURE_RESERVED_WORD && | 
| 4775       next != Token::FUTURE_STRICT_RESERVED_WORD && | 4832       next != Token::FUTURE_STRICT_RESERVED_WORD && | 
| 4776       !Token::IsKeyword(next)) { | 4833       !Token::IsKeyword(next)) { | 
| (...skipping 1091 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 5868 } | 5925 } | 
| 5869 | 5926 | 
| 5870 | 5927 | 
| 5871 ScriptDataImpl* ParserApi::PreParse(Utf16CharacterStream* source, | 5928 ScriptDataImpl* ParserApi::PreParse(Utf16CharacterStream* source, | 
| 5872                                     v8::Extension* extension, | 5929                                     v8::Extension* extension, | 
| 5873                                     int flags) { | 5930                                     int flags) { | 
| 5874   Handle<Script> no_script; | 5931   Handle<Script> no_script; | 
| 5875   if (FLAG_lazy && (extension == NULL)) { | 5932   if (FLAG_lazy && (extension == NULL)) { | 
| 5876     flags |= kAllowLazy; | 5933     flags |= kAllowLazy; | 
| 5877   } | 5934   } | 
|  | 5935   if (FLAG_harmony_generators) { | 
|  | 5936     flags |= kAllowGenerators; | 
|  | 5937   } | 
| 5878   CompleteParserRecorder recorder; | 5938   CompleteParserRecorder recorder; | 
| 5879   return DoPreParse(source, flags, &recorder); | 5939   return DoPreParse(source, flags, &recorder); | 
| 5880 } | 5940 } | 
| 5881 | 5941 | 
| 5882 | 5942 | 
| 5883 bool RegExpParser::ParseRegExp(FlatStringReader* input, | 5943 bool RegExpParser::ParseRegExp(FlatStringReader* input, | 
| 5884                                bool multiline, | 5944                                bool multiline, | 
| 5885                                RegExpCompileData* result, | 5945                                RegExpCompileData* result, | 
| 5886                                Zone* zone) { | 5946                                Zone* zone) { | 
| 5887   ASSERT(result != NULL); | 5947   ASSERT(result != NULL); | 
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 5942       ASSERT(info->isolate()->has_pending_exception()); | 6002       ASSERT(info->isolate()->has_pending_exception()); | 
| 5943     } else { | 6003     } else { | 
| 5944       result = parser.ParseProgram(); | 6004       result = parser.ParseProgram(); | 
| 5945     } | 6005     } | 
| 5946   } | 6006   } | 
| 5947   info->SetFunction(result); | 6007   info->SetFunction(result); | 
| 5948   return (result != NULL); | 6008   return (result != NULL); | 
| 5949 } | 6009 } | 
| 5950 | 6010 | 
| 5951 } }  // namespace v8::internal | 6011 } }  // namespace v8::internal | 
| OLD | NEW | 
|---|