OLD | NEW |
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 dart2js.ir_tracer; | 5 library dart2js.ir_tracer; |
6 | 6 |
7 import 'dart:async' show EventSink; | 7 import 'dart:async' show EventSink; |
8 import 'cps_ir_nodes.dart' as cps_ir; | 8 import 'cps_ir_nodes.dart' as cps_ir; |
9 import '../tracer.dart'; | 9 import '../tracer.dart'; |
10 | 10 |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
130 if (IR_TRACE_LET_CONT) { | 130 if (IR_TRACE_LET_CONT) { |
131 String dummy = names.name(node); | 131 String dummy = names.name(node); |
132 String id = names.name(node.handler); | 132 String id = names.name(node.handler); |
133 printStmt(dummy, "LetHandler $id = <$id>"); | 133 printStmt(dummy, "LetHandler $id = <$id>"); |
134 } | 134 } |
135 visit(node.body); | 135 visit(node.body); |
136 } | 136 } |
137 | 137 |
138 visitLetMutable(cps_ir.LetMutable node) { | 138 visitLetMutable(cps_ir.LetMutable node) { |
139 String id = names.name(node.variable); | 139 String id = names.name(node.variable); |
140 printStmt(id, "LetMutable $id = ${formatReference(node.value)}"); | 140 printStmt(id, "LetMutable $id = ${formatReference(node.valueRef)}"); |
141 visit(node.body); | 141 visit(node.body); |
142 } | 142 } |
143 | 143 |
144 visitInvokeStatic(cps_ir.InvokeStatic node) { | 144 visitInvokeStatic(cps_ir.InvokeStatic node) { |
145 String callName = node.selector.name; | 145 String callName = node.selector.name; |
146 String args = node.arguments.map(formatReference).join(', '); | 146 String args = node.argumentRefs.map(formatReference).join(', '); |
147 return "InvokeStatic $callName ($args)"; | 147 return "InvokeStatic $callName ($args)"; |
148 } | 148 } |
149 | 149 |
150 visitInvokeMethod(cps_ir.InvokeMethod node) { | 150 visitInvokeMethod(cps_ir.InvokeMethod node) { |
151 String receiver = formatReference(node.receiver); | 151 String receiver = formatReference(node.receiverRef); |
152 String callName = node.selector.name; | 152 String callName = node.selector.name; |
153 String args = node.arguments.map(formatReference).join(', '); | 153 String args = node.argumentRefs.map(formatReference).join(', '); |
154 return "InvokeMethod $receiver $callName ($args)"; | 154 return "InvokeMethod $receiver $callName ($args)"; |
155 } | 155 } |
156 | 156 |
157 visitInvokeMethodDirectly(cps_ir.InvokeMethodDirectly node) { | 157 visitInvokeMethodDirectly(cps_ir.InvokeMethodDirectly node) { |
158 String receiver = formatReference(node.receiver); | 158 String receiver = formatReference(node.receiverRef); |
159 String callName = node.selector.name; | 159 String callName = node.selector.name; |
160 String args = node.arguments.map(formatReference).join(', '); | 160 String args = node.argumentRefs.map(formatReference).join(', '); |
161 return "InvokeMethodDirectly $receiver $callName ($args)"; | 161 return "InvokeMethodDirectly $receiver $callName ($args)"; |
162 } | 162 } |
163 | 163 |
164 visitInvokeConstructor(cps_ir.InvokeConstructor node) { | 164 visitInvokeConstructor(cps_ir.InvokeConstructor node) { |
165 String className = node.target.enclosingClass.name; | 165 String className = node.target.enclosingClass.name; |
166 String callName; | 166 String callName; |
167 if (node.target.name.isEmpty) { | 167 if (node.target.name.isEmpty) { |
168 callName = '${className}'; | 168 callName = '${className}'; |
169 } else { | 169 } else { |
170 callName = '${className}.${node.target.name}'; | 170 callName = '${className}.${node.target.name}'; |
171 } | 171 } |
172 String args = node.arguments.map(formatReference).join(', '); | 172 String args = node.argumentRefs.map(formatReference).join(', '); |
173 return "InvokeConstructor $callName ($args)"; | 173 return "InvokeConstructor $callName ($args)"; |
174 } | 174 } |
175 | 175 |
176 visitThrow(cps_ir.Throw node) { | 176 visitThrow(cps_ir.Throw node) { |
177 String dummy = names.name(node); | 177 String dummy = names.name(node); |
178 String value = formatReference(node.value); | 178 String value = formatReference(node.valueRef); |
179 printStmt(dummy, "Throw $value"); | 179 printStmt(dummy, "Throw $value"); |
180 } | 180 } |
181 | 181 |
182 visitRethrow(cps_ir.Rethrow node) { | 182 visitRethrow(cps_ir.Rethrow node) { |
183 String dummy = names.name(node); | 183 String dummy = names.name(node); |
184 printStmt(dummy, "Rethrow"); | 184 printStmt(dummy, "Rethrow"); |
185 } | 185 } |
186 | 186 |
187 visitUnreachable(cps_ir.Unreachable node) { | 187 visitUnreachable(cps_ir.Unreachable node) { |
188 String dummy = names.name(node); | 188 String dummy = names.name(node); |
189 printStmt(dummy, 'Unreachable'); | 189 printStmt(dummy, 'Unreachable'); |
190 } | 190 } |
191 | 191 |
192 visitLiteralList(cps_ir.LiteralList node) { | 192 visitLiteralList(cps_ir.LiteralList node) { |
193 String values = node.values.map(formatReference).join(', '); | 193 String values = node.valueRefs.map(formatReference).join(', '); |
194 return "LiteralList ($values)"; | 194 return "LiteralList ($values)"; |
195 } | 195 } |
196 | 196 |
197 visitTypeCast(cps_ir.TypeCast node) { | 197 visitTypeCast(cps_ir.TypeCast node) { |
198 String value = formatReference(node.value); | 198 String value = formatReference(node.valueRef); |
199 String args = node.typeArguments.map(formatReference).join(', '); | 199 String args = node.typeArgumentRefs.map(formatReference).join(', '); |
200 return "TypeCast ($value ${node.dartType} ($args))"; | 200 return "TypeCast ($value ${node.dartType} ($args))"; |
201 } | 201 } |
202 | 202 |
203 visitInvokeContinuation(cps_ir.InvokeContinuation node) { | 203 visitInvokeContinuation(cps_ir.InvokeContinuation node) { |
204 String dummy = names.name(node); | 204 String dummy = names.name(node); |
205 String kont = formatReference(node.continuation); | 205 String kont = formatReference(node.continuationRef); |
206 String args = node.arguments.map(formatReference).join(', '); | 206 String args = node.argumentRefs.map(formatReference).join(', '); |
207 printStmt(dummy, "InvokeContinuation $kont ($args)"); | 207 printStmt(dummy, "InvokeContinuation $kont ($args)"); |
208 } | 208 } |
209 | 209 |
210 visitBranch(cps_ir.Branch node) { | 210 visitBranch(cps_ir.Branch node) { |
211 String dummy = names.name(node); | 211 String dummy = names.name(node); |
212 String condition = formatReference(node.condition); | 212 String condition = formatReference(node.conditionRef); |
213 String trueCont = formatReference(node.trueContinuation); | 213 String trueCont = formatReference(node.trueContinuationRef); |
214 String falseCont = formatReference(node.falseContinuation); | 214 String falseCont = formatReference(node.falseContinuationRef); |
215 String strict = node.isStrictCheck ? "Strict" : "NonStrict"; | 215 String strict = node.isStrictCheck ? "Strict" : "NonStrict"; |
216 printStmt(dummy, "Branch $condition ($trueCont, $falseCont) $strict"); | 216 printStmt(dummy, "Branch $condition ($trueCont, $falseCont) $strict"); |
217 } | 217 } |
218 | 218 |
219 visitAwait(cps_ir.Await node) { | 219 visitAwait(cps_ir.Await node) { |
220 String value = formatReference(node.input); | 220 String value = formatReference(node.inputRef); |
221 return 'Await $value'; | 221 return 'Await $value'; |
222 } | 222 } |
223 | 223 |
224 visitYield(cps_ir.Yield node) { | 224 visitYield(cps_ir.Yield node) { |
225 String name = node.hasStar ? 'YieldStar' : 'Yield'; | 225 String name = node.hasStar ? 'YieldStar' : 'Yield'; |
226 String value = formatReference(node.input); | 226 String value = formatReference(node.inputRef); |
227 return '$name $value'; | 227 return '$name $value'; |
228 } | 228 } |
229 | 229 |
230 visitSetMutable(cps_ir.SetMutable node) { | 230 visitSetMutable(cps_ir.SetMutable node) { |
231 String variable = names.name(node.variable.definition); | 231 String variable = names.name(node.variable); |
232 String value = formatReference(node.value); | 232 String value = formatReference(node.valueRef); |
233 return 'SetMutable $variable := $value'; | 233 return 'SetMutable $variable := $value'; |
234 } | 234 } |
235 | 235 |
236 String formatReference(cps_ir.Reference ref) { | 236 String formatReference(cps_ir.Reference ref) { |
237 if (ref == null) return 'null'; | 237 if (ref == null) return 'null'; |
238 cps_ir.Definition target = ref.definition; | 238 cps_ir.Definition target = ref.definition; |
239 if (target is cps_ir.Continuation && target.isReturnContinuation) { | 239 if (target is cps_ir.Continuation && target.isReturnContinuation) { |
240 return "return"; // Do not generate a name for the return continuation | 240 return "return"; // Do not generate a name for the return continuation |
241 } else { | 241 } else { |
242 return names.name(ref.definition); | 242 return names.name(ref.definition); |
(...skipping 10 matching lines...) Expand all Loading... |
253 | 253 |
254 visitMutableVariable(cps_ir.MutableVariable node) { | 254 visitMutableVariable(cps_ir.MutableVariable node) { |
255 return "MutableVariable ${names.name(node)}"; | 255 return "MutableVariable ${names.name(node)}"; |
256 } | 256 } |
257 | 257 |
258 visitContinuation(cps_ir.Continuation node) { | 258 visitContinuation(cps_ir.Continuation node) { |
259 return "Continuation ${names.name(node)}"; | 259 return "Continuation ${names.name(node)}"; |
260 } | 260 } |
261 | 261 |
262 visitSetField(cps_ir.SetField node) { | 262 visitSetField(cps_ir.SetField node) { |
263 String object = formatReference(node.object); | 263 String object = formatReference(node.objectRef); |
264 String field = node.field.name; | 264 String field = node.field.name; |
265 String value = formatReference(node.value); | 265 String value = formatReference(node.valueRef); |
266 return 'SetField $object.$field = $value'; | 266 return 'SetField $object.$field = $value'; |
267 } | 267 } |
268 | 268 |
269 visitGetField(cps_ir.GetField node) { | 269 visitGetField(cps_ir.GetField node) { |
270 String object = formatReference(node.object); | 270 String object = formatReference(node.objectRef); |
271 String field = node.field.name; | 271 String field = node.field.name; |
272 String finalFlag = node.isFinal ? 'final' : 'non-final'; | 272 String finalFlag = node.isFinal ? 'final' : 'non-final'; |
273 return 'GetField $object.$field $finalFlag'; | 273 return 'GetField $object.$field $finalFlag'; |
274 } | 274 } |
275 | 275 |
276 visitGetStatic(cps_ir.GetStatic node) { | 276 visitGetStatic(cps_ir.GetStatic node) { |
277 String element = node.element.name; | 277 String element = node.element.name; |
278 String finalFlag = node.isFinal ? 'final' : 'non-final'; | 278 String finalFlag = node.isFinal ? 'final' : 'non-final'; |
279 return 'GetStatic $element $finalFlag'; | 279 return 'GetStatic $element $finalFlag'; |
280 } | 280 } |
281 | 281 |
282 visitSetStatic(cps_ir.SetStatic node) { | 282 visitSetStatic(cps_ir.SetStatic node) { |
283 String element = node.element.name; | 283 String element = node.element.name; |
284 String value = formatReference(node.value); | 284 String value = formatReference(node.valueRef); |
285 return 'SetStatic $element = $value'; | 285 return 'SetStatic $element = $value'; |
286 } | 286 } |
287 | 287 |
288 visitGetLazyStatic(cps_ir.GetLazyStatic node) { | 288 visitGetLazyStatic(cps_ir.GetLazyStatic node) { |
289 String element = node.element.name; | 289 String element = node.element.name; |
290 String finalFlag = node.isFinal ? 'final' : 'non-final'; | 290 String finalFlag = node.isFinal ? 'final' : 'non-final'; |
291 return "GetLazyStatic $element $finalFlag"; | 291 return "GetLazyStatic $element $finalFlag"; |
292 } | 292 } |
293 | 293 |
294 visitCreateBox(cps_ir.CreateBox node) { | 294 visitCreateBox(cps_ir.CreateBox node) { |
295 return 'CreateBox'; | 295 return 'CreateBox'; |
296 } | 296 } |
297 | 297 |
298 visitCreateInstance(cps_ir.CreateInstance node) { | 298 visitCreateInstance(cps_ir.CreateInstance node) { |
299 String className = node.classElement.name; | 299 String className = node.classElement.name; |
300 String arguments = node.arguments.map(formatReference).join(', '); | 300 String arguments = node.argumentRefs.map(formatReference).join(', '); |
301 String typeInformation = formatReference(node.typeInformation); | 301 String typeInformation = formatReference(node.typeInformationRef); |
302 return 'CreateInstance $className ($arguments) <$typeInformation>'; | 302 return 'CreateInstance $className ($arguments) <$typeInformation>'; |
303 } | 303 } |
304 | 304 |
305 visitInterceptor(cps_ir.Interceptor node) { | 305 visitInterceptor(cps_ir.Interceptor node) { |
306 return 'Interceptor(${formatReference(node.input)}, ' | 306 return 'Interceptor(${formatReference(node.inputRef)}, ' |
307 '${node.interceptedClasses})'; | 307 '${node.interceptedClasses})'; |
308 } | 308 } |
309 | 309 |
310 visitGetMutable(cps_ir.GetMutable node) { | 310 visitGetMutable(cps_ir.GetMutable node) { |
311 String variable = names.name(node.variable.definition); | 311 String variable = names.name(node.variable); |
312 return 'GetMutable $variable'; | 312 return 'GetMutable $variable'; |
313 } | 313 } |
314 | 314 |
315 visitReadTypeVariable(cps_ir.ReadTypeVariable node) { | 315 visitReadTypeVariable(cps_ir.ReadTypeVariable node) { |
316 return "ReadTypeVariable ${node.variable.element} " | 316 return "ReadTypeVariable ${node.variable.element} " |
317 "${formatReference(node.target)}"; | 317 "${formatReference(node.targetRef)}"; |
318 } | 318 } |
319 | 319 |
320 visitReifyRuntimeType(cps_ir.ReifyRuntimeType node) { | 320 visitReifyRuntimeType(cps_ir.ReifyRuntimeType node) { |
321 return "ReifyRuntimeType ${formatReference(node.value)}"; | 321 return "ReifyRuntimeType ${formatReference(node.valueRef)}"; |
322 } | 322 } |
323 | 323 |
324 visitTypeExpression(cps_ir.TypeExpression node) { | 324 visitTypeExpression(cps_ir.TypeExpression node) { |
325 return "TypeExpression ${node.kindAsString} ${node.dartType}" | 325 return "TypeExpression ${node.kindAsString} ${node.dartType}" |
326 "${node.arguments.map(formatReference).join(', ')}"; | 326 "${node.argumentRefs.map(formatReference).join(', ')}"; |
327 } | 327 } |
328 | 328 |
329 visitCreateInvocationMirror(cps_ir.CreateInvocationMirror node) { | 329 visitCreateInvocationMirror(cps_ir.CreateInvocationMirror node) { |
330 String args = node.arguments.map(formatReference).join(', '); | 330 String args = node.argumentRefs.map(formatReference).join(', '); |
331 return "CreateInvocationMirror(${node.selector.name}, $args)"; | 331 return "CreateInvocationMirror(${node.selector.name}, $args)"; |
332 } | 332 } |
333 | 333 |
334 visitTypeTest(cps_ir.TypeTest node) { | 334 visitTypeTest(cps_ir.TypeTest node) { |
335 String value = formatReference(node.value); | 335 String value = formatReference(node.valueRef); |
336 String args = node.typeArguments.map(formatReference).join(', '); | 336 String args = node.typeArgumentRefs.map(formatReference).join(', '); |
337 return "TypeTest ($value ${node.dartType} ($args))"; | 337 return "TypeTest ($value ${node.dartType} ($args))"; |
338 } | 338 } |
339 | 339 |
340 visitTypeTestViaFlag(cps_ir.TypeTestViaFlag node) { | 340 visitTypeTestViaFlag(cps_ir.TypeTestViaFlag node) { |
341 String interceptor = formatReference(node.interceptor); | 341 String interceptor = formatReference(node.interceptorRef); |
342 return "TypeTestViaFlag ($interceptor ${node.dartType})"; | 342 return "TypeTestViaFlag ($interceptor ${node.dartType})"; |
343 } | 343 } |
344 | 344 |
345 visitApplyBuiltinOperator(cps_ir.ApplyBuiltinOperator node) { | 345 visitApplyBuiltinOperator(cps_ir.ApplyBuiltinOperator node) { |
346 String operator = node.operator.toString(); | 346 String operator = node.operator.toString(); |
347 String args = node.arguments.map(formatReference).join(', '); | 347 String args = node.argumentRefs.map(formatReference).join(', '); |
348 return 'ApplyBuiltinOperator $operator ($args)'; | 348 return 'ApplyBuiltinOperator $operator ($args)'; |
349 } | 349 } |
350 | 350 |
351 visitApplyBuiltinMethod(cps_ir.ApplyBuiltinMethod node) { | 351 visitApplyBuiltinMethod(cps_ir.ApplyBuiltinMethod node) { |
352 String method = node.method.toString(); | 352 String method = node.method.toString(); |
353 String receiver = formatReference(node.receiver); | 353 String receiver = formatReference(node.receiverRef); |
354 String args = node.arguments.map(formatReference).join(', '); | 354 String args = node.argumentRefs.map(formatReference).join(', '); |
355 return 'ApplyBuiltinMethod $method $receiver ($args)'; | 355 return 'ApplyBuiltinMethod $method $receiver ($args)'; |
356 } | 356 } |
357 | 357 |
358 visitForeignCode(cps_ir.ForeignCode node) { | 358 visitForeignCode(cps_ir.ForeignCode node) { |
359 String id = names.name(node); | 359 String id = names.name(node); |
360 String arguments = node.arguments.map(formatReference).join(', '); | 360 String arguments = node.argumentRefs.map(formatReference).join(', '); |
361 printStmt(id, | 361 printStmt(id, |
362 "ForeignCode ${node.type} ${node.codeTemplate.source} $arguments"); | 362 "ForeignCode ${node.type} ${node.codeTemplate.source} $arguments"); |
363 } | 363 } |
364 | 364 |
365 visitGetLength(cps_ir.GetLength node) { | 365 visitGetLength(cps_ir.GetLength node) { |
366 String object = formatReference(node.object); | 366 String object = formatReference(node.objectRef); |
367 String finalFlag = node.isFinal ? 'final' : 'non-final'; | 367 String finalFlag = node.isFinal ? 'final' : 'non-final'; |
368 return 'GetLength $object $finalFlag'; | 368 return 'GetLength $object $finalFlag'; |
369 } | 369 } |
370 | 370 |
371 visitGetIndex(cps_ir.GetIndex node) { | 371 visitGetIndex(cps_ir.GetIndex node) { |
372 String object = formatReference(node.object); | 372 String object = formatReference(node.objectRef); |
373 String index = formatReference(node.index); | 373 String index = formatReference(node.indexRef); |
374 return 'GetIndex $object $index'; | 374 return 'GetIndex $object $index'; |
375 } | 375 } |
376 | 376 |
377 visitSetIndex(cps_ir.SetIndex node) { | 377 visitSetIndex(cps_ir.SetIndex node) { |
378 String object = formatReference(node.object); | 378 String object = formatReference(node.objectRef); |
379 String index = formatReference(node.index); | 379 String index = formatReference(node.indexRef); |
380 String value = formatReference(node.value); | 380 String value = formatReference(node.valueRef); |
381 return 'SetIndex $object $index $value'; | 381 return 'SetIndex $object $index $value'; |
382 } | 382 } |
383 | 383 |
384 visitRefinement(cps_ir.Refinement node) { | 384 visitRefinement(cps_ir.Refinement node) { |
385 String value = formatReference(node.value); | 385 String value = formatReference(node.value); |
386 return 'Refinement $value ${node.refineType}'; | 386 return 'Refinement $value ${node.refineType}'; |
387 } | 387 } |
388 | 388 |
389 visitBoundsCheck(cps_ir.BoundsCheck node) { | 389 visitBoundsCheck(cps_ir.BoundsCheck node) { |
390 String object = formatReference(node.object); | 390 String object = formatReference(node.objectRef); |
391 String index = node.index == null | 391 String index = node.indexRef == null |
392 ? 'no-index' | 392 ? 'no-index' |
393 : formatReference(node.index); | 393 : formatReference(node.indexRef); |
394 String length = node.length == null | 394 String length = node.lengthRef == null |
395 ? 'no-length' | 395 ? 'no-length' |
396 : formatReference(node.length); | 396 : formatReference(node.lengthRef); |
397 return 'BoundsCheck $object $index $length ${node.checkString}'; | 397 return 'BoundsCheck $object $index $length ${node.checkString}'; |
398 } | 398 } |
399 | 399 |
400 visitReceiverCheck(cps_ir.ReceiverCheck node) { | 400 visitReceiverCheck(cps_ir.ReceiverCheck node) { |
401 String value = formatReference(node.value); | 401 String value = formatReference(node.valueRef); |
402 String condition = formatReference(node.condition); | 402 String condition = formatReference(node.conditionRef); |
403 return 'ReceiverCheck $value $condition ${node.selector} ' | 403 return 'ReceiverCheck $value $condition ${node.selector} ' |
404 '${node.flagString}'; | 404 '${node.flagString}'; |
405 } | 405 } |
406 } | 406 } |
407 | 407 |
408 /** | 408 /** |
409 * Invents (and remembers) names for Continuations, Parameters, etc. | 409 * Invents (and remembers) names for Continuations, Parameters, etc. |
410 * The names must match the conventions used by IR Hydra, e.g. | 410 * The names must match the conventions used by IR Hydra, e.g. |
411 * Continuations and Functions must have names of form B### since they | 411 * Continuations and Functions must have names of form B### since they |
412 * are visualized as basic blocks. | 412 * are visualized as basic blocks. |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
503 } | 503 } |
504 | 504 |
505 void addEdgeToContinuation(cps_ir.Reference continuation) { | 505 void addEdgeToContinuation(cps_ir.Reference continuation) { |
506 cps_ir.Definition target = continuation.definition; | 506 cps_ir.Definition target = continuation.definition; |
507 if (target is cps_ir.Continuation && !target.isReturnContinuation) { | 507 if (target is cps_ir.Continuation && !target.isReturnContinuation) { |
508 currentBlock.addEdgeTo(getBlock(target)); | 508 currentBlock.addEdgeTo(getBlock(target)); |
509 } | 509 } |
510 } | 510 } |
511 | 511 |
512 visitInvokeContinuation(cps_ir.InvokeContinuation exp) { | 512 visitInvokeContinuation(cps_ir.InvokeContinuation exp) { |
513 addEdgeToContinuation(exp.continuation); | 513 addEdgeToContinuation(exp.continuationRef); |
514 } | 514 } |
515 | 515 |
516 visitInvokeStatic(cps_ir.InvokeStatic node) { | 516 visitInvokeStatic(cps_ir.InvokeStatic node) { |
517 unexpectedNode(node); | 517 unexpectedNode(node); |
518 } | 518 } |
519 | 519 |
520 visitInvokeMethod(cps_ir.InvokeMethod node) { | 520 visitInvokeMethod(cps_ir.InvokeMethod node) { |
521 unexpectedNode(node); | 521 unexpectedNode(node); |
522 } | 522 } |
523 | 523 |
(...skipping 12 matching lines...) Expand all Loading... |
536 } | 536 } |
537 | 537 |
538 visitUnreachable(cps_ir.Unreachable node) { | 538 visitUnreachable(cps_ir.Unreachable node) { |
539 } | 539 } |
540 | 540 |
541 visitGetLazyStatic(cps_ir.GetLazyStatic node) { | 541 visitGetLazyStatic(cps_ir.GetLazyStatic node) { |
542 unexpectedNode(node); | 542 unexpectedNode(node); |
543 } | 543 } |
544 | 544 |
545 visitBranch(cps_ir.Branch exp) { | 545 visitBranch(cps_ir.Branch exp) { |
546 cps_ir.Continuation trueTarget = exp.trueContinuation.definition; | 546 cps_ir.Continuation trueTarget = exp.trueContinuation; |
547 if (!trueTarget.isReturnContinuation) { | 547 if (!trueTarget.isReturnContinuation) { |
548 currentBlock.addEdgeTo(getBlock(trueTarget)); | 548 currentBlock.addEdgeTo(getBlock(trueTarget)); |
549 } | 549 } |
550 cps_ir.Continuation falseTarget = exp.falseContinuation.definition; | 550 cps_ir.Continuation falseTarget = exp.falseContinuation; |
551 if (!falseTarget.isReturnContinuation) { | 551 if (!falseTarget.isReturnContinuation) { |
552 currentBlock.addEdgeTo(getBlock(falseTarget)); | 552 currentBlock.addEdgeTo(getBlock(falseTarget)); |
553 } | 553 } |
554 } | 554 } |
555 | 555 |
556 visitTypeCast(cps_ir.TypeCast node) { | 556 visitTypeCast(cps_ir.TypeCast node) { |
557 unexpectedNode(node); | 557 unexpectedNode(node); |
558 } | 558 } |
559 | 559 |
560 visitContinuation(cps_ir.Continuation c) { | 560 visitContinuation(cps_ir.Continuation c) { |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
683 } | 683 } |
684 | 684 |
685 visitBoundsCheck(cps_ir.BoundsCheck node) { | 685 visitBoundsCheck(cps_ir.BoundsCheck node) { |
686 unexpectedNode(node); | 686 unexpectedNode(node); |
687 } | 687 } |
688 | 688 |
689 visitReceiverCheck(cps_ir.ReceiverCheck node) { | 689 visitReceiverCheck(cps_ir.ReceiverCheck node) { |
690 unexpectedNode(node); | 690 unexpectedNode(node); |
691 } | 691 } |
692 } | 692 } |
OLD | NEW |