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

Side by Side Diff: tests/compiler/dart2js/jumps/jump_test.dart

Issue 3007903002: Support annotations on assignment and postfix operations (Closed)
Patch Set: Updated cf. comments 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 | « tests/compiler/dart2js/jumps/data/simple_loops.dart ('k') | no next file » | 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) 2017, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2017, 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 import 'dart:io'; 5 import 'dart:io';
6 import 'package:async_helper/async_helper.dart'; 6 import 'package:async_helper/async_helper.dart';
7 import 'package:compiler/src/commandline_options.dart'; 7 import 'package:compiler/src/commandline_options.dart';
8 import 'package:compiler/src/common.dart'; 8 import 'package:compiler/src/common.dart';
9 import 'package:compiler/src/compiler.dart'; 9 import 'package:compiler/src/compiler.dart';
10 import 'package:compiler/src/diagnostics/diagnostic_listener.dart'; 10 import 'package:compiler/src/diagnostics/diagnostic_listener.dart';
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 /// 42 ///
43 /// Fills [actualMap] with the data and [sourceSpanMap] with the source spans 43 /// Fills [actualMap] with the data and [sourceSpanMap] with the source spans
44 /// for the data origin. 44 /// for the data origin.
45 void computeKernelJumpsData( 45 void computeKernelJumpsData(
46 Compiler compiler, MemberEntity member, Map<Id, ActualData> actualMap, 46 Compiler compiler, MemberEntity member, Map<Id, ActualData> actualMap,
47 {bool verbose: false}) { 47 {bool verbose: false}) {
48 KernelBackendStrategy backendStrategy = compiler.backendStrategy; 48 KernelBackendStrategy backendStrategy = compiler.backendStrategy;
49 KernelToElementMapForBuilding elementMap = backendStrategy.elementMap; 49 KernelToElementMapForBuilding elementMap = backendStrategy.elementMap;
50 GlobalLocalsMap localsMap = backendStrategy.globalLocalsMapForTesting; 50 GlobalLocalsMap localsMap = backendStrategy.globalLocalsMapForTesting;
51 MemberDefinition definition = elementMap.getMemberDefinition(member); 51 MemberDefinition definition = elementMap.getMemberDefinition(member);
52 new JumpsIrChecker(actualMap, localsMap.getLocalsMap(member)) 52 new JumpsIrChecker(
53 compiler.reporter, actualMap, localsMap.getLocalsMap(member))
53 .run(definition.node); 54 .run(definition.node);
54 } 55 }
55 56
56 class TargetData { 57 class TargetData {
57 final int index; 58 final int index;
58 final NodeId id; 59 final NodeId id;
59 final SourceSpan sourceSpan; 60 final SourceSpan sourceSpan;
60 final JumpTarget target; 61 final JumpTarget target;
61 62
62 TargetData(this.index, this.id, this.sourceSpan, this.target); 63 TargetData(this.index, this.id, this.sourceSpan, this.target);
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 JumpsAstComputer(DiagnosticReporter reporter, Map<Id, ActualData> actualMap, 120 JumpsAstComputer(DiagnosticReporter reporter, Map<Id, ActualData> actualMap,
120 ResolvedAst resolvedAst) 121 ResolvedAst resolvedAst)
121 : super(reporter, actualMap, resolvedAst); 122 : super(reporter, actualMap, resolvedAst);
122 123
123 void run() { 124 void run() {
124 super.run(); 125 super.run();
125 processData(); 126 processData();
126 } 127 }
127 128
128 @override 129 @override
129 String computeNodeValue(ast.Node node, [AstElement element]) { 130 String computeNodeValue(Id id, ast.Node node, [AstElement element]) {
130 // Node values are computed post-visit in [processData]. 131 // Node values are computed post-visit in [processData].
131 return null; 132 return null;
132 } 133 }
133 134
134 @override 135 @override
135 String computeElementValue(AstElement element) { 136 String computeElementValue(Id id, AstElement element) {
136 return null; 137 return null;
137 } 138 }
138 139
139 @override 140 @override
140 visitLoop(ast.Loop node) { 141 visitLoop(ast.Loop node) {
141 JumpTarget target = elements.getTargetDefinition(node); 142 JumpTarget target = elements.getTargetDefinition(node);
142 if (target != null) { 143 if (target != null) {
143 NodeId id = computeLoopNodeId(node); 144 NodeId id = createLoopId(node);
144 SourceSpan sourceSpan = computeSourceSpan(node); 145 SourceSpan sourceSpan = computeSourceSpan(node);
145 targets[target] = new TargetData(index++, id, sourceSpan, target); 146 targets[target] = new TargetData(index++, id, sourceSpan, target);
146 } 147 }
147 super.visitLoop(node); 148 super.visitLoop(node);
148 } 149 }
149 150
150 @override 151 @override
151 visitGotoStatement(ast.GotoStatement node) { 152 visitGotoStatement(ast.GotoStatement node) {
152 JumpTarget target = elements.getTargetOf(node); 153 JumpTarget target = elements.getTargetOf(node);
153 assert(target != null, 'No target for $node.'); 154 assert(target != null, 'No target for $node.');
154 NodeId id = computeGotoNodeId(node); 155 NodeId id = createGotoId(node);
155 SourceSpan sourceSpan = computeSourceSpan(node); 156 SourceSpan sourceSpan = computeSourceSpan(node);
156 gotos.add(new GotoData(id, sourceSpan, target)); 157 gotos.add(new GotoData(id, sourceSpan, target));
157 super.visitGotoStatement(node); 158 super.visitGotoStatement(node);
158 } 159 }
159 160
160 @override 161 @override
161 visitSwitchStatement(ast.SwitchStatement node) { 162 visitSwitchStatement(ast.SwitchStatement node) {
162 JumpTarget target = elements.getTargetDefinition(node); 163 JumpTarget target = elements.getTargetDefinition(node);
163 if (target != null) { 164 if (target != null) {
164 NodeId id = computeLoopNodeId(node); 165 NodeId id = createLoopId(node);
165 SourceSpan sourceSpan = computeSourceSpan(node); 166 SourceSpan sourceSpan = computeSourceSpan(node);
166 targets[target] = new TargetData(index++, id, sourceSpan, target); 167 targets[target] = new TargetData(index++, id, sourceSpan, target);
167 } 168 }
168 super.visitSwitchStatement(node); 169 super.visitSwitchStatement(node);
169 } 170 }
170 171
171 @override 172 @override
172 visitSwitchCase(ast.SwitchCase node) { 173 visitSwitchCase(ast.SwitchCase node) {
173 JumpTarget target = elements.getTargetDefinition(node); 174 JumpTarget target = elements.getTargetDefinition(node);
174 if (target != null) { 175 if (target != null) {
175 NodeId id = computeSwitchCaseNodeId(node); 176 NodeId id = createSwitchCaseId(node);
176 SourceSpan sourceSpan = computeSourceSpan(node); 177 SourceSpan sourceSpan = computeSourceSpan(node);
177 targets[target] = new TargetData(index++, id, sourceSpan, target); 178 targets[target] = new TargetData(index++, id, sourceSpan, target);
178 } 179 }
179 super.visitSwitchCase(node); 180 super.visitSwitchCase(node);
180 } 181 }
181 } 182 }
182 183
183 /// Kernel IR visitor for computing jump data. 184 /// Kernel IR visitor for computing jump data.
184 class JumpsIrChecker extends IrDataExtractor with JumpsMixin { 185 class JumpsIrChecker extends IrDataExtractor with JumpsMixin {
185 final KernelToLocalsMap _localsMap; 186 final KernelToLocalsMap _localsMap;
186 187
187 JumpsIrChecker(Map<Id, ActualData> actualMap, this._localsMap) 188 JumpsIrChecker(DiagnosticReporter reporter, Map<Id, ActualData> actualMap,
188 : super(actualMap); 189 this._localsMap)
190 : super(reporter, actualMap);
189 191
190 void run(ir.Node root) { 192 void run(ir.Node root) {
191 super.run(root); 193 super.run(root);
192 processData(); 194 processData();
193 } 195 }
194 196
195 @override 197 @override
196 String computeNodeValue(ir.Node node) { 198 String computeNodeValue(Id id, ir.Node node) {
197 // Node values are computed post-visit in [processData]. 199 // Node values are computed post-visit in [processData].
198 return null; 200 return null;
199 } 201 }
200 202
201 @override 203 @override
202 String computeMemberValue(ir.Member member) { 204 String computeMemberValue(Id id, ir.Member member) {
203 return null; 205 return null;
204 } 206 }
205 207
206 void addTargetData(ir.TreeNode node, NodeId id, JumpTarget target) { 208 void addTargetData(ir.TreeNode node, NodeId id, JumpTarget target) {
207 if (target != null) { 209 if (target != null) {
208 SourceSpan sourceSpan = computeSourceSpan(node); 210 SourceSpan sourceSpan = computeSourceSpan(node);
209 targets[target] = new TargetData(index++, id, sourceSpan, target); 211 targets[target] = new TargetData(index++, id, sourceSpan, target);
210 } 212 }
211 } 213 }
212 214
213 visitForStatement(ir.ForStatement node) { 215 visitForStatement(ir.ForStatement node) {
214 addTargetData( 216 addTargetData(
215 node, computeLoopNodeId(node), _localsMap.getJumpTargetForFor(node)); 217 node, createLoopId(node), _localsMap.getJumpTargetForFor(node));
216 super.visitForStatement(node); 218 super.visitForStatement(node);
217 } 219 }
218 220
219 visitForInStatement(ir.ForInStatement node) { 221 visitForInStatement(ir.ForInStatement node) {
220 addTargetData( 222 addTargetData(
221 node, computeLoopNodeId(node), _localsMap.getJumpTargetForForIn(node)); 223 node, createLoopId(node), _localsMap.getJumpTargetForForIn(node));
222 super.visitForInStatement(node); 224 super.visitForInStatement(node);
223 } 225 }
224 226
225 visitWhileStatement(ir.WhileStatement node) { 227 visitWhileStatement(ir.WhileStatement node) {
226 addTargetData( 228 addTargetData(
227 node, computeLoopNodeId(node), _localsMap.getJumpTargetForWhile(node)); 229 node, createLoopId(node), _localsMap.getJumpTargetForWhile(node));
228 super.visitWhileStatement(node); 230 super.visitWhileStatement(node);
229 } 231 }
230 232
231 visitDoStatement(ir.DoStatement node) { 233 visitDoStatement(ir.DoStatement node) {
232 addTargetData( 234 addTargetData(
233 node, computeLoopNodeId(node), _localsMap.getJumpTargetForDo(node)); 235 node, createLoopId(node), _localsMap.getJumpTargetForDo(node));
234 super.visitDoStatement(node); 236 super.visitDoStatement(node);
235 } 237 }
236 238
237 visitBreakStatement(ir.BreakStatement node) { 239 visitBreakStatement(ir.BreakStatement node) {
238 JumpTarget target = _localsMap.getJumpTargetForBreak(node); 240 JumpTarget target = _localsMap.getJumpTargetForBreak(node);
239 assert(target != null, 'No target for $node.'); 241 assert(target != null, 'No target for $node.');
240 NodeId id = computeGotoNodeId(node); 242 NodeId id = createGotoId(node);
241 SourceSpan sourceSpan = computeSourceSpan(node); 243 SourceSpan sourceSpan = computeSourceSpan(node);
242 gotos.add(new GotoData(id, sourceSpan, target)); 244 gotos.add(new GotoData(id, sourceSpan, target));
243 super.visitBreakStatement(node); 245 super.visitBreakStatement(node);
244 } 246 }
245 247
246 visitSwitchStatement(ir.SwitchStatement node) { 248 visitSwitchStatement(ir.SwitchStatement node) {
247 addTargetData( 249 addTargetData(
248 node, computeLoopNodeId(node), _localsMap.getJumpTargetForSwitch(node)); 250 node, createSwitchId(node), _localsMap.getJumpTargetForSwitch(node));
249 super.visitSwitchStatement(node); 251 super.visitSwitchStatement(node);
250 } 252 }
251 253
252 visitSwitchCase(ir.SwitchCase node) { 254 visitSwitchCase(ir.SwitchCase node) {
253 addTargetData(node, computeSwitchCaseNodeId(node), 255 addTargetData(node, createSwitchCaseId(node),
254 _localsMap.getJumpTargetForSwitchCase(node)); 256 _localsMap.getJumpTargetForSwitchCase(node));
255 super.visitSwitchCase(node); 257 super.visitSwitchCase(node);
256 } 258 }
257 259
258 visitContinueSwitchStatement(ir.ContinueSwitchStatement node) { 260 visitContinueSwitchStatement(ir.ContinueSwitchStatement node) {
259 JumpTarget target = _localsMap.getJumpTargetForContinueSwitch(node); 261 JumpTarget target = _localsMap.getJumpTargetForContinueSwitch(node);
260 assert(target != null, 'No target for $node.'); 262 assert(target != null, 'No target for $node.');
261 NodeId id = computeGotoNodeId(node); 263 NodeId id = createGotoId(node);
262 SourceSpan sourceSpan = computeSourceSpan(node); 264 SourceSpan sourceSpan = computeSourceSpan(node);
263 gotos.add(new GotoData(id, sourceSpan, target)); 265 gotos.add(new GotoData(id, sourceSpan, target));
264 super.visitContinueSwitchStatement(node); 266 super.visitContinueSwitchStatement(node);
265 } 267 }
266 } 268 }
OLDNEW
« no previous file with comments | « tests/compiler/dart2js/jumps/data/simple_loops.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698