expr.c (java_push_constant_from_pool): Handle 'ldc class'.
* expr.c (java_push_constant_from_pool): Handle 'ldc class'. * verify-glue.c (vfy_class_type): New function. * verify-impl.c (check_constant): Allow 'ldc class'. * verify.h (vfy_class_type): Declare. From-SVN: r114135
This commit is contained in:
parent
7541c31ba2
commit
153d08d59b
5 changed files with 26 additions and 2 deletions
|
@ -1,3 +1,10 @@
|
|||
2006-05-26 Tom Tromey <tromey@redhat.com>
|
||||
|
||||
* expr.c (java_push_constant_from_pool): Handle 'ldc class'.
|
||||
* verify-glue.c (vfy_class_type): New function.
|
||||
* verify-impl.c (check_constant): Allow 'ldc class'.
|
||||
* verify.h (vfy_class_type): Declare.
|
||||
|
||||
2006-05-25 Andrew Haley <aph@redhat.com>
|
||||
|
||||
PR java/27756
|
||||
|
|
|
@ -3117,6 +3117,12 @@ java_push_constant_from_pool (JCF *jcf, int index)
|
|||
c = build_ref_from_constant_pool (index);
|
||||
c = convert (promote_type (string_type_node), c);
|
||||
}
|
||||
else if (JPOOL_TAG (jcf, index) == CONSTANT_Class
|
||||
|| JPOOL_TAG (jcf, index) == CONSTANT_ResolvedClass)
|
||||
{
|
||||
tree record = get_class_constant (jcf, index);
|
||||
c = build_class_ref (record);
|
||||
}
|
||||
else
|
||||
c = get_constant (jcf, index);
|
||||
push_value (c);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* Glue to interface gcj with bytecode verifier.
|
||||
Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GCC.
|
||||
|
||||
|
@ -328,6 +328,12 @@ vfy_object_type (void)
|
|||
return k;
|
||||
}
|
||||
|
||||
vfy_jclass
|
||||
vfy_class_type (void)
|
||||
{
|
||||
return class_type_node;
|
||||
}
|
||||
|
||||
vfy_jclass
|
||||
vfy_string_type (void)
|
||||
{
|
||||
|
|
|
@ -1975,6 +1975,10 @@ check_constant (int index)
|
|||
init_type_from_tag (&t, int_type);
|
||||
else if (vfy_tag (pool, index) == JV_CONSTANT_Float)
|
||||
init_type_from_tag (&t, float_type);
|
||||
else if (vfy_tag (pool, index) == JV_CONSTANT_Class
|
||||
|| vfy_tag (pool, index) == JV_CONSTANT_ResolvedClass)
|
||||
/* FIXME: should only allow this for 1.5 bytecode. */
|
||||
init_type_from_class (&t, vfy_class_type ());
|
||||
else
|
||||
verify_fail_pc ("String, int, or float constant expected", vfr->start_PC);
|
||||
return t;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* Declarations to interface gcj with bytecode verifier.
|
||||
Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GCC.
|
||||
|
||||
|
@ -112,6 +112,7 @@ vfy_jclass vfy_get_component_type (vfy_jclass klass);
|
|||
bool vfy_is_abstract (vfy_jclass klass);
|
||||
vfy_jclass vfy_find_class (vfy_jclass klass, vfy_string name);
|
||||
vfy_jclass vfy_object_type (void);
|
||||
vfy_jclass vfy_class_type (void);
|
||||
vfy_jclass vfy_string_type (void);
|
||||
vfy_jclass vfy_throwable_type (void);
|
||||
vfy_jclass vfy_unsuitable_type (void);
|
||||
|
|
Loading…
Add table
Reference in a new issue