aboutsummaryrefslogtreecommitdiff
path: root/gcc/java/expr.c
diff options
context:
space:
mode:
authorNathan Froyd <froydnj@codesourcery.com>2010-05-28 13:41:55 +0000
committerNathan Froyd <froydnj@gcc.gnu.org>2010-05-28 13:41:55 +0000
commitaa6d7c816c8b6ed5f1348a14ad242fa936d5840f (patch)
treef6ffb6a81a45d1ae93105382f342bf023cae3ccd /gcc/java/expr.c
parent005d613b2d1f0aa304895c9fce7551ead06e9964 (diff)
downloadgcc-aa6d7c816c8b6ed5f1348a14ad242fa936d5840f.zip
gcc-aa6d7c816c8b6ed5f1348a14ad242fa936d5840f.tar.gz
gcc-aa6d7c816c8b6ed5f1348a14ad242fa936d5840f.tar.bz2
java-tree.h (method_entry): Declare.
* java-tree.h (method_entry): Declare. Declare VECs containing it. (struct lang_type): Change type of otable_methods, atable_methods, and itable_methods to VECs. Fix comment for atable_methods. (emit_symbol_table): Take a VEC instead of a tree. (get_symbol_table_index): Take a VEC * instead of a tree *. * class.c (add_table_and_syms): Take a VEC instead of a tree. (emit_symbol_table): Update for changed parameter type. * expr.c (get_symbol_table_index): Likewise. From-SVN: r159974
Diffstat (limited to 'gcc/java/expr.c')
-rw-r--r--gcc/java/expr.c38
1 files changed, 13 insertions, 25 deletions
diff --git a/gcc/java/expr.c b/gcc/java/expr.c
index 0f3cf1a..62598e7 100644
--- a/gcc/java/expr.c
+++ b/gcc/java/expr.c
@@ -2289,34 +2289,22 @@ invoke_build_dtable (int is_invoke_interface, VEC(tree,gc) *arg_list)
reused. */
int
-get_symbol_table_index (tree t, tree special, tree *symbol_table)
+get_symbol_table_index (tree t, tree special,
+ VEC(method_entry,gc) **symbol_table)
{
- int i = 1;
- tree method_list;
+ method_entry *e;
+ unsigned i;
- if (*symbol_table == NULL_TREE)
- {
- *symbol_table = build_tree_list (special, t);
- return 1;
- }
-
- method_list = *symbol_table;
-
- while (1)
- {
- tree value = TREE_VALUE (method_list);
- tree purpose = TREE_PURPOSE (method_list);
- if (value == t && purpose == special)
- return i;
- i++;
- if (TREE_CHAIN (method_list) == NULL_TREE)
- break;
- else
- method_list = TREE_CHAIN (method_list);
- }
+ for (i = 0; VEC_iterate (method_entry, *symbol_table, i, e); i++)
+ if (t == e->method && special == e->special)
+ goto done;
+
+ e = VEC_safe_push (method_entry, gc, *symbol_table, NULL);
+ e->method = t;
+ e->special = special;
- TREE_CHAIN (method_list) = build_tree_list (special, t);
- return i;
+ done:
+ return i+1;
}
tree