OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 "src/parsing/parser.h" | 5 #include "src/parsing/parser.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 | 8 |
9 #include "src/api.h" | 9 #include "src/api.h" |
10 #include "src/ast/ast-expression-rewriter.h" | 10 #include "src/ast/ast-expression-rewriter.h" |
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
270 | 270 |
271 | 271 |
272 // ---------------------------------------------------------------------------- | 272 // ---------------------------------------------------------------------------- |
273 // The CHECK_OK macro is a convenient macro to enforce error | 273 // The CHECK_OK macro is a convenient macro to enforce error |
274 // handling for functions that may fail (by returning !*ok). | 274 // handling for functions that may fail (by returning !*ok). |
275 // | 275 // |
276 // CAUTION: This macro appends extra statements after a call, | 276 // CAUTION: This macro appends extra statements after a call, |
277 // thus it must never be used where only a single statement | 277 // thus it must never be used where only a single statement |
278 // is correct (e.g. an if statement branch w/o braces)! | 278 // is correct (e.g. an if statement branch w/o braces)! |
279 | 279 |
280 #define CHECK_OK ok); \ | 280 #define CHECK_OK_VALUE(x) ok); \ |
281 if (!*ok) return nullptr; \ | 281 if (!*ok) return x; \ |
282 ((void)0 | 282 ((void)0 |
283 #define DUMMY ) // to make indentation work | 283 #define DUMMY ) // to make indentation work |
284 #undef DUMMY | 284 #undef DUMMY |
285 | 285 |
286 #define CHECK_OK_VOID ok); \ | 286 #define CHECK_OK CHECK_OK_VALUE(nullptr) |
287 if (!*ok) return; \ | 287 #define CHECK_OK_VOID CHECK_OK_VALUE(this->Void()) |
288 ((void)0 | |
289 #define DUMMY ) // to make indentation work | |
290 #undef DUMMY | |
291 | 288 |
292 #define CHECK_FAILED /**/); \ | 289 #define CHECK_FAILED /**/); \ |
293 if (failed_) return nullptr; \ | 290 if (failed_) return nullptr; \ |
294 ((void)0 | 291 ((void)0 |
295 #define DUMMY ) // to make indentation work | 292 #define DUMMY ) // to make indentation work |
296 #undef DUMMY | 293 #undef DUMMY |
297 | 294 |
298 // ---------------------------------------------------------------------------- | 295 // ---------------------------------------------------------------------------- |
299 // Implementation of Parser | 296 // Implementation of Parser |
300 | 297 |
(...skipping 2947 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3248 if (peek() != Token::SEMICOLON) { | 3245 if (peek() != Token::SEMICOLON) { |
3249 if (peek() == Token::VAR || peek() == Token::CONST || | 3246 if (peek() == Token::VAR || peek() == Token::CONST || |
3250 (peek() == Token::LET && IsNextLetKeyword())) { | 3247 (peek() == Token::LET && IsNextLetKeyword())) { |
3251 ParseVariableDeclarations(kForStatement, &parsing_result, nullptr, | 3248 ParseVariableDeclarations(kForStatement, &parsing_result, nullptr, |
3252 CHECK_OK); | 3249 CHECK_OK); |
3253 | 3250 |
3254 ForEachStatement::VisitMode mode = ForEachStatement::ENUMERATE; | 3251 ForEachStatement::VisitMode mode = ForEachStatement::ENUMERATE; |
3255 int each_beg_pos = scanner()->location().beg_pos; | 3252 int each_beg_pos = scanner()->location().beg_pos; |
3256 int each_end_pos = scanner()->location().end_pos; | 3253 int each_end_pos = scanner()->location().end_pos; |
3257 | 3254 |
3258 if (CheckInOrOf(&mode, ok)) { | 3255 if (CheckInOrOf(&mode)) { |
3259 if (!*ok) return nullptr; | |
3260 if (parsing_result.declarations.length() != 1) { | 3256 if (parsing_result.declarations.length() != 1) { |
3261 ReportMessageAt(parsing_result.bindings_loc, | 3257 ReportMessageAt(parsing_result.bindings_loc, |
3262 MessageTemplate::kForInOfLoopMultiBindings, | 3258 MessageTemplate::kForInOfLoopMultiBindings, |
3263 ForEachStatement::VisitModeString(mode)); | 3259 ForEachStatement::VisitModeString(mode)); |
3264 *ok = false; | 3260 *ok = false; |
3265 return nullptr; | 3261 return nullptr; |
3266 } | 3262 } |
3267 DeclarationParsingResult::Declaration& decl = | 3263 DeclarationParsingResult::Declaration& decl = |
3268 parsing_result.declarations[0]; | 3264 parsing_result.declarations[0]; |
3269 if (parsing_result.first_initializer_loc.IsValid() && | 3265 if (parsing_result.first_initializer_loc.IsValid() && |
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3443 &parsing_result, bound_names_are_lexical ? &bound_names : nullptr, | 3439 &parsing_result, bound_names_are_lexical ? &bound_names : nullptr, |
3444 CHECK_OK); | 3440 CHECK_OK); |
3445 } | 3441 } |
3446 } else { | 3442 } else { |
3447 int lhs_beg_pos = peek_position(); | 3443 int lhs_beg_pos = peek_position(); |
3448 ExpressionClassifier classifier(this); | 3444 ExpressionClassifier classifier(this); |
3449 Expression* expression = ParseExpressionCoverGrammar(false, CHECK_OK); | 3445 Expression* expression = ParseExpressionCoverGrammar(false, CHECK_OK); |
3450 int lhs_end_pos = scanner()->location().end_pos; | 3446 int lhs_end_pos = scanner()->location().end_pos; |
3451 ForEachStatement::VisitMode mode = ForEachStatement::ENUMERATE; | 3447 ForEachStatement::VisitMode mode = ForEachStatement::ENUMERATE; |
3452 | 3448 |
3453 bool is_for_each = CheckInOrOf(&mode, CHECK_OK); | 3449 bool is_for_each = CheckInOrOf(&mode); |
3454 bool is_destructuring = is_for_each && (expression->IsArrayLiteral() || | 3450 bool is_destructuring = is_for_each && (expression->IsArrayLiteral() || |
3455 expression->IsObjectLiteral()); | 3451 expression->IsObjectLiteral()); |
3456 | 3452 |
3457 if (is_destructuring) { | 3453 if (is_destructuring) { |
3458 ValidateAssignmentPattern(CHECK_OK); | 3454 ValidateAssignmentPattern(CHECK_OK); |
3459 } else { | 3455 } else { |
3460 RewriteNonPattern(CHECK_OK); | 3456 RewriteNonPattern(CHECK_OK); |
3461 } | 3457 } |
3462 | 3458 |
3463 if (is_for_each) { | 3459 if (is_for_each) { |
(...skipping 493 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3957 | 3953 |
3958 CheckArityRestrictions(arity, kind, formals.has_rest, start_position, | 3954 CheckArityRestrictions(arity, kind, formals.has_rest, start_position, |
3959 formals_end_position, CHECK_OK); | 3955 formals_end_position, CHECK_OK); |
3960 Expect(Token::LBRACE, CHECK_OK); | 3956 Expect(Token::LBRACE, CHECK_OK); |
3961 // Don't include the rest parameter into the function's formal parameter | 3957 // Don't include the rest parameter into the function's formal parameter |
3962 // count (esp. the SharedFunctionInfo::internal_formal_parameter_count, | 3958 // count (esp. the SharedFunctionInfo::internal_formal_parameter_count, |
3963 // which says whether we need to create an arguments adaptor frame). | 3959 // which says whether we need to create an arguments adaptor frame). |
3964 if (formals.has_rest) arity--; | 3960 if (formals.has_rest) arity--; |
3965 | 3961 |
3966 // Eager or lazy parse? | 3962 // Eager or lazy parse? |
3967 // If is_lazily_parsed, we'll parse lazy. If we can set a bookmark, we'll | 3963 // If is_lazily_parsed, we'll parse lazily. We'll call SkipLazyFunctionBody, |
3968 // pass it to SkipLazyFunctionBody, which may use it to abort lazy | 3964 // which may decide to abort lazy parsing if it suspects that wasn't a good |
3969 // parsing if it suspect that wasn't a good idea. If so, or if we didn't | 3965 // idea. If so (in which case the parser is expected to have backtracked), |
3970 // try to lazy parse in the first place, we'll have to parse eagerly. | 3966 // or if we didn't try to lazy parse in the first place, we'll have to parse |
3971 Scanner::BookmarkScope bookmark(scanner()); | 3967 // eagerly. |
3972 if (is_lazily_parsed) { | 3968 if (is_lazily_parsed) { |
3973 Scanner::BookmarkScope* maybe_bookmark = | 3969 Scanner::BookmarkScope bookmark(scanner()); |
3974 bookmark.Set() ? &bookmark : nullptr; | 3970 bool may_abort = bookmark.Set(); |
3975 SkipLazyFunctionBody(&materialized_literal_count, | 3971 LazyParsingResult result = |
3976 &expected_property_count, /*CHECK_OK*/ ok, | 3972 SkipLazyFunctionBody(&materialized_literal_count, |
3977 maybe_bookmark); | 3973 &expected_property_count, may_abort, CHECK_OK); |
3978 | 3974 |
3979 materialized_literal_count += formals.materialized_literals_count + | 3975 materialized_literal_count += formals.materialized_literals_count + |
3980 function_state.materialized_literal_count(); | 3976 function_state.materialized_literal_count(); |
3981 | 3977 |
3982 if (bookmark.HasBeenReset()) { | 3978 if (result == kLazyParsingAborted) { |
| 3979 bookmark.Reset(); |
3983 // Trigger eager (re-)parsing, just below this block. | 3980 // Trigger eager (re-)parsing, just below this block. |
3984 is_lazily_parsed = false; | 3981 is_lazily_parsed = false; |
3985 | 3982 |
3986 // This is probably an initialization function. Inform the compiler it | 3983 // This is probably an initialization function. Inform the compiler it |
3987 // should also eager-compile this function, and that we expect it to be | 3984 // should also eager-compile this function, and that we expect it to be |
3988 // used once. | 3985 // used once. |
3989 eager_compile_hint = FunctionLiteral::kShouldEagerCompile; | 3986 eager_compile_hint = FunctionLiteral::kShouldEagerCompile; |
3990 should_be_used_once_hint = true; | 3987 should_be_used_once_hint = true; |
3991 } | 3988 } |
3992 } | 3989 } |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4072 name = ParseIdentifierOrStrictReservedWord(FunctionKind::kAsyncFunction, | 4069 name = ParseIdentifierOrStrictReservedWord(FunctionKind::kAsyncFunction, |
4073 &is_strict_reserved, CHECK_OK); | 4070 &is_strict_reserved, CHECK_OK); |
4074 } | 4071 } |
4075 return ParseFunctionLiteral(name, scanner()->location(), | 4072 return ParseFunctionLiteral(name, scanner()->location(), |
4076 is_strict_reserved ? kFunctionNameIsStrictReserved | 4073 is_strict_reserved ? kFunctionNameIsStrictReserved |
4077 : kFunctionNameValidityUnknown, | 4074 : kFunctionNameValidityUnknown, |
4078 FunctionKind::kAsyncFunction, pos, type, | 4075 FunctionKind::kAsyncFunction, pos, type, |
4079 language_mode(), CHECK_OK); | 4076 language_mode(), CHECK_OK); |
4080 } | 4077 } |
4081 | 4078 |
4082 void Parser::SkipLazyFunctionBody(int* materialized_literal_count, | 4079 Parser::LazyParsingResult Parser::SkipLazyFunctionBody( |
4083 int* expected_property_count, bool* ok, | 4080 int* materialized_literal_count, int* expected_property_count, |
4084 Scanner::BookmarkScope* bookmark) { | 4081 bool may_abort, bool* ok) { |
4085 DCHECK_IMPLIES(bookmark, bookmark->HasBeenSet()); | |
4086 if (produce_cached_parse_data()) CHECK(log_); | 4082 if (produce_cached_parse_data()) CHECK(log_); |
4087 | 4083 |
4088 int function_block_pos = position(); | 4084 int function_block_pos = position(); |
4089 DeclarationScope* scope = this->scope()->AsDeclarationScope(); | 4085 DeclarationScope* scope = this->scope()->AsDeclarationScope(); |
4090 DCHECK(scope->is_function_scope()); | 4086 DCHECK(scope->is_function_scope()); |
4091 if (consume_cached_parse_data() && !cached_parse_data_->rejected()) { | 4087 if (consume_cached_parse_data() && !cached_parse_data_->rejected()) { |
4092 // If we have cached data, we use it to skip parsing the function body. The | 4088 // If we have cached data, we use it to skip parsing the function body. The |
4093 // data contains the information we need to construct the lazy function. | 4089 // data contains the information we need to construct the lazy function. |
4094 FunctionEntry entry = | 4090 FunctionEntry entry = |
4095 cached_parse_data_->GetFunctionEntry(function_block_pos); | 4091 cached_parse_data_->GetFunctionEntry(function_block_pos); |
4096 // Check that cached data is valid. If not, mark it as invalid (the embedder | 4092 // Check that cached data is valid. If not, mark it as invalid (the embedder |
4097 // handles it). Note that end position greater than end of stream is safe, | 4093 // handles it). Note that end position greater than end of stream is safe, |
4098 // and hard to check. | 4094 // and hard to check. |
4099 if (entry.is_valid() && entry.end_pos() > function_block_pos) { | 4095 if (entry.is_valid() && entry.end_pos() > function_block_pos) { |
4100 scanner()->SeekForward(entry.end_pos() - 1); | 4096 scanner()->SeekForward(entry.end_pos() - 1); |
4101 | 4097 |
4102 scope->set_end_position(entry.end_pos()); | 4098 scope->set_end_position(entry.end_pos()); |
4103 Expect(Token::RBRACE, CHECK_OK_VOID); | 4099 Expect(Token::RBRACE, CHECK_OK_VALUE(kLazyParsingComplete)); |
4104 total_preparse_skipped_ += scope->end_position() - function_block_pos; | 4100 total_preparse_skipped_ += scope->end_position() - function_block_pos; |
4105 *materialized_literal_count = entry.literal_count(); | 4101 *materialized_literal_count = entry.literal_count(); |
4106 *expected_property_count = entry.property_count(); | 4102 *expected_property_count = entry.property_count(); |
4107 SetLanguageMode(scope, entry.language_mode()); | 4103 SetLanguageMode(scope, entry.language_mode()); |
4108 if (entry.uses_super_property()) scope->RecordSuperPropertyUsage(); | 4104 if (entry.uses_super_property()) scope->RecordSuperPropertyUsage(); |
4109 if (entry.calls_eval()) scope->RecordEvalCall(); | 4105 if (entry.calls_eval()) scope->RecordEvalCall(); |
4110 return; | 4106 return kLazyParsingComplete; |
4111 } | 4107 } |
4112 cached_parse_data_->Reject(); | 4108 cached_parse_data_->Reject(); |
4113 } | 4109 } |
4114 // With no cached data, we partially parse the function, without building an | 4110 // With no cached data, we partially parse the function, without building an |
4115 // AST. This gathers the data needed to build a lazy function. | 4111 // AST. This gathers the data needed to build a lazy function. |
4116 SingletonLogger logger; | 4112 SingletonLogger logger; |
4117 PreParser::PreParseResult result = | 4113 PreParser::PreParseResult result = |
4118 ParseLazyFunctionBodyWithPreParser(&logger, bookmark); | 4114 ParseLazyFunctionBodyWithPreParser(&logger, may_abort); |
4119 if (bookmark && bookmark->HasBeenReset()) { | 4115 // Return immediately if pre-parser decided to abort parsing. |
4120 return; // Return immediately if pre-parser devided to abort parsing. | 4116 if (result == PreParser::kPreParseAbort) { |
| 4117 return kLazyParsingAborted; |
4121 } | 4118 } |
4122 if (result == PreParser::kPreParseStackOverflow) { | 4119 if (result == PreParser::kPreParseStackOverflow) { |
4123 // Propagate stack overflow. | 4120 // Propagate stack overflow. |
4124 set_stack_overflow(); | 4121 set_stack_overflow(); |
4125 *ok = false; | 4122 *ok = false; |
4126 return; | 4123 return kLazyParsingComplete; |
4127 } | 4124 } |
4128 if (logger.has_error()) { | 4125 if (logger.has_error()) { |
4129 ReportMessageAt(Scanner::Location(logger.start(), logger.end()), | 4126 ReportMessageAt(Scanner::Location(logger.start(), logger.end()), |
4130 logger.message(), logger.argument_opt(), | 4127 logger.message(), logger.argument_opt(), |
4131 logger.error_type()); | 4128 logger.error_type()); |
4132 *ok = false; | 4129 *ok = false; |
4133 return; | 4130 return kLazyParsingComplete; |
4134 } | 4131 } |
4135 scope->set_end_position(logger.end()); | 4132 scope->set_end_position(logger.end()); |
4136 Expect(Token::RBRACE, CHECK_OK_VOID); | 4133 Expect(Token::RBRACE, CHECK_OK_VALUE(kLazyParsingComplete)); |
4137 total_preparse_skipped_ += scope->end_position() - function_block_pos; | 4134 total_preparse_skipped_ += scope->end_position() - function_block_pos; |
4138 *materialized_literal_count = logger.literals(); | 4135 *materialized_literal_count = logger.literals(); |
4139 *expected_property_count = logger.properties(); | 4136 *expected_property_count = logger.properties(); |
4140 SetLanguageMode(scope, logger.language_mode()); | 4137 SetLanguageMode(scope, logger.language_mode()); |
4141 if (logger.uses_super_property()) scope->RecordSuperPropertyUsage(); | 4138 if (logger.uses_super_property()) scope->RecordSuperPropertyUsage(); |
4142 if (logger.calls_eval()) scope->RecordEvalCall(); | 4139 if (logger.calls_eval()) scope->RecordEvalCall(); |
4143 if (produce_cached_parse_data()) { | 4140 if (produce_cached_parse_data()) { |
4144 DCHECK(log_); | 4141 DCHECK(log_); |
4145 // Position right after terminal '}'. | 4142 // Position right after terminal '}'. |
4146 int body_end = scanner()->location().end_pos; | 4143 int body_end = scanner()->location().end_pos; |
4147 log_->LogFunction(function_block_pos, body_end, *materialized_literal_count, | 4144 log_->LogFunction(function_block_pos, body_end, *materialized_literal_count, |
4148 *expected_property_count, language_mode(), | 4145 *expected_property_count, language_mode(), |
4149 scope->uses_super_property(), scope->calls_eval()); | 4146 scope->uses_super_property(), scope->calls_eval()); |
4150 } | 4147 } |
| 4148 return kLazyParsingComplete; |
4151 } | 4149 } |
4152 | 4150 |
4153 | 4151 |
4154 Statement* Parser::BuildAssertIsCoercible(Variable* var) { | 4152 Statement* Parser::BuildAssertIsCoercible(Variable* var) { |
4155 // if (var === null || var === undefined) | 4153 // if (var === null || var === undefined) |
4156 // throw /* type error kNonCoercible) */; | 4154 // throw /* type error kNonCoercible) */; |
4157 | 4155 |
4158 Expression* condition = factory()->NewBinaryOperation( | 4156 Expression* condition = factory()->NewBinaryOperation( |
4159 Token::OR, | 4157 Token::OR, |
4160 factory()->NewCompareOperation( | 4158 factory()->NewCompareOperation( |
(...skipping 431 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4592 factory()->NewAssignment(Token::INIT, fproxy, | 4590 factory()->NewAssignment(Token::INIT, fproxy, |
4593 factory()->NewThisFunction(pos), | 4591 factory()->NewThisFunction(pos), |
4594 kNoSourcePosition), | 4592 kNoSourcePosition), |
4595 kNoSourcePosition)); | 4593 kNoSourcePosition)); |
4596 } | 4594 } |
4597 | 4595 |
4598 MarkCollectedTailCallExpressions(); | 4596 MarkCollectedTailCallExpressions(); |
4599 return result; | 4597 return result; |
4600 } | 4598 } |
4601 | 4599 |
4602 | |
4603 PreParser::PreParseResult Parser::ParseLazyFunctionBodyWithPreParser( | 4600 PreParser::PreParseResult Parser::ParseLazyFunctionBodyWithPreParser( |
4604 SingletonLogger* logger, Scanner::BookmarkScope* bookmark) { | 4601 SingletonLogger* logger, bool may_abort) { |
4605 // This function may be called on a background thread too; record only the | 4602 // This function may be called on a background thread too; record only the |
4606 // main thread preparse times. | 4603 // main thread preparse times. |
4607 if (pre_parse_timer_ != NULL) { | 4604 if (pre_parse_timer_ != NULL) { |
4608 pre_parse_timer_->Start(); | 4605 pre_parse_timer_->Start(); |
4609 } | 4606 } |
4610 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.PreParse"); | 4607 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.PreParse"); |
4611 | 4608 |
4612 DCHECK_EQ(Token::LBRACE, scanner()->current_token()); | 4609 DCHECK_EQ(Token::LBRACE, scanner()->current_token()); |
4613 | 4610 |
4614 if (reusable_preparser_ == NULL) { | 4611 if (reusable_preparser_ == NULL) { |
4615 reusable_preparser_ = new PreParser(zone(), &scanner_, ast_value_factory(), | 4612 reusable_preparser_ = new PreParser(zone(), &scanner_, ast_value_factory(), |
4616 NULL, stack_limit_); | 4613 NULL, stack_limit_); |
4617 reusable_preparser_->set_allow_lazy(true); | 4614 reusable_preparser_->set_allow_lazy(true); |
4618 #define SET_ALLOW(name) reusable_preparser_->set_allow_##name(allow_##name()); | 4615 #define SET_ALLOW(name) reusable_preparser_->set_allow_##name(allow_##name()); |
4619 SET_ALLOW(natives); | 4616 SET_ALLOW(natives); |
4620 SET_ALLOW(harmony_do_expressions); | 4617 SET_ALLOW(harmony_do_expressions); |
4621 SET_ALLOW(harmony_for_in); | 4618 SET_ALLOW(harmony_for_in); |
4622 SET_ALLOW(harmony_function_sent); | 4619 SET_ALLOW(harmony_function_sent); |
4623 SET_ALLOW(harmony_restrictive_declarations); | 4620 SET_ALLOW(harmony_restrictive_declarations); |
4624 SET_ALLOW(harmony_async_await); | 4621 SET_ALLOW(harmony_async_await); |
4625 SET_ALLOW(harmony_trailing_commas); | 4622 SET_ALLOW(harmony_trailing_commas); |
4626 #undef SET_ALLOW | 4623 #undef SET_ALLOW |
4627 } | 4624 } |
4628 PreParser::PreParseResult result = reusable_preparser_->PreParseLazyFunction( | 4625 PreParser::PreParseResult result = reusable_preparser_->PreParseLazyFunction( |
4629 language_mode(), function_state_->kind(), | 4626 language_mode(), function_state_->kind(), |
4630 scope()->AsDeclarationScope()->has_simple_parameters(), parsing_module_, | 4627 scope()->AsDeclarationScope()->has_simple_parameters(), parsing_module_, |
4631 logger, bookmark, use_counts_); | 4628 logger, may_abort, use_counts_); |
4632 if (pre_parse_timer_ != NULL) { | 4629 if (pre_parse_timer_ != NULL) { |
4633 pre_parse_timer_->Stop(); | 4630 pre_parse_timer_->Stop(); |
4634 } | 4631 } |
4635 return result; | 4632 return result; |
4636 } | 4633 } |
4637 | 4634 |
4638 Expression* Parser::ParseClassLiteral(const AstRawString* name, | 4635 Expression* Parser::ParseClassLiteral(const AstRawString* name, |
4639 Scanner::Location class_name_location, | 4636 Scanner::Location class_name_location, |
4640 bool name_is_strict_reserved, int pos, | 4637 bool name_is_strict_reserved, int pos, |
4641 bool* ok) { | 4638 bool* ok) { |
(...skipping 1992 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6634 node->Print(Isolate::Current()); | 6631 node->Print(Isolate::Current()); |
6635 } | 6632 } |
6636 #endif // DEBUG | 6633 #endif // DEBUG |
6637 | 6634 |
6638 #undef CHECK_OK | 6635 #undef CHECK_OK |
6639 #undef CHECK_OK_VOID | 6636 #undef CHECK_OK_VOID |
6640 #undef CHECK_FAILED | 6637 #undef CHECK_FAILED |
6641 | 6638 |
6642 } // namespace internal | 6639 } // namespace internal |
6643 } // namespace v8 | 6640 } // namespace v8 |
OLD | NEW |