| 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 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 177 {'modifier': element.asyncMarker}); | 177 {'modifier': element.asyncMarker}); |
| 178 } | 178 } |
| 179 if (functionExpression.body.asReturn() != null && | 179 if (functionExpression.body.asReturn() != null && |
| 180 element.asyncMarker.isYielding) { | 180 element.asyncMarker.isYielding) { |
| 181 reporter.reportErrorMessage( | 181 reporter.reportErrorMessage( |
| 182 asyncModifier, | 182 asyncModifier, |
| 183 MessageKind.YIELDING_MODIFIER_ON_ARROW_BODY, | 183 MessageKind.YIELDING_MODIFIER_ON_ARROW_BODY, |
| 184 {'modifier': element.asyncMarker}); | 184 {'modifier': element.asyncMarker}); |
| 185 } | 185 } |
| 186 } | 186 } |
| 187 ClassElement cls; |
| 187 switch (element.asyncMarker) { | 188 switch (element.asyncMarker) { |
| 188 case AsyncMarker.ASYNC: | 189 case AsyncMarker.ASYNC: |
| 189 registry.registerFeature(Feature.ASYNC); | 190 registry.registerFeature(Feature.ASYNC); |
| 190 commonElements.futureClass.ensureResolved(resolution); | 191 cls = commonElements.futureClass; |
| 191 break; | 192 break; |
| 192 case AsyncMarker.ASYNC_STAR: | 193 case AsyncMarker.ASYNC_STAR: |
| 193 registry.registerFeature(Feature.ASYNC_STAR); | 194 registry.registerFeature(Feature.ASYNC_STAR); |
| 194 commonElements.streamClass.ensureResolved(resolution); | 195 cls = commonElements.streamClass; |
| 195 break; | 196 break; |
| 196 case AsyncMarker.SYNC_STAR: | 197 case AsyncMarker.SYNC_STAR: |
| 197 registry.registerFeature(Feature.SYNC_STAR); | 198 registry.registerFeature(Feature.SYNC_STAR); |
| 198 commonElements.iterableClass.ensureResolved(resolution); | 199 cls = commonElements.iterableClass; |
| 199 break; | 200 break; |
| 200 } | 201 } |
| 202 cls?.ensureResolved(resolution); |
| 201 } | 203 } |
| 202 } | 204 } |
| 203 } | 205 } |
| 204 | 206 |
| 205 bool _isNativeClassOrExtendsNativeClass(ClassElement classElement) { | 207 bool _isNativeClassOrExtendsNativeClass(ClassElement classElement) { |
| 206 assert(classElement != null); | 208 assert(classElement != null); |
| 207 while (classElement != null) { | 209 while (classElement != null) { |
| 208 if (target.isNative(classElement)) return true; | 210 if (target.isNative(classElement)) return true; |
| 209 classElement = classElement.superclass; | 211 classElement = classElement.superclass; |
| 210 } | 212 } |
| (...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 534 * called by [resolveClass] and [ClassSupertypeResolver]. | 536 * called by [resolveClass] and [ClassSupertypeResolver]. |
| 535 */ | 537 */ |
| 536 void loadSupertypes(BaseClassElementX cls, Spannable from) { | 538 void loadSupertypes(BaseClassElementX cls, Spannable from) { |
| 537 measure(() { | 539 measure(() { |
| 538 if (cls.supertypeLoadState == STATE_DONE) return; | 540 if (cls.supertypeLoadState == STATE_DONE) return; |
| 539 if (cls.supertypeLoadState == STATE_STARTED) { | 541 if (cls.supertypeLoadState == STATE_STARTED) { |
| 540 reporter.reportErrorMessage( | 542 reporter.reportErrorMessage( |
| 541 from, MessageKind.CYCLIC_CLASS_HIERARCHY, {'className': cls.name}); | 543 from, MessageKind.CYCLIC_CLASS_HIERARCHY, {'className': cls.name}); |
| 542 cls.supertypeLoadState = STATE_DONE; | 544 cls.supertypeLoadState = STATE_DONE; |
| 543 cls.hasIncompleteHierarchy = true; | 545 cls.hasIncompleteHierarchy = true; |
| 544 cls.allSupertypesAndSelf = commonElements | 546 ClassElement objectClass = commonElements.objectClass; |
| 545 .objectClass.allSupertypesAndSelf | 547 cls.allSupertypesAndSelf = objectClass.allSupertypesAndSelf |
| 546 .extendClass(cls.computeType(resolution)); | 548 .extendClass(cls.computeType(resolution)); |
| 547 cls.supertype = cls.allSupertypes.head; | 549 cls.supertype = cls.allSupertypes.head; |
| 548 assert(invariant(from, cls.supertype != null, | 550 assert(invariant(from, cls.supertype != null, |
| 549 message: 'Missing supertype on cyclic class $cls.')); | 551 message: 'Missing supertype on cyclic class $cls.')); |
| 550 cls.interfaces = const Link<ResolutionDartType>(); | 552 cls.interfaces = const Link<ResolutionDartType>(); |
| 551 return; | 553 return; |
| 552 } | 554 } |
| 553 cls.supertypeLoadState = STATE_STARTED; | 555 cls.supertypeLoadState = STATE_STARTED; |
| 554 reporter.withCurrentElement(cls, () { | 556 reporter.withCurrentElement(cls, () { |
| 555 // TODO(ahe): Cache the node in cls. | 557 // TODO(ahe): Cache the node in cls. |
| (...skipping 582 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1138 TreeElements get treeElements { | 1140 TreeElements get treeElements { |
| 1139 assert(invariant(this, _treeElements != null, | 1141 assert(invariant(this, _treeElements != null, |
| 1140 message: "TreeElements have not been computed for $this.")); | 1142 message: "TreeElements have not been computed for $this.")); |
| 1141 return _treeElements; | 1143 return _treeElements; |
| 1142 } | 1144 } |
| 1143 | 1145 |
| 1144 void reuseElement() { | 1146 void reuseElement() { |
| 1145 _treeElements = null; | 1147 _treeElements = null; |
| 1146 } | 1148 } |
| 1147 } | 1149 } |
| OLD | NEW |