OSDN Git Service

* expr.c (java_push_constant_from_pool): Handle 'ldc class'.
authortromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 26 May 2006 15:41:46 +0000 (15:41 +0000)
committertromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 26 May 2006 15:41:46 +0000 (15:41 +0000)
* verify-glue.c (vfy_class_type): New function.
* verify-impl.c (check_constant): Allow 'ldc class'.
* verify.h (vfy_class_type): Declare.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@114135 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/java/ChangeLog
gcc/java/expr.c
gcc/java/verify-glue.c
gcc/java/verify-impl.c
gcc/java/verify.h

index fa2580f..edcde22 100644 (file)
@@ -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
index b2e03fc..94f76fd 100644 (file)
@@ -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);
index 737a19b..23fcaba 100644 (file)
@@ -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.
 
@@ -329,6 +329,12 @@ vfy_object_type (void)
 }
 
 vfy_jclass
+vfy_class_type (void)
+{
+  return class_type_node;
+}
+
+vfy_jclass
 vfy_string_type (void)
 {
   vfy_jclass k;
index f672fcf..886dfe7 100644 (file)
@@ -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;
index d635193..b85176e 100644 (file)
@@ -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);