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

Side by Side Diff: pkg/front_end/lib/src/fasta/kernel/body_builder.dart

Issue 3003863002: [kernel] Position on switch expression (Closed)
Patch Set: Created 3 years, 3 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) 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 fasta.body_builder; 5 library fasta.body_builder;
6 6
7 import 'package:kernel/ast.dart' 7 import 'package:kernel/ast.dart'
8 hide InvalidExpression, InvalidInitializer, InvalidStatement; 8 hide InvalidExpression, InvalidInitializer, InvalidStatement;
9 9
10 import 'package:kernel/class_hierarchy.dart' show ClassHierarchy; 10 import 'package:kernel/class_hierarchy.dart' show ClassHierarchy;
(...skipping 2844 matching lines...) Expand 10 before | Expand all | Expand 10 after
2855 push(labels); 2855 push(labels);
2856 } 2856 }
2857 2857
2858 @override 2858 @override
2859 void endSwitchStatement(Token switchKeyword, Token endToken) { 2859 void endSwitchStatement(Token switchKeyword, Token endToken) {
2860 debugEvent("SwitchStatement"); 2860 debugEvent("SwitchStatement");
2861 // Do nothing. Handled by [endSwitchBlock]. 2861 // Do nothing. Handled by [endSwitchBlock].
2862 } 2862 }
2863 2863
2864 @override 2864 @override
2865 void endSwitchBlock(int caseCount, Token beginToken, Token endToken) { 2865 void endSwitchBlock(
2866 int caseCount, Token beginToken, Token endToken, Token switchKeyword) {
2866 debugEvent("SwitchBlock"); 2867 debugEvent("SwitchBlock");
2867 List<SwitchCase> cases = 2868 List<SwitchCase> cases =
2868 new List<SwitchCase>.filled(caseCount, null, growable: true); 2869 new List<SwitchCase>.filled(caseCount, null, growable: true);
2869 for (int i = caseCount - 1; i >= 0; i--) { 2870 for (int i = caseCount - 1; i >= 0; i--) {
2870 List<Label> labels = pop(); 2871 List<Label> labels = pop();
2871 SwitchCase current = cases[i] = pop(); 2872 SwitchCase current = cases[i] = pop();
2872 for (Label label in labels) { 2873 for (Label label in labels) {
2873 JumpTarget target = switchScope.lookupLabel(label.name); 2874 JumpTarget target = switchScope.lookupLabel(label.name);
2874 if (target != null) { 2875 if (target != null) {
2875 target.resolveGotos(current); 2876 target.resolveGotos(current);
(...skipping 30 matching lines...) Expand all
2906 lastNode is! ReturnStatement && 2907 lastNode is! ReturnStatement &&
2907 lastNode is! Throw) { 2908 lastNode is! Throw) {
2908 block.addStatement( 2909 block.addStatement(
2909 new ExpressionStatement(buildFallThroughError(current.fileOffset))); 2910 new ExpressionStatement(buildFallThroughError(current.fileOffset)));
2910 } 2911 }
2911 } 2912 }
2912 JumpTarget target = exitBreakTarget(); 2913 JumpTarget target = exitBreakTarget();
2913 exitSwitchScope(); 2914 exitSwitchScope();
2914 exitLocalScope(); 2915 exitLocalScope();
2915 Expression expression = popForValue(); 2916 Expression expression = popForValue();
2916 Statement result = new KernelSwitchStatement(expression, cases); 2917 Statement result = new KernelSwitchStatement(expression, cases)
2918 ..fileOffset = switchKeyword.charOffset;
2917 if (target.hasUsers) { 2919 if (target.hasUsers) {
2918 result = new KernelLabeledStatement(result); 2920 result = new KernelLabeledStatement(result);
2919 target.resolveBreaks(result); 2921 target.resolveBreaks(result);
2920 } 2922 }
2921 exitLoopOrSwitch(result); 2923 exitLoopOrSwitch(result);
2922 } 2924 }
2923 2925
2924 @override 2926 @override
2925 void handleCaseMatch(Token caseKeyword, Token colon) { 2927 void handleCaseMatch(Token caseKeyword, Token colon) {
2926 debugEvent("CaseMatch"); 2928 debugEvent("CaseMatch");
(...skipping 891 matching lines...) Expand 10 before | Expand all | Expand 10 after
3818 return AsyncMarker.Async; 3820 return AsyncMarker.Async;
3819 } else { 3821 } else {
3820 assert(identical(starToken.stringValue, "*")); 3822 assert(identical(starToken.stringValue, "*"));
3821 return AsyncMarker.AsyncStar; 3823 return AsyncMarker.AsyncStar;
3822 } 3824 }
3823 } else { 3825 } else {
3824 return unhandled(asyncToken.lexeme, "asyncMarkerFromTokens", 3826 return unhandled(asyncToken.lexeme, "asyncMarkerFromTokens",
3825 asyncToken.charOffset, null); 3827 asyncToken.charOffset, null);
3826 } 3828 }
3827 } 3829 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698