| 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 |