OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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:collection'; | 5 import 'dart:collection'; |
6 | 6 |
7 import 'package:js_runtime/shared/embedded_names.dart'; | 7 import 'package:js_runtime/shared/embedded_names.dart'; |
8 | 8 |
9 import '../closure.dart'; | 9 import '../closure.dart'; |
10 import '../common.dart'; | 10 import '../common.dart'; |
(...skipping 6212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6223 // The body has the finally block as successor. | 6223 // The body has the finally block as successor. |
6224 if (endTryBlock != null) { | 6224 if (endTryBlock != null) { |
6225 endTryBlock.addSuccessor(startFinallyBlock); | 6225 endTryBlock.addSuccessor(startFinallyBlock); |
6226 endTryBlock.addSuccessor(exitBlock); | 6226 endTryBlock.addSuccessor(exitBlock); |
6227 } | 6227 } |
6228 | 6228 |
6229 // The finally block has the exit block as successor. | 6229 // The finally block has the exit block as successor. |
6230 endFinallyBlock.addSuccessor(exitBlock); | 6230 endFinallyBlock.addSuccessor(exitBlock); |
6231 | 6231 |
6232 // If a block inside try/catch aborts (eg with a return statement), | 6232 // If a block inside try/catch aborts (eg with a return statement), |
6233 // we explicitely mark this block a predecessor of the catch | 6233 // we explicitly mark this block a predecessor of the catch |
6234 // block and the finally block. | 6234 // block and the finally block. |
6235 addExitTrySuccessor(startFinallyBlock); | 6235 addExitTrySuccessor(startFinallyBlock); |
6236 | 6236 |
6237 // Use the locals handler not altered by the catch and finally | 6237 // Use the locals handler not altered by the catch and finally |
6238 // blocks. | 6238 // blocks. |
6239 // TODO(sigurdm): We can probably do this, because try-variables are boxed. | 6239 // TODO(sigurdm): We can probably do this, because try-variables are boxed. |
6240 // Need to verify. | 6240 // Need to verify. |
6241 localsHandler = savedLocals; | 6241 localsHandler = savedLocals; |
6242 open(exitBlock); | 6242 open(exitBlock); |
6243 enterBlock.setBlockFlow( | 6243 enterBlock.setBlockFlow( |
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6431 endCatchBlock.addSuccessor( | 6431 endCatchBlock.addSuccessor( |
6432 startFinallyBlock != null ? startFinallyBlock : exitBlock); | 6432 startFinallyBlock != null ? startFinallyBlock : exitBlock); |
6433 } | 6433 } |
6434 | 6434 |
6435 // The finally block has the exit block as successor. | 6435 // The finally block has the exit block as successor. |
6436 if (endFinallyBlock != null) { | 6436 if (endFinallyBlock != null) { |
6437 endFinallyBlock.addSuccessor(exitBlock); | 6437 endFinallyBlock.addSuccessor(exitBlock); |
6438 } | 6438 } |
6439 | 6439 |
6440 // If a block inside try/catch aborts (eg with a return statement), | 6440 // If a block inside try/catch aborts (eg with a return statement), |
6441 // we explicitely mark this block a predecessor of the catch | 6441 // we explicitly mark this block a predecessor of the catch |
6442 // block and the finally block. | 6442 // block and the finally block. |
6443 addExitTrySuccessor(startCatchBlock); | 6443 addExitTrySuccessor(startCatchBlock); |
6444 addExitTrySuccessor(startFinallyBlock); | 6444 addExitTrySuccessor(startFinallyBlock); |
6445 | 6445 |
6446 // Use the locals handler not altered by the catch and finally | 6446 // Use the locals handler not altered by the catch and finally |
6447 // blocks. | 6447 // blocks. |
6448 localsHandler = savedLocals; | 6448 localsHandler = savedLocals; |
6449 open(exitBlock); | 6449 open(exitBlock); |
6450 enterBlock.setBlockFlow( | 6450 enterBlock.setBlockFlow( |
6451 new HTryBlockInformation(wrapStatementGraph(bodyGraph), exception, | 6451 new HTryBlockInformation(wrapStatementGraph(bodyGraph), exception, |
(...skipping 397 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6849 this.oldReturnLocal, | 6849 this.oldReturnLocal, |
6850 this.oldReturnType, | 6850 this.oldReturnType, |
6851 this.oldResolvedAst, | 6851 this.oldResolvedAst, |
6852 this.oldStack, | 6852 this.oldStack, |
6853 this.oldLocalsHandler, | 6853 this.oldLocalsHandler, |
6854 this.inTryStatement, | 6854 this.inTryStatement, |
6855 this.allFunctionsCalledOnce, | 6855 this.allFunctionsCalledOnce, |
6856 this.oldElementInferenceResults) | 6856 this.oldElementInferenceResults) |
6857 : super(function); | 6857 : super(function); |
6858 } | 6858 } |
OLD | NEW |