/* javahost.h: Copyright (C) Codemist Ltd., 1996. */
#define JAVA_MAGIC 0xCAFEBABE
#define JAVA_THIS_MAJ 45
#define JAVA_THIS_MIN 3
/* The following structures define the internal format of a class file: */
typedef int32 *(*JavaBuiltin)(int32 *);
typedef enum Attribute_Sort
{ ATT_unknown,
ATT_SourceFile,
ATT_ConstantValue,
ATT_Code,
ATT_Exceptions,
ATT_LineNumberTable,
ATT_LocalVariableTable
} Attribute_Sort;
typedef struct Attribute_Info Attribute_Info;
typedef struct SourceFile_Attribute
{ unsigned16 sourcefile_index;
} SourceFile_Attribute;
typedef struct ConstantValue_Attribute
{ unsigned16 constantvalue_index;
} ConstantValue_Attribute;
/* logically local to Code_Attribute */
typedef struct Exception_Info
{ unsigned16 start_pc;
unsigned16 end_pc;
unsigned16 handler_pc;
unsigned16 catch_type;
} Exception_Info;
typedef struct Code_Attribute
{ unsigned16 max_stack;
unsigned16 max_locals;
unsigned32 code_length;
unsigned16 exception_table_length;
unsigned16 attributes_count;
unsigned8 *code;
Exception_Info *exception_table;
Attribute_Info *attributes;
} Code_Attribute;
typedef struct Exceptions_Attribute
{ unsigned16 number_of_exceptions;
unsigned16 *exception_index_table;
} Exceptions_Attribute;
/* logically local to LineNumberTable_Attribute */
typedef struct LineNumber_Info
{ unsigned16 start_pc;
unsigned16 line_number;
} LineNumber_Info;
typedef struct LineNumberTable_Attribute
{ unsigned16 line_number_table_length;
LineNumber_Info *line_number_table;
} LineNumberTable_Attribute;
/* logically local to LocalVariableTable_Attribute */
typedef struct LocalVariable_Info
{ unsigned16 start_pc;
unsigned16 length;
unsigned16 name_index;
unsigned16 signature_index;
unsigned16 slot;
} LocalVariable_Info;
typedef struct LocalVariableTable_Attribute
{ unsigned16 local_variable_table_length;
LocalVariable_Info *local_variable_table;
} LocalVariableTable_Attribute;
/*typedef*/ struct Attribute_Info
{ enum Attribute_Sort sort;
union { SourceFile_Attribute *sourcefile;
ConstantValue_Attribute *constantvalue;
Code_Attribute *code;
Exceptions_Attribute *exceptions;
LineNumberTable_Attribute *linenumbertable;
LocalVariableTable_Attribute *localvariabletable; } uattr;
};
typedef struct Cp_Info
{ unsigned8 tag;
unsigned16 len;
union { unsigned32 val; char *utf8; void *ptr; } u;
} Cp_Info;
/* Currently Field_Info and Method_Info are identical, but note they */
/* allow different attributes. */
typedef struct Field_Info
{ unsigned16 access_flags;
unsigned16 name_index;
unsigned16 signature_index;
unsigned16 attributes_count;
Attribute_Info *attributes;
} Field_Info;
typedef struct Method_Info
{ unsigned16 access_flags;
unsigned16 name_index;
unsigned16 signature_index;
unsigned16 attributes_count;
Attribute_Info *attributes;
} Method_Info;
typedef struct ClassFile {
/* Internal representation of class file: see rdClassFile(). */
unsigned16 access_flags;
unsigned16 this_class;
unsigned16 super_class;
unsigned16 constant_pool_count;
unsigned16 interfaces_count;
unsigned16 fields_count;
unsigned16 methods_count;
unsigned16 attributes_count;
Cp_Info *constant_pool;
unsigned16 *interfaces;
Field_Info *fields;
Method_Info *methods;
Attribute_Info *attributes;
} ClassFile;
/* Cp_Info tags: */
#define CONSTANT_Class 7
#define CONSTANT_FieldRef 9
#define CONSTANT_MethodRef 10
#define CONSTANT_InterfaceMethodRef 11
#define CONSTANT_String 8
#define CONSTANT_Integer 3
#define CONSTANT_Float 4
#define CONSTANT_Long 5
#define CONSTANT_Double 6
#define CONSTANT_NameAndType 12
#define CONSTANT_Utf8 1
#define CONSTANT_Unicode 2
/* The next (illegal) tag represents the 2nd word of a long or double. */
#define CONSTANT_Xhalf 42
/* 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_INTERFACE 0x0200
#define ACC_ABSTRACT 0x0400
/* end of javahost.h */