From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 2449 invoked by alias); 11 Apr 2012 12:43:49 -0000 Received: (qmail 2432 invoked by uid 22791); 11 Apr 2012 12:43:46 -0000 X-SWARE-Spam-Status: No, hits=-4.8 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,KHOP_RCVD_TRUST,KHOP_THREADED,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,TW_JC X-Spam-Check-By: sourceware.org Received: from mail-yw0-f47.google.com (HELO mail-yw0-f47.google.com) (209.85.213.47) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 11 Apr 2012 12:43:31 +0000 Received: by yhjj56 with SMTP id j56so401797yhj.20 for ; Wed, 11 Apr 2012 05:43:31 -0700 (PDT) MIME-Version: 1.0 Received: by 10.50.183.193 with SMTP id eo1mr5380703igc.20.1334148210568; Wed, 11 Apr 2012 05:43:30 -0700 (PDT) Received: by 10.42.228.200 with HTTP; Wed, 11 Apr 2012 05:43:30 -0700 (PDT) In-Reply-To: <4F855B49.2070605@redhat.com> References: <4F855B49.2070605@redhat.com> Date: Wed, 11 Apr 2012 12:43:00 -0000 Message-ID: Subject: Re: jcf-reader: support for JSR 292 classfile extensions From: Richard Guenther To: Andrew Haley Cc: GCC Patches , GCJ-patches Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Mailing-List: contact java-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: java-patches-owner@gcc.gnu.org X-SW-Source: 2012-q2/txt/msg00009.txt.bz2 On Wed, Apr 11, 2012 at 12:22 PM, Andrew Haley wrote: > This adds support for the new (Version 51.0) class file format. =A0It > doesn't actually generate code for invokedynamic bcause we don't have > any runtime support yet, but it's a start. =A0jcf-dump prints all of the > new attributes. This breaks bootstrap for me: In file included from /space/rguenther/src/svn/trunk/gcc/java/jcf-parse.c:1009:0: /space/rguenther/src/svn/trunk/gcc/java/jcf-reader.c:550:1: error: 'int jcf_parse_bootstrap_methods(JCF*, int)' defined but not used [-Werror=3Dunused-function] jcf_parse_bootstrap_methods (JCF* jcf, int attribute_length ATTRIBUTE_UNUS= ED) ^ cc1plus: all warnings being treated as errors make[3]: *** [java/jcf-parse.o] Error 1 make[3]: *** Waiting for unfinished jobs.... > Andrew. > > > 2012-04-11 =A0Andrew Haley =A0 > > =A0 =A0 =A0 =A0* jcf.h (bootstrap_method): New. > =A0 =A0 =A0 =A0(BootstrapMethods): New. > =A0 =A0 =A0 =A0(JCF): Add BootstrapMethods. > =A0 =A0 =A0 =A0(enum cpool_tag): Add MethodHandle, MethodType, and Invoke= Dynamic. > =A0 =A0 =A0 =A0* jcf-reader.c (jcf_parse_bootstrap_methods): New. > =A0 =A0 =A0 =A0(jcf_parse_constant_pool): Handlers for MethodHandle, Meth= odType, > =A0 =A0 =A0 =A0and InvokeDynamic. > =A0 =A0 =A0 =A0(jcf_parse_bootstrap_methods): New. > =A0 =A0 =A0 =A0* javaop.def (invokedynamic): New opcode. > =A0 =A0 =A0 =A0* jcf-parse.c (get_constant): An unknown constant type sho= uld not > =A0 =A0 =A0 =A0be an internal error, but a fatal one. =A0Make it so. > =A0 =A0 =A0 =A0* jcf-dump.c (HANDLE_BOOTSTRAP_METHODS_ATTRIBUTE): New. > =A0 =A0 =A0 =A0(HANDLE_END_BOOTSTRAP_METHODS): New. > =A0 =A0 =A0 =A0(print_constant): Handlers for MethodHandle, MethodType, a= nd > =A0 =A0 =A0 =A0InvokeDynamic. > > Index: java/jcf-dump.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- java/jcf-dump.c =A0 =A0 (revision 186103) > +++ java/jcf-dump.c =A0 =A0 (working copy) > @@ -430,7 +430,24 @@ > =A0 print_element_value (out, jcf, 1); =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 \ > =A0} > > +#define HANDLE_BOOTSTRAP_METHODS_ATTRIBUTE() =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 =A0 =A0 \ > +{ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0\ > + =A0COMMON_HANDLE_ATTRIBUTE(jcf, attribute_name, attribute_length); =A0 = =A0 =A0\ > + =A0fputc ('\n', out); jcf_parse_bootstrap_methods (jcf, attribute_lengt= h); \ > +} > > +#define HANDLE_END_BOOTSTRAP_METHODS(NUM_METHODS) =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0\ > + =A0{ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0\ > + =A0 =A0int i; =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 \ > + =A0 =A0for (i =3D 0; i < NUM_METHODS; i++) =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0\ > + =A0 =A0 =A0{ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0\ > + =A0 =A0 =A0 bootstrap_method *m =3D &jcf->bootstrap_methods.methods[i];= =A0 =A0 =A0 \ > + =A0 =A0 =A0 fprintf (out, " =A0%d: ", i); =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 \ > + =A0 =A0 =A0 print_constant (out, jcf, m->method_ref, 1); =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0\ > + =A0 =A0 =A0 fprintf (out, "\n"); =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0\ > + =A0 =A0 =A0} =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0\ > + =A0} > + > =A0#define PROCESS_OTHER_ATTRIBUTE(JCF, INDEX, LENGTH) \ > =A0{ COMMON_HANDLE_ATTRIBUTE(JCF, INDEX, LENGTH); \ > =A0 fputc ('\n', out); JCF_SKIP (JCF, LENGTH); } > @@ -898,6 +915,53 @@ > =A0 =A0 =A0 =A0fputc ('\"', out); > =A0 =A0 =A0 } > =A0 =A0 =A0 break; > + =A0 =A0case CONSTANT_MethodHandle: > + =A0 =A0 =A0{ > + =A0 =A0 =A0 int kind =3D JPOOL_USHORT1 (jcf, index); > + =A0 =A0 =A0 if (verbosity > 0) > + =A0 =A0 =A0 =A0 fprintf (out, "MethodHandle kind: %d=3D", kind); > + =A0 =A0 =A0 switch(kind) { > + =A0 =A0 =A0 case 1: > + =A0 =A0 =A0 case 2: > + =A0 =A0 =A0 case 3: > + =A0 =A0 =A0 case 4: > + =A0 =A0 =A0 =A0 if (verbosity > 0) > + =A0 =A0 =A0 =A0 =A0 fprintf (out, "Fieldref: %ld=3D", JPOOL_USHORT2 (jc= f, index)); > + =A0 =A0 =A0 =A0 print_constant (out, jcf, JPOOL_USHORT2 (jcf, index), 0= ); > + =A0 =A0 =A0 case 5: > + =A0 =A0 =A0 case 6: > + =A0 =A0 =A0 case 7: > + =A0 =A0 =A0 case 8: > + =A0 =A0 =A0 =A0 if (verbosity > 0) > + =A0 =A0 =A0 =A0 =A0 fprintf (out, "Methodref: %ld=3D", JPOOL_USHORT2 (j= cf, index)); > + =A0 =A0 =A0 =A0 print_constant (out, jcf, JPOOL_USHORT2 (jcf, index), 0= ); > + =A0 =A0 =A0 =A0 break; > + =A0 =A0 =A0 case 9: > + =A0 =A0 =A0 =A0 if (verbosity > 0) > + =A0 =A0 =A0 =A0 =A0 fprintf (out, "InterfaceMethodref: %ld=3D", JPOOL_U= SHORT2 (jcf, index)); > + =A0 =A0 =A0 =A0 print_constant (out, jcf, JPOOL_USHORT2 (jcf, index), 0= ); > + =A0 =A0 =A0 =A0 break; > + =A0 =A0 =A0 } > + =A0 =A0 =A0 break; > + =A0 =A0 =A0} > + =A0 =A0case CONSTANT_MethodType: > + =A0 =A0 =A0if (verbosity > 0) > + =A0 =A0 =A0 fprintf (out, "MethodType %ld: ", JPOOL_USHORT1 (jcf, index= )); > + =A0 =A0 =A0print_signature (out, jcf, JPOOL_USHORT1 (jcf, index), 0); > + =A0 =A0 =A0break; > + =A0 =A0case CONSTANT_InvokeDynamic: > + =A0 =A0 =A0{ > + =A0 =A0 =A0 uint16 name_and_type =3D JPOOL_USHORT2 (jcf, index); > + =A0 =A0 =A0 if (verbosity > 0) > + =A0 =A0 =A0 =A0 fprintf (out, "InvokeDynamic: "); > + =A0 =A0 =A0 fprintf (out, "bootstrap_method: %ld ", JPOOL_USHORT1 (jcf,= index)); > + =A0 =A0 =A0 if (verbosity =3D=3D 2) > + =A0 =A0 =A0 =A0 fprintf (out, " name_and_type: %d=3D<", name_and_type); > + =A0 =A0 =A0 print_constant_terse (out, jcf, name_and_type, CONSTANT_Nam= eAndType); > + =A0 =A0 =A0 if (verbosity =3D=3D 2) > + =A0 =A0 =A0 =A0 fputc ('>', out); > + =A0 =A0 =A0 break; > + =A0 =A0 =A0} > =A0 =A0 default: > =A0 =A0 =A0 fprintf (out, "(Unknown constant type %d)", kind); > =A0 =A0 } > Index: java/jcf-parse.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- java/jcf-parse.c =A0 =A0(revision 186103) > +++ java/jcf-parse.c =A0 =A0(working copy) > @@ -1113,8 +1113,8 @@ > =A0 jcf->cpool.data[index].t =3D value; > =A0 return value; > =A0bad: > - =A0internal_error ("bad value constant type %d, index %d", > - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 JPOOL_TAG (jcf, index), index); > + =A0fatal_error ("bad value constant type %d, index %d", > + =A0 =A0 =A0 =A0 =A0 =A0 =A0JPOOL_TAG (jcf, index), index); > =A0} > > =A0tree > Index: java/javaop.def > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- java/javaop.def =A0 =A0 (revision 186103) > +++ java/javaop.def =A0 =A0 (working copy) > @@ -292,6 +292,7 @@ > =A0JAVAOP (invokespecial, 183, INVOKE, =A0SPECIAL, 0) > =A0JAVAOP (invokestatic, =A0184, INVOKE, =A0STATIC, 0) > =A0JAVAOP (invokeinterface,185, INVOKE, INTERFACE, 1) > +JAVAOP (invokedynamic, 186, INVOKE, =A0DYNAMIC, 1) > =A0JAVAOP (new, =A0 =A0 =A0 =A0 =A0 187, OBJECT, =A0PTR, =A0 =A0NEW) > =A0JAVAOP (newarray, =A0 =A0 =A0188, ARRAY, =A0 NUM, =A0 =A0NEW) > =A0JAVAOP (anewarray, =A0 =A0 189, ARRAY, =A0 PTR, =A0 =A0NEW) > Index: java/jcf-reader.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- java/jcf-reader.c =A0 (revision 186103) > +++ java/jcf-reader.c =A0 (working copy) > @@ -36,6 +36,7 @@ > =A0static int jcf_parse_one_method (JCF *, int); > =A0static int jcf_parse_methods (JCF *); > =A0static int jcf_parse_final_attributes (JCF *); > +static int jcf_parse_bootstrap_methods (JCF *, int ); > =A0#ifdef NEED_PEEK_ATTRIBUTE > =A0static int peek_attribute (JCF *, int, const char *, int); > =A0#endif > @@ -293,7 +294,16 @@ > =A0 =A0 } > =A0 else > =A0#endif > + =A0if (MATCH_ATTRIBUTE ("BootstrapMethods")) > =A0 =A0 { > +#ifdef HANDLE_BOOTSTRAP_METHODS_ATTRIBUTE > + =A0 =A0 =A0HANDLE_BOOTSTRAP_METHODS_ATTRIBUTE(); > +#else > + =A0 =A0 =A0JCF_SKIP (jcf, attribute_length); > +#endif > + =A0 =A0} > + =A0 else > + =A0 =A0{ > =A0#ifdef PROCESS_OTHER_ATTRIBUTE > =A0 =A0 =A0 PROCESS_OTHER_ATTRIBUTE(jcf, attribute_name, attribute_length= ); > =A0#else > @@ -382,6 +392,17 @@ > =A0 =A0 =A0 =A0 =A0JCF_SKIP (jcf, n); > =A0#endif > =A0 =A0 =A0 =A0 =A0break; > + =A0 =A0 =A0 case CONSTANT_MethodHandle: > + =A0 =A0 =A0 =A0 jcf->cpool.data[i].w =3D JCF_readu (jcf); > + =A0 =A0 =A0 =A0 jcf->cpool.data[i].w |=3D JCF_readu2 (jcf) << 16; > + =A0 =A0 =A0 =A0 break; > + =A0 =A0 =A0 case CONSTANT_MethodType: > + =A0 =A0 =A0 =A0 jcf->cpool.data[i].w =3D JCF_readu2 (jcf); > + =A0 =A0 =A0 =A0 break; > + =A0 =A0 =A0 case CONSTANT_InvokeDynamic: > + =A0 =A0 =A0 =A0 jcf->cpool.data[i].w =3D JCF_readu2 (jcf); > + =A0 =A0 =A0 =A0 jcf->cpool.data[i].w |=3D JCF_readu2 (jcf) << 16; > + =A0 =A0 =A0 =A0 break; > =A0 =A0 =A0 =A0default: > =A0 =A0 =A0 =A0 =A0return i; > =A0 =A0 =A0 =A0} > @@ -521,3 +542,39 @@ > =A0 return 0; > =A0} > > +/* Read and handle the "BootstrapMethods" attribute. > + > + =A0 Return 0 if OK. > +*/ > +static int > +jcf_parse_bootstrap_methods (JCF* jcf, int attribute_length ATTRIBUTE_UN= USED) > +{ > + =A0int i; > + =A0uint16 num_methods =3D JCF_readu2 (jcf); > + =A0jcf->bootstrap_methods.count =3D num_methods; > + =A0jcf->bootstrap_methods.methods > + =A0 =A0=3D (bootstrap_method *) ggc_alloc_atomic (num_methods > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0 =A0 =A0 * sizeof (bootstrap_method)); > +#ifdef HANDLE_START_BOOTSTRAP_METHODS > + =A0HANDLE_START_BOOTSTRAP_METHODS (jcf, num_methods); > +#endif > + > + =A0for (i =3D 0; i < num_methods; i++) > + =A0 =A0{ > + =A0 =A0 =A0unsigned j; > + =A0 =A0 =A0bootstrap_method *m =3D &jcf->bootstrap_methods.methods[i]; > + =A0 =A0 =A0m->method_ref =3D JCF_readu2 (jcf); > + =A0 =A0 =A0m->num_arguments =3D JCF_readu2 (jcf); > + =A0 =A0 =A0m->bootstrap_arguments > + =A0 =A0 =A0 =3D (unsigned *) ggc_alloc_atomic (m->num_arguments > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0= =A0 =A0* sizeof (unsigned)); > + =A0 =A0 =A0for (j =3D 0; j < m->num_arguments; j++) > + =A0 =A0 =A0 m->bootstrap_arguments[j] =3D JCF_readu2 (jcf); > + =A0 =A0} > + > +#ifdef HANDLE_END_BOOTSTRAP_METHODS > + =A0HANDLE_END_BOOTSTRAP_METHODS (num_methods); > +#endif > + > + =A0return 0; > +} > Index: java/jcf.h > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- java/jcf.h =A0(revision 186103) > +++ java/jcf.h =A0(working copy) > @@ -88,6 +88,17 @@ > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 desc ("cpool_entry_is= _tree (%1.tags%a)"))) =A0 data; > =A0} CPool; > > +typedef struct GTY(()) bootstrap_method { > + =A0unsigned method_ref; > + =A0unsigned num_arguments; > + =A0unsigned* GTY((length ("%h.num_arguments"))) bootstrap_arguments; > +} bootstrap_method; > + > +typedef struct GTY(()) BootstrapMethods { > + =A0unsigned count; > + =A0bootstrap_method* GTY((length ("%h.count"))) methods; > +} BootstrapMethods; > + > =A0struct ZipDirectory; > > =A0/* JCF encapsulates the state of reading a Java Class File. */ > @@ -109,6 +120,7 @@ > =A0 JCF_u2 this_class; > =A0 JCF_u2 super_class; > =A0 CPool cpool; > + =A0BootstrapMethods bootstrap_methods; > =A0} JCF; > =A0/*typedef JCF* =A0JCF_FILE;*/ > > @@ -245,6 +257,10 @@ > =A0 CONSTANT_NameAndType =3D 12, > =A0 CONSTANT_Utf8 =3D 1, > =A0 CONSTANT_Unicode =3D 2, > + =A0CONSTANT_MethodHandle =3D 15, > + =A0CONSTANT_MethodType =3D 16, > + =A0CONSTANT_InvokeDynamic =3D 18, > + > =A0 CONSTANT_None =3D 0 > =A0}; > > Index: java/jcf-io.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- java/jcf-io.c =A0 =A0 =A0 (revision 186103) > +++ java/jcf-io.c =A0 =A0 =A0 (working copy) > @@ -518,6 +518,26 @@ > =A0 =A0 =A0 =A0case CONSTANT_Utf8: > =A0 =A0 =A0 =A0case CONSTANT_Unicode: > =A0 =A0 =A0 =A0 =A0break; > + =A0 =A0 =A0 case CONSTANT_MethodHandle: > + =A0 =A0 =A0 =A0 n =3D JPOOL_USHORT1 (jcf, i); > + =A0 =A0 =A0 =A0 if (n < 1 || n > 9) > + =A0 =A0 =A0 =A0 =A0 return i; > + =A0 =A0 =A0 =A0 n =3D JPOOL_USHORT2 (jcf, i); > + =A0 =A0 =A0 =A0 if (n <=3D 0 || n >=3D JPOOL_SIZE(jcf)) > + =A0 =A0 =A0 =A0 =A0 return i; > + =A0 =A0 =A0 =A0 break; > + =A0 =A0 =A0 case CONSTANT_MethodType: > + =A0 =A0 =A0 =A0 n =3D JPOOL_USHORT1 (jcf, i); > + =A0 =A0 =A0 =A0 if (n <=3D 0 || n >=3D JPOOL_SIZE(jcf) > + =A0 =A0 =A0 =A0 =A0 =A0 || JPOOL_TAG (jcf, n) !=3D CONSTANT_Utf8) > + =A0 =A0 =A0 =A0 =A0 return i; > + =A0 =A0 =A0 =A0 break; > + =A0 =A0 =A0 case CONSTANT_InvokeDynamic: > + =A0 =A0 =A0 =A0 n =3D JPOOL_USHORT2 (jcf, i); > + =A0 =A0 =A0 =A0 if (n <=3D 0 || n >=3D JPOOL_SIZE(jcf) > + =A0 =A0 =A0 =A0 =A0 =A0 || JPOOL_TAG (jcf, n) !=3D CONSTANT_NameAndType) > + =A0 =A0 =A0 =A0 =A0 return i; > + =A0 =A0 =A0 =A0 break; > =A0 =A0 =A0 =A0default: > =A0 =A0 =A0 =A0 =A0return i; > =A0 =A0 =A0 =A0}