From 0b5c7d1994b76090afcc825e737f2b8c546da2f8 Mon Sep 17 00:00:00 2001 From: David Brazdil Date: Thu, 11 Jun 2015 11:17:49 +0100 Subject: ART: Implement try/catch blocks in Builder This patch enables the GraphBuilder to generate blocks and edges which represent the exceptional control flow when try/catch blocks are present in the code. Actual compilation is still delegated to Quick and Baseline ignores the additional code. To represent the relationship between try and catch blocks, Builder splits the edges which enter/exit a try block and links the newly created blocks to the corresponding exception handlers. This layout will later enable the SsaBuilder to correctly infer the dominators of the catch blocks and to produce the appropriate reverse post ordering. It will not, however, allow for building the complete SSA form of the catch blocks and consequently optimizing such blocks. To this end, a new TryBoundary control-flow instruction is introduced. Codegen treats it the same as a Goto but it allows for additional successors (the handlers). Change-Id: I415b985596d5bebb7b1bb358a46e08b7b04bb53a --- compiler/utils/growable_array.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'compiler/utils/growable_array.h') diff --git a/compiler/utils/growable_array.h b/compiler/utils/growable_array.h index e4b1e7d0e9..f85e026f16 100644 --- a/compiler/utils/growable_array.h +++ b/compiler/utils/growable_array.h @@ -46,8 +46,8 @@ class GrowableArray : public ArenaObject { } } - bool Contains(T value) const { - for (size_t i = 0; i < num_used_; ++i) { + bool Contains(T value, size_t start_from = 0) const { + for (size_t i = start_from; i < num_used_; ++i) { if (elem_list_[i] == value) { return true; } -- cgit v1.2.3-59-g8ed1b