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 4441 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4452 ConsumeToken(); | 4452 ConsumeToken(); |
4453 if (member.has_static) { | 4453 if (member.has_static) { |
4454 ReportError("factory method cannot be explicitly marked static"); | 4454 ReportError("factory method cannot be explicitly marked static"); |
4455 } | 4455 } |
4456 member.has_factory = true; | 4456 member.has_factory = true; |
4457 member.has_static = true; | 4457 member.has_static = true; |
4458 // The result type depends on the name of the factory method. | 4458 // The result type depends on the name of the factory method. |
4459 } | 4459 } |
4460 | 4460 |
4461 // Optionally parse a type. | 4461 // Optionally parse a type. |
4462 if (CurrentToken() == Token::kVOID) { | 4462 bool found_type = false; |
4463 if (member.has_var || member.has_factory) { | 4463 { |
4464 ReportError("void not expected"); | 4464 // Lookahead to determine whether the next tokens are a return type. |
4465 } | 4465 TokenPosScope saved_pos(this); |
4466 ConsumeToken(); | 4466 if (TryParseType(true)) { |
4467 ASSERT(member.type == NULL); | 4467 if (IsIdentifier() || (CurrentToken() == Token::kGET) || |
4468 member.type = &Object::void_type(); | 4468 (CurrentToken() == Token::kSET) || |
4469 } else { | 4469 (CurrentToken() == Token::kOPERATOR)) { |
4470 bool found_type = false; | 4470 found_type = true; |
4471 { | |
4472 // Lookahead to determine whether the next tokens are a return type. | |
4473 TokenPosScope saved_pos(this); | |
4474 if (TryParseType(true)) { | |
4475 if (IsIdentifier() || (CurrentToken() == Token::kGET) || | |
4476 (CurrentToken() == Token::kSET) || | |
4477 (CurrentToken() == Token::kOPERATOR)) { | |
4478 found_type = true; | |
4479 } | |
4480 } | 4471 } |
4481 } | 4472 } |
4482 if (found_type) { | 4473 } |
4483 // It is too early to resolve the type here, since it can be a result type | 4474 if (found_type) { |
4484 // referring to a not yet declared function type parameter. | 4475 // It is too early to resolve the type here, since it can be a result type |
4485 member.type = &AbstractType::ZoneHandle( | 4476 // referring to a not yet declared function type parameter. |
4486 Z, ParseTypeOrFunctionType(false, ClassFinalizer::kDoNotResolve)); | 4477 member.type = &AbstractType::ZoneHandle( |
4487 } | 4478 Z, ParseTypeOrFunctionType(true, ClassFinalizer::kDoNotResolve)); |
4488 } | 4479 } |
4489 | 4480 |
4490 // Optionally parse a (possibly named) constructor name or factory. | 4481 // Optionally parse a (possibly named) constructor name or factory. |
4491 if (IsIdentifier() && | 4482 if (IsIdentifier() && |
4492 (CurrentLiteral()->Equals(members->class_name()) || member.has_factory)) { | 4483 (CurrentLiteral()->Equals(members->class_name()) || member.has_factory)) { |
4493 member.name_pos = TokenPos(); | 4484 member.name_pos = TokenPos(); |
4494 member.name = CurrentLiteral(); // Unqualified identifier. | 4485 member.name = CurrentLiteral(); // Unqualified identifier. |
4495 ConsumeToken(); | 4486 ConsumeToken(); |
4496 if (member.has_factory) { | 4487 if (member.has_factory) { |
4497 // The factory name may be qualified, but the first identifier must match | 4488 // The factory name may be qualified, but the first identifier must match |
(...skipping 10699 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
15197 const ArgumentListNode& function_args, | 15188 const ArgumentListNode& function_args, |
15198 const LocalVariable* temp_for_last_arg, | 15189 const LocalVariable* temp_for_last_arg, |
15199 bool is_super_invocation) { | 15190 bool is_super_invocation) { |
15200 UNREACHABLE(); | 15191 UNREACHABLE(); |
15201 return NULL; | 15192 return NULL; |
15202 } | 15193 } |
15203 | 15194 |
15204 } // namespace dart | 15195 } // namespace dart |
15205 | 15196 |
15206 #endif // DART_PRECOMPILED_RUNTIME | 15197 #endif // DART_PRECOMPILED_RUNTIME |
OLD | NEW |