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

Side by Side Diff: pkg/kernel/lib/transformations/continuation.dart

Issue 2949533003: Revert "Proper sequencing of _asyncStackTraceHelper in Kernel" (Closed)
Patch Set: Created 3 years, 6 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
« no previous file with comments | « pkg/kernel/lib/core_types.dart ('k') | runtime/lib/stacktrace.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, 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 kernel.transformations.continuation; 5 library kernel.transformations.continuation;
6 6
7 import 'dart:math' as math; 7 import 'dart:math' as math;
8 8
9 import '../ast.dart'; 9 import '../ast.dart';
10 import '../core_types.dart'; 10 import '../core_types.dart';
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 // sync* functions cannot return a value. 208 // sync* functions cannot return a value.
209 assert(node.expression == null || node.expression is NullLiteral); 209 assert(node.expression == null || node.expression is NullLiteral);
210 node.expression = new BoolLiteral(false)..parent = node; 210 node.expression = new BoolLiteral(false)..parent = node;
211 return node; 211 return node;
212 } 212 }
213 } 213 }
214 214
215 abstract class AsyncRewriterBase extends ContinuationRewriterBase { 215 abstract class AsyncRewriterBase extends ContinuationRewriterBase {
216 final VariableDeclaration nestedClosureVariable = 216 final VariableDeclaration nestedClosureVariable =
217 new VariableDeclaration(":async_op"); 217 new VariableDeclaration(":async_op");
218 final VariableDeclaration stackTraceVariable =
219 new VariableDeclaration(":async_stack_trace");
220 final VariableDeclaration thenContinuationVariable = 218 final VariableDeclaration thenContinuationVariable =
221 new VariableDeclaration(":async_op_then"); 219 new VariableDeclaration(":async_op_then");
222 final VariableDeclaration catchErrorContinuationVariable = 220 final VariableDeclaration catchErrorContinuationVariable =
223 new VariableDeclaration(":async_op_error"); 221 new VariableDeclaration(":async_op_error");
224 222
225 LabeledStatement labeledBody; 223 LabeledStatement labeledBody;
226 224
227 ExpressionLifter expressionRewriter; 225 ExpressionLifter expressionRewriter;
228 226
229 AsyncRewriterBase(helper, enclosingFunction) 227 AsyncRewriterBase(helper, enclosingFunction)
230 : super(helper, enclosingFunction) {} 228 : super(helper, enclosingFunction) {}
231 229
232 void setupAsyncContinuations(List<Statement> statements) { 230 void setupAsyncContinuations(List<Statement> statements) {
233 expressionRewriter = new ExpressionLifter(this); 231 expressionRewriter = new ExpressionLifter(this);
234 232
235 // var :async_stack_trace;
236 statements.add(stackTraceVariable);
237
238 // var :async_op_then; 233 // var :async_op_then;
239 statements.add(thenContinuationVariable); 234 statements.add(thenContinuationVariable);
240 235
241 // var :async_op_error; 236 // var :async_op_error;
242 statements.add(catchErrorContinuationVariable); 237 statements.add(catchErrorContinuationVariable);
243 238
244 // :async_op([:result, :exception, :stack_trace]) { 239 // :async_op([:result, :exception, :stack_trace]) {
245 // modified <node.body>; 240 // modified <node.body>;
246 // } 241 // }
247 final parameters = <VariableDeclaration>[ 242 final parameters = <VariableDeclaration>[
(...skipping 19 matching lines...) Expand all
267 // these. 262 // these.
268 statements.addAll(variableDeclarations()); 263 statements.addAll(variableDeclarations());
269 statements.addAll(expressionRewriter.variables); 264 statements.addAll(expressionRewriter.variables);
270 265
271 // Now add the closure function itself. 266 // Now add the closure function itself.
272 final closureFunction = 267 final closureFunction =
273 new FunctionDeclaration(nestedClosureVariable, function) 268 new FunctionDeclaration(nestedClosureVariable, function)
274 ..fileOffset = enclosingFunction.parent.fileOffset; 269 ..fileOffset = enclosingFunction.parent.fileOffset;
275 statements.add(closureFunction); 270 statements.add(closureFunction);
276 271
277 // :async_stack_trace = _asyncStackTraceHelper(asyncBody);
278 final stackTrace = new StaticInvocation(helper.asyncStackTraceHelper,
279 new Arguments(<Expression>[new VariableGet(nestedClosureVariable)]));
280 final stackTraceAssign = new ExpressionStatement(
281 new VariableSet(stackTraceVariable, stackTrace));
282 statements.add(stackTraceAssign);
283
284 // :async_op_then = _asyncThenWrapperHelper(asyncBody); 272 // :async_op_then = _asyncThenWrapperHelper(asyncBody);
285 final boundThenClosure = new StaticInvocation(helper.asyncThenWrapper, 273 final boundThenClosure = new StaticInvocation(helper.asyncThenWrapper,
286 new Arguments(<Expression>[new VariableGet(nestedClosureVariable)])); 274 new Arguments(<Expression>[new VariableGet(nestedClosureVariable)]));
287 final thenClosureVariableAssign = new ExpressionStatement( 275 final thenClosureVariableAssign = new ExpressionStatement(
288 new VariableSet(thenContinuationVariable, boundThenClosure)); 276 new VariableSet(thenContinuationVariable, boundThenClosure));
289 statements.add(thenClosureVariableAssign); 277 statements.add(thenClosureVariableAssign);
290 278
291 // :async_op_error = _asyncErrorWrapperHelper(asyncBody); 279 // :async_op_error = _asyncErrorWrapperHelper(asyncBody);
292 final boundCatchErrorClosure = new StaticInvocation( 280 final boundCatchErrorClosure = new StaticInvocation(
293 helper.asyncErrorWrapper, 281 helper.asyncErrorWrapper,
(...skipping 616 matching lines...) Expand 10 before | Expand all | Expand 10 after
910 final Class iteratorClass; 898 final Class iteratorClass;
911 final Class futureClass; 899 final Class futureClass;
912 final Class futureOrClass; 900 final Class futureOrClass;
913 final Class completerClass; 901 final Class completerClass;
914 final Procedure printProcedure; 902 final Procedure printProcedure;
915 final Procedure completerConstructor; 903 final Procedure completerConstructor;
916 final Procedure futureMicrotaskConstructor; 904 final Procedure futureMicrotaskConstructor;
917 final Constructor streamControllerConstructor; 905 final Constructor streamControllerConstructor;
918 final Constructor syncIterableConstructor; 906 final Constructor syncIterableConstructor;
919 final Constructor streamIteratorConstructor; 907 final Constructor streamIteratorConstructor;
920 final Procedure asyncStackTraceHelper;
921 final Procedure asyncThenWrapper; 908 final Procedure asyncThenWrapper;
922 final Procedure asyncErrorWrapper; 909 final Procedure asyncErrorWrapper;
923 final Procedure awaitHelper; 910 final Procedure awaitHelper;
924 final CoreTypes coreTypes; 911 final CoreTypes coreTypes;
925 912
926 HelperNodes( 913 HelperNodes(
927 this.asyncLibrary, 914 this.asyncLibrary,
928 this.coreLibrary, 915 this.coreLibrary,
929 this.iteratorClass, 916 this.iteratorClass,
930 this.futureClass, 917 this.futureClass,
931 this.futureOrClass, 918 this.futureOrClass,
932 this.completerClass, 919 this.completerClass,
933 this.printProcedure, 920 this.printProcedure,
934 this.completerConstructor, 921 this.completerConstructor,
935 this.syncIterableConstructor, 922 this.syncIterableConstructor,
936 this.streamIteratorConstructor, 923 this.streamIteratorConstructor,
937 this.futureMicrotaskConstructor, 924 this.futureMicrotaskConstructor,
938 this.streamControllerConstructor, 925 this.streamControllerConstructor,
939 this.asyncStackTraceHelper,
940 this.asyncThenWrapper, 926 this.asyncThenWrapper,
941 this.asyncErrorWrapper, 927 this.asyncErrorWrapper,
942 this.awaitHelper, 928 this.awaitHelper,
943 this.coreTypes); 929 this.coreTypes);
944 930
945 factory HelperNodes.fromCoreTypes(CoreTypes coreTypes) { 931 factory HelperNodes.fromCoreTypes(CoreTypes coreTypes) {
946 return new HelperNodes( 932 return new HelperNodes(
947 coreTypes.asyncLibrary, 933 coreTypes.asyncLibrary,
948 coreTypes.coreLibrary, 934 coreTypes.coreLibrary,
949 coreTypes.iteratorClass, 935 coreTypes.iteratorClass,
950 coreTypes.futureClass, 936 coreTypes.futureClass,
951 coreTypes.futureOrClass, 937 coreTypes.futureOrClass,
952 coreTypes.completerClass, 938 coreTypes.completerClass,
953 coreTypes.printProcedure, 939 coreTypes.printProcedure,
954 coreTypes.completerSyncConstructor, 940 coreTypes.completerSyncConstructor,
955 coreTypes.syncIterableDefaultConstructor, 941 coreTypes.syncIterableDefaultConstructor,
956 coreTypes.streamIteratorDefaultConstructor, 942 coreTypes.streamIteratorDefaultConstructor,
957 coreTypes.futureMicrotaskConstructor, 943 coreTypes.futureMicrotaskConstructor,
958 coreTypes.asyncStarStreamControllerDefaultConstructor, 944 coreTypes.asyncStarStreamControllerDefaultConstructor,
959 coreTypes.asyncStackTraceHelperProcedure,
960 coreTypes.asyncThenWrapperHelperProcedure, 945 coreTypes.asyncThenWrapperHelperProcedure,
961 coreTypes.asyncErrorWrapperHelperProcedure, 946 coreTypes.asyncErrorWrapperHelperProcedure,
962 coreTypes.awaitHelperProcedure, 947 coreTypes.awaitHelperProcedure,
963 coreTypes); 948 coreTypes);
964 } 949 }
965 } 950 }
OLDNEW
« no previous file with comments | « pkg/kernel/lib/core_types.dart ('k') | runtime/lib/stacktrace.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698