jilc-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Jilc-patches] CVS: jilc/src jdasm.c,1.7,1.8 jdasm.h,1.9,1.10 jopcodes.c


From: Gopal.V <address@hidden>
Subject: [Jilc-patches] CVS: jilc/src jdasm.c,1.7,1.8 jdasm.h,1.9,1.10 jopcodes.c,1.6,1.7 jopcodes.h,1.6,1.7 jparser.c,1.5,1.6 jparser.h,1.5,1.6
Date: Wed, 29 May 2002 23:04:43 -0400

Update of /cvsroot/jilc/jilc/src
In directory subversions:/tmp/cvs-serv19976/src

Modified Files:
        jdasm.c jdasm.h jopcodes.c jopcodes.h jparser.c jparser.h 
Log Message:
clean up the mess gvaish made


Index: jdasm.c
===================================================================
RCS file: /cvsroot/jilc/jilc/src/jdasm.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- jdasm.c     22 Apr 2002 09:12:37 -0000      1.7
+++ jdasm.c     30 May 2002 03:04:40 -0000      1.8
@@ -1,11 +1,9 @@
-
 /*
- * jdasm.c - java Disassembler
- *
- * Copyright (C) 2002  Free Software Foundation India
- *
- * Author : Gopal.V
+ * jdasm.c Deassembler implementation file.
  *
+ * Copyright (C) 2002 Gopal.V
+ * Copyright (C) 2002 Gaurav Vaish
+ * 
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
@@ -21,976 +19,592 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
-#include <stdio.h>
-#include <stdlib.h>
-#include "jopcodes.h"
-//#include "pretty.h"
-#define OK 0
-#define ERROR 1
-//#define DEBUG 1
-FILE * DEBUG_OUT;
-int pretty_print=0;
-#define IF_PRETTY_PRINT(x) if(pretty_print)x;
-typedef unsigned char byte;
-typedef unsigned char UInt8;
-typedef short Int16 ;
-typedef unsigned short UInt16;
-typedef int Int32;
-typedef unsigned int UInt32;
-typedef long long Int64;
-typedef unsigned long long UInt64;
-
-typedef struct
-{
-    byte *data;
-    UInt32 next;
-    UInt32 left;
-}jbuffer;
-
-#define  CONSTANT_Utf8                     1
-#define  CONSTANT_Integer                  3
-#define  CONSTANT_Float                  4
-#define  CONSTANT_Long                   5
-#define  CONSTANT_Double                  6
-#define  CONSTANT_Classref                  7
-#define  CONSTANT_String                  8
-#define  CONSTANT_Fieldref                  9
-#define  CONSTANT_Methodref             10
-#define  CONSTANT_InterfaceMethodref     11
-#define  CONSTANT_NameAndType            12
-char* CPTable[]=\
-{
-    "Junk","CONSTANT_Utf8","Junk","CONSTANT_Integer","CONSTANT_Float",
-    "CONSTANT_Long","CONSTANT_Double","CONSTANT_Class","CONSTANT_String",
-    "CONSTANT_Field","CONSTANT_Method","CONSTANT_InterfaceMethod",
-    "CONSTANT_NameAndType","Junk","Junk","Junk"
-};
-//access flags
-#define ACC_PUBLIC             0x0001
-#define ACC_PRIVATE         0x0002
-#define ACC_PROTECTED         0x0004
-#define ACC_STATIC            0x0008
-#define ACC_FINAL            0x0010
-#define ACC_SYNCHRONIZED     0x0020
-#define ACC_VOLATILE        0x0040
-#define ACC_TRANSIENT        0x0080
-#define ACC_NATIVE            0x0100
-#define ACC_ABSTRACT        0x0400
-//attribute types
-#define ATTR_TOP 0
-#define ATTR_FIELD 1
-#define ATTR_METHOD 2
-#define ATTR_CODE 3
-
-#define PRINT_OPCODE_NAME(x) ILColorBold();ILColorBlue();\
-                             printf("\t %s ",x.name);ILColorClear();
-#define OPCODE_PRINT(x) x
-/*
- * end of my defs
- */
-inline UInt8 read_byte(FILE *fp)
-{
-    UInt8 retval;
-    retval=fgetc(fp);
-    return retval;
-}
-inline UInt16 read_uint16(FILE *fp)
-{
-    UInt16 retval=0;
-    retval=((UInt16)read_byte(fp))<<8|((UInt16)read_byte(fp));
-    return retval;
-}
-inline UInt32 read_uint32(FILE *fp)
-{
-    UInt32 retval=0;
-    retval=((UInt32)read_uint16(fp))<<16 | ((UInt32)read_uint16(fp));
-    return retval;
-}
-inline UInt64 read_uint64(FILE *fp)
-{
-    UInt64 retval;
-    retval=((UInt64)read_uint32(fp)) << 32 | ((UInt64)read_uint32(fp));
-    return retval;
-}
-inline void skip_bytes(FILE *fp,int bytes)
-{
-    int i;
-    for(i=0;i<bytes;i++)fgetc(fp);
-}
-/*
- *
- * buffer operations (he he ha !)
- */
-inline byte bufread_byte(jbuffer *buf)
-{
-    byte retval;
-    if(buf->left==0)
-    {
-        fprintf(DEBUG_OUT,"Buffer empty");
-        return 0;
-    }
-    buf->left--;
-    retval=buf->data[buf->next];
-    buf->next++;
-    return retval;
-}
-inline UInt16 bufread_uint16(jbuffer *buf)
-{
-    return ((UInt16)bufread_byte(buf))<<8 | (UInt16)bufread_byte(buf);
-}
-inline UInt16 bufread_uint32(jbuffer *buf)
-{
-    return ((UInt32)bufread_uint16(buf))<<16 | (UInt16)bufread_uint16(buf);
-}
-inline void bufskip_bytes(jbuffer *buf,UInt32 bytes)
-{
-    if(buf->left < bytes || bytes < 0 )
-    {
-        fprintf(DEBUG_OUT,"**OOPS Cannot do this \n");
-        return;
-    }
-    buf->next+=bytes;
-    buf->left-=bytes;
-}
-/*
- * End of Little Endian read funcs
+#include <jdasm.h>
+#include <jopcodes.h>
+#include <jparser.h>
+
+/**
+ * Methods to help printing the deassmbled code.
  */
-typedef struct
+char *array_types[]=
 {
-    UInt8        type;
-    UInt16        length;
-    UInt8        skip;//for Longs and Doubles this is 1
-    union
-    {
-        char       *utf8string;
-        Int32        intvalue;
-        Int64        longvalue;
-        float        floatvalue;
-        double        doublevalue;
-        UInt32        strvalue;
-        struct
-        {
-            UInt32 name_index;
-            //filled in during resolve
-            char *full_name;
-        } class_value;
-        struct
-        {
-            UInt32 class_index;
-            UInt32 name_and_type;
-            char *full_class;
-            char *full_name;
-            char *full_type;
-        } ref_value;
-        struct
-        {
-            UInt32 name_index;
-            UInt32 type_index;
-            char *full_name;
-            char *full_type;
-        } name_and_type;
-    } un;
-} JVCPEntry;
-
-typedef struct
-{
-    UInt16 start_pc;
-    UInt16 end_pc;
-    UInt16 handler_pc;
-    UInt16 catch_type;
-}JVExceptionHandler;
-typedef struct
-{
-    UInt16 class_index;
-    char *class_name;
-}JVException;
-typedef struct _JVAttributeEntry
-{
-    UInt16 name_index;
-    UInt32 byte_count;
-    UInt8 type;
-    jbuffer *buf;
-    union
-    {
-    struct
-    {
-        UInt16 source_index;
-        char *full_source;
-    }source;
-    struct
-    {
-        UInt16 except_count;
-        JVException *excepts;
-    }exception;
-    struct
-    {
-        UInt16 max_stack;
-        UInt16 max_locals;
-        UInt32 code_count;
-        byte *code;
-        UInt16 handler_count;
-        JVExceptionHandler *handlers;
-        UInt16 attr_count;
-        byte *attributes;
-    }code;
-    }un;
-    //description attrs -- resolved
-    char *full_name;
-}JVAttributeEntry;
-
-typedef struct
-{
-    UInt16 acc_flags;
-    UInt16 name_index;
-    UInt16 type_index;
-    UInt16 attr_count;
-    JVAttributeEntry *attr_entries;
-    char *full_flags;
-    char *full_name;
-    char *full_type;
-}JVFieldEntry;
-
-typedef struct
-{
-    UInt16 index;
-    char *full_name;
-}JVInterfaceEntry;
-
-typedef struct
-{
-    UInt16 acc_flags;
-    UInt16 name_index;
-    UInt16 type_index;
-    UInt16 attr_count;
-    JVAttributeEntry *attr_entries;
-    //resolved
-    UInt16 code_index;
-    UInt16 except_index;
-    char *full_flags;
-    char *full_name;
-    char *full_type;
-}JVMethodEntry;
-typedef struct
-{
-    UInt32 magic;
-    UInt16 min_version;
-    UInt16 maj_version;
-    UInt16 cp_count;
-    JVCPEntry *cp_entries;
-    UInt16 acc_flags;
-    UInt16 this_class;
-    UInt16 super_class;
-    UInt16 interface_count;
-    JVInterfaceEntry *inter_entries;
-    UInt16 field_count;
-    JVFieldEntry *field_entries;
-    UInt16 methods_count;
-    JVMethodEntry *method_entries;
-    UInt16 attr_count;
-    JVAttributeEntry *attr_entries;
-
-    //description entries
-    char *full_name;
-    char *full_super;
-    char *full_flags;
-}JVClass;
-int read_cp_entry(FILE *fp,JVCPEntry *cp_entry)
-{
-    Int32 f;
-    Int64 d;
-    cp_entry->type=read_byte(fp);
-    switch(cp_entry->type)
-    {
-        case CONSTANT_Utf8:
-                cp_entry->length=read_uint16(fp);
-                cp_entry->un.utf8string=(byte*)calloc(cp_entry->length+1,\
-                                sizeof(char));
-                
fread(cp_entry->un.utf8string,cp_entry->length,sizeof(char),fp);
-                break;
-        case CONSTANT_Integer:
-                cp_entry->un.intvalue=read_uint32(fp);
-                break;
-        case CONSTANT_Float:
-                f=read_uint32(fp);
-                memcpy(&cp_entry->un.floatvalue,&f,sizeof(float));
-                break;
-        case CONSTANT_Long:
-                cp_entry->un.longvalue=read_uint64(fp);
-                cp_entry->skip=1;//skip the next
-                break;
-        case CONSTANT_Double:
-                d=read_uint64(fp);
-                cp_entry->skip=1;//skip the next
-                memcpy(&cp_entry->un.doublevalue,&d,sizeof(double));
-                break;
-        case CONSTANT_String:
-                cp_entry->un.strvalue=read_uint16(fp);
-                break;
-        case CONSTANT_Classref:
-                cp_entry->un.class_value.name_index=read_uint16(fp);
-                break;
-        case CONSTANT_Fieldref:
-        case CONSTANT_Methodref:
-        case CONSTANT_InterfaceMethodref:
-                cp_entry->un.ref_value.class_index=read_uint16(fp);
-                cp_entry->un.ref_value.name_and_type=read_uint16(fp);
-                break;
-        case CONSTANT_NameAndType:
-                cp_entry->un.name_and_type.name_index=read_uint16(fp);
-                cp_entry->un.name_and_type.type_index=read_uint16(fp);
-                break;
-        default:
-            cp_entry->type=0;
-            //return ERROR;
-    }
-    return OK;
-}
-int read_cp(FILE *fp,JVClass *klass)
-{
-    int i,j;
-    klass->cp_count=read_uint16(fp);
-    klass->cp_entries=(JVCPEntry*)calloc(klass->cp_count,\
-                    sizeof(JVCPEntry));
-#ifdef DEBUG
-    fprintf(DEBUG_OUT,"No of CP : %d\n",klass->cp_count);
-#endif
-    //leave cp_entries[0] as empty
-    for(i=1;i<klass->cp_count;i++)
-    {
-        read_cp_entry(fp,&klass->cp_entries[i]);
-#ifdef DEBUG
-        fprintf(DEBUG_OUT,"%3d ) Constant_pool : %d | 
%s\n",i,klass->cp_entries[i].type,\
-                        CPTable[klass->cp_entries[i].type]);
-#endif
-        i+=klass->cp_entries[i].skip;
-    }
-    return OK;
-}
-int read_flags(FILE *fp,JVClass *klass)
-{
-    int errors=OK;
-    klass->acc_flags=read_uint16(fp);
-    klass->this_class=read_uint16(fp);
-    klass->super_class=read_uint16(fp);
-    return errors;
-}
-int read_interfaces(FILE *fp,JVClass *klass)
-{
-    int errors=OK;
-    int i;
-    klass->interface_count=read_uint16(fp);
-    //since there is only one format for
-    //interfaces i am writing all the code here
-    klass->inter_entries=(JVInterfaceEntry *)calloc(klass->interface_count\
-                    ,sizeof(JVInterfaceEntry));
-    for(i=0;i<klass->interface_count;i++)
-    {
-        klass->inter_entries[i].index=read_uint16(fp);
-    }
-    return errors;
-}
-JVAttributeEntry* read_attributes(FILE *fp,int n,int type)
-{
-    int i,j;
-    JVAttributeEntry *retval=(JVAttributeEntry *)calloc(n,\
-                    sizeof(JVAttributeEntry));
-    for(i=0;i<n;i++)
-    {
-        retval[i].type=type;
-        retval[i].name_index=read_uint16(fp);
-        retval[i].byte_count=read_uint32(fp);
-        retval[i].buf=(jbuffer*)calloc(1,sizeof(jbuffer));
-        retval[i].buf->data=(byte*)calloc(retval[i].byte_count,sizeof(char));
-        retval[i].buf->left=retval[i].byte_count;
-        fread(retval[i].buf->data,sizeof(char),retval[i].byte_count,fp);
-    }
-    return retval;
-}
-int read_fields(FILE *fp,JVClass *klass)
-{
-    int errors=OK;
-    int i;
-    klass->field_count=read_uint16(fp);
-    klass->field_entries= (JVFieldEntry*)calloc(klass->field_count,\
-                    sizeof(JVFieldEntry));
-    for(i=0;i<klass->field_count;i++)
-    {
-        klass->field_entries[i].acc_flags=read_uint16(fp);
-        klass->field_entries[i].name_index=read_uint16(fp);
-        klass->field_entries[i].type_index=read_uint16(fp);
-        klass->field_entries[i].attr_count=read_uint16(fp);
-        klass->field_entries[i].attr_entries=read_attributes(fp,\
-                        klass->field_entries[i].attr_count,ATTR_FIELD);
-    }
-    return errors;
-}
-int read_methods(FILE *fp,JVClass *klass)
-{
-    int i,errors=0;
-    klass->methods_count=read_uint16(fp);
-    klass->method_entries=(JVMethodEntry*)calloc(klass->methods_count,\
-                    sizeof(JVMethodEntry));
-    for(i=0;i<klass->methods_count;i++)
-    {
-        klass->method_entries[i].acc_flags=read_uint16(fp);
-        klass->method_entries[i].name_index=read_uint16(fp);
-        klass->method_entries[i].type_index=read_uint16(fp);
-        klass->method_entries[i].attr_count=read_uint16(fp);
-        klass->method_entries[i].attr_entries=read_attributes(fp,\
-                        klass->method_entries[i].attr_count,ATTR_METHOD);
-#ifdef DEBUG
-        fprintf(DEBUG_OUT,"Method : ");
-        fwrite(\
-        klass->cp_entries[klass->method_entries[i].name_index].un.utf8string\
-        ,sizeof(char),\
-        
klass->cp_entries[klass->method_entries[i].name_index].length,DEBUG_OUT);
-        fprintf(DEBUG_OUT,"\n");
-#endif
+       "JUNK 0",
+       "JUNK 1",
+       "JUNK 2",
+       "JUNK 3",
+       "boolean",   //4
+       "char",      //5
+       "float",     //6
+       "double",    //7
+       "byte",      //8
+       "short",     //9
+       "int",       //10
+       "long"       //11
+};
 
-    }
-    return errors;
-}
-int read_class(FILE *fp,JVClass *klass)
+void print_interfaces(JVClass *klass, JVCPEntry *cp_entry)
 {
-    int errors=OK;
-    klass->magic=read_uint32(fp);
-    if(klass->magic != 0xCAFEBABE)
-    {
-        fprintf(DEBUG_OUT,"I got %4X for magic\n",klass->magic);
-        fprintf(DEBUG_OUT,"I need a .class file !\n");
-        return ERROR;
-    }
-    klass->min_version=read_uint16(fp);
-    klass->maj_version=read_uint16(fp);
-    errors|=read_cp(fp,klass);
-    read_flags(fp,klass);
-    read_interfaces(fp,klass);
-    read_fields(fp,klass);
-    read_methods(fp,klass);
-    klass->attr_count=read_uint16(fp);
-    klass->attr_entries=read_attributes(fp,klass->attr_count,ATTR_TOP);
-//    
fwrite(klass->cp_entries[klass->attr_entries[0].name_index],sizeof(byte),\
-           klass->cp_entries[
-    return errors;
-}
-/******************************************************************************
- * end reading methods
- * now start the resolving methods
- 
******************************************************************************/
-char * resolve_utf8(UInt16 index,JVCPEntry *cp)
-//made it a function for type safety
-{
-    if(cp[index].type!=CONSTANT_Utf8)fprintf(DEBUG_OUT,"OOPS !\n");
-    return cp[index].un.utf8string;
-}
-char *resolve_string(UInt16 index,JVCPEntry *cp)
-{
-    return resolve_utf8(cp[index].un.strvalue,cp);
-}
-char *resolve_classref(UInt16 index,JVCPEntry *cp)
-{
-    cp[index].un.class_value.full_name=\
-            resolve_utf8(cp[index].un.class_value.name_index,cp);
-    return cp[index].un.class_value.full_name;
-}
-JVCPEntry* resolve_name_type(UInt16 index,JVCPEntry *cp)
-{
-    JVCPEntry *retval=&cp[index];
-    retval->un.name_and_type.full_name=\
-            resolve_utf8(retval->un.name_and_type.name_index,cp);
-    retval->un.name_and_type.full_type=\
-            resolve_utf8(retval->un.name_and_type.type_index,cp);
-    return retval;
-}
-JVCPEntry* resolve_ref(UInt16 index,JVCPEntry *cp)
-//for intreface,field,and method
-{
-    JVCPEntry *ref=&cp[index];
-    JVCPEntry *name_type=resolve_name_type(ref->un.ref_value.name_and_type,cp);
-    ref->un.ref_value.full_class=\
-            resolve_classref(ref->un.ref_value.class_index,cp);
-    ref->un.ref_value.full_name=name_type->un.name_and_type.full_name;
-    ref->un.ref_value.full_type=name_type->un.name_and_type.full_type;
-    return ref;//use pointers to the MAX
-}
-int resolve_cp(JVClass *klass,JVCPEntry *cp)//just for uniformity
-{
-    int i;
-    int errors=OK;
-    for(i=1;i<klass->cp_count;i++)
-    {
-        switch(cp[i].type)
-        {
-            case CONSTANT_Classref:
-                        resolve_classref(i,cp);
-                        break;
-            case CONSTANT_Fieldref:
-            case CONSTANT_Methodref:
-            case CONSTANT_InterfaceMethodref:
-                        resolve_ref(i,cp);
-                        break;
-            case CONSTANT_NameAndType:
-                        resolve_name_type(i,cp);
-                        break;
-        }
-    }
-    return errors;
-}
-char * resolve_flags(UInt16 flag,JVCPEntry *cp)
-// gvaish: Why do you need (JVCPEntry*)?
-{
-    char *retval=(char*)calloc(101,sizeof(char));//100+1 for luck
-    if(flag == 0x0000)strcat(retval," ");//I don't know why java has a 0 flag
-    if(flag & ACC_PUBLIC)strcat(retval,"public");
-    if(flag & ACC_PRIVATE)strcat(retval,"private");
-    if(flag & ACC_PROTECTED)strcat(retval,"protected");
-    if(flag & ACC_STATIC)strcat(retval," static");
-    if(flag & ACC_FINAL)strcat(retval," final");
-    if(flag & ACC_SYNCHRONIZED)strcat(retval," synchronized");
-    if(flag & ACC_VOLATILE)strcat(retval," volatile");
-    if(flag & ACC_TRANSIENT)strcat(retval," transient");
-    if(flag & ACC_NATIVE)strcat(retval," native");
-    if(flag & ACC_ABSTRACT)strcat(retval," abstract");
-    retval=realloc(retval,strlen(retval));//why waste memory ?
-    return retval;
-}
-int resolve_all_interfaces(JVClass *klass,JVCPEntry *cp)
-{
-    int errors=OK;
-    int i;
-    for(i=0;i<klass->interface_count;i++)
-    {
-        klass->inter_entries[i].full_name=resolve_classref(\
-                        klass->inter_entries[i].index,cp);
-#ifdef DEBUG
-        fprintf(DEBUG_OUT,".implements 
%s\n",klass->inter_entries[i].full_name);
-#endif
-    }
-    return errors;
-}
-//attribute processing
-int process_source_attribute(JVAttributeEntry *attr,JVCPEntry *cp)
-{
-    int errors=OK;
-    if(attr->type==ATTR_TOP && attr->byte_count==2)
-    if(!strncmp("SourceFile",resolve_utf8(attr->name_index,cp),10))
-    {
-        attr->un.source.source_index=bufread_uint16(attr->buf);
-        attr->un.source.full_source=\
-                resolve_utf8(attr->un.source.source_index,cp);
-        printf(".source %s\n",attr->un.source.full_source);
-        //plonk it to save memory
-    }
-    return errors;
-}
-int resolve_top_attributes(JVClass *klass,JVCPEntry *cp)
-{
-    int errors=OK;
-    int i;
-    for(i=0;i<klass->attr_count;i++)
-    {
-        klass->attr_entries[i].full_name=\
-            resolve_utf8(klass->attr_entries[i].name_index,cp);
-        errors|=process_source_attribute(&klass->attr_entries[i],cp);
-    }
-    return errors;
-}
-//int resolve_field_attributes(JVFieldEntry *
-int resolve_field(JVFieldEntry *field,JVCPEntry *cp)
-{
-    int errors=OK;
-    field->full_flags=resolve_flags(field->acc_flags,cp);
-    field->full_name=resolve_utf8(field->name_index,cp);
-    field->full_type=resolve_utf8(field->type_index,cp);
-#ifdef DEBUG
-    fprintf(DEBUG_OUT,".field %s %s %s\n",field->full_flags,field->full_name,\
-                    field->full_type);
-#endif
-    return errors;
-}
-int resolve_all_fields(JVClass *klass,JVCPEntry *cp)
-{
-    int errors=OK;
-    int i;
-    for(i=0;i<klass->field_count;i++)
-    {
-        errors|=resolve_field(&klass->field_entries[i],cp);
-    }
-    return errors;
-}
-//method !
-int process_methodcode_attribute(JVAttributeEntry *code,JVCPEntry *cp)
-{
-    int i;
-    code->un.code.max_stack=bufread_uint16(code->buf);
-    code->un.code.max_locals=bufread_uint16(code->buf);
-    code->un.code.code_count=bufread_uint32(code->buf);
-#ifdef DEBUG
-    fprintf(DEBUG_OUT,"Code : %d | %d | %d\n",code->un.code.max_stack,\
-                    code->un.code.max_locals,code->un.code.code_count);
-#endif
-    code->un.code.code=&(code->buf->data[code->buf->next]);
-    bufskip_bytes(code->buf,code->un.code.code_count);
-    code->un.code.handler_count=bufread_uint16(code->buf);
-#ifdef DEBUG
-    fprintf(DEBUG_OUT,"Exceptions %d\n",code->in.code.handler_count);
-#endif
-    code->un.code.handlers=(JVExceptionHandler *)\
-            calloc(code->un.code.handler_count,sizeof(JVExceptionHandler));
-    for(i=0;i<code->un.code.handler_count;i++)
-    {
-        code->un.code.handlers[i].start_pc=bufread_uint16(code->buf);
-        code->un.code.handlers[i].end_pc=bufread_uint16(code->buf);
-        code->un.code.handlers[i].handler_pc=bufread_uint16(code->buf);
-        code->un.code.handlers[i].catch_type=bufread_uint16(code->buf);
-    }
-    //I am ignoring the other attributes
-    return OK;
-}
-int resolve_all_method_attributes(JVMethodEntry *method,JVCPEntry *cp)
-{
-    int errors=OK;
-    int i;
-    for(i=0;i<method->attr_count;i++)
-    {
-        method->attr_entries[i].full_name=\
-                resolve_utf8(method->attr_entries[i].name_index,cp);
-        if(!strncmp(method->attr_entries[i].full_name,"Code",4))
-        {
-            method->code_index=i;
-            errors|=process_methodcode_attribute(&method->attr_entries[i],cp);
-        }
-#ifdef DEBUG
-        fprintf(DEBUG_OUT,".attribute %s\n",method->attr_entries[i].full_name);
-#endif
-    }
-    return errors;
-}
-int resolve_method(JVMethodEntry *method,JVCPEntry *cp)
+       int i;
+       for(i = 0; i < klass->interface_count; i++)
+       {
+               printf(".implements %s\n", 
klass->interface_entries[i].full_name);
+       }
+}
+
+void print_fields(JVClass *klass, JVCPEntry *cp_entry)
+{
+       int i;
+       for(i = 0; i < klass->field_count; i++)
+       {
+               printf(".field %s %s %s\n", klass->field_entries[i].full_flags, 
\
+                       klass->field_entries[i].full_name, 
klass->field_entries[i].full_type);
+       }
+}
+
+void print_string_cp(JVCPEntry *cp_entry, unsigned int index)
+{
+       switch(cp_entry[index].type)
+       {
+               case UTF8:     printf("%s", cp_entry[index].values.utf8string);
+                              break;
+               case STRING:   printf("\"%s\"", 
cp_entry[cp_entry[index].values.strvalue].values.utf8string);
+                              break;
+               case INTEGER:  printf("%d", cp_entry[index].values.intvalue);
+                              break;
+               case LONG:     printf("%ld", cp_entry[index].values.longvalue);
+                              break;
+               case FLOAT:    printf("%f", cp_entry[index].values.floatvalue);
+                              break;
+               case DOUBLE:   printf("%d", cp_entry[index].values.doublevalue);
+                              break;
+               case CLASSREF: printf("%s", 
cp_entry[index].values.class_value.full_name);
+                              break;
+               case FIELDREF: printf("%s/%s %s", 
cp_entry[index].values.ref_value.full_class, \
+                                  cp_entry[index].values.ref_value.full_name, \
+                                  cp_entry[index].values.ref_value.full_type);
+                              break;
+               case METHODREF:
+               case INTERFACEMETHODREF:
+                              printf("%s/%s %s", 
cp_entry[index].values.ref_value.full_class, \
+                                  cp_entry[index].values.ref_value.full_name, \
+                                  cp_entry[index].values.ref_value.full_type);
+                              break;
+               case NAMEANDTYPE:
+                              printf("%s", resolve_name_type(index, cp_entry));
+                              break;
+       }
+}
+/**
+ * collect JUMP offset,
+ * param @code the bytecode
+ * param @codelen code length
+ */
+UInt32 * get_jump_points(byte *code,int codelen)
 {
-    int errors=OK;
-    method->full_flags=resolve_flags(method->acc_flags,cp);
-    method->full_name=resolve_utf8(method->name_index,cp);
-    method->full_type=resolve_utf8(method->type_index,cp);
-#ifdef DEBUG
-    fprintf(DEBUG_OUT,".method %s %s 
%s\n",method->full_flags,method->full_name,\
-                    method->full_type);
+       Int32 *jump_points;
+       jopcode_map found;
+       int start=0;
+       int i,count,j;
+       Int32 high,low;
+       Int32 dest;
+       Int32 insn_offset;
+       jump_points=(UInt32*)calloc(codelen >> 5,sizeof(UInt32));
+       //a bit for each byte in code
+#ifndef __STABLE__
+       while(start<codelen)
+       {
+                       i=search_jopcode_map(code[start]);
+                       found=get_jopcode_map(i);
+                       insn_offset=start;
+                       switch(found.args)
+                       {
+                               /*case NONE:
+                                               start++; // default: already 
does this
+                                               break;*/
+                               case I_S1:
+                               case I_U1:
+                               case CONSTANT_U1:
+                               case ARRAYTYPE_U1:
+                                                       start++;
+                                           start += 1;
+                                           break;
+                               case I_U2:
+                               case I_S2:
+                               case II_U1_S1:
+                               case FIELD_U2:
+                               case METHOD_U2:
+                               case CLASS_U2:
+                               case CONSTANT_U2:
+                               case BIGCONSTANT_U2:
+                                                        start++;
+                                            start += 2;
+                                            break;
+                               case LABEL_S2:
+                                                        start++;
+                                                        
dest=insn_offset+READ_INT16(code,start);
+                                                        if(dest<codelen)
+                                                               
jump_points[dest/32]|=(UInt32)(1L << \
+                                                                               
                (dest%32));
+                                                    else
+                                                               
fprintf(stderr,"illegal jump offset %ld\n"\
+                                                                               
                ,dest);
+                                            start += 2;
+                                            break;
+                               case LABEL_S4:
+                                                       start++;
+                                                        
dest=insn_offset+READ_INT32(code,start);
+                                                        if(dest<codelen)
+                                                               
jump_points[dest/32]|=(UInt32)(1L << (dest%32));
+                                                    else
+                                                               
fprintf(stderr,"illegal jump offset %ld\n" ,dest);
+                                                       start+=4;
+                                                       break;
+                               case LOOKUP_SWITCH:
+                                           start++;
+                                           while( (start % 4) != 0)
+                                           {
+                                                               start++;
+                                                   }
+                                                   dest = 
insn_offset+READ_INT32(code,start);
+                                                       if(dest<codelen) // 
default offset
+                                                               
jump_points[dest/32]|=(UInt32)(1L << (dest%32));
+                                                       else
+                                                               
fprintf(stderr,"illegal jump offset %ld\n", dest);
+                                                   start += 4;
+                                                   count = 
READ_INT32(code,start);
+                                                       start += 4;
+                                                       for(j = 0; j < count; 
j++)
+                                                       {
+                                                       start += 4;//skip key
+                                                               
dest=insn_offset+READ_INT32(code,start);
+                                                               if(dest<codelen)
+                                                                       
jump_points[dest/32]|=(UInt32)(1L << (dest%32));
+                                                               else 
fprintf(stderr,"illegal jump offset");
+                                                       start += 4;
+                                                       }
+                                                       break;
+                               case TABLE_SWITCH:
+                                           start++;
+                                           while( (start % 4) != 0)
+                                           {
+                                                               start++;
+                                                   }
+                                                       dest = 
insn_offset+READ_INT32(code,start);
+                                                       if(dest<codelen) // 
default offset
+                                                               
jump_points[dest/32]|=(UInt32)(1L << (dest%32));
+                                                       else
+                                                               
fprintf(stderr,"illegal jump offset %ld\n", dest);
+                                                   start += 4;
+                                                       low = 
READ_INT32(code,start);
+                                                       start+= 4;
+                                                       high = 
READ_INT32(code,start);
+                                                       start+= 4;
+                                                       if(low>high)
+                                                       {
+                                                               
fprintf(stderr,"Error !\n");
+                                                               return NULL;
+                                                       }
+                                                       for(j=low;j<=high;j++)
+                                                       {
+                                                               
dest=insn_offset+READ_INT32(code,start);
+                                                               if(dest<codelen)
+                                                                       
jump_points[dest/32]|=(UInt32)(1L << (dest%32));
+                                                               else 
fprintf(stderr,"illegal jump offset");
+                                                               start+=4;
+                                                       }
+                                                       break;
+                               case MARRAY_U2_U1:
+                                                       start++;
+                                                       start+=3;
+                                                       break;
+                               case INTERFACE_U2_U1_X1:
+                                                       start++;
+                                                       start+=4;        //skip 
one byte xtra coz SUN says so
+                                                       break;
+                               default:   //this does the work of none and 
ignore
+                                           start++;
+                               }
+       }
 #endif
-    resolve_all_method_attributes(method,cp);
-    return errors;
+       return jump_points;
 }
 
-int resolve_all_methods(JVClass *klass,JVCPEntry *cp)
+void print_byte_code(byte *code, int *start_index, int code_len, int 
*wide,UInt32 *jump_points,JVCPEntry *cp_entry)
 {
-    int errors=OK;
-    int i;
-    for(i=0;i<klass->methods_count;i++)
-    {
-        errors|=resolve_method(&klass->method_entries[i],cp);
-    }
-    return errors;
-}
-int resolve_class(JVClass *klass,JVCPEntry *cp)
-{
-    int errors=OK;
-    klass->full_flags=resolve_flags(klass->acc_flags,cp);
-    klass->full_name=resolve_classref(klass->this_class,cp);
-    klass->full_super=resolve_classref(klass->super_class,cp);
-    resolve_cp(klass,cp);
-    resolve_all_interfaces(klass,cp);
-    resolve_all_fields(klass,cp);
-    resolve_all_methods(klass,cp);
-    resolve_top_attributes(klass,cp);
-    return errors;
-}
-int process_interfaces(JVClass *klass,JVCPEntry *cp)
-{
-    int i;
-    for(i=0;i<klass->interface_count;i++)
-    {
-               ILColorBold();
-        printf(".implements");
-               ILColorClear();
-               printf(" %s\n",klass->inter_entries[i].full_name);
-    }
-    return OK;
-}
-int process_fields(JVClass *klass,JVCPEntry *cp)
-{
-    int i;
-    for(i=0;i<klass->field_count;i++)
-    {
-               ILColorBold();
-        printf(".field");
-               ILColorClear();
-               printf("%s %s %s\n",klass->field_entries[i].full_flags,
-        klass->field_entries[i].full_name,klass->field_entries[i].full_type);
-    }
-    return OK;
-}
-char* print_string_cp(JVCPEntry *cp,int i)
-{
-       ILColorBold();ILColorYellow();
-    switch(cp[i].type)
-        {
-            case CONSTANT_Utf8:
-                        printf("%s",cp[i].un.utf8string);
-                        break;
-            case CONSTANT_String:
-                        printf("\"%s\"",cp[cp[i].un.strvalue].un.utf8string);
-                        break;
-            case CONSTANT_Integer:
-                        printf("%d",cp[i].un.intvalue);
-                        break;
-            case CONSTANT_Long:
-                        printf("%ld",cp[i].un.longvalue);
-                        break;
-            case CONSTANT_Float:
-                        printf("%f",cp[i].un.floatvalue);
-                        break;
-            case CONSTANT_Double:
-                        printf("%g",cp[i].un.doublevalue);
-                        break;
-            case CONSTANT_Classref:
-                        printf("%s",cp[i].un.class_value.full_name);
-                        break;
-            case CONSTANT_Fieldref://handle field and methods seperateld
-                        printf("%s/%s %s",\
-                        cp[i].un.ref_value.full_class,\
-                        cp[i].un.ref_value.full_name,\
-                        cp[i].un.ref_value.full_type);
-                        break;
-            case CONSTANT_Methodref:
-            case CONSTANT_InterfaceMethodref:
-                        printf("%s/%s%s",\
-                        cp[i].un.ref_value.full_class,\
-                        cp[i].un.ref_value.full_name,\
-                        cp[i].un.ref_value.full_type);
-                        break;
-            case CONSTANT_NameAndType:
-                        printf("%s",resolve_name_type(i,cp));
-                        break;
-        }
-       ILColorClear();
-}
-int process_byte_code(byte *code,int *_start,int code_len,JVCPEntry *cp)
-{
-    int start=*(_start);
-    //for lookupswitch
-    Int32 key,offset,count,default_offset;
-    int insn_offset=start;
-    int j;
-    ///end for lookupswitch
-    int i=search_opcode_table(code[start]);
-    opcode_table found_code;
-    if(i>=0)
-    {
-        found_code=op_tab[i];
-        //printf(";code offset %d\n",start);
-               ILColorGreen();IF_PRETTY_PRINT(printf("_%d:",start);)
-               ILColorClear();
-        switch(found_code.args)
-        {
-            case NONE:
-                PRINT_OPCODE_NAME(found_code);
-                //printf("\t %s",found_code.name);
-                start=start+1;
-                break;
-            case I:
-                PRINT_OPCODE_NAME(found_code);
-                //printf("\t %s %d",found_code.name,code[start+1]);
-                start=start+2;
-                break;
-            case II:
-                PRINT_OPCODE_NAME(found_code);
-                //printf("\t %s 
%d",found_code.name,code[start+1]<<8|code[start+2]);
-                printf("%d",code[start+1]<<8|code[start+2]);
-                start=start+3;
-                break;
-            case FIELD:
-            case METHOD:
-            case CLASS:
-            case BIGCONSTANT:
-                PRINT_OPCODE_NAME(found_code);
-                //printf("\t %s ",found_code.name);
-                print_string_cp(cp,code[start+1]<<8|code[start+2]);
-                start=start+3;
-                break;
-/*            case METHOD:
-                printf("\t %s ",found_code.name);
-                print_string_cp(cp,code[start+1]<<8|code[start+2]);
-                start=start+3;
-                break;
-            case CLASS:
-                printf("\t %s ",found_code.name);
-                print_string_cp(cp,code[start+1]<<8|code[start+2]);
-                start=start+2;
-                break;*/
-            case CONSTANT:
-                PRINT_OPCODE_NAME(found_code);
-                //printf("\t %s ",found_code.name);
-                print_string_cp(cp,code[start+1]);
-                start=start+2;
-                break;
-/*            case BIGCONSTANT:
-                printf("\t %s ",found_code.name);
-                print_string_cp(cp,code[start+1]<<8|code[start+2]);
-                start=start+3;
-                break;*/
-            case SWITCH://variable length operand
-                PRINT_OPCODE_NAME(found_code);
-                //printf("\t %s ",found_code.name);
-                start=start+1;
-                while(start%4!=0)start++;
-                default_offset=\
-                    ((Int32)code[start])<<24 |((Int32)code[start+1]<<16)|\
-                    ((Int32)code[start+2]<<8) | ((Int32)code[start+3]);
-                start=start+4;
-                count=\
-                    ((Int32)code[start])<<24 |((Int32)code[start+1]<<16)|\
-                    ((Int32)code[start+2]<<8) | ((Int32)code[start+3]);
-                start=start+4;
-                printf("; %ld key-values\n",count);
-                for(j=0;j<count;j++)
-                {
-                    key= ((Int32)code[start])<<24 |((Int32)code[start+1]<<16)|\
-                             ((Int32)code[start+2]<<8) | 
((Int32)code[start+3]);
-                    start=start+4;
-                    offset=((Int32)code[start])<<24 | 
((Int32)code[start+1]<<16)|\
-                    ((Int32)code[start+2]<<8) | ((Int32)code[start+3]);
-                    start=start+4;
-                    printf("\t\t%ld\t : %ld\n",key,insn_offset+offset);
-                }
-                printf("\t\tdefault  : %ld",insn_offset+default_offset);
-            break;
-        case LABEL:
-            PRINT_OPCODE_NAME(found_code);
-            //printf("\t %s ",found_code.name);
-            printf("%d;code offset ",
-                            
insn_offset+(Int16)(code[start+1]<<8|code[start+2]));
-            start=start+3;
-            break;
-        default:
-                       ILColorBold();ILColorRed();
-            printf("; Unknown instruction %d",code[start]);
-                       ILColorClear();
-            start=start+1;
-        }
-        printf("\n");
-    }
-    *(_start)=start;
-}
-int process_method_code(JVMethodEntry *mthd,JVCPEntry *cp)
-{
-    int i;
-    int start=0;
-    byte *code=mthd->attr_entries[mthd->code_index].un.code.code;
-    int codelen=mthd->attr_entries[mthd->code_index].un.code.code_count;
-       ILColorBold();
-    printf(".limit");
-       ILColorClear();
-       printf(" stack %d\n",
-                    mthd->attr_entries[mthd->code_index].un.code.max_stack);
-
-       ILColorBold();
-    printf(".limit ");
-       ILColorClear();
-
-       printf("locals %d\n",
-                    mthd->attr_entries[mthd->code_index].un.code.max_locals);
-    if((mthd->acc_flags & ACC_ABSTRACT) || (codelen==0))return OK;
-    while(start<codelen)process_byte_code(code,&start,codelen,cp);
-    printf("; TODO: label management\n");
-    printf("; TODO: wide opcode not supported\n");
-    return OK;
-}
-int process_methods(JVClass *klass,JVCPEntry *cp)
-{
-    int i;
-    for(i=0;i<klass->methods_count;i++)
-    {
-        printf(".method %s %s%s\n",klass->method_entries[i].full_flags,\
-        klass->method_entries[i].full_name,\
-        klass->method_entries[i].full_type);
-        process_method_code(&(klass->method_entries[i]),cp);
-        printf(".end method\n");
-    }
-}
-int process_class(JVClass *klass,JVCPEntry *cp)
-{
-    printf(".class %s %s\n",klass->full_flags,klass->full_name);
-    printf(".super %s\n",klass->full_super);
-    process_interfaces(klass,cp);
-    process_fields(klass,cp);
-    process_methods(klass,cp);
-    return OK;
+       int   start = *start_index;
+       Int32 key;
+       Int32 offset;
+       Int32 default_offset;
+       Int32 count;
+       Int32 low,high;
+       int   insn_offset = start;
+       int   j;
+       /* code to solve printf("%d") sign problem*/
+       UInt16 uint_16;
+       UInt32 uint_32;
+       Int16 int_16;
+       Int32 int_32;
+
+       int   i = search_jopcode_map(code[start]);
+       jopcode_map found;
+
+       if(i >= 0)
+       {
+               found = get_jopcode_map(i);
+               if((jump_points[insn_offset/32] & (UInt32)(1L << (insn_offset 
%32)))!=0)
+                       printf("j_%04d :",insn_offset);
+               else
+                       printf("\t");
+               switch(found.args)
+               {
+                       case NONE:
+                                               PRINT_OP_NAME(found);
+                                   start++;
+                                   break;
+                       case I_U1:
+                                               PRINT_OP_NAME(found);
+                                               start++;
+                                               if(*wide==1)
+                                               {
+                                                       
uint_16=(UInt16)READ_UINT16(code,start);
+                                                       printf(" %u ",uint_16);
+                                                       start += 2;
+                                               }
+                                               else
+                                               {
+                                       printf(" %u ", (unsigned 
char)(code[start]));
+                                       start += 1;
+                                               }
+                                   break;
+                       case I_U2:
+                                               PRINT_OP_NAME(found);
+                                               start++;
+                                               
uint_16=(UInt16)READ_UINT16(code,start);
+                                               printf(" %u ",uint_16);
+                                               start += 2;
+                                               break;
+                       case I_S1:
+                                               PRINT_OP_NAME(found);
+                                               start++;
+                                               printf(" %d ",(signed 
char)(code[start]));
+                                               start += 1;
+                                               break;
+                       case I_S2:
+                                               PRINT_OP_NAME(found);
+                                               start++;
+                                               
int_16=(Int16)READ_INT16(code,start);
+                                               printf(" %d ",int_16);
+                                               start += 2;
+                                               break;
+                       case II_U1_S1:
+                                               PRINT_OP_NAME(found);
+                                               start++;
+                                               if(*wide ==1)
+                                               {
+                                                       
uint_16=READ_UINT16(code,start);
+                                       printf(" %u ", uint_16);
+                                                       start+=2;
+                                                       
int_16=READ_INT16(code,start);
+                                                       printf("%d ", int_16);
+                                                       start+=2;
+                                               }
+                                               else
+                                               {
+                                       printf(" %u %d", (unsigned 
char)(code[start]), (signed char)(code[start + 1]));
+                                       start += 2;
+                                               }
+                                   break;
+                       case FIELD_U2:
+                       case METHOD_U2:
+                       case CLASS_U2:
+                       case CONSTANT_U2:
+                       case BIGCONSTANT_U2:
+                                    PRINT_OP_NAME(found);
+                                                start++;
+                                    print_string_cp(cp_entry, 
READ_UINT16(code,start));
+                                    start += 2;
+                                    break;
+                       case CONSTANT_U1:
+                                    PRINT_OP_NAME(found);
+                                                start++;
+                                    print_string_cp(cp_entry, code[start]);
+                                    start += 1;
+                                    break;
+                       case LOOKUP_SWITCH:
+                                               PRINT_OP_NAME(found);
+                                   start++;
+                                   while( (start % 4) != 0)
+                                   {
+                                                       start++;
+                                           }
+                                           default_offset = 
READ_INT32(code,start);
+                                           start += 4;
+                                           count = READ_INT32(code,start);
+                                               start += 4;
+                                               printf(" %ld key-values\n", 
count);
+                                               for(j = 0; j < count; j++)
+                                               {
+                                                       key = 
READ_INT32(code,start);
+                                               start += 4;
+                                               offset = READ_INT32(code,start);
+                                               start += 4;
+                                               printf("\t\t%ld\t: j_%04d\n", 
key, insn_offset + offset);
+                                               }
+                                           printf("\t\tdefault\t: j_%04d", 
insn_offset + default_offset);
+                                               break;
+                       case TABLE_SWITCH:
+                                               PRINT_OP_NAME(found);
+                                   start++;
+                                   while( (start % 4) != 0)
+                                   {
+                                                       start++;
+                                           }
+                                           default_offset = 
READ_INT32(code,start);
+                                           start += 4;
+                                               low = READ_INT32(code,start);
+                                               start+= 4;
+                                               printf(" %d; low value\n",low);
+                                               high = READ_INT32(code,start);
+                                               start+= 4;
+                                               if(low>high)
+                                               {
+                                                       fprintf(stderr,"Error 
!\n");
+                                                       return;
+                                               }
+                                               for(j=low;j<=high;j++)
+                                               {
+                                               offset = READ_INT32(code,start);
+                                               start += 4;
+                                               printf("\t\t j_%04d; offset for 
%d\n", insn_offset + offset,j);
+                                               }
+                                           printf("\t default:j_%04d", 
insn_offset + default_offset);
+                                               break;
+                       case LABEL_S2:
+                                               PRINT_OP_NAME(found);
+                                               start++;
+                                               int_16=insn_offset + 
READ_INT16(code,start);
+                                               printf(" j_%04d",int_16);
+                                   start += 2;
+                                   break;
+                       case LABEL_S4:
+                                               PRINT_OP_NAME(found);
+                                               start++;
+                                               int_32=insn_offset + 
(Int32)(READ_INT32(code,start));
+                                               printf(" j_%04d",int_32);
+                                               start+=4;
+                                               break;
+                       case MARRAY_U2_U1:
+                                               PRINT_OP_NAME(found);
+                                               start++;
+                                               
uint_16=(UInt16)(READ_UINT16(code,start));
+                                               
print_string_cp(cp_entry,uint_16);
+                                               printf(" %u ",(unsigned 
char)code[start+2]);
+                                               start+=3;
+                                               break;
+                       case ARRAYTYPE_U1:
+                                               PRINT_OP_NAME(found);
+                                               start++;
+                                               if(code[start]<4 || 
code[start]>11)
+                                               {
+                                                       fprintf(stderr,"invalid 
array type => %d\n", code[start]);
+                                               }
+                                               else
+                                                               printf(" %s 
",array_types[code[start]]);
+                                               start+=1;
+                                               break;
+                       case INTERFACE_U2_U1_X1:
+                                               PRINT_OP_NAME(found);
+                                               start++;
+                                               
uint_16=(UInt16)(READ_UINT16(code,start));
+                                               
print_string_cp(cp_entry,uint_16);
+                                               printf(" %u ",(unsigned 
char)code[start+2]);
+                                               start+=4;//skip one byte coz 
SUN says so
+                                               break;
+                       case IGNORE: // wide opcode !
+                                               PRINT_OP_NAME(found);
+                                               start++;
+                                               *wide=1;
+                                               break;
+                       default:    printf(": Unknown instruction %d", 
code[start]);
+                                   start++;
+               }
+               if(*wide && (found.opcode != JAVA_WIDE))
+               {
+                       *wide=0;
+               }
+               printf("\n");
+       }
+       *start_index = start;
+}
+void mark_try_catch_blocks(JVAttributeEntry *code,int codelen, UInt32 
*jump_points,JVCPEntry *cp_entry)
+{
+       int i;
+       JVExceptionHandler handle;
+       Int32 dest;
+       for(i=0;i<code->attributes.code.handler_count;i++)
+       {
+               handle=code->attributes.code.handlers[i];
+               printf(".catch ");
+               print_string_cp(cp_entry,handle.catch_type);
+               printf(" from j_%04d to j_%04d using j_%04d 
\n",handle.start_pc, handle.end_pc,handle.handler_pc);
+               dest = handle.start_pc;
+               if(dest<codelen)
+                       jump_points[dest/32]|=(UInt32)(1L << (dest%32));
+               else fprintf(stderr,"illegal jump offset");
+               dest = handle.end_pc;
+               if(dest<codelen)
+                       jump_points[dest/32]|=(UInt32)(1L << (dest%32));
+               else fprintf(stderr,"illegal jump offset");
+               dest = handle.handler_pc;
+               if(dest<codelen)
+                       jump_points[dest/32]|=(UInt32)(1L << (dest%32));
+               else fprintf(stderr,"illegal jump offset");
+       }
+}
+void print_method_code(JVMethodEntry *method, JVCPEntry *cp_entry)
+{
+       int   i;
+       int   start   = 0;
+       byte *code = 
method->attr_entries[method->code_index].attributes.code.code;
+       int codelen = 
method->attr_entries[method->code_index].attributes.code.code_count;
+       UInt32 *jump_points;
+       int wide=0;
+
+       if( (method->acc_flags & ACCESS_ABSTRACT) != 0 || codelen == 0)
+       {
+               return;
+       }
+       if((method->status_flags & METHOD_CODE)==0)
+       {
+               return;//no code attribute ?
+       }
+       printf(".limit stack %d\n", 
method->attr_entries[method->code_index].attributes.code.max_stack);
+       printf(".limit locals %d\n", 
method->attr_entries[method->code_index].attributes.code.max_locals);
+       print_method_throws(method,cp_entry);
+       jump_points=get_jump_points(code,codelen);
+       
mark_try_catch_blocks(&(method->attr_entries[method->code_index]),codelen, 
jump_points,cp_entry);
+       while(start < codelen)
+       {
+               print_byte_code(code, &start, codelen, 
&wide,jump_points,cp_entry);
+       }
+       //printf(": TODO-> label management\n"); worked out
+       //printf(": TODO-> wide opcode not supported\n");
+}
+
+void print_method_throws(JVMethodEntry *method,JVCPEntry *cp_entry)
+{
+       int i;
+       int 
count=method->attr_entries[method->except_index].attributes.exception.except_count;
+       if((method->status_flags & METHOD_EXCEPTION) ==0)
+       {
+               return;
+               //no throws clause ? (you mean just like no santa clause ? ;-)
+       }
+       for(i=0;i<count;i++)
+       {
+                       printf("\t .throws ");
+                       
print_string_cp(cp_entry,method->attr_entries[method->except_index].attributes.exception.excepts[i].class_index);
+                       printf("\n");
+       }
+}
+void print_methods(JVClass *klass, JVCPEntry *cp_entry)
+{
+       int i;
+       for(i = 0; i < klass->method_count; i++)
+       {
+               printf(".method %s %s%s\n", 
klass->method_entries[i].full_flags, klass->method_entries[i].full_name, 
klass->method_entries[i].full_type);
+               print_method_code(&((klass->method_entries)[i]), cp_entry);
+               printf(".end method\n");
+       }
+}
+
+void print_class(JVClass *klass, JVCPEntry *cp_entry)
+{
+       printf(".class %s %s\n", klass->full_flags, klass->full_name);
+       printf(".super %s\n", klass->full_super);
+       print_interfaces(klass, cp_entry);
+       print_fields(klass, cp_entry);
+       print_methods(klass, cp_entry);
 }
+
 void usage()
 {
-       printf("JDASM 0.0.7 - Java Disassembler\n");
-    printf("Usage : jdasm [options] <file.class>\n\n");
-       printf("Options\n");
-       printf("\t--pretty or -p\n\t  pretty print\n");
-       printf("\t--version or -v\n\t  version \n");
-       printf("\t--help or -h\n\t  this help screen\n");
+       printf("\tjdasm 0.0.1 - Java Deassembler\n");
+       printf("\n");
+       printf("usage: jdasm [OPTIONS] <class-file>\n\n");
+       printf("Options:\n");
+       printf("\t--version\n\t  Print version and exit\n");
+       printf("\t--help\n\t  Print this help screen\n");
 }
+
 void version()
 {
-printf("JDASM 0.0.7 - Java Disassembler\n");
-printf("Copyright (c) 2002 Free Software Foundation India Ltd.\n\n");
-printf("JDASM comes with ABSOLUTELY NO WARRANTY.  This is free software,\n");
-printf("and you are welcome to redistribute it under the terms of the \n");
-printf("GNU General Public License.\n\n");
-printf("Use the `--help' option to get help on the command-line options.\n");
-}
-int main(int argc,char *argv[])
-{
-    FILE *fp;
-    JVClass *klass;
-    DEBUG_OUT=fopen("/tmp/jdasm.log","w");
-    if(argc<=1)
-    {
-        usage();
-        return 1;
-    }
-    while(argv[1][0]=='-' && argc > 1)
-    {
-        if((strcmp(argv[1],"-p")==0) || (strcmp(argv[1],"--pretty")==0))
-                               pretty_print=1;
-               else if(strcmp(argv[1],"--help")==0 || strcmp(argv[1],"-h")==0)
-        {
-            usage();
-            return 0;
-        }
-               else if(strcmp(argv[1],"--version")==0 || 
strcmp(argv[1],"-v")==0)
+       printf("\tjdasm 0.0.1 - Java Deassembler\n");
+       printf("\n");
+}
+
+int main(int argc, char **argv)
+{
+       FILE *fp,*output;
+       char* output_file;
+       JVClass *klass;
+       int len;
+
+       if(argc <= 1)
+       {
+               usage();
+               return ERROR;
+       }
+       while(argv[1][0] == '-' && argc > 1)
+       {
+               if(strcmp(argv[1], "--version") == 0)
                {
                        version();
                        return 0;
-               }
-               else
+               } else if(strcmp(argv[1], "--help") == 0)
                {
-                       fprintf(stderr,"Unknown Option %s \n",argv[1]);
-                       fprintf(stderr,"Try --help for valid options \n");
+                       usage();
                        return 0;
+               } else
+               {
+                       fprintf(stderr, "Unknown option: %s\n", argv[1]);
+                       fprintf(stderr, "Try --help for valid options.\n");
+                       return 1;
                }
-        argv++;argc--;
-    }
-    if(argc<1)
-    {
-        usage();
-        return 1;
-    }
-    fp=fopen(argv[1],"rb");
-    if(fp==NULL)
-    {
-        fprintf(DEBUG_OUT,"Cannot read %s\n",argv[1]);
-        return ERROR;
-    }
-    klass=(JVClass*)calloc(1,sizeof(JVClass));
-    if(read_class(fp,klass)==ERROR)return ERROR;
-    resolve_class(klass,klass->cp_entries);
-    process_class(klass,klass->cp_entries);
-    //must implement destroy class functions
-    return OK;
-}
+               argv++;
+               argc--;
+       }
+
+       len = strlen(argv[1]);
+       fp = fopen(argv[1], "rb");
+       if(fp == NULL)
+       {
+               fprintf(stderr, "Cannot open file: %s\n", argv[1]);
+               return 2;
+       }
+
+       klass = (JVClass *)calloc(1, sizeof(JVClass));
+       if(read_class(fp, klass) != OK)
+       {
+               fprintf(stderr, "Cannot read file: %s\n", argv[1]);
+               fclose(fp);
+               return 3;
+       }
+       fclose(fp);
+
+       resolve_class(klass, klass->cp_entries);
+       print_class(klass, klass->cp_entries);
+
+#ifdef CODE_GEN
+       output_file = (char *) malloc( (len + 4) * sizeof(char));
+       strncpy(output_file, argv[1], len);
+       strncpy(output_file + len, ".il", 4);
+       output_file[len + 3] = '\0';
+
+       output=fopen(output_file,"w");
+       write_class(klass,output);
+       fclose(output);
+#endif
 
+       return 0;
+}

Index: jdasm.h
===================================================================
RCS file: /cvsroot/jilc/jilc/src/jdasm.h,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- jdasm.h     22 Apr 2002 09:12:37 -0000      1.9
+++ jdasm.h     30 May 2002 03:04:40 -0000      1.10
@@ -1,317 +1,71 @@
-/**
- * jdasm.h -- Deassembler / Parser header file.
+/*
+ * jdasm.h Deassembler header file.
  *
- * Author: Gaurav Vaish <address@hidden>
- *         Gopal V (address@hidden)
+ * Copyright (C) 2002 Gopal.V
+ * Copyright (C) 2002 Gaurav Vaish
+ * 
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
  *
- * (C) Gaurav Vaish, Gopal V; 2002
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
 #ifndef __JDASM_H
 #define __JDASM_H
 
-#include <jopcodes.h>
-
-#define OK    0
-#define ERROR 1
-
-typedef unsigned char      byte;
-typedef unsigned char      UInt8;
-typedef unsigned short     UInt16;
-typedef unsigned int       UInt32;
-typedef unsigned long long UInt64;
-
-typedef short     Int16;
-typedef int       Int32;
-typedef long long Int64;
-
-typedef struct
-{
-       byte*  data;
-       UInt32 next;
-       UInt32 left;
-} jbuffer;
-
-/**
- * Constant Pool Entries : Values
- */
-
-#define UTF8                1
-#define INTEGER             3
-#define FLOAT               4
-#define LONG                5
-#define DOUBLE              6
-#define CLASSREF            7
-#define STRING              8
-#define FIELDREF            9
-#define METHODREF          10
-#define INTERFACEMETHODREF 11
-#define NAMEANDTYPE        12
-
-/**
- * Contant Pool Entries Table : Literal Strings
- */
-
-char* CPTable[] = {
-       "Junk",
-       "CONSTANT_Utf8",
-       "Junk",
-       "CONSTANT_Integer",
-       "CONSTANT_Float",
-       "CONSTANT_Long",
-       "CONSTANT_Double",
-       "CONSTANT_Class",
-       "CONSTANT_String",
-       "CONSTANT_Field",
-       "CONSTANT_Method",
-       "CONSTANT_InterfaceMethod",
-       "CONSTANT_NameAndType",
-       "Junk",
-       "Junk",
-       "Junk"
-}
-
-/**
- * Attribute Types
- */
-
-#define ATTRIBUTE_TOP    0
-#define ATTRIBUTE_FIELD  1
-#define ATTRIBUTE_METHOD 2
-#define ATTRIBUTE_CODE   3
-
-/**
- * Access Type (Flags)
- */
-
-#define ACCESS_PUBLIC       0x0001
-#define ACCESS_PRIVATE      0x0002
-#define ACCESS_PROTECTED    0x0004
-#define ACCESS_STATIC       0x0008
-#define ACCESS_FINAL        0x0010
-#define ACCESS_SYNCHRONIZED 0x0020
-#define ACCESS_VOLATILE     0x0040
-#define ACCESS_TRANSIENT    0x0080
-#define ACCESS_NATIVE       0x0100
-#define ACCESS_ABSTRACT     0x0400
-
-/**
- * Java Constant Pool Entry structure
- */
-
-typedef struct
-{
-       UInt8  type;
-       UInt16 length;
-       UInt8  skip;
-       union
-       {
-               char  *utf8string;
-               Int32  intvalue;
-               Int64  longvalue;
-               float  floatvalue;
-               double doublevalue;
-               UInt32 strvalue;
-               struct
-               {
-                       UInt32  name_index;
-                       char   *full_name;
-               } class_value;
-               struct
-               {
-                       UInt32  class_index;
-                       UInt32  name_type;
-                       char   *full_class;
-                       char   *full_name;
-                       char   *full_type;
-               } ref_value;
-               struct
-               {
-                       UInt32  name_index;
-                       UInt32  type_index;
-                       char   *full_name;
-                       char   *full_type;
-               } name_type;
-       } values;
-} JVCPEntry;
-
-/**
- * Java Exception Handler structure
- */
-
-typedef struct
-{
-       UInt16 start_pc;
-       UInt16 end_pc;
-       UInt16 handler_pc;
-       UInt16 catch_type;
-} JVExceptionHandler;
-
-/**
- * Java Exception structure
- */
-
-typedef struct
-{
-       UInt16  class_index;
-       char   *class_name;
-} JVException;
-
-/**
- * Java Attribute Entry structure
- */
-
-typedef struct
-{
-       UInt16   name_index;
-       UInt32   byte_count;
-       UInt8    type;
-       jbuffer *buf;
-       union
-       {
-               struct
-               {
-                       UInt16  source_index;
-                       char   *full_source;
-               } source;
-               struct
-               {
-                       UInt16       except_count;
-                       JVException *excepts;
-               } exception;
-               struct
-               {
-                       UInt16              max_stack;
-                       UInt16              max_locals;
-                       UInt32              code_count;
-                       byte               *code;
-                       UInt16              handler_count;
-                       JVExceptionHandler *handlers;
-                       UInt16              attr_count;
-                       byte               *attributes;
-               } code;
-       } attributes;
-} JVAttributeEntry;
-
-/**
- * Java Field Entry structure
- */
-
-typedef struct
-{
-       UInt16            acc_flags;
-       UInt16            name_index;
-       UInt16            type_index;
-       UInt16            attr_count;
-       JVAttributeEntry *attr_entries;
-       char             *full_flags;
-       char             *full_name;
-       char             *full_type;
-} JVFieldEntry;
-
-/**
- * Java Interface Entry structure
- */
-
-typedef struct
-{
-       UInt16  index;
-       char   *full_name;
-} JVInterfaceEntry;
-
-/**
- * Java Method Entry structure
- */
-
-typedef struct
-{
-       UInt16            acc_flags;
-       UInt16            name_index;
-       UInt16            type_index;
-       UInt16            attr_count;
-       JVAttributeEntry *attr_entries;
-       UInt16            code_index;
-       UInt16            except_index;
-       char             *full_flags;
-       char             *full_name;
-       char             *full_type;
-} JVMethodEntry;
-
-/**
- * Java Class structure
- */
-
-typedef struct
-{
-       UInt32            magic;
-       UInt16            version_minor;
-       UInt16            version_major;
-       UInt16            cp_count;
-       JVCPEntry        *cp_entries;
-       UInt16            acc_flags;
-       UInt16            this_class;
-       UInt16            super_class;
-       UInt16            interface_count;
-       JVInterfaceEntry *interface_entries;
-       UInt16            field_count;
-       JVFieldEntry     *field_entries;
-       UInt16            method_count;
-       JVMethodEntry    *method_entries;
-       UInt16            attr_count;
-       JVAttributeEntry *attr_entries;
-} JVClass;
-
-/**
- * File reader methods
- */
-
-inline UInt8  read_byte(FILE *fp);
-inline UInt16 read_uint16(FILE *fp);
-inline UInt32 read_uint32(FILE *fp);
-inline UInt64 read_uint64(FILE *fp);
-
-inline void   skip_bytes(FILE *fp);
-
-byte buffer_read_byte(jbuffer *buffer);
-inline UInt16 buffer_read_uint16(jbuffer *buffer);
-inline UInt32 buffer_read_uint32(jbuffer *buffer);
-
-void buffer_skip_bytes(jbuffer *buffer, UInt32 length);
-
-/**
- * Parser Methods (provide values to JVClass structure entries)
- */
-
-int read_cp_entry(FILE *fp, JVCPEntry *cp_entry);
-int read_cp(FILE *fp, JVClass *klass);
-int read_flags(FILE *fp, JVClass *klass);
-int read_interfaces(FILE *fp, JVClass *klass);
-
-JVAttributeEntry* read_attributes(FILE *fp, int count, int type);
-int read_fields(FILE *fp, JVClass *klass)
-int read_methods(FILE *fp, JVClass *klass);
-int read_class(FILE *fp, JVClass *klass);
-
-/**
- * Resolving methods (resolve all entries in the class)
- */
-
-char* resolve_utf8(UInt16 index, JVCPEntry *cp_entry);
-char* resolve_string(UInt16 index, JVCPEntry *cp_entry);
-char* resolve_classref(UInt16 index, JVCPEntry *cp_entry);
-
-JVCPEntry* resolve_name_type(UInt16 index, JVCPEntry *cp_entry);
-JVCPEntry* resolve_ref(UInt16 index, JVCPEntry *cp_entry);
+#include <jparser.h>
 
-int resolve_cp(JVClass *klass, JVCPEntry *cp_entry);
-char* resolve_flags(UInt16 flags);
+#define PRINT_OP_NAME(x)  printf(" %s ", (x).mnemonic)
 
-int resolve_all_interfaces(JVClass *klass, JVCPEntry *cp_entry);
-int process_source_attribute(JVAttributeEntry *attr_entry, JVCPEntry 
*cp_entry);
-int resolve_top_attributes(JVClass *klass, JVCPEntry *cp_entry);
-int resolve_field(JVFieldEntry *field_entry, JVCPEntry *cp_entry);
-int resolve_all_fields(JVFieldEntry *field_entry, JVCPEntry *cp_entry);
-int process_methodcode_attribute(JVAttributeEntry *code, JVCPEntry *cp_entry);
-int resolve_all_method_attributes(JVMethodEntry *method, JVCPEntry *cp_entry);
+/*
+#define READ_INT32(code,start) ( (((Int32)code[start]) << 0x18) | \
+                                                    (((Int32)code[start + 1]) 
<< 0x10) | \
+                                                    (((Int32)code[start + 2]) 
<< 0x08) | \
+                                                     ((Int32)code[start + 3]) )
+*/
+//hoping these work ! ;-)
+#define READ_INT32(code,start) ( (Int32)((((Int32)code[start]    ) << 0x18) | \
+                                         (((Int32)code[start + 1] )<< 0x10) | \
+                                         (((Int32)code[start + 2] )<< 0x08) | \
+                                         (((Int32)code[start + 3] ) )) )
+
+#define READ_UINT32(code,start) ((UInt32)((((UInt32)code[start] ) << 0x18) | \
+                                         (((UInt32)code[start + 1] )<< 0x10) | 
\
+                                         (((UInt32)code[start + 2] )<< 0x08) | 
\
+                                         (((UInt32)code[start + 3] ) )) )
+
+/*
+#define READ_INT16(code,start) ( (((Int16)code[start]) << 0x08 | \
+                                   (Int16)code[start+1]) )
+*/
+
+#define READ_INT16(code,start) (Int16) ((((Int16)code[start]     << 0x08) | \
+                                          ((Int16)code[start + 1])) )
+
+#define READ_UINT16(code,start) (UInt16)(((UInt16)code[start]     << 0x08) | \
+                                          ((UInt16)code[start + 1]) )
+void print_interfaces(JVClass *klass, JVCPEntry *cp_entry);
+void print_fields(JVClass *klass, JVCPEntry *cp_entry);
+void print_string_cp(JVCPEntry *cp_entry, unsigned int i);
+void print_byte_code(byte *code, int *start_index, int code_len, int 
*wide,UInt32 * jump_points, JVCPEntry *cp_entry);
+void print_method_code(JVMethodEntry *method, JVCPEntry *cp_entry);
+void print_methods(JVClass *klass, JVCPEntry *cp_entry);
+void print_class(JVClass *klass, JVCPEntry *cp_entry);
+
+/* exception handling */
+void print_method_throws(JVMethodEntry *method,JVCPEntry *cp_entry);
+void mark_try_catch_blocks(JVAttributeEntry *code,int codelen, UInt32 
*jump_points,JVCPEntry *cp_entry);
+/* label management */
+UInt32 * get_jump_points(byte *code,int codelen);
+void usage(void);
 
-#endif
\ No newline at end of file
+#endif __JDASM_H

Index: jopcodes.c
===================================================================
RCS file: /cvsroot/jilc/jilc/src/jopcodes.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- jopcodes.c  26 Feb 2002 22:31:23 -0000      1.6
+++ jopcodes.c  30 May 2002 03:04:40 -0000      1.7
@@ -1,11 +1,24 @@
-/**
- * jopcodes.c -- Java opcodes.
+/*
+ * jopcodes.c Java Opcode table
  *
- * Author: Gaurav Vaish <address@hidden>
- *         Gopal V (address@hidden)
+ * Copyright (C) 2002 Gopal.V
+ * Copyright (C) 2002 Gaurav Vaish
+ * 
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
  *
- * (C) Gaurav Vaish, Gopal V; 2002
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
+
 
 #include <jopcodes.h>
 

Index: jopcodes.h
===================================================================
RCS file: /cvsroot/jilc/jilc/src/jopcodes.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- jopcodes.h  26 Feb 2002 22:31:23 -0000      1.6
+++ jopcodes.h  30 May 2002 03:04:40 -0000      1.7
@@ -1,11 +1,22 @@
-/**
- * jopcodes.h -- Java opcodes. See jopcodes.c for implementation
+/*
+ * jopcodes.h Java Opcode & Constants . See jopcodes.c for impl
  *
- * Author: Gaurav Vaish <address@hidden>
- *         Gopal V (address@hidden)
+ * Copyright (C) 2002 Gopal.V
+ * Copyright (C) 2002 Gaurav Vaish
+ * 
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
  *
- * (C) Gaurav Vaish, Gopal V; 2002
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
  *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
 #ifndef __JOPCODES_H

Index: jparser.c
===================================================================
RCS file: /cvsroot/jilc/jilc/src/jparser.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- jparser.c   12 Apr 2002 15:47:12 -0000      1.5
+++ jparser.c   30 May 2002 03:04:40 -0000      1.6
@@ -1,11 +1,22 @@
-/**
- * jparser.c -- Parser source file.
- *       All the parsing of the class file is done here.
+/*
+ * jparser.c The bytecode tree construction
  *
- * Author: Gaurav Vaish <address@hidden>
- *         Gopal V (address@hidden)
+ * Copyright (C) 2002 Gopal.V
+ * Copyright (C) 2002 Gaurav Vaish
+ * 
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
  *
- * (C) Gaurav Vaish, Gopal V; 2002
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
 #include "jparser.h"

Index: jparser.h
===================================================================
RCS file: /cvsroot/jilc/jilc/src/jparser.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- jparser.h   12 Apr 2002 15:47:12 -0000      1.5
+++ jparser.h   30 May 2002 03:04:40 -0000      1.6
@@ -1,10 +1,22 @@
-/**
- * jparser.h -- Parser header file.
+/*
+ * jparser.h the data structures for jparser.c
+ *
+ * Copyright (C) 2002 Gopal.V
+ * Copyright (C) 2002 Gaurav Vaish
+ * 
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
  *
- * Author: Gaurav Vaish <address@hidden>
- *         Gopal V (address@hidden)
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
  *
- * (C) Gaurav Vaish, Gopal V; 2002
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
 #ifndef __JPARSER_H
@@ -148,7 +160,7 @@
        UInt16   name_index;
        UInt32   byte_count;
        UInt8    type;
-       jbuffer *buffer;
+       jbuffer *buffer;        
        union
        {
                struct
@@ -218,7 +230,10 @@
        UInt16            status_flags;
        char             *full_flags;
        char             *full_name;
-       char             *full_type;
+       char             *full_type;
+       UInt16                    parameter_count;
+       char**                    local_vars_type;
+       Int32 *                   jump_points;
 } JVMethodEntry;
 
 /**




reply via email to

[Prev in Thread] Current Thread [Next in Thread]