| OLD | NEW |
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <cmath> | 5 #include <cmath> |
| 6 | 6 |
| 7 #include "include/v8stdint.h" | 7 #include "include/v8stdint.h" |
| 8 | 8 |
| 9 #include "src/allocation.h" | 9 #include "src/allocation.h" |
| 10 #include "src/base/logging.h" | 10 #include "src/base/logging.h" |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 84 return PreParserExpression::StringLiteral(); | 84 return PreParserExpression::StringLiteral(); |
| 85 } | 85 } |
| 86 | 86 |
| 87 | 87 |
| 88 PreParserExpression PreParserTraits::ParseV8Intrinsic(bool* ok) { | 88 PreParserExpression PreParserTraits::ParseV8Intrinsic(bool* ok) { |
| 89 return pre_parser_->ParseV8Intrinsic(ok); | 89 return pre_parser_->ParseV8Intrinsic(ok); |
| 90 } | 90 } |
| 91 | 91 |
| 92 | 92 |
| 93 PreParserExpression PreParserTraits::ParseFunctionLiteral( | 93 PreParserExpression PreParserTraits::ParseFunctionLiteral( |
| 94 PreParserIdentifier name, | 94 PreParserIdentifier name, Scanner::Location function_name_location, |
| 95 Scanner::Location function_name_location, | 95 bool name_is_strict_reserved, FunctionLiteral::IsGeneratorFlag is_generator, |
| 96 bool name_is_strict_reserved, | 96 FunctionLiteral::IsArrowFlag is_arrow, |
| 97 bool is_generator, | 97 FunctionLiteral::IsConciseMethodFlag is_concise_method, |
| 98 int function_token_position, | 98 int function_token_position, FunctionLiteral::FunctionType type, |
| 99 FunctionLiteral::FunctionType type, | 99 FunctionLiteral::ArityRestriction arity_restriction, bool* ok) { |
| 100 FunctionLiteral::ArityRestriction arity_restriction, | |
| 101 bool* ok) { | |
| 102 return pre_parser_->ParseFunctionLiteral( | 100 return pre_parser_->ParseFunctionLiteral( |
| 103 name, function_name_location, name_is_strict_reserved, is_generator, | 101 name, function_name_location, name_is_strict_reserved, is_generator, |
| 104 function_token_position, type, arity_restriction, ok); | 102 is_arrow, is_concise_method, function_token_position, type, |
| 103 arity_restriction, ok); |
| 105 } | 104 } |
| 106 | 105 |
| 107 | 106 |
| 108 PreParser::PreParseResult PreParser::PreParseLazyFunction( | 107 PreParser::PreParseResult PreParser::PreParseLazyFunction( |
| 109 StrictMode strict_mode, bool is_generator, ParserRecorder* log) { | 108 StrictMode strict_mode, bool is_generator, ParserRecorder* log) { |
| 110 log_ = log; | 109 log_ = log; |
| 111 // Lazy functions always have trivial outer scopes (no with/catch scopes). | 110 // Lazy functions always have trivial outer scopes (no with/catch scopes). |
| 112 PreParserScope top_scope(scope_, GLOBAL_SCOPE); | 111 PreParserScope top_scope(scope_, GLOBAL_SCOPE); |
| 113 FunctionState top_state(&function_state_, &scope_, &top_scope, NULL, | 112 FunctionState top_state(&function_state_, &scope_, &top_scope, NULL, |
| 114 this->ast_value_factory()); | 113 this->ast_value_factory()); |
| (...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 322 // 'function' Identifier '(' FormalParameterListopt ')' '{' FunctionBody '}' | 321 // 'function' Identifier '(' FormalParameterListopt ')' '{' FunctionBody '}' |
| 323 // GeneratorDeclaration :: | 322 // GeneratorDeclaration :: |
| 324 // 'function' '*' Identifier '(' FormalParameterListopt ')' | 323 // 'function' '*' Identifier '(' FormalParameterListopt ')' |
| 325 // '{' FunctionBody '}' | 324 // '{' FunctionBody '}' |
| 326 Expect(Token::FUNCTION, CHECK_OK); | 325 Expect(Token::FUNCTION, CHECK_OK); |
| 327 int pos = position(); | 326 int pos = position(); |
| 328 bool is_generator = allow_generators() && Check(Token::MUL); | 327 bool is_generator = allow_generators() && Check(Token::MUL); |
| 329 bool is_strict_reserved = false; | 328 bool is_strict_reserved = false; |
| 330 Identifier name = ParseIdentifierOrStrictReservedWord( | 329 Identifier name = ParseIdentifierOrStrictReservedWord( |
| 331 &is_strict_reserved, CHECK_OK); | 330 &is_strict_reserved, CHECK_OK); |
| 332 ParseFunctionLiteral(name, | 331 ParseFunctionLiteral( |
| 333 scanner()->location(), | 332 name, scanner()->location(), is_strict_reserved, |
| 334 is_strict_reserved, | 333 is_generator ? FunctionLiteral::kIsGenerator |
| 335 is_generator, | 334 : FunctionLiteral::kNotGenerator, |
| 336 pos, | 335 FunctionLiteral::kNotArrow, FunctionLiteral::kNotConciseMethod, pos, |
| 337 FunctionLiteral::DECLARATION, | 336 FunctionLiteral::DECLARATION, FunctionLiteral::NORMAL_ARITY, CHECK_OK); |
| 338 FunctionLiteral::NORMAL_ARITY, | |
| 339 CHECK_OK); | |
| 340 return Statement::FunctionDeclaration(); | 337 return Statement::FunctionDeclaration(); |
| 341 } | 338 } |
| 342 | 339 |
| 343 | 340 |
| 344 PreParser::Statement PreParser::ParseBlock(bool* ok) { | 341 PreParser::Statement PreParser::ParseBlock(bool* ok) { |
| 345 // Block :: | 342 // Block :: |
| 346 // '{' Statement* '}' | 343 // '{' Statement* '}' |
| 347 | 344 |
| 348 // Note that a Block does not introduce a new execution scope! | 345 // Note that a Block does not introduce a new execution scope! |
| 349 // (ECMA-262, 3rd, 12.2) | 346 // (ECMA-262, 3rd, 12.2) |
| (...skipping 437 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 787 | 784 |
| 788 #undef CHECK_OK | 785 #undef CHECK_OK |
| 789 #define CHECK_OK ok); \ | 786 #define CHECK_OK ok); \ |
| 790 if (!*ok) return Expression::Default(); \ | 787 if (!*ok) return Expression::Default(); \ |
| 791 ((void)0 | 788 ((void)0 |
| 792 #define DUMMY ) // to make indentation work | 789 #define DUMMY ) // to make indentation work |
| 793 #undef DUMMY | 790 #undef DUMMY |
| 794 | 791 |
| 795 | 792 |
| 796 PreParser::Expression PreParser::ParseFunctionLiteral( | 793 PreParser::Expression PreParser::ParseFunctionLiteral( |
| 797 Identifier function_name, | 794 Identifier function_name, Scanner::Location function_name_location, |
| 798 Scanner::Location function_name_location, | 795 bool name_is_strict_reserved, FunctionLiteral::IsGeneratorFlag is_generator, |
| 799 bool name_is_strict_reserved, | 796 FunctionLiteral::IsArrowFlag is_arrow, |
| 800 bool is_generator, | 797 FunctionLiteral::IsConciseMethodFlag is_concise_method, |
| 801 int function_token_pos, | 798 int function_token_pos, FunctionLiteral::FunctionType function_type, |
| 802 FunctionLiteral::FunctionType function_type, | 799 FunctionLiteral::ArityRestriction arity_restriction, bool* ok) { |
| 803 FunctionLiteral::ArityRestriction arity_restriction, | |
| 804 bool* ok) { | |
| 805 // Function :: | 800 // Function :: |
| 806 // '(' FormalParameterList? ')' '{' FunctionBody '}' | 801 // '(' FormalParameterList? ')' '{' FunctionBody '}' |
| 807 | 802 |
| 808 // Parse function body. | 803 // Parse function body. |
| 809 ScopeType outer_scope_type = scope_->type(); | 804 ScopeType outer_scope_type = scope_->type(); |
| 810 PreParserScope function_scope(scope_, FUNCTION_SCOPE); | 805 PreParserScope function_scope(scope_, FUNCTION_SCOPE); |
| 811 FunctionState function_state(&function_state_, &scope_, &function_scope, NULL, | 806 FunctionState function_state(&function_state_, &scope_, &function_scope, NULL, |
| 812 this->ast_value_factory()); | 807 this->ast_value_factory()); |
| 813 function_state.set_is_generator(is_generator); | 808 function_state.set_is_generator(is_generator); |
| 814 // FormalParameterList :: | 809 // FormalParameterList :: |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 927 ParseIdentifier(kAllowEvalOrArguments, CHECK_OK); | 922 ParseIdentifier(kAllowEvalOrArguments, CHECK_OK); |
| 928 ParseArguments(ok); | 923 ParseArguments(ok); |
| 929 | 924 |
| 930 return Expression::Default(); | 925 return Expression::Default(); |
| 931 } | 926 } |
| 932 | 927 |
| 933 #undef CHECK_OK | 928 #undef CHECK_OK |
| 934 | 929 |
| 935 | 930 |
| 936 } } // v8::internal | 931 } } // v8::internal |
| OLD | NEW |