| 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; | 5 library dart2js.resolution; |
| 6 | 6 |
| 7 import 'dart:collection' show Queue; | 7 import 'dart:collection' show Queue; |
| 8 | 8 |
| 9 import '../common.dart'; | 9 import '../common.dart'; |
| 10 import '../common/names.dart' show Identifiers; | 10 import '../common/names.dart' show Identifiers; |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 136 } | 136 } |
| 137 | 137 |
| 138 static void processAsyncMarker(Compiler compiler, | 138 static void processAsyncMarker(Compiler compiler, |
| 139 BaseFunctionElementX element, ResolutionRegistry registry) { | 139 BaseFunctionElementX element, ResolutionRegistry registry) { |
| 140 DiagnosticReporter reporter = compiler.reporter; | 140 DiagnosticReporter reporter = compiler.reporter; |
| 141 Resolution resolution = compiler.resolution; | 141 Resolution resolution = compiler.resolution; |
| 142 CoreClasses coreClasses = compiler.coreClasses; | 142 CoreClasses coreClasses = compiler.coreClasses; |
| 143 FunctionExpression functionExpression = element.node; | 143 FunctionExpression functionExpression = element.node; |
| 144 AsyncModifier asyncModifier = functionExpression.asyncModifier; | 144 AsyncModifier asyncModifier = functionExpression.asyncModifier; |
| 145 if (asyncModifier != null) { | 145 if (asyncModifier != null) { |
| 146 if (asyncModifier.isAsynchronous) { | 146 if (!compiler.backend.supportsAsyncAwait) { |
| 147 element.asyncMarker = asyncModifier.isYielding | 147 reporter.reportErrorMessage(functionExpression.asyncModifier, |
| 148 ? AsyncMarker.ASYNC_STAR | 148 MessageKind.ASYNC_AWAIT_NOT_SUPPORTED); |
| 149 : AsyncMarker.ASYNC; | |
| 150 } else { | 149 } else { |
| 151 element.asyncMarker = AsyncMarker.SYNC_STAR; | 150 if (asyncModifier.isAsynchronous) { |
| 152 } | 151 element.asyncMarker = asyncModifier.isYielding |
| 153 if (element.isAbstract) { | 152 ? AsyncMarker.ASYNC_STAR |
| 154 reporter.reportErrorMessage( | 153 : AsyncMarker.ASYNC; |
| 155 asyncModifier, | 154 } else { |
| 156 MessageKind.ASYNC_MODIFIER_ON_ABSTRACT_METHOD, | 155 element.asyncMarker = AsyncMarker.SYNC_STAR; |
| 157 {'modifier': element.asyncMarker}); | 156 } |
| 158 } else if (element.isConstructor) { | 157 if (element.isAbstract) { |
| 159 reporter.reportErrorMessage( | |
| 160 asyncModifier, | |
| 161 MessageKind.ASYNC_MODIFIER_ON_CONSTRUCTOR, | |
| 162 {'modifier': element.asyncMarker}); | |
| 163 } else { | |
| 164 if (element.isSetter) { | |
| 165 reporter.reportErrorMessage( | 158 reporter.reportErrorMessage( |
| 166 asyncModifier, | 159 asyncModifier, |
| 167 MessageKind.ASYNC_MODIFIER_ON_SETTER, | 160 MessageKind.ASYNC_MODIFIER_ON_ABSTRACT_METHOD, |
| 168 {'modifier': element.asyncMarker}); | 161 {'modifier': element.asyncMarker}); |
| 169 } | 162 } else if (element.isConstructor) { |
| 170 if (functionExpression.body.asReturn() != null && | |
| 171 element.asyncMarker.isYielding) { | |
| 172 reporter.reportErrorMessage( | 163 reporter.reportErrorMessage( |
| 173 asyncModifier, | 164 asyncModifier, |
| 174 MessageKind.YIELDING_MODIFIER_ON_ARROW_BODY, | 165 MessageKind.ASYNC_MODIFIER_ON_CONSTRUCTOR, |
| 175 {'modifier': element.asyncMarker}); | 166 {'modifier': element.asyncMarker}); |
| 167 } else { |
| 168 if (element.isSetter) { |
| 169 reporter.reportErrorMessage( |
| 170 asyncModifier, |
| 171 MessageKind.ASYNC_MODIFIER_ON_SETTER, |
| 172 {'modifier': element.asyncMarker}); |
| 173 } |
| 174 if (functionExpression.body.asReturn() != null && |
| 175 element.asyncMarker.isYielding) { |
| 176 reporter.reportErrorMessage( |
| 177 asyncModifier, |
| 178 MessageKind.YIELDING_MODIFIER_ON_ARROW_BODY, |
| 179 {'modifier': element.asyncMarker}); |
| 180 } |
| 176 } | 181 } |
| 177 } | 182 switch (element.asyncMarker) { |
| 178 switch (element.asyncMarker) { | 183 case AsyncMarker.ASYNC: |
| 179 case AsyncMarker.ASYNC: | 184 registry.registerFeature(Feature.ASYNC); |
| 180 registry.registerFeature(Feature.ASYNC); | 185 coreClasses.futureClass.ensureResolved(resolution); |
| 181 coreClasses.futureClass.ensureResolved(resolution); | 186 break; |
| 182 break; | 187 case AsyncMarker.ASYNC_STAR: |
| 183 case AsyncMarker.ASYNC_STAR: | 188 registry.registerFeature(Feature.ASYNC_STAR); |
| 184 registry.registerFeature(Feature.ASYNC_STAR); | 189 coreClasses.streamClass.ensureResolved(resolution); |
| 185 coreClasses.streamClass.ensureResolved(resolution); | 190 break; |
| 186 break; | 191 case AsyncMarker.SYNC_STAR: |
| 187 case AsyncMarker.SYNC_STAR: | 192 registry.registerFeature(Feature.SYNC_STAR); |
| 188 registry.registerFeature(Feature.SYNC_STAR); | 193 coreClasses.iterableClass.ensureResolved(resolution); |
| 189 coreClasses.iterableClass.ensureResolved(resolution); | 194 break; |
| 190 break; | 195 } |
| 191 } | 196 } |
| 192 } | 197 } |
| 193 } | 198 } |
| 194 | 199 |
| 195 bool _isNativeClassOrExtendsNativeClass(ClassElement classElement) { | 200 bool _isNativeClassOrExtendsNativeClass(ClassElement classElement) { |
| 196 assert(classElement != null); | 201 assert(classElement != null); |
| 197 while (classElement != null) { | 202 while (classElement != null) { |
| 198 if (compiler.backend.isNative(classElement)) return true; | 203 if (compiler.backend.isNative(classElement)) return true; |
| 199 classElement = classElement.superclass; | 204 classElement = classElement.superclass; |
| 200 } | 205 } |
| (...skipping 889 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1090 TreeElements get treeElements { | 1095 TreeElements get treeElements { |
| 1091 assert(invariant(this, _treeElements != null, | 1096 assert(invariant(this, _treeElements != null, |
| 1092 message: "TreeElements have not been computed for $this.")); | 1097 message: "TreeElements have not been computed for $this.")); |
| 1093 return _treeElements; | 1098 return _treeElements; |
| 1094 } | 1099 } |
| 1095 | 1100 |
| 1096 void reuseElement() { | 1101 void reuseElement() { |
| 1097 _treeElements = null; | 1102 _treeElements = null; |
| 1098 } | 1103 } |
| 1099 } | 1104 } |
| OLD | NEW |