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

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
« no previous file with comments | « no previous file | pkg/kernel/binary.md » ('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 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 2840 matching lines...) Expand 10 before | Expand all | Expand 10 after
2851 } 2851 }
2852 push(new SwitchCase(expressions, expressionOffsets, block, 2852 push(new SwitchCase(expressions, expressionOffsets, block,
2853 isDefault: defaultKeyword != null) 2853 isDefault: defaultKeyword != null)
2854 ..fileOffset = firstToken.charOffset); 2854 ..fileOffset = firstToken.charOffset);
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
2862 List<SwitchCase> cases = pop();
2863 JumpTarget target = exitBreakTarget();
2864 exitSwitchScope();
2865 exitLocalScope();
2866 Expression expression = popForValue();
2867 Statement result = new KernelSwitchStatement(expression, cases)
2868 ..fileOffset = switchKeyword.charOffset;
2869 if (target.hasUsers) {
2870 result = new KernelLabeledStatement(result);
2871 target.resolveBreaks(result);
2872 }
2873 exitLoopOrSwitch(result);
2862 } 2874 }
2863 2875
2864 @override 2876 @override
2865 void endSwitchBlock(int caseCount, Token beginToken, Token endToken) { 2877 void endSwitchBlock(int caseCount, Token beginToken, Token endToken) {
2866 debugEvent("SwitchBlock"); 2878 debugEvent("SwitchBlock");
2867 List<SwitchCase> cases = 2879 List<SwitchCase> cases =
2868 new List<SwitchCase>.filled(caseCount, null, growable: true); 2880 new List<SwitchCase>.filled(caseCount, null, growable: true);
2869 for (int i = caseCount - 1; i >= 0; i--) { 2881 for (int i = caseCount - 1; i >= 0; i--) {
2870 List<Label> labels = pop(); 2882 List<Label> labels = pop();
2871 SwitchCase current = cases[i] = pop(); 2883 SwitchCase current = cases[i] = pop();
(...skipping 30 matching lines...) Expand all
2902 } 2914 }
2903 if (lastNode is! BreakStatement && 2915 if (lastNode is! BreakStatement &&
2904 lastNode is! ContinueSwitchStatement && 2916 lastNode is! ContinueSwitchStatement &&
2905 lastNode is! Rethrow && 2917 lastNode is! Rethrow &&
2906 lastNode is! ReturnStatement && 2918 lastNode is! ReturnStatement &&
2907 lastNode is! Throw) { 2919 lastNode is! Throw) {
2908 block.addStatement( 2920 block.addStatement(
2909 new ExpressionStatement(buildFallThroughError(current.fileOffset))); 2921 new ExpressionStatement(buildFallThroughError(current.fileOffset)));
2910 } 2922 }
2911 } 2923 }
2912 JumpTarget target = exitBreakTarget(); 2924
2913 exitSwitchScope(); 2925 push(cases);
2914 exitLocalScope();
2915 Expression expression = popForValue();
2916 Statement result = new KernelSwitchStatement(expression, cases);
2917 if (target.hasUsers) {
2918 result = new KernelLabeledStatement(result);
2919 target.resolveBreaks(result);
2920 }
2921 exitLoopOrSwitch(result);
2922 } 2926 }
2923 2927
2924 @override 2928 @override
2925 void handleCaseMatch(Token caseKeyword, Token colon) { 2929 void handleCaseMatch(Token caseKeyword, Token colon) {
2926 debugEvent("CaseMatch"); 2930 debugEvent("CaseMatch");
2927 // Do nothing. Handled by [handleSwitchCase]. 2931 // Do nothing. Handled by [handleSwitchCase].
2928 } 2932 }
2929 2933
2930 @override 2934 @override
2931 void handleBreakStatement( 2935 void handleBreakStatement(
(...skipping 886 matching lines...) Expand 10 before | Expand all | Expand 10 after
3818 return AsyncMarker.Async; 3822 return AsyncMarker.Async;
3819 } else { 3823 } else {
3820 assert(identical(starToken.stringValue, "*")); 3824 assert(identical(starToken.stringValue, "*"));
3821 return AsyncMarker.AsyncStar; 3825 return AsyncMarker.AsyncStar;
3822 } 3826 }
3823 } else { 3827 } else {
3824 return unhandled(asyncToken.lexeme, "asyncMarkerFromTokens", 3828 return unhandled(asyncToken.lexeme, "asyncMarkerFromTokens",
3825 asyncToken.charOffset, null); 3829 asyncToken.charOffset, null);
3826 } 3830 }
3827 } 3831 }
OLDNEW
« no previous file with comments | « no previous file | pkg/kernel/binary.md » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698