Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(285)

Side by Side Diff: pkg/compiler/lib/src/resolution/resolution.dart

Issue 1918903004: Make support for async/await syntax optional in the frontend. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Add todo Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/resolution/members.dart ('k') | pkg/compiler/lib/src/serialization/modelz.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698