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 library dart2js.resolution.members; | 5 library dart2js.resolution.members; |
6 | 6 |
7 import '../common.dart'; | 7 import '../common.dart'; |
8 import '../common/names.dart' show | 8 import '../common/names.dart' show |
9 Selectors; | 9 Selectors; |
10 import '../common/resolution.dart' show | 10 import '../common/resolution.dart' show |
(...skipping 3669 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3680 node, | 3680 node, |
3681 MessageKind.RETURN_IN_GENERATOR, | 3681 MessageKind.RETURN_IN_GENERATOR, |
3682 {'modifier': currentAsyncMarker}); | 3682 {'modifier': currentAsyncMarker}); |
3683 } | 3683 } |
3684 } | 3684 } |
3685 visit(node.expression); | 3685 visit(node.expression); |
3686 return const NoneResult(); | 3686 return const NoneResult(); |
3687 } | 3687 } |
3688 | 3688 |
3689 ResolutionResult visitYield(Yield node) { | 3689 ResolutionResult visitYield(Yield node) { |
3690 coreClasses.streamClass.ensureResolved(resolution); | 3690 if (!currentAsyncMarker.isYielding) { |
3691 coreClasses.iterableClass.ensureResolved(resolution); | 3691 reporter.reportErrorMessage(node, MessageKind.INVALID_YIELD); |
| 3692 } |
| 3693 if (currentAsyncMarker.isAsync) { |
| 3694 coreClasses.streamClass.ensureResolved(resolution); |
| 3695 } else { |
| 3696 coreClasses.iterableClass.ensureResolved(resolution); |
| 3697 } |
3692 visit(node.expression); | 3698 visit(node.expression); |
3693 return const NoneResult(); | 3699 return const NoneResult(); |
3694 } | 3700 } |
3695 | 3701 |
3696 ResolutionResult visitRedirectingFactoryBody(RedirectingFactoryBody node) { | 3702 ResolutionResult visitRedirectingFactoryBody(RedirectingFactoryBody node) { |
3697 if (!enclosingElement.isFactoryConstructor) { | 3703 if (!enclosingElement.isFactoryConstructor) { |
3698 reporter.reportErrorMessage( | 3704 reporter.reportErrorMessage( |
3699 node, MessageKind.FACTORY_REDIRECTION_IN_NON_FACTORY); | 3705 node, MessageKind.FACTORY_REDIRECTION_IN_NON_FACTORY); |
3700 reporter.reportHintMessage( | 3706 reporter.reportHintMessage( |
3701 enclosingElement, MessageKind.MISSING_FACTORY_KEYWORD); | 3707 enclosingElement, MessageKind.MISSING_FACTORY_KEYWORD); |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3818 return const NoneResult(); | 3824 return const NoneResult(); |
3819 } | 3825 } |
3820 | 3826 |
3821 ResolutionResult visitThrow(Throw node) { | 3827 ResolutionResult visitThrow(Throw node) { |
3822 registry.registerFeature(Feature.THROW_EXPRESSION); | 3828 registry.registerFeature(Feature.THROW_EXPRESSION); |
3823 visit(node.expression); | 3829 visit(node.expression); |
3824 return const NoneResult(); | 3830 return const NoneResult(); |
3825 } | 3831 } |
3826 | 3832 |
3827 ResolutionResult visitAwait(Await node) { | 3833 ResolutionResult visitAwait(Await node) { |
| 3834 if (!currentAsyncMarker.isAsync) { |
| 3835 reporter.reportErrorMessage(node, MessageKind.INVALID_AWAIT); |
| 3836 } |
3828 coreClasses.futureClass.ensureResolved(resolution); | 3837 coreClasses.futureClass.ensureResolved(resolution); |
3829 visit(node.expression); | 3838 visit(node.expression); |
3830 return const NoneResult(); | 3839 return const NoneResult(); |
3831 } | 3840 } |
3832 | 3841 |
3833 ResolutionResult visitVariableDefinitions(VariableDefinitions node) { | 3842 ResolutionResult visitVariableDefinitions(VariableDefinitions node) { |
3834 DartType type; | 3843 DartType type; |
3835 if (node.type != null) { | 3844 if (node.type != null) { |
3836 type = resolveTypeAnnotation(node.type); | 3845 type = resolveTypeAnnotation(node.type); |
3837 } else { | 3846 } else { |
(...skipping 505 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4343 } | 4352 } |
4344 registry.registerTargetOf(node, target); | 4353 registry.registerTargetOf(node, target); |
4345 return const NoneResult(); | 4354 return const NoneResult(); |
4346 } | 4355 } |
4347 | 4356 |
4348 registerImplicitInvocation(Selector selector) { | 4357 registerImplicitInvocation(Selector selector) { |
4349 registry.registerDynamicUse(new DynamicUse(selector, null)); | 4358 registry.registerDynamicUse(new DynamicUse(selector, null)); |
4350 } | 4359 } |
4351 | 4360 |
4352 ResolutionResult visitAsyncForIn(AsyncForIn node) { | 4361 ResolutionResult visitAsyncForIn(AsyncForIn node) { |
| 4362 if (!currentAsyncMarker.isAsync) { |
| 4363 reporter.reportErrorMessage( |
| 4364 node.awaitToken, MessageKind.INVALID_AWAIT_FOR_IN); |
| 4365 } |
4353 registry.registerFeature(Feature.ASYNC_FOR_IN); | 4366 registry.registerFeature(Feature.ASYNC_FOR_IN); |
4354 registry.registerDynamicUse( | 4367 registry.registerDynamicUse( |
4355 new DynamicUse(Selectors.current, null)); | 4368 new DynamicUse(Selectors.current, null)); |
4356 registry.registerDynamicUse( | 4369 registry.registerDynamicUse( |
4357 new DynamicUse(Selectors.moveNext, null)); | 4370 new DynamicUse(Selectors.moveNext, null)); |
4358 | 4371 |
4359 visit(node.expression); | 4372 visit(node.expression); |
4360 | 4373 |
4361 Scope blockScope = new BlockScope(scope); | 4374 Scope blockScope = new BlockScope(scope); |
4362 visitForInDeclaredIdentifierIn(node.declaredIdentifier, node, blockScope); | 4375 visitForInDeclaredIdentifierIn(node.declaredIdentifier, node, blockScope); |
(...skipping 488 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4851 } | 4864 } |
4852 return const NoneResult(); | 4865 return const NoneResult(); |
4853 } | 4866 } |
4854 } | 4867 } |
4855 | 4868 |
4856 /// Looks up [name] in [scope] and unwraps the result. | 4869 /// Looks up [name] in [scope] and unwraps the result. |
4857 Element lookupInScope(DiagnosticReporter reporter, Node node, | 4870 Element lookupInScope(DiagnosticReporter reporter, Node node, |
4858 Scope scope, String name) { | 4871 Scope scope, String name) { |
4859 return Elements.unwrap(scope.lookup(name), reporter, node); | 4872 return Elements.unwrap(scope.lookup(name), reporter, node); |
4860 } | 4873 } |
OLD | NEW |