OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "vm/parser.h" | 5 #include "vm/parser.h" |
6 #include "vm/flags.h" | 6 #include "vm/flags.h" |
7 | 7 |
8 #ifndef DART_PRECOMPILED_RUNTIME | 8 #ifndef DART_PRECOMPILED_RUNTIME |
9 | 9 |
10 #include "lib/invocation_mirror.h" | 10 #include "lib/invocation_mirror.h" |
(...skipping 3486 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3497 // Populate function scope with the formal parameters. Since in this case | 3497 // Populate function scope with the formal parameters. Since in this case |
3498 // we are compiling a getter this will at most populate the receiver. | 3498 // we are compiling a getter this will at most populate the receiver. |
3499 AddFormalParamsToScope(¶ms, current_block_->scope); | 3499 AddFormalParamsToScope(¶ms, current_block_->scope); |
3500 } else if (func.IsAsyncClosure()) { | 3500 } else if (func.IsAsyncClosure()) { |
3501 AddAsyncClosureParameters(¶ms); | 3501 AddAsyncClosureParameters(¶ms); |
3502 SetupDefaultsForOptionalParams(params); | 3502 SetupDefaultsForOptionalParams(params); |
3503 AddFormalParamsToScope(¶ms, current_block_->scope); | 3503 AddFormalParamsToScope(¶ms, current_block_->scope); |
3504 ASSERT(AbstractType::Handle(Z, func.result_type()).IsResolved()); | 3504 ASSERT(AbstractType::Handle(Z, func.result_type()).IsResolved()); |
3505 ASSERT(func.NumParameters() == params.parameters->length()); | 3505 ASSERT(func.NumParameters() == params.parameters->length()); |
3506 if (!Function::Handle(func.parent_function()).IsGetterFunction()) { | 3506 if (!Function::Handle(func.parent_function()).IsGetterFunction()) { |
3507 // Parse and discard any formal parameters. They are accessed as | 3507 // Skip formal parameters. They are accessed as context variables. |
3508 // context variables. | 3508 // Parsing them again (and discarding them) does not work in case of |
3509 ParamList discarded_params; | 3509 // default values with same name as already parsed formal parameter. |
3510 ParseFormalParameterList(allow_explicit_default_values, | 3510 SkipToMatchingParenthesis(); |
3511 false, | |
3512 &discarded_params); | |
3513 } | 3511 } |
3514 } else if (func.IsSyncGenClosure()) { | 3512 } else if (func.IsSyncGenClosure()) { |
3515 AddSyncGenClosureParameters(¶ms); | 3513 AddSyncGenClosureParameters(¶ms); |
3516 SetupDefaultsForOptionalParams(params); | 3514 SetupDefaultsForOptionalParams(params); |
3517 AddFormalParamsToScope(¶ms, current_block_->scope); | 3515 AddFormalParamsToScope(¶ms, current_block_->scope); |
3518 ASSERT(AbstractType::Handle(Z, func.result_type()).IsResolved()); | 3516 ASSERT(AbstractType::Handle(Z, func.result_type()).IsResolved()); |
3519 if (!Function::Handle(func.parent_function()).IsGetterFunction()) { | 3517 if (!Function::Handle(func.parent_function()).IsGetterFunction()) { |
3520 // Parse and discard any formal parameters. They are accessed as | 3518 // Skip formal parameters. They are accessed as context variables. |
3521 // context variables. | 3519 // Parsing them again (and discarding them) does not work in case of |
3522 ParamList discarded_params; | 3520 // default values with same name as already parsed formal parameter. |
3523 ParseFormalParameterList(allow_explicit_default_values, | 3521 SkipToMatchingParenthesis(); |
3524 false, | |
3525 &discarded_params); | |
3526 } | 3522 } |
3527 } else if (func.IsAsyncGenClosure()) { | 3523 } else if (func.IsAsyncGenClosure()) { |
3528 AddAsyncGenClosureParameters(¶ms); | 3524 AddAsyncGenClosureParameters(¶ms); |
3529 SetupDefaultsForOptionalParams(params); | 3525 SetupDefaultsForOptionalParams(params); |
3530 AddFormalParamsToScope(¶ms, current_block_->scope); | 3526 AddFormalParamsToScope(¶ms, current_block_->scope); |
3531 ASSERT(AbstractType::Handle(Z, func.result_type()).IsResolved()); | 3527 ASSERT(AbstractType::Handle(Z, func.result_type()).IsResolved()); |
3532 ASSERT(func.NumParameters() == params.parameters->length()); | 3528 ASSERT(func.NumParameters() == params.parameters->length()); |
3533 if (!Function::Handle(func.parent_function()).IsGetterFunction()) { | 3529 if (!Function::Handle(func.parent_function()).IsGetterFunction()) { |
3534 // Parse and discard any formal parameters. They are accessed as | 3530 // Skip formal parameters. They are accessed as context variables. |
3535 // context variables. | 3531 // Parsing them again (and discarding them) does not work in case of |
3536 ParamList discarded_params; | 3532 // default values with same name as already parsed formal parameter. |
3537 ParseFormalParameterList(allow_explicit_default_values, | 3533 SkipToMatchingParenthesis(); |
3538 false, | |
3539 &discarded_params); | |
3540 } | 3534 } |
3541 } else { | 3535 } else { |
3542 ParseFormalParameterList(allow_explicit_default_values, false, ¶ms); | 3536 ParseFormalParameterList(allow_explicit_default_values, false, ¶ms); |
3543 | 3537 |
3544 // The number of parameters and their type are not yet set in local | 3538 // The number of parameters and their type are not yet set in local |
3545 // functions, since they are not 'top-level' parsed. | 3539 // functions, since they are not 'top-level' parsed. |
3546 // However, they are already set when the local function is compiled, since | 3540 // However, they are already set when the local function is compiled, since |
3547 // the local function was parsed when its parent was compiled. | 3541 // the local function was parsed when its parent was compiled. |
3548 if (func.parameter_types() == Object::empty_array().raw()) { | 3542 if (func.parameter_types() == Object::empty_array().raw()) { |
3549 AddFormalParamsToFunction(¶ms, func); | 3543 AddFormalParamsToFunction(¶ms, func); |
(...skipping 11145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
14695 | 14689 |
14696 | 14690 |
14697 void Parser::SkipFunctionLiteral() { | 14691 void Parser::SkipFunctionLiteral() { |
14698 if (IsIdentifier()) { | 14692 if (IsIdentifier()) { |
14699 if (LookaheadToken(1) != Token::kLPAREN) { | 14693 if (LookaheadToken(1) != Token::kLPAREN) { |
14700 SkipType(true); | 14694 SkipType(true); |
14701 } | 14695 } |
14702 ExpectIdentifier("function name expected"); | 14696 ExpectIdentifier("function name expected"); |
14703 } | 14697 } |
14704 if (CurrentToken() == Token::kLPAREN) { | 14698 if (CurrentToken() == Token::kLPAREN) { |
14705 const bool allow_explicit_default_values = true; | 14699 SkipToMatchingParenthesis(); |
14706 ParamList params; | |
14707 params.skipped = true; | |
14708 ParseFormalParameterList(allow_explicit_default_values, false, ¶ms); | |
14709 } | 14700 } |
14710 RawFunction::AsyncModifier async_modifier = ParseFunctionModifier(); | 14701 RawFunction::AsyncModifier async_modifier = ParseFunctionModifier(); |
14711 BoolScope allow_await(&this->await_is_keyword_, | 14702 BoolScope allow_await(&this->await_is_keyword_, |
14712 async_modifier != RawFunction::kNoModifier); | 14703 async_modifier != RawFunction::kNoModifier); |
14713 if (CurrentToken() == Token::kLBRACE) { | 14704 if (CurrentToken() == Token::kLBRACE) { |
14714 SkipBlock(); | 14705 SkipBlock(); |
14715 ExpectToken(Token::kRBRACE); | 14706 ExpectToken(Token::kRBRACE); |
14716 } else if (CurrentToken() == Token::kARROW) { | 14707 } else if (CurrentToken() == Token::kARROW) { |
14717 ConsumeToken(); | 14708 ConsumeToken(); |
14718 SkipExpr(); | 14709 SkipExpr(); |
(...skipping 435 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
15154 const ArgumentListNode& function_args, | 15145 const ArgumentListNode& function_args, |
15155 const LocalVariable* temp_for_last_arg, | 15146 const LocalVariable* temp_for_last_arg, |
15156 bool is_super_invocation) { | 15147 bool is_super_invocation) { |
15157 UNREACHABLE(); | 15148 UNREACHABLE(); |
15158 return NULL; | 15149 return NULL; |
15159 } | 15150 } |
15160 | 15151 |
15161 } // namespace dart | 15152 } // namespace dart |
15162 | 15153 |
15163 #endif // DART_PRECOMPILED_RUNTIME | 15154 #endif // DART_PRECOMPILED_RUNTIME |
OLD | NEW |