* 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
+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
2006-05-25 Andrew Haley <aph@redhat.com>
PR java/27756
c = build_ref_from_constant_pool (index);
c = convert (promote_type (string_type_node), c);
}
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);
else
c = get_constant (jcf, index);
push_value (c);
/* Glue to interface gcj with bytecode verifier.
/* 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.
This file is part of GCC.
+vfy_jclass
+vfy_class_type (void)
+{
+ return class_type_node;
+}
+
vfy_jclass
vfy_string_type (void)
{
vfy_jclass
vfy_string_type (void)
{
init_type_from_tag (&t, int_type);
else if (vfy_tag (pool, index) == JV_CONSTANT_Float)
init_type_from_tag (&t, float_type);
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;
else
verify_fail_pc ("String, int, or float constant expected", vfr->start_PC);
return t;
/* Declarations to interface gcj with bytecode verifier.
/* 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.
This file is part of GCC.
bool vfy_is_abstract (vfy_jclass klass);
vfy_jclass vfy_find_class (vfy_jclass klass, vfy_string name);
vfy_jclass vfy_object_type (void);
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);
vfy_jclass vfy_string_type (void);
vfy_jclass vfy_throwable_type (void);
vfy_jclass vfy_unsuitable_type (void);