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

Side by Side Diff: pkg/compiler/lib/src/ssa/ssa_tracer.dart

Issue 1819833002: Use exact instruction names in the SSA tracer. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 9 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 | 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) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 ssa.tracer; 5 library ssa.tracer;
6 6
7 import 'dart:async' show EventSink; 7 import 'dart:async' show EventSink;
8 8
9 import '../compiler.dart' show Compiler; 9 import '../compiler.dart' show Compiler;
10 import '../diagnostics/invariant.dart' show DEBUG_MODE; 10 import '../diagnostics/invariant.dart' show DEBUG_MODE;
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 } else { 153 } else {
154 prefix = 'U'; 154 prefix = 'U';
155 } 155 }
156 return "$prefix${instruction.id}"; 156 return "$prefix${instruction.id}";
157 } 157 }
158 158
159 String visitBoolify(HBoolify node) { 159 String visitBoolify(HBoolify node) {
160 return "Boolify: ${temporaryId(node.inputs[0])}"; 160 return "Boolify: ${temporaryId(node.inputs[0])}";
161 } 161 }
162 162
163 String handleInvokeBinary(HInvokeBinary node, String op) { 163 String handleInvokeBinary(HInvokeBinary node, String opcode) {
164 String left = temporaryId(node.left); 164 String left = temporaryId(node.left);
165 String right= temporaryId(node.right); 165 String right= temporaryId(node.right);
166 return '$left $op $right'; 166 return '$opcode: $left $right';
167 } 167 }
168 168
169 String visitAdd(HAdd node) => handleInvokeBinary(node, '+'); 169 String visitAdd(HAdd node) => handleInvokeBinary(node, 'Add');
170 170
171 String visitBitAnd(HBitAnd node) => handleInvokeBinary(node, '&'); 171 String visitBitAnd(HBitAnd node) => handleInvokeBinary(node, 'BitAnd');
172 172
173 String visitBitNot(HBitNot node) { 173 String visitBitNot(HBitNot node) {
174 String operand = temporaryId(node.operand); 174 String operand = temporaryId(node.operand);
175 return "~$operand"; 175 return "BitNot: $operand";
176 } 176 }
177 177
178 String visitBitOr(HBitOr node) => handleInvokeBinary(node, '|'); 178 String visitBitOr(HBitOr node) => handleInvokeBinary(node, 'BitOr');
179 179
180 String visitBitXor(HBitXor node) => handleInvokeBinary(node, '^'); 180 String visitBitXor(HBitXor node) => handleInvokeBinary(node, 'BitXor');
181 181
182 String visitBoundsCheck(HBoundsCheck node) { 182 String visitBoundsCheck(HBoundsCheck node) {
183 String lengthId = temporaryId(node.length); 183 String lengthId = temporaryId(node.length);
184 String indexId = temporaryId(node.index); 184 String indexId = temporaryId(node.index);
185 return "Bounds check: length = $lengthId, index = $indexId"; 185 return "BoundsCheck: length = $lengthId, index = $indexId";
186 } 186 }
187 187
188 String visitBreak(HBreak node) { 188 String visitBreak(HBreak node) {
189 HBasicBlock target = currentBlock.successors[0]; 189 HBasicBlock target = currentBlock.successors[0];
190 if (node.label != null) { 190 if (node.label != null) {
191 return "Break ${node.label.labelName}: (B${target.id})"; 191 return "Break ${node.label.labelName}: (B${target.id})";
192 } 192 }
193 return "Break: (B${target.id})"; 193 return "Break: (B${target.id})";
194 } 194 }
195 195
196 String visitConstant(HConstant constant) => "Constant ${constant.constant}"; 196 String visitConstant(HConstant constant) => "Constant: ${constant.constant}";
197 197
198 String visitContinue(HContinue node) { 198 String visitContinue(HContinue node) {
199 HBasicBlock target = currentBlock.successors[0]; 199 HBasicBlock target = currentBlock.successors[0];
200 if (node.label != null) { 200 if (node.label != null) {
201 return "Continue ${node.label.labelName}: (B${target.id})"; 201 return "Continue ${node.label.labelName}: (B${target.id})";
202 } 202 }
203 return "Continue: (B${target.id})"; 203 return "Continue: (B${target.id})";
204 } 204 }
205 205
206 String visitDivide(HDivide node) => handleInvokeBinary(node, '/'); 206 String visitDivide(HDivide node) => handleInvokeBinary(node, 'Divide');
207 207
208 String visitExit(HExit node) => "exit"; 208 String visitExit(HExit node) => "Exit";
209 209
210 String visitFieldGet(HFieldGet node) { 210 String visitFieldGet(HFieldGet node) {
211 if (node.isNullCheck) { 211 if (node.isNullCheck) {
212 return 'null check on ${temporaryId(node.receiver)}'; 212 return 'FieldGet: NullCheck ${temporaryId(node.receiver)}';
213 } 213 }
214 String fieldName = node.element.name; 214 String fieldName = node.element.name;
215 return 'field get ${temporaryId(node.receiver)}.$fieldName'; 215 return 'FieldGet: ${temporaryId(node.receiver)}.$fieldName';
216 } 216 }
217 217
218 String visitFieldSet(HFieldSet node) { 218 String visitFieldSet(HFieldSet node) {
219 String valueId = temporaryId(node.value); 219 String valueId = temporaryId(node.value);
220 String fieldName = node.element.name; 220 String fieldName = node.element.name;
221 return 'field set ${temporaryId(node.receiver)}.$fieldName to $valueId'; 221 return 'FieldSet: ${temporaryId(node.receiver)}.$fieldName to $valueId';
222 } 222 }
223 223
224 String visitReadModifyWrite(HReadModifyWrite node) { 224 String visitReadModifyWrite(HReadModifyWrite node) {
225 String fieldName = node.element.name; 225 String fieldName = node.element.name;
226 String receiverId = temporaryId(node.receiver); 226 String receiverId = temporaryId(node.receiver);
227 String op = node.jsOp; 227 String op = node.jsOp;
228 if (node.isAssignOp) { 228 if (node.isAssignOp) {
229 String valueId = temporaryId(node.value); 229 String valueId = temporaryId(node.value);
230 return 'field-update $receiverId.$fieldName $op= $valueId'; 230 return 'ReadModifyWrite: $receiverId.$fieldName $op= $valueId';
231 } else if (node.isPreOp) { 231 } else if (node.isPreOp) {
232 return 'field-update $op$receiverId.$fieldName'; 232 return 'ReadModifyWrite: $op$receiverId.$fieldName';
233 } else { 233 } else {
234 return 'field-update $receiverId.$fieldName$op'; 234 return 'ReadModifyWrite: $receiverId.$fieldName$op';
235 } 235 }
236 } 236 }
237 237
238 String visitLocalGet(HLocalGet node) { 238 String visitLocalGet(HLocalGet node) {
239 String localName = node.variable.name; 239 String localName = node.variable.name;
240 return 'local get ${temporaryId(node.local)}.$localName'; 240 return 'LocalGet: ${temporaryId(node.local)}.$localName';
241 } 241 }
242 242
243 String visitLocalSet(HLocalSet node) { 243 String visitLocalSet(HLocalSet node) {
244 String valueId = temporaryId(node.value); 244 String valueId = temporaryId(node.value);
245 String localName = node.variable.name; 245 String localName = node.variable.name;
246 return 'local set ${temporaryId(node.local)}.$localName to $valueId'; 246 return 'LocalSet: ${temporaryId(node.local)}.$localName to $valueId';
247 } 247 }
248 248
249 String visitGoto(HGoto node) { 249 String visitGoto(HGoto node) {
250 HBasicBlock target = currentBlock.successors[0]; 250 HBasicBlock target = currentBlock.successors[0];
251 return "Goto: (B${target.id})"; 251 return "Goto: (B${target.id})";
252 } 252 }
253 253
254 String visitGreater(HGreater node) => handleInvokeBinary(node, '>'); 254 String visitGreater(HGreater node) => handleInvokeBinary(node, 'Greater');
255 String visitGreaterEqual(HGreaterEqual node) { 255 String visitGreaterEqual(HGreaterEqual node) {
256 return handleInvokeBinary(node, '>='); 256 return handleInvokeBinary(node, 'GreaterEqual');
257 } 257 }
258 String visitIdentity(HIdentity node) => handleInvokeBinary(node, '==='); 258 String visitIdentity(HIdentity node) => handleInvokeBinary(node, 'Identity');
259 259
260 String visitIf(HIf node) { 260 String visitIf(HIf node) {
261 HBasicBlock thenBlock = currentBlock.successors[0]; 261 HBasicBlock thenBlock = currentBlock.successors[0];
262 HBasicBlock elseBlock = currentBlock.successors[1]; 262 HBasicBlock elseBlock = currentBlock.successors[1];
263 String conditionId = temporaryId(node.inputs[0]); 263 String conditionId = temporaryId(node.inputs[0]);
264 return "If ($conditionId): (B${thenBlock.id}) else (B${elseBlock.id})"; 264 return "If ($conditionId): (B${thenBlock.id}) else (B${elseBlock.id})";
265 } 265 }
266 266
267 String visitGenericInvoke(String invokeType, String functionName, 267 String handleGenericInvoke(String invokeType, String functionName,
268 List<HInstruction> arguments) { 268 List<HInstruction> arguments) {
269 StringBuffer argumentsString = new StringBuffer(); 269 StringBuffer argumentsString = new StringBuffer();
270 for (int i = 0; i < arguments.length; i++) { 270 for (int i = 0; i < arguments.length; i++) {
271 if (i != 0) argumentsString.write(", "); 271 if (i != 0) argumentsString.write(", ");
272 argumentsString.write(temporaryId(arguments[i])); 272 argumentsString.write(temporaryId(arguments[i]));
273 } 273 }
274 return "$invokeType: $functionName($argumentsString)"; 274 return "$invokeType: $functionName($argumentsString)";
275 } 275 }
276 276
277 String visitIndex(HIndex node) { 277 String visitIndex(HIndex node) {
278 String receiver = temporaryId(node.receiver); 278 String receiver = temporaryId(node.receiver);
279 String index = temporaryId(node.index); 279 String index = temporaryId(node.index);
280 return "Index: $receiver[$index]"; 280 return "Index: $receiver[$index]";
281 } 281 }
282 282
283 String visitIndexAssign(HIndexAssign node) { 283 String visitIndexAssign(HIndexAssign node) {
284 String receiver = temporaryId(node.receiver); 284 String receiver = temporaryId(node.receiver);
285 String index = temporaryId(node.index); 285 String index = temporaryId(node.index);
286 String value = temporaryId(node.value); 286 String value = temporaryId(node.value);
287 return "IndexAssign: $receiver[$index] = $value"; 287 return "IndexAssign: $receiver[$index] = $value";
288 } 288 }
289 289
290 String visitInterceptor(HInterceptor node) { 290 String visitInterceptor(HInterceptor node) {
291 String value = temporaryId(node.inputs[0]); 291 String value = temporaryId(node.inputs[0]);
292 if (node.interceptedClasses != null) { 292 if (node.interceptedClasses != null) {
293 JavaScriptBackend backend = compiler.backend; 293 JavaScriptBackend backend = compiler.backend;
294 String cls = 294 String cls =
295 backend.namer.suffixForGetInterceptor(node.interceptedClasses); 295 backend.namer.suffixForGetInterceptor(node.interceptedClasses);
296 return "Intercept ($cls): $value"; 296 return "Interceptor ($cls): $value";
297 } 297 }
298 return "Intercept: $value"; 298 return "Interceptor: $value";
299 } 299 }
300 300
301 String visitInvokeClosure(HInvokeClosure node) 301 String visitInvokeClosure(HInvokeClosure node)
302 => visitInvokeDynamic(node, "closure"); 302 => handleInvokeDynamic(node, "InvokeClosure");
303 303
304 String visitInvokeDynamic(HInvokeDynamic invoke, String kind) { 304 String handleInvokeDynamic(HInvokeDynamic invoke, String kind) {
305 String receiver = temporaryId(invoke.receiver); 305 String receiver = temporaryId(invoke.receiver);
306 String name = invoke.selector.name; 306 String name = invoke.selector.name;
307 String target = "($kind) $receiver.$name"; 307 String target = "$receiver.$name";
308 int offset = HInvoke.ARGUMENTS_OFFSET; 308 int offset = HInvoke.ARGUMENTS_OFFSET;
309 List arguments = invoke.inputs.sublist(offset); 309 List arguments = invoke.inputs.sublist(offset);
310 return visitGenericInvoke("Invoke", target, arguments) + 310 return handleGenericInvoke(kind, target, arguments) +
311 "(${invoke.mask})"; 311 "(${invoke.mask})";
312 } 312 }
313 313
314 String visitInvokeDynamicMethod(HInvokeDynamicMethod node) 314 String visitInvokeDynamicMethod(HInvokeDynamicMethod node)
315 => visitInvokeDynamic(node, "method"); 315 => handleInvokeDynamic(node, "InvokeDynamicMethod");
316 String visitInvokeDynamicGetter(HInvokeDynamicGetter node) 316 String visitInvokeDynamicGetter(HInvokeDynamicGetter node)
317 => visitInvokeDynamic(node, "get"); 317 => handleInvokeDynamic(node, "InvokeDynamicGetter");
318 String visitInvokeDynamicSetter(HInvokeDynamicSetter node) 318 String visitInvokeDynamicSetter(HInvokeDynamicSetter node)
319 => visitInvokeDynamic(node, "set"); 319 => handleInvokeDynamic(node, "InvokeDynamicSetter");
320 320
321 String visitInvokeStatic(HInvokeStatic invoke) { 321 String visitInvokeStatic(HInvokeStatic invoke) {
322 String target = invoke.element.name; 322 String target = invoke.element.name;
323 return visitGenericInvoke("Invoke", target, invoke.inputs); 323 return handleGenericInvoke("InvokeStatic", target, invoke.inputs);
324 } 324 }
325 325
326 String visitInvokeSuper(HInvokeSuper invoke) { 326 String visitInvokeSuper(HInvokeSuper invoke) {
327 String target = invoke.element.name; 327 String target = invoke.element.name;
328 return visitGenericInvoke("Invoke super", target, invoke.inputs); 328 return handleGenericInvoke("InvokeSuper", target, invoke.inputs);
329 } 329 }
330 330
331 String visitInvokeConstructorBody(HInvokeConstructorBody invoke) { 331 String visitInvokeConstructorBody(HInvokeConstructorBody invoke) {
332 String target = invoke.element.name; 332 String target = invoke.element.name;
333 return visitGenericInvoke("Invoke constructor body", target, invoke.inputs); 333 return handleGenericInvoke("InvokeConstructorBody", target, invoke.inputs);
334 } 334 }
335 335
336 String visitForeignCode(HForeignCode foreign) { 336 String visitForeignCode(HForeignCode foreign) {
337 return visitGenericInvoke("Foreign", "${foreign.codeTemplate.ast}", 337 return handleGenericInvoke("ForeignCode", "${foreign.codeTemplate.ast}",
338 foreign.inputs); 338 foreign.inputs);
339 } 339 }
340 340
341 String visitForeignNew(HForeignNew node) { 341 String visitForeignNew(HForeignNew node) {
342 return visitGenericInvoke("New", 342 return handleGenericInvoke("ForeignNew",
343 "${node.element.name}", 343 "${node.element.name}",
344 node.inputs); 344 node.inputs);
345 } 345 }
346 346
347 String visitLess(HLess node) => handleInvokeBinary(node, '<'); 347 String visitLess(HLess node) => handleInvokeBinary(node, 'Less');
348 String visitLessEqual(HLessEqual node) => handleInvokeBinary(node, '<='); 348 String visitLessEqual(HLessEqual node) =>
349 handleInvokeBinary(node, 'LessEqual');
349 350
350 String visitLiteralList(HLiteralList node) { 351 String visitLiteralList(HLiteralList node) {
351 StringBuffer elementsString = new StringBuffer(); 352 StringBuffer elementsString = new StringBuffer();
352 for (int i = 0; i < node.inputs.length; i++) { 353 for (int i = 0; i < node.inputs.length; i++) {
353 if (i != 0) elementsString.write(", "); 354 if (i != 0) elementsString.write(", ");
354 elementsString.write(temporaryId(node.inputs[i])); 355 elementsString.write(temporaryId(node.inputs[i]));
355 } 356 }
356 return "Literal list: [$elementsString]"; 357 return "LiteralList: [$elementsString]";
357 } 358 }
358 359
359 String visitLoopBranch(HLoopBranch branch) { 360 String visitLoopBranch(HLoopBranch branch) {
360 HBasicBlock bodyBlock = currentBlock.successors[0]; 361 HBasicBlock bodyBlock = currentBlock.successors[0];
361 HBasicBlock exitBlock = currentBlock.successors[1]; 362 HBasicBlock exitBlock = currentBlock.successors[1];
362 String conditionId = temporaryId(branch.inputs[0]); 363 String conditionId = temporaryId(branch.inputs[0]);
363 return "While ($conditionId): (B${bodyBlock.id}) then (B${exitBlock.id})"; 364 return
365 "LoopBranch ($conditionId): (B${bodyBlock.id}) then (B${exitBlock.id})";
364 } 366 }
365 367
366 String visitMultiply(HMultiply node) => handleInvokeBinary(node, '*'); 368 String visitMultiply(HMultiply node) => handleInvokeBinary(node, 'Multiply');
367 369
368 String visitNegate(HNegate node) { 370 String visitNegate(HNegate node) {
369 String operand = temporaryId(node.operand); 371 String operand = temporaryId(node.operand);
370 return "-$operand"; 372 return "Negate: $operand";
371 } 373 }
372 374
373 String visitNot(HNot node) => "Not: ${temporaryId(node.inputs[0])}"; 375 String visitNot(HNot node) => "Not: ${temporaryId(node.inputs[0])}";
374 376
375 String visitParameterValue(HParameterValue node) { 377 String visitParameterValue(HParameterValue node) {
376 return "p${node.sourceElement.name}"; 378 return "ParameterValue: ${node.sourceElement.name}";
377 } 379 }
378 380
379 String visitLocalValue(HLocalValue node) { 381 String visitLocalValue(HLocalValue node) {
380 return "l${node.sourceElement.name}"; 382 return "LocalValue: ${node.sourceElement.name}";
381 } 383 }
382 384
383 String visitPhi(HPhi phi) { 385 String visitPhi(HPhi phi) {
384 StringBuffer buffer = new StringBuffer(); 386 StringBuffer buffer = new StringBuffer();
385 buffer.write("Phi("); 387 buffer.write("Phi: ");
386 for (int i = 0; i < phi.inputs.length; i++) { 388 for (int i = 0; i < phi.inputs.length; i++) {
387 if (i > 0) buffer.write(", "); 389 if (i > 0) buffer.write(", ");
388 buffer.write(temporaryId(phi.inputs[i])); 390 buffer.write(temporaryId(phi.inputs[i]));
389 } 391 }
390 buffer.write(")");
391 return buffer.toString(); 392 return buffer.toString();
392 } 393 }
393 394
394 String visitRef(HRef node) { 395 String visitRef(HRef node) {
395 return 'Ref ${temporaryId(node.value)}'; 396 return 'Ref: ${temporaryId(node.value)}';
396 } 397 }
397 398
398 String visitReturn(HReturn node) => "Return ${temporaryId(node.inputs[0])}"; 399 String visitReturn(HReturn node) => "Return: ${temporaryId(node.inputs[0])}";
399 400
400 String visitShiftLeft(HShiftLeft node) => handleInvokeBinary(node, '<<'); 401 String visitShiftLeft(HShiftLeft node) =>
401 String visitShiftRight(HShiftRight node) => handleInvokeBinary(node, '>>'); 402 handleInvokeBinary(node, 'ShiftLeft');
403 String visitShiftRight(HShiftRight node) =>
404 handleInvokeBinary(node, 'ShiftRight');
402 405
403 String visitStatic(HStatic node) 406 String visitStatic(HStatic node)
404 => "Static ${node.element.name}"; 407 => "Static: ${node.element.name}";
405 408
406 String visitLazyStatic(HLazyStatic node) 409 String visitLazyStatic(HLazyStatic node)
407 => "LazyStatic ${node.element.name}"; 410 => "LazyStatic: ${node.element.name}";
408 411
409 String visitOneShotInterceptor(HOneShotInterceptor node) 412 String visitOneShotInterceptor(HOneShotInterceptor node)
410 => visitInvokeDynamic(node, "one shot interceptor"); 413 => handleInvokeDynamic(node, "OneShotInterceptor");
411 414
412 String visitStaticStore(HStaticStore node) { 415 String visitStaticStore(HStaticStore node) {
413 String lhs = node.element.name; 416 String lhs = node.element.name;
414 return "Static $lhs = ${temporaryId(node.inputs[0])}"; 417 return "StaticStore: $lhs = ${temporaryId(node.inputs[0])}";
415 } 418 }
416 419
417 String visitStringConcat(HStringConcat node) { 420 String visitStringConcat(HStringConcat node) {
418 var leftId = temporaryId(node.left); 421 var leftId = temporaryId(node.left);
419 var rightId = temporaryId(node.right); 422 var rightId = temporaryId(node.right);
420 return "StringConcat: $leftId + $rightId"; 423 return "StringConcat: $leftId + $rightId";
421 } 424 }
422 425
423 String visitStringify(HStringify node) { 426 String visitStringify(HStringify node) {
424 return "Stringify ${temporaryId(node.inputs[0])}"; 427 return "Stringify: ${temporaryId(node.inputs[0])}";
425 } 428 }
426 429
427 String visitSubtract(HSubtract node) => handleInvokeBinary(node, '-'); 430 String visitSubtract(HSubtract node) => handleInvokeBinary(node, 'Subtract');
428 431
429 String visitSwitch(HSwitch node) { 432 String visitSwitch(HSwitch node) {
430 StringBuffer buf = new StringBuffer(); 433 StringBuffer buf = new StringBuffer();
431 buf.write("Switch: ("); 434 buf.write("Switch: (");
432 buf.write(temporaryId(node.inputs[0])); 435 buf.write(temporaryId(node.inputs[0]));
433 buf.write(") "); 436 buf.write(") ");
434 for (int i = 1; i < node.inputs.length; i++) { 437 for (int i = 1; i < node.inputs.length; i++) {
435 buf.write(temporaryId(node.inputs[i])); 438 buf.write(temporaryId(node.inputs[i]));
436 buf.write(": B"); 439 buf.write(": B");
437 buf.write(node.block.successors[i - 1].id); 440 buf.write(node.block.successors[i - 1].id);
438 buf.write(", "); 441 buf.write(", ");
439 } 442 }
440 buf.write("default: B"); 443 buf.write("default: B");
441 buf.write(node.defaultTarget.id); 444 buf.write(node.defaultTarget.id);
442 return buf.toString(); 445 return buf.toString();
443 } 446 }
444 447
445 String visitThis(HThis node) => "this"; 448 String visitThis(HThis node) => "This";
446 449
447 String visitThrow(HThrow node) => "Throw ${temporaryId(node.inputs[0])}"; 450 String visitThrow(HThrow node) => "Throw: ${temporaryId(node.inputs[0])}";
448 451
449 String visitThrowExpression(HThrowExpression node) { 452 String visitThrowExpression(HThrowExpression node) {
450 return "ThrowExpression ${temporaryId(node.inputs[0])}"; 453 return "ThrowExpression: ${temporaryId(node.inputs[0])}";
451 } 454 }
452 455
453 String visitTruncatingDivide(HTruncatingDivide node) { 456 String visitTruncatingDivide(HTruncatingDivide node) {
454 return handleInvokeBinary(node, '~/'); 457 return handleInvokeBinary(node, 'TruncatingDivide');
455 } 458 }
456 459
457 String visitExitTry(HExitTry node) { 460 String visitExitTry(HExitTry node) {
458 return "Exit try"; 461 return "ExitTry";
459 } 462 }
460 463
461 String visitTry(HTry node) { 464 String visitTry(HTry node) {
462 List<HBasicBlock> successors = currentBlock.successors; 465 List<HBasicBlock> successors = currentBlock.successors;
463 String tryBlock = 'B${successors[0].id}'; 466 String tryBlock = 'B${successors[0].id}';
464 String catchBlock = 'none'; 467 String catchBlock = 'none';
465 if (node.catchBlock != null) { 468 if (node.catchBlock != null) {
466 catchBlock = 'B${successors[1].id}'; 469 catchBlock = 'B${successors[1].id}';
467 } 470 }
468 471
469 String finallyBlock = 'none'; 472 String finallyBlock = 'none';
470 if (node.finallyBlock != null) { 473 if (node.finallyBlock != null) {
471 finallyBlock = 'B${node.finallyBlock.id}'; 474 finallyBlock = 'B${node.finallyBlock.id}';
472 } 475 }
473 476
474 return "Try: $tryBlock, Catch: $catchBlock, Finally: $finallyBlock, " 477 return "Try: $tryBlock, Catch: $catchBlock, Finally: $finallyBlock, "
475 "Join: B${successors.last.id}"; 478 "Join: B${successors.last.id}";
476 } 479 }
477 480
478 String visitIs(HIs node) { 481 String visitIs(HIs node) {
479 String type = node.typeExpression.toString(); 482 String type = node.typeExpression.toString();
480 return "TypeTest: ${temporaryId(node.expression)} is $type"; 483 return "Is: ${temporaryId(node.expression)} is $type";
481 } 484 }
482 485
483 String visitIsViaInterceptor(HIsViaInterceptor node) { 486 String visitIsViaInterceptor(HIsViaInterceptor node) {
484 String type = node.typeExpression.toString(); 487 String type = node.typeExpression.toString();
485 return "TypeTest: ${temporaryId(node.inputs[0])} is $type"; 488 return "IsViaInterceptor: ${temporaryId(node.inputs[0])} is $type";
486 } 489 }
487 490
488 String visitTypeConversion(HTypeConversion node) { 491 String visitTypeConversion(HTypeConversion node) {
489 assert(node.inputs.length <= 2); 492 assert(node.inputs.length <= 2);
490 String otherInput = (node.inputs.length == 2) 493 String otherInput = (node.inputs.length == 2)
491 ? temporaryId(node.inputs[1]) 494 ? temporaryId(node.inputs[1])
492 : ''; 495 : '';
493 return "TypeConversion: ${temporaryId(node.checkedInput)} to " 496 return "TypeConversion: ${temporaryId(node.checkedInput)} to "
494 "${node.instructionType} $otherInput"; 497 "${node.instructionType} $otherInput";
495 } 498 }
(...skipping 26 matching lines...) Expand all
522 525
523 String visitInterfaceType(HInterfaceType node) { 526 String visitInterfaceType(HInterfaceType node) {
524 return "InterfaceType: ${node.dartType}"; 527 return "InterfaceType: ${node.dartType}";
525 } 528 }
526 529
527 String visitDynamicType(HDynamicType node) { 530 String visitDynamicType(HDynamicType node) {
528 return "DynamicType"; 531 return "DynamicType";
529 } 532 }
530 533
531 String visitAwait(HAwait node) { 534 String visitAwait(HAwait node) {
532 return "await ${temporaryId(node.inputs[0])}"; 535 return "Await: ${temporaryId(node.inputs[0])}";
533 } 536 }
534 537
535 String visitYield(HYield node) { 538 String visitYield(HYield node) {
536 return "yield${node.hasStar ? "*" : ""} ${temporaryId(node.inputs[0])}"; 539 return "Yield${node.hasStar ? "*" : ""}: ${temporaryId(node.inputs[0])}";
537 } 540 }
538 } 541 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698