calls instead of machine instructions, using the C calling
convention.
- $Id: builtin.c 664 2003-11-21 18:24:01Z jowenn $
+ $Id: builtin.c 669 2003-11-23 14:04:20Z edwin $
*/
{
#ifdef DEBUG
log_text ("builtin_instanceof called");
-
- /* XXX remove log */
- /*
- sprintf(logtext,"instanceof(");
- utf_sprint(logtext+strlen(logtext),obj->vftbl->class->name);
- sprintf(logtext+strlen(logtext),",");
- utf_sprint(logtext+strlen(logtext),class);
- sprintf(logtext+strlen(logtext),")");
- dolog();
- */
#endif
if (!obj) return 0;
return builtin_isanysubclass (obj->vftbl->class, class);
log_text("builtin_checkcast called");
#endif
- /* XXX remove log */
- /*
- sprintf(logtext,"checkcast(");
- utf_sprint(logtext+strlen(logtext),obj->vftbl->class->name);
- sprintf(logtext+strlen(logtext),",");
- utf_sprint(logtext+strlen(logtext),class);
- sprintf(logtext+strlen(logtext),")");
- dolog();
- */
-
if (obj == NULL)
return 1;
if (builtin_isanysubclass(obj->vftbl->class, class))
******************************************************************************/
-/* XXX delete */
-#if 0
-static s4 builtin_descriptorscompatible(constant_arraydescriptor *desc, constant_arraydescriptor *target)
-{
- if (desc == target) return 1;
- if (desc->arraytype != target->arraytype) return 0;
-
- switch (target->arraytype) {
- case ARRAYTYPE_OBJECT:
- return builtin_isanysubclass(desc->objectclass, target->objectclass);
- case ARRAYTYPE_ARRAY:
- return builtin_descriptorscompatible
- (desc->elementdescriptor, target->elementdescriptor);
- default: return 1;
- }
-}
-#endif
-
/* XXX inline this? */
static s4 builtin_descriptorscompatible(arraydescriptor *desc,arraydescriptor *target)
{
*****************************************************************************/
-/* XXX delete */
-#if 0
-s4 builtin_checkarraycast(java_objectheader *o, constant_arraydescriptor *desc)
-{
- java_arrayheader *a = (java_arrayheader*) o;
-
- if (!o) return 1;
- if (o->vftbl->class != class_array) {
-#ifdef DEBUG
- printf("#### checkarraycast failed 1\n");
-#endif
- return 0;
- }
-
- if (a->arraytype != desc->arraytype) {
-#ifdef DEBUG
- printf("#### checkarraycast failed 2\n");
-#endif
- return 0;
- }
-
- switch (a->arraytype) {
- case ARRAYTYPE_OBJECT: {
- java_objectarray *oa = (java_objectarray*) o;
- int result = builtin_isanysubclass(oa->elementtype, desc->objectclass);
-
-#ifdef DEBUG
- if (!result)
- printf("#### checkarraycast failed 3\n");
-#endif
- return result;
- }
- case ARRAYTYPE_ARRAY: {
- java_arrayarray *aa = (java_arrayarray*) o;
- int result = builtin_descriptorscompatible
- (aa->elementdescriptor, desc->elementdescriptor);
-
-#ifdef DEBUG
- if (!result)
- printf("#### checkarraycast failed 4\n");
-#endif
- return result;
- }
- default:
- return 1;
- }
-}
-#endif
-
s4 builtin_checkarraycast(java_objectheader *o,arraydescriptor *target)
{
arraydescriptor *desc;
return builtin_descriptorscompatible(desc,target);
}
-/* XXX delete */
-#if 0
-s4 builtin_arrayinstanceof(java_objectheader *obj, constant_arraydescriptor *desc)
-{
- if (!obj) return 1;
- return builtin_checkarraycast (obj, desc);
-}
-#endif
-
s4 builtin_arrayinstanceof(java_objectheader *obj,arraydescriptor *desc)
{
if (!obj) return 1;
******************************************************************************/
-/* XXX delete */
-#if 0
-s4 builtin_canstore(java_objectarray *a, java_objectheader *o)
-{
- if (!o) return 1;
-
- switch (a->header.arraytype) {
- case ARRAYTYPE_OBJECT:
- if (!builtin_checkcast(o, a->elementtype)) {
- return 0;
- }
- return 1;
- break;
-
- case ARRAYTYPE_ARRAY:
- if (!builtin_checkarraycast
- (o, ((java_arrayarray*)a)->elementdescriptor)) {
- return 0;
- }
- return 1;
- break;
-
- default:
- panic("builtin_canstore called with invalid arraytype");
- return 0;
- }
-}
-#endif
-
s4 builtin_canstore (java_objectarray *a, java_objectheader *o)
{
arraydescriptor *desc;
componentvftbl = desc->componentvftbl;
valuevftbl = o->vftbl;
- /* XXX remove log */
- /*
- log_text("builtin_canstore");
- print_arraydescriptor(stdout,desc);
- utf_sprint(logtext,valuevftbl->class->name);
- dolog();
- */
-
if ((dim_m1 = desc->dimension - 1) == 0) {
/* {a is a one-dimensional array} */
/* {a is an array of references} */
if (valuevftbl == componentvftbl)
return 1;
- /* XXX remove log */
- /* log_text("not same vftbl"); */
-
if ((base = componentvftbl->baseval) <= 0)
/* an array of interface references */
return (valuevftbl->interfacetablelength > -base &&
return o;
}
+/********************** Function: builtin_newarray **************************
+
+ Creates an array with the given vftbl on the heap.
+ Return value: pointer to the array or NULL if no memory is available
+ CAUTION: The given vftbl must be the vftbl of the *array* class,
+ not of the element class.
+
+*****************************************************************************/
java_arrayheader *builtin_newarray(s4 size,vftbl *arrayvftbl)
{
- /* XXX remove log */
- /*
- sprintf(logtext,"newarray size=%d class=",size);
- utf_sprint(logtext+strlen(logtext),arrayvftbl->class->name);
- dolog();
- */
-
java_arrayheader *a;
arraydescriptor *desc = arrayvftbl->arraydesc;
s4 dataoffset = desc->dataoffset;
return a;
}
-java_objectarray *
-builtin_anewarray(s4 size,classinfo *component)
-{
- return (java_objectarray*) builtin_newarray(size,class_array_of(component)->vftbl);
-}
-
-/* XXX delete */
-#if 0
-java_objectarray *builtin_anewarray (s4 size, classinfo *elementtype)
-{
- java_objectarray *a;
- a = (java_objectarray*)__builtin_newarray(sizeof(java_objectarray),
- size,
- true,
- sizeof(void*),
- ARRAYTYPE_OBJECT,
- elementtype);
- if (!a) return NULL;
-
- a->elementtype = elementtype;
- return a;
-}
-#endif
+/********************** Function: builtin_anewarray *************************
-/******************** function: builtin_newarray_array ***********************
+ Creates an array of references to the given class type on the heap.
- Creates an array of pointers to arrays on the heap.
- Parameters:
- size ......... number of elements
- elementdesc .. pointer to the array description structure for the
- element arrays
-
Return value: pointer to the array or NULL if no memory is available
+ XXX This function does not do The Right Thing, because it uses a
+ classinfo pointer at runtime. builtin_newarray should be used
+ instead.
+
*****************************************************************************/
-/* XXX delete */
-#if 0
-java_arrayarray *builtin_newarray_array
- (s4 size, constant_arraydescriptor *elementdesc)
+java_objectarray *
+builtin_anewarray(s4 size,classinfo *component)
{
- java_arrayarray *a;
- a = (java_arrayarray*)__builtin_newarray(sizeof(java_arrayarray),
- size,
- true,
- sizeof(void*),
- ARRAYTYPE_ARRAY,
- elementdesc->objectclass);
- if (!a) return NULL;
-
- a->elementdescriptor = elementdesc;
- return a;
+ return (java_objectarray*) builtin_newarray(size,class_array_of(component)->vftbl);
}
-#endif
+/******************** Function: builtin_newarray_int ***********************
-/******************** function: builtin_newarray_boolean ************************
+ Creates an array of 32 bit Integers on the heap.
- Creates an array of bytes on the heap. The array is designated as an array
- of booleans (important for casts)
-
Return value: pointer to the array or NULL if no memory is available
*****************************************************************************/
-/* XXX delete */
-#if 0
-java_booleanarray *builtin_newarray_boolean (s4 size)
-{
- java_booleanarray *a;
- a = (java_booleanarray*)__builtin_newarray(sizeof(java_booleanarray),
- size,
- false,
- sizeof(u1),
- ARRAYTYPE_BOOLEAN,
- NULL);
- return a;
-}
-#endif
-
java_intarray *builtin_newarray_int (s4 size)
{
return (java_intarray*) builtin_newarray(size,primitivetype_table[ARRAYTYPE_INT].arrayvftbl);
}
-java_longarray *builtin_newarray_long (s4 size)
-{
- return (java_longarray*) builtin_newarray(size,primitivetype_table[ARRAYTYPE_LONG].arrayvftbl);
-}
-
-java_floatarray *builtin_newarray_float (s4 size)
-{
- return (java_floatarray*) builtin_newarray(size,primitivetype_table[ARRAYTYPE_FLOAT].arrayvftbl);
-}
-
-java_doublearray *builtin_newarray_double (s4 size)
-{
- return (java_doublearray*) builtin_newarray(size,primitivetype_table[ARRAYTYPE_DOUBLE].arrayvftbl);
-}
-
-java_bytearray *builtin_newarray_byte (s4 size)
-{
- return (java_bytearray*) builtin_newarray(size,primitivetype_table[ARRAYTYPE_BYTE].arrayvftbl);
-}
-
-java_chararray *builtin_newarray_char (s4 size)
-{
- return (java_chararray*) builtin_newarray(size,primitivetype_table[ARRAYTYPE_CHAR].arrayvftbl);
-}
-
-java_shortarray *builtin_newarray_short (s4 size)
-{
- return (java_shortarray*) builtin_newarray(size,primitivetype_table[ARRAYTYPE_SHORT].arrayvftbl);
-}
-
-java_booleanarray *builtin_newarray_boolean (s4 size)
-{
- return (java_booleanarray*) builtin_newarray(size,primitivetype_table[ARRAYTYPE_BOOLEAN].arrayvftbl);
-}
-
-/******************** function: builtin_newarray_char ************************
+/******************** Function: builtin_newarray_long ***********************
- Creates an array of characters on the heap.
+ Creates an array of 64 bit Integers on the heap.
Return value: pointer to the array or NULL if no memory is available
*****************************************************************************/
-/* XXX delete */
-#if 0
-java_chararray *builtin_newarray_char (s4 size)
+java_longarray *builtin_newarray_long (s4 size)
{
- java_chararray *a;
- a = (java_chararray*)__builtin_newarray(sizeof(java_chararray),
- size,
- false,
- sizeof(u2),
- ARRAYTYPE_CHAR,
- NULL);
- return a;
+ return (java_longarray*) builtin_newarray(size,primitivetype_table[ARRAYTYPE_LONG].arrayvftbl);
}
-
/******************** function: builtin_newarray_float ***********************
Creates an array of 32 bit IEEE floats on the heap.
*****************************************************************************/
-/* XXX delete */
java_floatarray *builtin_newarray_float (s4 size)
{
- java_floatarray *a;
- a = (java_floatarray*)__builtin_newarray(sizeof(java_floatarray),
- size,
- false,
- sizeof(float),
- ARRAYTYPE_FLOAT,
- NULL);
- return a;
+ return (java_floatarray*) builtin_newarray(size,primitivetype_table[ARRAYTYPE_FLOAT].arrayvftbl);
}
-
/******************** function: builtin_newarray_double ***********************
Creates an array of 64 bit IEEE floats on the heap.
java_doublearray *builtin_newarray_double (s4 size)
{
- java_doublearray *a;
- a = (java_doublearray*)__builtin_newarray(sizeof(java_doublearray),
- size,
- false,
- sizeof(double),
- ARRAYTYPE_DOUBLE,
- NULL);
- return a;
+ return (java_doublearray*) builtin_newarray(size,primitivetype_table[ARRAYTYPE_DOUBLE].arrayvftbl);
}
-
-
-
/******************** function: builtin_newarray_byte ***********************
Creates an array of 8 bit Integers on the heap.
*****************************************************************************/
-/* XXX delete */
java_bytearray *builtin_newarray_byte (s4 size)
{
- java_bytearray *a;
- a = (java_bytearray*)__builtin_newarray(sizeof(java_bytearray),
- size,
- false,
- sizeof(u1),
- ARRAYTYPE_BYTE,
- NULL);
- return a;
+ return (java_bytearray*) builtin_newarray(size,primitivetype_table[ARRAYTYPE_BYTE].arrayvftbl);
}
+/******************** function: builtin_newarray_char ************************
-/******************** function: builtin_newarray_short ***********************
-
- Creates an array of 16 bit Integers on the heap.
+ Creates an array of characters on the heap.
Return value: pointer to the array or NULL if no memory is available
*****************************************************************************/
-/* XXX delete */
-java_shortarray *builtin_newarray_short(s4 size)
+java_chararray *builtin_newarray_char (s4 size)
{
- java_shortarray *a;
- a = (java_shortarray*)__builtin_newarray(sizeof(java_shortarray),
- size,
- false,
- sizeof(s2),
- ARRAYTYPE_SHORT,
- NULL);
- return a;
+ return (java_chararray*) builtin_newarray(size,primitivetype_table[ARRAYTYPE_CHAR].arrayvftbl);
}
+/******************** function: builtin_newarray_short ***********************
-/******************** Function: builtin_newarray_int ***********************
-
- Creates an array of 32 bit Integers on the heap.
+ Creates an array of 16 bit Integers on the heap.
Return value: pointer to the array or NULL if no memory is available
*****************************************************************************/
-<<<<<<< builtin.c
-/* XXX delete */
-java_intarray *builtin_newarray_int(s4 size)
+java_shortarray *builtin_newarray_short (s4 size)
{
- java_intarray *a;
- a = (java_intarray*)__builtin_newarray(sizeof(java_intarray),
- size,
- false,
- sizeof(s4),
- ARRAYTYPE_INT,
- NULL);
-
-#if 0
- if (a == NULL) {
- asm_handle_builtin_exception(proto_java_lang_OutOfMemoryError);
- }
-#endif
-
- return a;
+ return (java_shortarray*) builtin_newarray(size,primitivetype_table[ARRAYTYPE_SHORT].arrayvftbl);
}
+/******************** function: builtin_newarray_boolean ************************
-/******************** Function: builtin_newarray_long ***********************
-
- Creates an array of 64 bit Integers on the heap.
-
+ Creates an array of bytes on the heap. The array is designated as an array
+ of booleans (important for casts)
+
Return value: pointer to the array or NULL if no memory is available
*****************************************************************************/
-<<<<<<< builtin.c
-/* XXX delete */
-java_longarray *builtin_newarray_long(s4 size)
-{
- java_longarray *a;
- a = (java_longarray*)__builtin_newarray(sizeof(java_longarray),
- size,
- false,
- sizeof(s8),
- ARRAYTYPE_LONG,
- NULL);
- return a;
-}
-
-
-/* XXX delete */
-/***************** function: builtin_multianewarray ***************************
-
- Creates a multi-dimensional array on the heap. The dimensions are passed in
- an array of Integers. The type for the array is passed as a reference to a
- constant_arraydescriptor structure.
-
- Return value: pointer to the array or NULL if no memory is available
-
-******************************************************************************/
-
- /* Helper functions */
-
-/* XXX delete */
-static java_arrayheader *multianewarray_part(java_intarray *dims, int thisdim,
- constant_arraydescriptor *desc)
-{
- u4 size,i;
- java_arrayarray *a;
-
- size = dims->data[thisdim];
-
- if (thisdim == (dims->header.size - 1)) {
- /* last dimension reached */
-
- switch (desc -> arraytype) {
- case ARRAYTYPE_BOOLEAN:
- return (java_arrayheader*) builtin_newarray_boolean(size);
- case ARRAYTYPE_CHAR:
- return (java_arrayheader*) builtin_newarray_char(size);
- case ARRAYTYPE_FLOAT:
- return (java_arrayheader*) builtin_newarray_float(size);
- case ARRAYTYPE_DOUBLE:
- return (java_arrayheader*) builtin_newarray_double(size);
- case ARRAYTYPE_BYTE:
- return (java_arrayheader*) builtin_newarray_byte(size);
- case ARRAYTYPE_SHORT:
- return (java_arrayheader*) builtin_newarray_short(size);
- case ARRAYTYPE_INT:
- return (java_arrayheader*) builtin_newarray_int(size);
- case ARRAYTYPE_LONG:
- return (java_arrayheader*) builtin_newarray_long(size);
- case ARRAYTYPE_OBJECT:
- return (java_arrayheader*) builtin_anewarray(size, desc->objectclass);
-
- case ARRAYTYPE_ARRAY:
- return (java_arrayheader*) builtin_newarray_array(size, desc->elementdescriptor);
-
- default: panic("Invalid arraytype in multianewarray");
- }
- }
-
- /* if the last dimension has not been reached yet */
-
- if (desc->arraytype != ARRAYTYPE_ARRAY)
- panic("multianewarray with too many dimensions");
-
- a = builtin_newarray_array(size, desc->elementdescriptor);
- if (!a) return NULL;
-
- for (i = 0; i < size; i++) {
- java_arrayheader *ea =
- multianewarray_part(dims, thisdim + 1, desc->elementdescriptor);
- if (!ea) return NULL;
-
- a->data[i] = ea;
- }
-
- return (java_arrayheader*) a;
-}
-
-/* XXX delete */
-java_arrayheader *builtin_multianewarray(java_intarray *dims,
- constant_arraydescriptor *desc)
-{
- return multianewarray_part(dims, 0, desc);
-}
-
-
-static java_arrayheader *nmultianewarray_part(int n, long *dims, int thisdim,
- constant_arraydescriptor *desc)
+java_booleanarray *builtin_newarray_boolean (s4 size)
{
- int size, i;
- java_arrayarray *a;
-
- size = (int) dims[thisdim];
-
- if (thisdim == (n - 1)) {
- /* last dimension reached */
-
- switch (desc -> arraytype) {
- case ARRAYTYPE_BOOLEAN:
- return (java_arrayheader*) builtin_newarray_boolean(size);
- case ARRAYTYPE_CHAR:
- return (java_arrayheader*) builtin_newarray_char(size);
- case ARRAYTYPE_FLOAT:
- return (java_arrayheader*) builtin_newarray_float(size);
- case ARRAYTYPE_DOUBLE:
- return (java_arrayheader*) builtin_newarray_double(size);
- case ARRAYTYPE_BYTE:
- return (java_arrayheader*) builtin_newarray_byte(size);
- case ARRAYTYPE_SHORT:
- return (java_arrayheader*) builtin_newarray_short(size);
- case ARRAYTYPE_INT:
- return (java_arrayheader*) builtin_newarray_int(size);
- case ARRAYTYPE_LONG:
- return (java_arrayheader*) builtin_newarray_long(size);
- case ARRAYTYPE_OBJECT:
- return (java_arrayheader*) builtin_anewarray(size,
- desc->objectclass);
- case ARRAYTYPE_ARRAY:
- return (java_arrayheader*) builtin_newarray_array(size,
- desc->elementdescriptor);
-
- default: panic ("Invalid arraytype in multianewarray");
- }
- }
-
- /* if the last dimension has not been reached yet */
-
- if (desc->arraytype != ARRAYTYPE_ARRAY)
- panic ("multianewarray with too many dimensions");
-
- a = builtin_newarray_array(size, desc->elementdescriptor);
- if (!a) return NULL;
-
- for (i = 0; i < size; i++) {
- java_arrayheader *ea =
- nmultianewarray_part(n, dims, thisdim + 1, desc->elementdescriptor);
- if (!ea) return NULL;
-
- a -> data[i] = ea;
- }
-
- return (java_arrayheader*) a;
+ return (java_booleanarray*) builtin_newarray(size,primitivetype_table[ARRAYTYPE_BOOLEAN].arrayvftbl);
}
-#endif
/**************** function: builtin_nmultianewarray ***************************
return a;
}
-/* XXX delete */
-#if 0
-java_arrayheader *builtin_nmultianewarray (int size,
- constant_arraydescriptor *desc, long *dims)
-{
- (void) builtin_newarray_int(size); /* for compatibility with -old */
- return nmultianewarray_part (size, dims, 0, desc);
-}
-#endif
-
-
-
-/************************* function: builtin_aastore *************************
-
- Stores a reference to an object into an object array or into an array
- array. Before any action is performed, the validity of the operation is
- checked.
-
- Return value: 1 ... ok
- 0 ... this object cannot be stored into this array
-
-*****************************************************************************/
-
-/* XXX delete */
-#if 0
-s4 builtin_aastore (java_objectarray *a, s4 index, java_objectheader *o)
-{
- if (builtin_canstore(a,o)) {
- a->data[index] = o;
- return 1;
- }
- return 0;
-}
-#endif
-
-
-
-
-
/*****************************************************************************
METHOD LOGGING
Changes: Mark Probst
Philipp Tomsich
+ Edwin Steiner
- $Id: global.h 664 2003-11-21 18:24:01Z jowenn $
+ $Id: global.h 669 2003-11-23 14:04:20Z edwin $
*/
} constant_nameandtype;
-/*
- arraydescriptor describes array types. Basic array types contain their
- type in the arraytype field, objectclass contains a class pointer for
- arrays of objects (arraytype == ARRAYTYPE_OBJECT), elementdescriptor
- contains a pointer to an arraydescriptor which describes the element
- types in the case of arrays of arrays (arraytype == ARRAYTYPE_ARRAY).
-*/
-
-/* XXX delete */
-#if 0
-typedef struct constant_arraydescriptor {
- int arraytype;
- classinfo *objectclass;
- struct constant_arraydescriptor *elementdescriptor;
-} constant_arraydescriptor;
-#endif
-
-
/* data structures of the runtime system **************************************/
/* objects *********************************************************************
/* arrays **********************************************************************
- All arrays are objects (they need the object header with a pointer to a
- vvftbl (array class table). There is only one class for all arrays. The XXX change
- type of an array is stored directly in the array object. Following types
- are defined:
+ All arrays are objects (they need the object header with a pointer
+ to a vftbl (array class table). There is one class for each array
+ type. The array type is described by an arraydescriptor struct
+ which is referenced by the vftbl.
*/
/* CAUTION: Don't change the numerical values! These constants (with
java_objectheader *data[1];
} java_objectarray;
-/* XXX delete */
-#if 0
-typedef struct java_arrayarray {
- java_arrayheader header;
- constant_arraydescriptor *elementdescriptor;
- java_arrayheader *data[1];
-} java_arrayarray;
-#endif
-
/* structure for primitive classes ********************************************/
typedef struct primitivetypeinfo {
Changes: Carolyn Oates
- $Id: parse.c 665 2003-11-21 18:36:43Z jowenn $
+ $Id: parse.c 669 2003-11-23 14:04:20Z edwin $
*/
nextp = p + jcommandsize[opcode]; /* compute next instruction start */
s_count += stackreq[opcode]; /* compute stack element count */
- /* XXX remove log */
- /* log_text(opcode_names[opcode]); */
-
switch (opcode) {
case JAVA_NOP:
break;
Authors: ?
- $Id: jni.c 664 2003-11-21 18:24:01Z jowenn $
+ $Id: jni.c 669 2003-11-23 14:04:20Z edwin $
*/
break;
}
case '[' : {
- /* XXX */
+ /* XXX need arrayclass change? */
/* arrayclass */
char *start = *utf_ptr;
char ch;
Roman Obermaiser
Mark Probst
- $Id: loader.c 664 2003-11-21 18:24:01Z jowenn $
+ $Id: loader.c 669 2003-11-23 14:04:20Z edwin $
*/
java_objectheader *proto_java_lang_ArrayStoreException;
java_objectheader *proto_java_lang_ThreadDeath;
-/* XXX delete */
-#if 0
-void override_array_class(classinfo *c) {
- int i;
- classinfo *sup;
- utf *u=utf_new_char("clone");
- sup=c->super;
- class_showmethods(c);
-
- for (i=0;i<sup->methodscount;i++) {
- if (sup->methods[i].name==u) {
- method_clone_array.class = c;
- method_clone_array. flags = ACC_PUBLIC;
- method_clone_array.name = utf_new_char("clone");
- method_clone_array.descriptor = utf_new_char("()Ljava/lang/Object;");
-
- method_clone_array.jcode = NULL;
- method_clone_array.exceptiontable = NULL;
- method_clone_array.entrypoint = NULL;
- method_clone_array.mcode = NULL;
- method_clone_array.stubroutine = NULL;
- method_clone_array.methodUsed = NOTUSED;
- method_clone_array.monoPoly = MONO;
- method_clone_array.subRedefs = 0;
- method_clone_array.subRedefsUsed = 0;
- method_clone_array.flags=0;
- method_clone_array.xta = NULL;
- method_clone_array.stubroutine = createnativestub (&builtin_clone_array, &method_clone_array);
- c->vftbl->table[sup->methods[i].vftblindex]=method_clone_array.stubroutine;
- log_text("Found !!!! :)))))))))))))))))))))))))))))))))))))))))))))))))");
- }
-
-
- }
-}
-#endif
-
-
-
-
-
-
-
-
/************* functions for reading classdata *********************************
classfile = fopen(filename, "r");
if (classfile) { /* file exists */
- /* XXX remove */
- /*
- sprintf(logtext,"Opening file: %s",filename);
- dolog();
- */
-
/* determine size of classfile */
err = stat (filename, &buffer);
{
char *tstart; /* pointer to start of classname */
char ch;
- char *start = utf_ptr; /* XXX remove */
+ char *start = utf_ptr;
switch (*utf_ptr++) {
case 'B':
char *end_pos = utf_end(d); /* points behind utf string */
char *tstart; /* pointer to start of classname */
char c,ch;
- char *start; /* XXX remove */
+ char *start;
/* method descriptor must start with parenthesis */
/* XXX check length */
/* XXX check length */
/* check arguments */
while ((c = *utf_ptr++) != ')') {
- start = utf_ptr-1; /* XXX remove */
+ start = utf_ptr-1;
switch (c) {
case 'B':
checkfielddescriptor (utf_ptr,end_pos);
}
-
-/******************** Function: buildarraydescriptor ***************************
-
- creates a constant_arraydescriptor structure for the array type named by an
- utf string
-
-*******************************************************************************/
-
-/* XXX delete */
-#if 0
-constant_arraydescriptor * buildarraydescriptor(char *utf_ptr, u4 namelen)
-{
- constant_arraydescriptor *d;
-
- /* class_new( utf_new(utf_ptr,namelen) ); */ /* XXX remove */
-
- if (*utf_ptr++ != '[') panic ("Attempt to build arraydescriptor for non-array");
-
- d = NEW (constant_arraydescriptor);
- d -> objectclass = NULL;
- d -> elementdescriptor = NULL;
-
-#ifdef STATISTICS
- count_const_pool_len += sizeof(constant_arraydescriptor);
-#endif
-
- switch (*utf_ptr) {
- case 'Z': d -> arraytype = ARRAYTYPE_BOOLEAN; break;
- case 'B': d -> arraytype = ARRAYTYPE_BYTE; break;
- case 'C': d -> arraytype = ARRAYTYPE_CHAR; break;
- case 'D': d -> arraytype = ARRAYTYPE_DOUBLE; break;
- case 'F': d -> arraytype = ARRAYTYPE_FLOAT; break;
- case 'I': d -> arraytype = ARRAYTYPE_INT; break;
- case 'J': d -> arraytype = ARRAYTYPE_LONG; break;
- case 'S': d -> arraytype = ARRAYTYPE_SHORT; break;
-
- case '[':
- d -> arraytype = ARRAYTYPE_ARRAY;
- d -> elementdescriptor = buildarraydescriptor (utf_ptr, namelen-1);
- break;
-
- case 'L':
- d -> arraytype = ARRAYTYPE_OBJECT;
-
- d -> objectclass = class_new ( utf_new(utf_ptr+1, namelen-3) );
- d -> objectclass -> classUsed = NOTUSED; /* not used initially CO-RT */
- d -> objectclass -> impldBy = NULL;
- break;
- }
- return d;
-}
-#endif
-
-
-/******************* Function: freearraydescriptor *****************************
-
- removes a structure created by buildarraydescriptor from memory
-
-*******************************************************************************/
-
-/* XXX delete */
-#if 0
-static void freearraydescriptor (constant_arraydescriptor *d)
-{
- while (d) {
- constant_arraydescriptor *n = d->elementdescriptor;
- FREE (d, constant_arraydescriptor);
- d = n;
- }
-}
-#endif
-
-/*********************** Function: displayarraydescriptor *********************/
-
-/* XXX delete */
-#if 0
-static void displayarraydescriptor (constant_arraydescriptor *d)
-{
- switch (d->arraytype) {
- case ARRAYTYPE_BOOLEAN: printf ("boolean[]"); break;
- case ARRAYTYPE_BYTE: printf ("byte[]"); break;
- case ARRAYTYPE_CHAR: printf ("char[]"); break;
- case ARRAYTYPE_DOUBLE: printf ("double[]"); break;
- case ARRAYTYPE_FLOAT: printf ("float[]"); break;
- case ARRAYTYPE_INT: printf ("int[]"); break;
- case ARRAYTYPE_LONG: printf ("long[]"); break;
- case ARRAYTYPE_SHORT: printf ("short[]"); break;
- case ARRAYTYPE_ARRAY: displayarraydescriptor(d->elementdescriptor); printf("[]"); break;
- case ARRAYTYPE_OBJECT: utf_display(d->objectclass->name); printf("[]"); break;
- }
-}
-#endif
-
/***************** Function: print_arraydescriptor ****************************
Debugging helper for displaying an arraydescriptor
count_class_loads++;
#endif
- /* XXX remove */
- /* loadverbose = 1; */
-
/* output for debugging purposes */
if (loadverbose) {
methodinfo *clone;
int namelen;
- /* XXX remove logging */
- /*
- sprintf(logtext,"new array class: ");
- utf_sprint(logtext+strlen(logtext),c->name);
- dolog();
- */
-
/* Array classes are not loaded from classfiles. */
list_remove (&unloadedclasses, c);
break;
case 'L':
- /* XXX remove logging */
- /*
- sprintf(logtext,"Component class: ");
- utf_sprint(logtext+strlen(logtext),utf_new(c->name->text + 2,namelen - 3));
- dolog();
- if (class_get(utf_new(c->name->text + 2,namelen - 3)))
- log_text("Already created.");
- */
-
/* c is an array of objects. */
if (namelen < 4 || c->name->text[namelen-1] != ';')
panic("Invalid array class name.");
arraydescriptor *desc;
vftbl *compvftbl;
- /* XXX remove logging */
-
- /*
- sprintf(logtext,"linking array class: ");
- utf_sprint(logtext+strlen(logtext),c->name);
- dolog();
- */
-
-
/* Check the component type */
switch (c->name->text[1]) {
case '[':
desc->dimension = 1;
}
- /* XXX remove logging */
- /*
- print_arraydescriptor(stdout,desc);
- printf("\n");
- */
-
return desc;
}
arraydescriptor *arraydesc = NULL; /* descriptor for array classes */
- /* XXX remove log */
- /*
- sprintf(logtext,"trying to link: ");
- utf_sprint(logtext+strlen(logtext),c->name);
- dolog();
- */
-
/* check if all superclasses are already linked, if not put c at end of
unlinked list and return. Additionally initialize class fields. */
}
}
-/***************** function: create_array_class ********************************
-
- create class representing an array
-
-********************************************************************************/
-
-/* XXX delete */
-#if 0
-classinfo *create_array_class(utf *u)
-{
- classinfo *c = class_new (u);
- /* prevent loader from loading the array class */
- list_remove (&unloadedclasses, c);
- /* add to unlinked classes */
- list_addlast (&unlinkedclasses, c);
- c -> super = class_java_lang_Object;
- class_link(c);
- return c;
-}
-#endif
-
/*************** function: create_pseudo_classes *******************************
create pseudo classes used by the typechecker
Authors: Reinhard Grafl
- $Id: loader.h 664 2003-11-21 18:24:01Z jowenn $
+ $Id: loader.h 669 2003-11-23 14:04:20Z edwin $
*/
#define CLASSLOAD_LOAD 2
classinfo *class_from_descriptor(char *utf_ptr,char *end_ptr,char **next,int mode);
-/* create class representing specific arraytype */ /* XXX delete */
-classinfo *create_array_class(utf *u);
-
/* (used by class_new, don't use directly) */
void class_new_array(classinfo *c);
-# Makefile.in generated by automake 1.6.3 from Makefile.am.
+# Makefile.in generated by automake 1.7.2 from Makefile.am.
# nat/Makefile. Generated from Makefile.in by configure.
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
# PARTICULAR PURPOSE.
-SHELL = /bin/sh
srcdir = .
top_srcdir = ..
-prefix = /usr/local/cacao
-exec_prefix = ${prefix}
-
-bindir = ${exec_prefix}/bin
-sbindir = ${exec_prefix}/sbin
-libexecdir = ${exec_prefix}/libexec
-datadir = ${prefix}/share
-sysconfdir = ${prefix}/etc
-sharedstatedir = ${prefix}/com
-localstatedir = ${prefix}/var
-libdir = ${exec_prefix}/lib
-infodir = ${prefix}/info
-mandir = ${prefix}/man
-includedir = ${prefix}/include
-oldincludedir = /usr/include
pkgdatadir = $(datadir)/cacao
pkglibdir = $(libdir)/cacao
pkgincludedir = $(includedir)/cacao
top_builddir = ..
-ACLOCAL = ${SHELL} /home/jowenn/development/uni/cacao/cacaodev/missing --run aclocal-1.6
-AUTOCONF = ${SHELL} /home/jowenn/development/uni/cacao/cacaodev/missing --run autoconf
-AUTOMAKE = ${SHELL} /home/jowenn/development/uni/cacao/cacaodev/missing --run automake-1.6
-AUTOHEADER = ${SHELL} /home/jowenn/development/uni/cacao/cacaodev/missing --run autoheader
-
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-INSTALL = /bin/install -c
-INSTALL_PROGRAM = ${INSTALL}
-INSTALL_DATA = ${INSTALL} -m 644
+INSTALL = /usr/bin/install -c
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
-INSTALL_SCRIPT = ${INSTALL}
INSTALL_HEADER = $(INSTALL_DATA)
-transform = s,x,x,
+transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
-host_alias =
host_triplet = i686-pc-linux-gnu
-
-EXEEXT =
-OBJEXT = o
-PATH_SEPARATOR = :
-AMTAR = ${SHELL} /home/jowenn/development/uni/cacao/cacaodev/missing --run tar
+ACLOCAL = ${SHELL} /home/edwin/cvsspace/cacaodev/missing --run aclocal-1.7
+AMDEP_FALSE = #
+AMDEP_TRUE =
+AMTAR = ${SHELL} /home/edwin/cvsspace/cacaodev/missing --run tar
ARCH_DIR = i386
+AUTOCONF = ${SHELL} /home/edwin/cvsspace/cacaodev/missing --run autoconf
+AUTOHEADER = ${SHELL} /home/edwin/cvsspace/cacaodev/missing --run autoheader
+AUTOMAKE = ${SHELL} /home/edwin/cvsspace/cacaodev/missing --run automake-1.7
AWK = gawk
-AWTPEERS = java.awt.peer.ComponentPeer java.awt.peer.MenuPeer java.awt.peer.MenuItemPeer gnu.java.awt.peer.gtk.GdkPixbufDecoder gnu.java.awt.peer.gtk.GtkMenuBarPeer gnu.java.awt.peer.gtk.GtkScrollPanePeer gnu.java.awt.peer.gtk.GtkMenuPeer gnu.java.awt.peer.gtk.GtkTextComponentPeer gnu.java.awt.peer.gtk.GtkComponentPeer gnu.java.awt.peer.gtk.GtkPopupMenuPeer gnu.java.awt.peer.gtk.GtkCheckboxGroupPeer gnu.java.awt.peer.gtk.GtkMenuItemPeer gnu.java.awt.peer.gtk.GdkGraphics gnu.java.awt.peer.gtk.GtkToolkit gnu.java.awt.peer.gtk.GtkCanvasPeer gnu.java.awt.peer.gtk.GtkFramePeer gnu.java.awt.peer.gtk.GdkFontMetrics gnu.java.awt.peer.gtk.GtkScrollbarPeer gnu.java.awt.peer.gtk.GtkGenericPeer gnu.java.awt.peer.gtk.GtkListPeer gnu.java.awt.peer.gtk.GtkLabelPeer gnu.java.awt.peer.gtk.GtkTextAreaPeer gnu.java.awt.peer.gtk.GtkCheckboxPeer gnu.java.awt.peer.gtk.GtkFileDialogPeer gnu.java.awt.peer.gtk.GtkImagePainter gnu.java.awt.peer.gtk.GtkChoicePeer gnu.java.awt.peer.gtk.GtkPanelPeer gnu.java.awt.peer.gtk.GtkMainThread gnu.java.awt.peer.gtk.GtkButtonPeer gnu.java.awt.peer.gtk.GtkTextFieldPeer gnu.java.awt.peer.gtk.GtkCheckboxMenuItemPeer gnu.java.awt.peer.gtk.GtkClipboard gnu.java.awt.peer.gtk.GtkWindowPeer
-AWT_OBJS = classpathbin/i386/native/jni/gtk-peer/.libs/libgtkpeer.a -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangoxft-1.0 -lpangox-1.0 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0 -lgthread-2.0 -lart_lgpl_2
+AWTPEERS =
+AWT_OBJS =
CC = gcc
+CCDEPMODE = depmode=gcc3
+CFLAGS = -Wall -O0 -g3 -D__I386__
COMPILER_OBJECTS =
+CPP = gcc -E
+CPPFLAGS =
+CYGPATH_W = echo
+DEFS = -DHAVE_CONFIG_H
DEPDIR = .deps
+ECHO_C =
+ECHO_N = -n
+ECHO_T =
+EGREP = grep -E
+EXEEXT =
+INSTALL_DATA = ${INSTALL} -m 644
+INSTALL_PROGRAM = ${INSTALL}
+INSTALL_SCRIPT = ${INSTALL}
INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s
+LDFLAGS =
+LIBOBJS =
+LIBS = -lm
LIBTHREAD = libthreads.a
+LTLIBOBJS =
+MAKEINFO = ${SHELL} /home/edwin/cvsspace/cacaodev/missing --run makeinfo
+OBJEXT = o
PACKAGE = cacao
+PACKAGE_BUGREPORT =
+PACKAGE_NAME =
+PACKAGE_STRING =
+PACKAGE_TARNAME =
+PACKAGE_VERSION =
+PATH_SEPARATOR = :
RANLIB = ranlib
+SET_MAKE =
+SHELL = /bin/sh
STRIP =
THREAD_OBJ = threads/libthreads.a
-USEGTK = yes
+USEGTK = no
VERSION = 0.40
-ZIP_C = unzip.c
-ZIP_LIBS = -lz
+ZIP_C =
+ZIP_LIBS =
+ac_ct_CC = gcc
+ac_ct_RANLIB = ranlib
+ac_ct_STRIP =
+am__fastdepCC_FALSE = #
+am__fastdepCC_TRUE =
am__include = include
am__quote =
-install_sh = /home/jowenn/development/uni/cacao/cacaodev/install-sh
+bindir = ${exec_prefix}/bin
+build = i686-pc-linux-gnu
+build_alias =
+build_cpu = i686
+build_os = linux-gnu
+build_vendor = pc
+datadir = ${prefix}/share
+exec_prefix = ${prefix}
+host = i686-pc-linux-gnu
+host_alias =
+host_cpu = i686
+host_os = linux-gnu
+host_vendor = pc
+includedir = ${prefix}/include
+infodir = ${prefix}/info
+install_sh = /home/edwin/cvsspace/cacaodev/install-sh
+libdir = ${exec_prefix}/lib
+libexecdir = ${exec_prefix}/libexec
+localstatedir = ${prefix}/var
+mandir = ${prefix}/man
+oldincludedir = /usr/include
+prefix = /usr/local/cacao
+program_transform_name = s,x,x,
+sbindir = ${exec_prefix}/sbin
+sharedstatedir = ${prefix}/com
+subdirs = mm/boehm-gc
+sysconfdir = ${prefix}/etc
+target_alias =
EXTRA_DIST = AccessController.c Adler32.c Array.c BigInteger.c CRC32.c Class.c ClassLoader.c ClassLoader_NativeLibrary.c Compiler.c Constructor.c DatagramPacket.c Deflater.c Double.c Field.c FileDescriptor.c FileInputStream.c FileOutputStream.c FileSystem.c Finalizer.c Float.c InetAddress.c InetAddressImpl.c Inflater.c JarFile.c Math.c Method.c Object.c ObjectInputStream.c ObjectStreamClass.c Package.c PlainDatagramSocketImpl.c PlainSocketImpl.c RandomAccessFile.c ResourceBundle.c Runtime.c SecurityManager.c SocketInputStream.c SocketOutputStream.c String.c System.c Thread.c Throwable.c UnixFileSystem.c ZipEntry.c ZipFile.c
subdir = nat
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
tags: TAGS
TAGS:
+ctags: CTAGS
+CTAGS:
+
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
top_distdir = ..
distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
distdir: $(DISTFILES)
- @list='$(DISTFILES)'; for file in $$list; do \
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
mostlyclean-am: mostlyclean-generic
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
uninstall-am: uninstall-info-am
.PHONY: all all-am check check-am clean clean-generic distclean \
install-exec-am install-info install-info-am install-man \
install-strip installcheck installcheck-am installdirs \
maintainer-clean maintainer-clean-generic mostlyclean \
- mostlyclean-generic uninstall uninstall-am uninstall-info-am
+ mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \
+ uninstall-info-am
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
* Method: getModifiers
* Signature: ()I
*/
-/* XXX delete */
-#if 0
-JNIEXPORT struct java_lang_Class* JNICALL Java_java_lang_VMClass_getComponentType (JNIEnv *env , struct java_lang_VMClass* this )
-{
- classinfo *c = NULL;
-
- if ((classinfo*) (this->vmData) == class_array) {
- java_arrayheader *a = (java_arrayheader*) (this->vmData);
-
- /* determine componenttype */
- switch (a->arraytype) {
- case ARRAYTYPE_BYTE: c = class_java_lang_Byte; break;
- case ARRAYTYPE_BOOLEAN: c = class_java_lang_Boolean; break;
- case ARRAYTYPE_CHAR: c = class_java_lang_Character; break;
- case ARRAYTYPE_SHORT: c = class_java_lang_Short; break;
- case ARRAYTYPE_INT: c = class_java_lang_Integer; break;
- case ARRAYTYPE_LONG: c = class_java_lang_Long; break;
- case ARRAYTYPE_FLOAT: c = class_java_lang_Float; break;
- case ARRAYTYPE_DOUBLE: c = class_java_lang_Double; break;
- case ARRAYTYPE_OBJECT: c = ((java_objectarray*) a) -> elementtype; break;
- case ARRAYTYPE_ARRAY: c = (classinfo *) ((java_arrayarray*) a) -> data[0]; break;
- default: panic("illegal arraytype");
- }
-
- /* set vftbl */
- use_class_as_object (c);
- }
-
- return (java_lang_Class*) c;
-}
-#endif
JNIEXPORT struct java_lang_Class* JNICALL Java_java_lang_VMClass_getComponentType (JNIEnv *env , struct java_lang_VMClass* this )
{
classinfo *thisclass = (classinfo*) (this->vmData);
* Method: isArray
* Signature: ()Z
*/
-/* XXX delete */
-#if 0
-JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isArray ( JNIEnv *env , struct java_lang_VMClass* this)
-{
- classinfo *c = (classinfo*) (this->vmData);
-
- if (c == class_array || c->name->text[0] == '[') return true;
- return false;
-}
-#endif
JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isArray ( JNIEnv *env , struct java_lang_VMClass* this)
{
classinfo *c = (classinfo*) (this->vmData);
* Method: clone
* Signature: ()Ljava/lang/Object;
*/
-/* XXX delete */
-#if 0
-JNIEXPORT struct java_lang_Object* JNICALL Java_java_lang_VMObject_clone ( JNIEnv *env , jclass clazz, struct java_lang_Cloneable* this)
-{
-/* log_text("Java_java_lang_VMObject_clone called");
- utf_display(((java_objectheader*)this)->vftbl->class->name);
- log_text("starting cloning"); */
- classinfo *c;
- java_lang_Object *new;
-
- if (((java_objectheader*)this)->vftbl->class == class_array)
- {
- static u4 multiplicator[10];
- static int is_initialized = 0;
-
- java_arrayheader *array = (java_arrayheader*)this;
- u4 size;
-
- if (!is_initialized)
- {
- multiplicator[ARRAYTYPE_INT] = sizeof(s4);
- multiplicator[ARRAYTYPE_LONG] = sizeof(s8);
- multiplicator[ARRAYTYPE_FLOAT] = sizeof(float);
- multiplicator[ARRAYTYPE_DOUBLE] = sizeof(double);
- multiplicator[ARRAYTYPE_BYTE] = sizeof(s1);
- multiplicator[ARRAYTYPE_CHAR] = sizeof(u2);
- multiplicator[ARRAYTYPE_SHORT] = sizeof(s2);
- multiplicator[ARRAYTYPE_BOOLEAN] = sizeof(u1);
- multiplicator[ARRAYTYPE_OBJECT] = sizeof(void*);
- multiplicator[ARRAYTYPE_ARRAY] = sizeof(void*);
- is_initialized = 1;
- }
-
- size = sizeof(java_arrayheader)
- + array->size * multiplicator[array->arraytype];
- if (array->arraytype == ARRAYTYPE_OBJECT /* elementtype */
- || array->arraytype == ARRAYTYPE_ARRAY) /* elementdescriptor */
- size += sizeof(void*);
-
- if (array->arraytype==ARRAYTYPE_OBJECT || array->arraytype==ARRAYTYPE_OBJECT)
- size+=sizeof(void*);
-
- new = (java_lang_Object*)heap_allocate(size, false, NULL);
- memcpy(new, this, size);
-
- return new;
- }
- else
- {
- if (!class_java_lang_Cloneable)
- class_java_lang_Cloneable =
- class_new ( utf_new_char ("java/lang/Cloneable") );
- if (! builtin_instanceof ((java_objectheader*) this, class_java_lang_Cloneable) ) {
- exceptionptr = native_new_and_init (class_java_lang_CloneNotSupportedException);
- return NULL;
- }
-
- c = this -> header.vftbl -> class;
- new = (java_lang_Object*) builtin_new (c);
- if (!new) {
- exceptionptr = proto_java_lang_OutOfMemoryError;
- return NULL;
- }
-
- memcpy (new, this, c->instancesize);
- return new;
- }
- return 0;
-}
-#endif
JNIEXPORT struct java_lang_Object* JNICALL Java_java_lang_VMObject_clone ( JNIEnv *env , jclass clazz, struct java_lang_Cloneable* this)
{
/* log_text("Java_java_lang_VMObject_clone called");
* Method: getClassContext
* Signature: ()[Ljava/lang/Class;
*/
-/* XXX delete */
-#if 0
-JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMSecurityManager_getClassContext ( JNIEnv *env ,jclass clazz)
-{
- log_text("Java_java_lang_VMSecurityManager_getClassContext called");
-#warning return something more usefull here
- return builtin_anewarray(0, class_java_lang_Class);
-}
-#endif
JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMSecurityManager_getClassContext ( JNIEnv *env ,jclass clazz)
{
log_text("Java_java_lang_VMSecurityManager_getClassContext called");
* Method: arraycopy
* Signature: (Ljava/lang/Object;ILjava/lang/Object;II)V
*/
-/* XXX delete */
-#if 0
-JNIEXPORT void JNICALL Java_java_lang_VMSystem_arraycopy (JNIEnv *env, jclass clazz,struct java_lang_Object* source, s4 sp, struct java_lang_Object* dest, s4 dp, s4 len)
-{
- s4 i;
- java_arrayheader *s = (java_arrayheader*) source;
- java_arrayheader *d = (java_arrayheader*) dest;
-
- printf("arraycopy: %p:%x->%p:%x||len=%d\n",source,sp,dest,dp,len);
- fflush(stdout);
-
-
- if (((s == NULL) || (d == NULL)) != 0) {
- exceptionptr = proto_java_lang_NullPointerException;
- return;
- }
- log_text("Passed nullpointer check");
- if (s->objheader.vftbl->class != class_array) {
- exceptionptr = proto_java_lang_ArrayStoreException;
- return;
- }
-
- log_text("Passed array storeexception");
- if (((sp<0) | (sp+len > s->size) | (dp<0) | (dp+len > d->size)) != 0) {
- exceptionptr = proto_java_lang_ArrayIndexOutOfBoundsException;
- return;
- }
-
- log_text("Passed array out of bounds exception");
- printf("ARRAY TYPE: %d\n",s->arraytype);
-
- switch (s->arraytype) {
- case ARRAYTYPE_BYTE:
- if (s->objheader.vftbl != d->objheader.vftbl) {
- exceptionptr = proto_java_lang_ArrayStoreException;
- return;
- }
- memmove(((java_bytearray*) d)->data + dp,
- ((java_bytearray*) s)->data + sp,
- (size_t) len);
- return;
- case ARRAYTYPE_BOOLEAN:
- if (s->objheader.vftbl != d->objheader.vftbl) {
- exceptionptr = proto_java_lang_ArrayStoreException;
- return;
- }
- memmove(((java_booleanarray*) d)->data + dp,
- ((java_booleanarray*) s)->data + sp,
- (size_t) len);
- return;
- case ARRAYTYPE_CHAR:
- if (s->objheader.vftbl != d->objheader.vftbl) {
- exceptionptr = proto_java_lang_ArrayStoreException;
- return;
- }
- printf("CHARARRAY:");
- if (len>0) {
- utf_display(utf_new_u2(((java_chararray*)d)->data+sp,len*sizeof(u2), 0));
- }
- printf("\n");
-
- memmove(((java_chararray*) d)->data + dp,
- ((java_chararray*) s)->data + sp,
- (size_t) len * sizeof(u2));
- return;
- case ARRAYTYPE_SHORT:
- if (s->objheader.vftbl != d->objheader.vftbl) {
- exceptionptr = proto_java_lang_ArrayStoreException;
- return;
- }
- memmove(((java_shortarray*) d)->data + dp,
- ((java_shortarray*) s)->data + sp,
- (size_t) len * sizeof(s2));
- return;
- case ARRAYTYPE_INT:
- if (s->objheader.vftbl != d->objheader.vftbl) {
- exceptionptr = proto_java_lang_ArrayStoreException;
- return;
- }
- memmove(((java_intarray*) d)->data + dp,
- ((java_intarray*) s)->data + sp,
- (size_t) len * sizeof(s4));
- return;
- case ARRAYTYPE_LONG:
- if (s->objheader.vftbl != d->objheader.vftbl) {
- exceptionptr = proto_java_lang_ArrayStoreException;
- return;
- }
- memmove(((java_longarray*) d)->data + dp,
- ((java_longarray*) s)->data + sp,
- (size_t) len * sizeof(s8));
- return;
- case ARRAYTYPE_FLOAT:
- if (s->objheader.vftbl != d->objheader.vftbl) {
- exceptionptr = proto_java_lang_ArrayStoreException;
- return;
- }
- memmove(((java_floatarray*) d)->data + dp,
- ((java_floatarray*) s)->data + sp,
- (size_t) len * sizeof(float));
- return;
- case ARRAYTYPE_DOUBLE:
- if (s->objheader.vftbl != d->objheader.vftbl) {
- exceptionptr = proto_java_lang_ArrayStoreException;
- return;
- }
- memmove(((java_doublearray*) d)->data + dp,
- ((java_doublearray*) s)->data + sp,
- (size_t) len * sizeof(double));
- return;
- case ARRAYTYPE_OBJECT:
- {
- java_objectarray *oas = (java_objectarray*) s;
- java_objectarray *oad = (java_objectarray*) d;
-
- if (d->objheader.vftbl->class != class_array) {
- exceptionptr = proto_java_lang_ArrayStoreException;
- return;
- }
- if (s->arraytype != d->arraytype) {
- exceptionptr = proto_java_lang_ArrayStoreException;
- return;
- }
-
- if (dp<=sp)
- for (i=0; i<len; i++) {
- java_objectheader *o = oas->data[sp+i];
- if (!builtin_canstore(oad, o)) {
- exceptionptr = proto_java_lang_ArrayStoreException;
- return;
- }
- oad->data[dp+i] = o;
- }
- else
- for (i=len-1; i>=0; i--) {
- java_objectheader *o = oas->data[sp+i];
- if (!builtin_canstore(oad, o)) {
- exceptionptr = proto_java_lang_ArrayStoreException;
- return;
- }
- oad->data[dp+i] = o;
- }
-
- }
- break;
- case ARRAYTYPE_ARRAY:
- {
- java_arrayarray *aas = (java_arrayarray*) s;
- java_arrayarray *aad = (java_arrayarray*) d;
-
- if (d->objheader.vftbl->class != class_array) {
- exceptionptr = proto_java_lang_ArrayStoreException;
- return;
- }
- if (s->arraytype != d->arraytype) {
- exceptionptr = proto_java_lang_ArrayStoreException;
- return;
- }
-
- if (dp<=sp)
- for (i=0; i<len; i++) {
- java_arrayheader *o = aas->data[sp+i];
- if (!builtin_canstore( (java_objectarray*)aad,
- (java_objectheader*)o )) {
- exceptionptr = proto_java_lang_ArrayStoreException;
- return;
- }
- aad->data[dp+i] = o;
- }
- else
- for (i=len-1; i>=0; i--) {
- java_arrayheader *o = aas->data[sp+i];
- if (!builtin_canstore( (java_objectarray*)aad,
- (java_objectheader*)o )) {
- exceptionptr = proto_java_lang_ArrayStoreException;
- return;
- }
- aad->data[dp+i] = o;
- }
-
- }
- break;
-
- default:
- panic ("Unknown data type for arraycopy");
- }
-}
-#endif
JNIEXPORT void JNICALL Java_java_lang_VMSystem_arraycopy (JNIEnv *env, jclass clazz,struct java_lang_Object* source, s4 sp, struct java_lang_Object* dest, s4 dp, s4 len)
{
s4 i;
Authors: ?
- $Id: jni.c 664 2003-11-21 18:24:01Z jowenn $
+ $Id: jni.c 669 2003-11-23 14:04:20Z edwin $
*/
break;
}
case '[' : {
- /* XXX */
+ /* XXX need arrayclass change? */
/* arrayclass */
char *start = *utf_ptr;
char ch;
* Method: getModifiers
* Signature: ()I
*/
-/* XXX delete */
-#if 0
-JNIEXPORT struct java_lang_Class* JNICALL Java_java_lang_VMClass_getComponentType (JNIEnv *env , struct java_lang_VMClass* this )
-{
- classinfo *c = NULL;
-
- if ((classinfo*) (this->vmData) == class_array) {
- java_arrayheader *a = (java_arrayheader*) (this->vmData);
-
- /* determine componenttype */
- switch (a->arraytype) {
- case ARRAYTYPE_BYTE: c = class_java_lang_Byte; break;
- case ARRAYTYPE_BOOLEAN: c = class_java_lang_Boolean; break;
- case ARRAYTYPE_CHAR: c = class_java_lang_Character; break;
- case ARRAYTYPE_SHORT: c = class_java_lang_Short; break;
- case ARRAYTYPE_INT: c = class_java_lang_Integer; break;
- case ARRAYTYPE_LONG: c = class_java_lang_Long; break;
- case ARRAYTYPE_FLOAT: c = class_java_lang_Float; break;
- case ARRAYTYPE_DOUBLE: c = class_java_lang_Double; break;
- case ARRAYTYPE_OBJECT: c = ((java_objectarray*) a) -> elementtype; break;
- case ARRAYTYPE_ARRAY: c = (classinfo *) ((java_arrayarray*) a) -> data[0]; break;
- default: panic("illegal arraytype");
- }
-
- /* set vftbl */
- use_class_as_object (c);
- }
-
- return (java_lang_Class*) c;
-}
-#endif
JNIEXPORT struct java_lang_Class* JNICALL Java_java_lang_VMClass_getComponentType (JNIEnv *env , struct java_lang_VMClass* this )
{
classinfo *thisclass = (classinfo*) (this->vmData);
* Method: isArray
* Signature: ()Z
*/
-/* XXX delete */
-#if 0
-JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isArray ( JNIEnv *env , struct java_lang_VMClass* this)
-{
- classinfo *c = (classinfo*) (this->vmData);
-
- if (c == class_array || c->name->text[0] == '[') return true;
- return false;
-}
-#endif
JNIEXPORT s4 JNICALL Java_java_lang_VMClass_isArray ( JNIEnv *env , struct java_lang_VMClass* this)
{
classinfo *c = (classinfo*) (this->vmData);
* Method: clone
* Signature: ()Ljava/lang/Object;
*/
-/* XXX delete */
-#if 0
-JNIEXPORT struct java_lang_Object* JNICALL Java_java_lang_VMObject_clone ( JNIEnv *env , jclass clazz, struct java_lang_Cloneable* this)
-{
-/* log_text("Java_java_lang_VMObject_clone called");
- utf_display(((java_objectheader*)this)->vftbl->class->name);
- log_text("starting cloning"); */
- classinfo *c;
- java_lang_Object *new;
-
- if (((java_objectheader*)this)->vftbl->class == class_array)
- {
- static u4 multiplicator[10];
- static int is_initialized = 0;
-
- java_arrayheader *array = (java_arrayheader*)this;
- u4 size;
-
- if (!is_initialized)
- {
- multiplicator[ARRAYTYPE_INT] = sizeof(s4);
- multiplicator[ARRAYTYPE_LONG] = sizeof(s8);
- multiplicator[ARRAYTYPE_FLOAT] = sizeof(float);
- multiplicator[ARRAYTYPE_DOUBLE] = sizeof(double);
- multiplicator[ARRAYTYPE_BYTE] = sizeof(s1);
- multiplicator[ARRAYTYPE_CHAR] = sizeof(u2);
- multiplicator[ARRAYTYPE_SHORT] = sizeof(s2);
- multiplicator[ARRAYTYPE_BOOLEAN] = sizeof(u1);
- multiplicator[ARRAYTYPE_OBJECT] = sizeof(void*);
- multiplicator[ARRAYTYPE_ARRAY] = sizeof(void*);
- is_initialized = 1;
- }
-
- size = sizeof(java_arrayheader)
- + array->size * multiplicator[array->arraytype];
- if (array->arraytype == ARRAYTYPE_OBJECT /* elementtype */
- || array->arraytype == ARRAYTYPE_ARRAY) /* elementdescriptor */
- size += sizeof(void*);
-
- if (array->arraytype==ARRAYTYPE_OBJECT || array->arraytype==ARRAYTYPE_OBJECT)
- size+=sizeof(void*);
-
- new = (java_lang_Object*)heap_allocate(size, false, NULL);
- memcpy(new, this, size);
-
- return new;
- }
- else
- {
- if (!class_java_lang_Cloneable)
- class_java_lang_Cloneable =
- class_new ( utf_new_char ("java/lang/Cloneable") );
- if (! builtin_instanceof ((java_objectheader*) this, class_java_lang_Cloneable) ) {
- exceptionptr = native_new_and_init (class_java_lang_CloneNotSupportedException);
- return NULL;
- }
-
- c = this -> header.vftbl -> class;
- new = (java_lang_Object*) builtin_new (c);
- if (!new) {
- exceptionptr = proto_java_lang_OutOfMemoryError;
- return NULL;
- }
-
- memcpy (new, this, c->instancesize);
- return new;
- }
- return 0;
-}
-#endif
JNIEXPORT struct java_lang_Object* JNICALL Java_java_lang_VMObject_clone ( JNIEnv *env , jclass clazz, struct java_lang_Cloneable* this)
{
/* log_text("Java_java_lang_VMObject_clone called");
* Method: getClassContext
* Signature: ()[Ljava/lang/Class;
*/
-/* XXX delete */
-#if 0
-JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMSecurityManager_getClassContext ( JNIEnv *env ,jclass clazz)
-{
- log_text("Java_java_lang_VMSecurityManager_getClassContext called");
-#warning return something more usefull here
- return builtin_anewarray(0, class_java_lang_Class);
-}
-#endif
JNIEXPORT java_objectarray* JNICALL Java_java_lang_VMSecurityManager_getClassContext ( JNIEnv *env ,jclass clazz)
{
log_text("Java_java_lang_VMSecurityManager_getClassContext called");
* Method: arraycopy
* Signature: (Ljava/lang/Object;ILjava/lang/Object;II)V
*/
-/* XXX delete */
-#if 0
-JNIEXPORT void JNICALL Java_java_lang_VMSystem_arraycopy (JNIEnv *env, jclass clazz,struct java_lang_Object* source, s4 sp, struct java_lang_Object* dest, s4 dp, s4 len)
-{
- s4 i;
- java_arrayheader *s = (java_arrayheader*) source;
- java_arrayheader *d = (java_arrayheader*) dest;
-
- printf("arraycopy: %p:%x->%p:%x||len=%d\n",source,sp,dest,dp,len);
- fflush(stdout);
-
-
- if (((s == NULL) || (d == NULL)) != 0) {
- exceptionptr = proto_java_lang_NullPointerException;
- return;
- }
- log_text("Passed nullpointer check");
- if (s->objheader.vftbl->class != class_array) {
- exceptionptr = proto_java_lang_ArrayStoreException;
- return;
- }
-
- log_text("Passed array storeexception");
- if (((sp<0) | (sp+len > s->size) | (dp<0) | (dp+len > d->size)) != 0) {
- exceptionptr = proto_java_lang_ArrayIndexOutOfBoundsException;
- return;
- }
-
- log_text("Passed array out of bounds exception");
- printf("ARRAY TYPE: %d\n",s->arraytype);
-
- switch (s->arraytype) {
- case ARRAYTYPE_BYTE:
- if (s->objheader.vftbl != d->objheader.vftbl) {
- exceptionptr = proto_java_lang_ArrayStoreException;
- return;
- }
- memmove(((java_bytearray*) d)->data + dp,
- ((java_bytearray*) s)->data + sp,
- (size_t) len);
- return;
- case ARRAYTYPE_BOOLEAN:
- if (s->objheader.vftbl != d->objheader.vftbl) {
- exceptionptr = proto_java_lang_ArrayStoreException;
- return;
- }
- memmove(((java_booleanarray*) d)->data + dp,
- ((java_booleanarray*) s)->data + sp,
- (size_t) len);
- return;
- case ARRAYTYPE_CHAR:
- if (s->objheader.vftbl != d->objheader.vftbl) {
- exceptionptr = proto_java_lang_ArrayStoreException;
- return;
- }
- printf("CHARARRAY:");
- if (len>0) {
- utf_display(utf_new_u2(((java_chararray*)d)->data+sp,len*sizeof(u2), 0));
- }
- printf("\n");
-
- memmove(((java_chararray*) d)->data + dp,
- ((java_chararray*) s)->data + sp,
- (size_t) len * sizeof(u2));
- return;
- case ARRAYTYPE_SHORT:
- if (s->objheader.vftbl != d->objheader.vftbl) {
- exceptionptr = proto_java_lang_ArrayStoreException;
- return;
- }
- memmove(((java_shortarray*) d)->data + dp,
- ((java_shortarray*) s)->data + sp,
- (size_t) len * sizeof(s2));
- return;
- case ARRAYTYPE_INT:
- if (s->objheader.vftbl != d->objheader.vftbl) {
- exceptionptr = proto_java_lang_ArrayStoreException;
- return;
- }
- memmove(((java_intarray*) d)->data + dp,
- ((java_intarray*) s)->data + sp,
- (size_t) len * sizeof(s4));
- return;
- case ARRAYTYPE_LONG:
- if (s->objheader.vftbl != d->objheader.vftbl) {
- exceptionptr = proto_java_lang_ArrayStoreException;
- return;
- }
- memmove(((java_longarray*) d)->data + dp,
- ((java_longarray*) s)->data + sp,
- (size_t) len * sizeof(s8));
- return;
- case ARRAYTYPE_FLOAT:
- if (s->objheader.vftbl != d->objheader.vftbl) {
- exceptionptr = proto_java_lang_ArrayStoreException;
- return;
- }
- memmove(((java_floatarray*) d)->data + dp,
- ((java_floatarray*) s)->data + sp,
- (size_t) len * sizeof(float));
- return;
- case ARRAYTYPE_DOUBLE:
- if (s->objheader.vftbl != d->objheader.vftbl) {
- exceptionptr = proto_java_lang_ArrayStoreException;
- return;
- }
- memmove(((java_doublearray*) d)->data + dp,
- ((java_doublearray*) s)->data + sp,
- (size_t) len * sizeof(double));
- return;
- case ARRAYTYPE_OBJECT:
- {
- java_objectarray *oas = (java_objectarray*) s;
- java_objectarray *oad = (java_objectarray*) d;
-
- if (d->objheader.vftbl->class != class_array) {
- exceptionptr = proto_java_lang_ArrayStoreException;
- return;
- }
- if (s->arraytype != d->arraytype) {
- exceptionptr = proto_java_lang_ArrayStoreException;
- return;
- }
-
- if (dp<=sp)
- for (i=0; i<len; i++) {
- java_objectheader *o = oas->data[sp+i];
- if (!builtin_canstore(oad, o)) {
- exceptionptr = proto_java_lang_ArrayStoreException;
- return;
- }
- oad->data[dp+i] = o;
- }
- else
- for (i=len-1; i>=0; i--) {
- java_objectheader *o = oas->data[sp+i];
- if (!builtin_canstore(oad, o)) {
- exceptionptr = proto_java_lang_ArrayStoreException;
- return;
- }
- oad->data[dp+i] = o;
- }
-
- }
- break;
- case ARRAYTYPE_ARRAY:
- {
- java_arrayarray *aas = (java_arrayarray*) s;
- java_arrayarray *aad = (java_arrayarray*) d;
-
- if (d->objheader.vftbl->class != class_array) {
- exceptionptr = proto_java_lang_ArrayStoreException;
- return;
- }
- if (s->arraytype != d->arraytype) {
- exceptionptr = proto_java_lang_ArrayStoreException;
- return;
- }
-
- if (dp<=sp)
- for (i=0; i<len; i++) {
- java_arrayheader *o = aas->data[sp+i];
- if (!builtin_canstore( (java_objectarray*)aad,
- (java_objectheader*)o )) {
- exceptionptr = proto_java_lang_ArrayStoreException;
- return;
- }
- aad->data[dp+i] = o;
- }
- else
- for (i=len-1; i>=0; i--) {
- java_arrayheader *o = aas->data[sp+i];
- if (!builtin_canstore( (java_objectarray*)aad,
- (java_objectheader*)o )) {
- exceptionptr = proto_java_lang_ArrayStoreException;
- return;
- }
- aad->data[dp+i] = o;
- }
-
- }
- break;
-
- default:
- panic ("Unknown data type for arraycopy");
- }
-}
-#endif
JNIEXPORT void JNICALL Java_java_lang_VMSystem_arraycopy (JNIEnv *env, jclass clazz,struct java_lang_Object* source, s4 sp, struct java_lang_Object* dest, s4 dp, s4 len)
{
s4 i;
calls instead of machine instructions, using the C calling
convention.
- $Id: builtin.c 664 2003-11-21 18:24:01Z jowenn $
+ $Id: builtin.c 669 2003-11-23 14:04:20Z edwin $
*/
{
#ifdef DEBUG
log_text ("builtin_instanceof called");
-
- /* XXX remove log */
- /*
- sprintf(logtext,"instanceof(");
- utf_sprint(logtext+strlen(logtext),obj->vftbl->class->name);
- sprintf(logtext+strlen(logtext),",");
- utf_sprint(logtext+strlen(logtext),class);
- sprintf(logtext+strlen(logtext),")");
- dolog();
- */
#endif
if (!obj) return 0;
return builtin_isanysubclass (obj->vftbl->class, class);
log_text("builtin_checkcast called");
#endif
- /* XXX remove log */
- /*
- sprintf(logtext,"checkcast(");
- utf_sprint(logtext+strlen(logtext),obj->vftbl->class->name);
- sprintf(logtext+strlen(logtext),",");
- utf_sprint(logtext+strlen(logtext),class);
- sprintf(logtext+strlen(logtext),")");
- dolog();
- */
-
if (obj == NULL)
return 1;
if (builtin_isanysubclass(obj->vftbl->class, class))
******************************************************************************/
-/* XXX delete */
-#if 0
-static s4 builtin_descriptorscompatible(constant_arraydescriptor *desc, constant_arraydescriptor *target)
-{
- if (desc == target) return 1;
- if (desc->arraytype != target->arraytype) return 0;
-
- switch (target->arraytype) {
- case ARRAYTYPE_OBJECT:
- return builtin_isanysubclass(desc->objectclass, target->objectclass);
- case ARRAYTYPE_ARRAY:
- return builtin_descriptorscompatible
- (desc->elementdescriptor, target->elementdescriptor);
- default: return 1;
- }
-}
-#endif
-
/* XXX inline this? */
static s4 builtin_descriptorscompatible(arraydescriptor *desc,arraydescriptor *target)
{
*****************************************************************************/
-/* XXX delete */
-#if 0
-s4 builtin_checkarraycast(java_objectheader *o, constant_arraydescriptor *desc)
-{
- java_arrayheader *a = (java_arrayheader*) o;
-
- if (!o) return 1;
- if (o->vftbl->class != class_array) {
-#ifdef DEBUG
- printf("#### checkarraycast failed 1\n");
-#endif
- return 0;
- }
-
- if (a->arraytype != desc->arraytype) {
-#ifdef DEBUG
- printf("#### checkarraycast failed 2\n");
-#endif
- return 0;
- }
-
- switch (a->arraytype) {
- case ARRAYTYPE_OBJECT: {
- java_objectarray *oa = (java_objectarray*) o;
- int result = builtin_isanysubclass(oa->elementtype, desc->objectclass);
-
-#ifdef DEBUG
- if (!result)
- printf("#### checkarraycast failed 3\n");
-#endif
- return result;
- }
- case ARRAYTYPE_ARRAY: {
- java_arrayarray *aa = (java_arrayarray*) o;
- int result = builtin_descriptorscompatible
- (aa->elementdescriptor, desc->elementdescriptor);
-
-#ifdef DEBUG
- if (!result)
- printf("#### checkarraycast failed 4\n");
-#endif
- return result;
- }
- default:
- return 1;
- }
-}
-#endif
-
s4 builtin_checkarraycast(java_objectheader *o,arraydescriptor *target)
{
arraydescriptor *desc;
return builtin_descriptorscompatible(desc,target);
}
-/* XXX delete */
-#if 0
-s4 builtin_arrayinstanceof(java_objectheader *obj, constant_arraydescriptor *desc)
-{
- if (!obj) return 1;
- return builtin_checkarraycast (obj, desc);
-}
-#endif
-
s4 builtin_arrayinstanceof(java_objectheader *obj,arraydescriptor *desc)
{
if (!obj) return 1;
******************************************************************************/
-/* XXX delete */
-#if 0
-s4 builtin_canstore(java_objectarray *a, java_objectheader *o)
-{
- if (!o) return 1;
-
- switch (a->header.arraytype) {
- case ARRAYTYPE_OBJECT:
- if (!builtin_checkcast(o, a->elementtype)) {
- return 0;
- }
- return 1;
- break;
-
- case ARRAYTYPE_ARRAY:
- if (!builtin_checkarraycast
- (o, ((java_arrayarray*)a)->elementdescriptor)) {
- return 0;
- }
- return 1;
- break;
-
- default:
- panic("builtin_canstore called with invalid arraytype");
- return 0;
- }
-}
-#endif
-
s4 builtin_canstore (java_objectarray *a, java_objectheader *o)
{
arraydescriptor *desc;
componentvftbl = desc->componentvftbl;
valuevftbl = o->vftbl;
- /* XXX remove log */
- /*
- log_text("builtin_canstore");
- print_arraydescriptor(stdout,desc);
- utf_sprint(logtext,valuevftbl->class->name);
- dolog();
- */
-
if ((dim_m1 = desc->dimension - 1) == 0) {
/* {a is a one-dimensional array} */
/* {a is an array of references} */
if (valuevftbl == componentvftbl)
return 1;
- /* XXX remove log */
- /* log_text("not same vftbl"); */
-
if ((base = componentvftbl->baseval) <= 0)
/* an array of interface references */
return (valuevftbl->interfacetablelength > -base &&
return o;
}
+/********************** Function: builtin_newarray **************************
+
+ Creates an array with the given vftbl on the heap.
+ Return value: pointer to the array or NULL if no memory is available
+ CAUTION: The given vftbl must be the vftbl of the *array* class,
+ not of the element class.
+
+*****************************************************************************/
java_arrayheader *builtin_newarray(s4 size,vftbl *arrayvftbl)
{
- /* XXX remove log */
- /*
- sprintf(logtext,"newarray size=%d class=",size);
- utf_sprint(logtext+strlen(logtext),arrayvftbl->class->name);
- dolog();
- */
-
java_arrayheader *a;
arraydescriptor *desc = arrayvftbl->arraydesc;
s4 dataoffset = desc->dataoffset;
return a;
}
-java_objectarray *
-builtin_anewarray(s4 size,classinfo *component)
-{
- return (java_objectarray*) builtin_newarray(size,class_array_of(component)->vftbl);
-}
-
-/* XXX delete */
-#if 0
-java_objectarray *builtin_anewarray (s4 size, classinfo *elementtype)
-{
- java_objectarray *a;
- a = (java_objectarray*)__builtin_newarray(sizeof(java_objectarray),
- size,
- true,
- sizeof(void*),
- ARRAYTYPE_OBJECT,
- elementtype);
- if (!a) return NULL;
-
- a->elementtype = elementtype;
- return a;
-}
-#endif
+/********************** Function: builtin_anewarray *************************
-/******************** function: builtin_newarray_array ***********************
+ Creates an array of references to the given class type on the heap.
- Creates an array of pointers to arrays on the heap.
- Parameters:
- size ......... number of elements
- elementdesc .. pointer to the array description structure for the
- element arrays
-
Return value: pointer to the array or NULL if no memory is available
+ XXX This function does not do The Right Thing, because it uses a
+ classinfo pointer at runtime. builtin_newarray should be used
+ instead.
+
*****************************************************************************/
-/* XXX delete */
-#if 0
-java_arrayarray *builtin_newarray_array
- (s4 size, constant_arraydescriptor *elementdesc)
+java_objectarray *
+builtin_anewarray(s4 size,classinfo *component)
{
- java_arrayarray *a;
- a = (java_arrayarray*)__builtin_newarray(sizeof(java_arrayarray),
- size,
- true,
- sizeof(void*),
- ARRAYTYPE_ARRAY,
- elementdesc->objectclass);
- if (!a) return NULL;
-
- a->elementdescriptor = elementdesc;
- return a;
+ return (java_objectarray*) builtin_newarray(size,class_array_of(component)->vftbl);
}
-#endif
+/******************** Function: builtin_newarray_int ***********************
-/******************** function: builtin_newarray_boolean ************************
+ Creates an array of 32 bit Integers on the heap.
- Creates an array of bytes on the heap. The array is designated as an array
- of booleans (important for casts)
-
Return value: pointer to the array or NULL if no memory is available
*****************************************************************************/
-/* XXX delete */
-#if 0
-java_booleanarray *builtin_newarray_boolean (s4 size)
-{
- java_booleanarray *a;
- a = (java_booleanarray*)__builtin_newarray(sizeof(java_booleanarray),
- size,
- false,
- sizeof(u1),
- ARRAYTYPE_BOOLEAN,
- NULL);
- return a;
-}
-#endif
-
java_intarray *builtin_newarray_int (s4 size)
{
return (java_intarray*) builtin_newarray(size,primitivetype_table[ARRAYTYPE_INT].arrayvftbl);
}
-java_longarray *builtin_newarray_long (s4 size)
-{
- return (java_longarray*) builtin_newarray(size,primitivetype_table[ARRAYTYPE_LONG].arrayvftbl);
-}
-
-java_floatarray *builtin_newarray_float (s4 size)
-{
- return (java_floatarray*) builtin_newarray(size,primitivetype_table[ARRAYTYPE_FLOAT].arrayvftbl);
-}
-
-java_doublearray *builtin_newarray_double (s4 size)
-{
- return (java_doublearray*) builtin_newarray(size,primitivetype_table[ARRAYTYPE_DOUBLE].arrayvftbl);
-}
-
-java_bytearray *builtin_newarray_byte (s4 size)
-{
- return (java_bytearray*) builtin_newarray(size,primitivetype_table[ARRAYTYPE_BYTE].arrayvftbl);
-}
-
-java_chararray *builtin_newarray_char (s4 size)
-{
- return (java_chararray*) builtin_newarray(size,primitivetype_table[ARRAYTYPE_CHAR].arrayvftbl);
-}
-
-java_shortarray *builtin_newarray_short (s4 size)
-{
- return (java_shortarray*) builtin_newarray(size,primitivetype_table[ARRAYTYPE_SHORT].arrayvftbl);
-}
-
-java_booleanarray *builtin_newarray_boolean (s4 size)
-{
- return (java_booleanarray*) builtin_newarray(size,primitivetype_table[ARRAYTYPE_BOOLEAN].arrayvftbl);
-}
-
-/******************** function: builtin_newarray_char ************************
+/******************** Function: builtin_newarray_long ***********************
- Creates an array of characters on the heap.
+ Creates an array of 64 bit Integers on the heap.
Return value: pointer to the array or NULL if no memory is available
*****************************************************************************/
-/* XXX delete */
-#if 0
-java_chararray *builtin_newarray_char (s4 size)
+java_longarray *builtin_newarray_long (s4 size)
{
- java_chararray *a;
- a = (java_chararray*)__builtin_newarray(sizeof(java_chararray),
- size,
- false,
- sizeof(u2),
- ARRAYTYPE_CHAR,
- NULL);
- return a;
+ return (java_longarray*) builtin_newarray(size,primitivetype_table[ARRAYTYPE_LONG].arrayvftbl);
}
-
/******************** function: builtin_newarray_float ***********************
Creates an array of 32 bit IEEE floats on the heap.
*****************************************************************************/
-/* XXX delete */
java_floatarray *builtin_newarray_float (s4 size)
{
- java_floatarray *a;
- a = (java_floatarray*)__builtin_newarray(sizeof(java_floatarray),
- size,
- false,
- sizeof(float),
- ARRAYTYPE_FLOAT,
- NULL);
- return a;
+ return (java_floatarray*) builtin_newarray(size,primitivetype_table[ARRAYTYPE_FLOAT].arrayvftbl);
}
-
/******************** function: builtin_newarray_double ***********************
Creates an array of 64 bit IEEE floats on the heap.
java_doublearray *builtin_newarray_double (s4 size)
{
- java_doublearray *a;
- a = (java_doublearray*)__builtin_newarray(sizeof(java_doublearray),
- size,
- false,
- sizeof(double),
- ARRAYTYPE_DOUBLE,
- NULL);
- return a;
+ return (java_doublearray*) builtin_newarray(size,primitivetype_table[ARRAYTYPE_DOUBLE].arrayvftbl);
}
-
-
-
/******************** function: builtin_newarray_byte ***********************
Creates an array of 8 bit Integers on the heap.
*****************************************************************************/
-/* XXX delete */
java_bytearray *builtin_newarray_byte (s4 size)
{
- java_bytearray *a;
- a = (java_bytearray*)__builtin_newarray(sizeof(java_bytearray),
- size,
- false,
- sizeof(u1),
- ARRAYTYPE_BYTE,
- NULL);
- return a;
+ return (java_bytearray*) builtin_newarray(size,primitivetype_table[ARRAYTYPE_BYTE].arrayvftbl);
}
+/******************** function: builtin_newarray_char ************************
-/******************** function: builtin_newarray_short ***********************
-
- Creates an array of 16 bit Integers on the heap.
+ Creates an array of characters on the heap.
Return value: pointer to the array or NULL if no memory is available
*****************************************************************************/
-/* XXX delete */
-java_shortarray *builtin_newarray_short(s4 size)
+java_chararray *builtin_newarray_char (s4 size)
{
- java_shortarray *a;
- a = (java_shortarray*)__builtin_newarray(sizeof(java_shortarray),
- size,
- false,
- sizeof(s2),
- ARRAYTYPE_SHORT,
- NULL);
- return a;
+ return (java_chararray*) builtin_newarray(size,primitivetype_table[ARRAYTYPE_CHAR].arrayvftbl);
}
+/******************** function: builtin_newarray_short ***********************
-/******************** Function: builtin_newarray_int ***********************
-
- Creates an array of 32 bit Integers on the heap.
+ Creates an array of 16 bit Integers on the heap.
Return value: pointer to the array or NULL if no memory is available
*****************************************************************************/
-<<<<<<< builtin.c
-/* XXX delete */
-java_intarray *builtin_newarray_int(s4 size)
+java_shortarray *builtin_newarray_short (s4 size)
{
- java_intarray *a;
- a = (java_intarray*)__builtin_newarray(sizeof(java_intarray),
- size,
- false,
- sizeof(s4),
- ARRAYTYPE_INT,
- NULL);
-
-#if 0
- if (a == NULL) {
- asm_handle_builtin_exception(proto_java_lang_OutOfMemoryError);
- }
-#endif
-
- return a;
+ return (java_shortarray*) builtin_newarray(size,primitivetype_table[ARRAYTYPE_SHORT].arrayvftbl);
}
+/******************** function: builtin_newarray_boolean ************************
-/******************** Function: builtin_newarray_long ***********************
-
- Creates an array of 64 bit Integers on the heap.
-
+ Creates an array of bytes on the heap. The array is designated as an array
+ of booleans (important for casts)
+
Return value: pointer to the array or NULL if no memory is available
*****************************************************************************/
-<<<<<<< builtin.c
-/* XXX delete */
-java_longarray *builtin_newarray_long(s4 size)
-{
- java_longarray *a;
- a = (java_longarray*)__builtin_newarray(sizeof(java_longarray),
- size,
- false,
- sizeof(s8),
- ARRAYTYPE_LONG,
- NULL);
- return a;
-}
-
-
-/* XXX delete */
-/***************** function: builtin_multianewarray ***************************
-
- Creates a multi-dimensional array on the heap. The dimensions are passed in
- an array of Integers. The type for the array is passed as a reference to a
- constant_arraydescriptor structure.
-
- Return value: pointer to the array or NULL if no memory is available
-
-******************************************************************************/
-
- /* Helper functions */
-
-/* XXX delete */
-static java_arrayheader *multianewarray_part(java_intarray *dims, int thisdim,
- constant_arraydescriptor *desc)
-{
- u4 size,i;
- java_arrayarray *a;
-
- size = dims->data[thisdim];
-
- if (thisdim == (dims->header.size - 1)) {
- /* last dimension reached */
-
- switch (desc -> arraytype) {
- case ARRAYTYPE_BOOLEAN:
- return (java_arrayheader*) builtin_newarray_boolean(size);
- case ARRAYTYPE_CHAR:
- return (java_arrayheader*) builtin_newarray_char(size);
- case ARRAYTYPE_FLOAT:
- return (java_arrayheader*) builtin_newarray_float(size);
- case ARRAYTYPE_DOUBLE:
- return (java_arrayheader*) builtin_newarray_double(size);
- case ARRAYTYPE_BYTE:
- return (java_arrayheader*) builtin_newarray_byte(size);
- case ARRAYTYPE_SHORT:
- return (java_arrayheader*) builtin_newarray_short(size);
- case ARRAYTYPE_INT:
- return (java_arrayheader*) builtin_newarray_int(size);
- case ARRAYTYPE_LONG:
- return (java_arrayheader*) builtin_newarray_long(size);
- case ARRAYTYPE_OBJECT:
- return (java_arrayheader*) builtin_anewarray(size, desc->objectclass);
-
- case ARRAYTYPE_ARRAY:
- return (java_arrayheader*) builtin_newarray_array(size, desc->elementdescriptor);
-
- default: panic("Invalid arraytype in multianewarray");
- }
- }
-
- /* if the last dimension has not been reached yet */
-
- if (desc->arraytype != ARRAYTYPE_ARRAY)
- panic("multianewarray with too many dimensions");
-
- a = builtin_newarray_array(size, desc->elementdescriptor);
- if (!a) return NULL;
-
- for (i = 0; i < size; i++) {
- java_arrayheader *ea =
- multianewarray_part(dims, thisdim + 1, desc->elementdescriptor);
- if (!ea) return NULL;
-
- a->data[i] = ea;
- }
-
- return (java_arrayheader*) a;
-}
-
-/* XXX delete */
-java_arrayheader *builtin_multianewarray(java_intarray *dims,
- constant_arraydescriptor *desc)
-{
- return multianewarray_part(dims, 0, desc);
-}
-
-
-static java_arrayheader *nmultianewarray_part(int n, long *dims, int thisdim,
- constant_arraydescriptor *desc)
+java_booleanarray *builtin_newarray_boolean (s4 size)
{
- int size, i;
- java_arrayarray *a;
-
- size = (int) dims[thisdim];
-
- if (thisdim == (n - 1)) {
- /* last dimension reached */
-
- switch (desc -> arraytype) {
- case ARRAYTYPE_BOOLEAN:
- return (java_arrayheader*) builtin_newarray_boolean(size);
- case ARRAYTYPE_CHAR:
- return (java_arrayheader*) builtin_newarray_char(size);
- case ARRAYTYPE_FLOAT:
- return (java_arrayheader*) builtin_newarray_float(size);
- case ARRAYTYPE_DOUBLE:
- return (java_arrayheader*) builtin_newarray_double(size);
- case ARRAYTYPE_BYTE:
- return (java_arrayheader*) builtin_newarray_byte(size);
- case ARRAYTYPE_SHORT:
- return (java_arrayheader*) builtin_newarray_short(size);
- case ARRAYTYPE_INT:
- return (java_arrayheader*) builtin_newarray_int(size);
- case ARRAYTYPE_LONG:
- return (java_arrayheader*) builtin_newarray_long(size);
- case ARRAYTYPE_OBJECT:
- return (java_arrayheader*) builtin_anewarray(size,
- desc->objectclass);
- case ARRAYTYPE_ARRAY:
- return (java_arrayheader*) builtin_newarray_array(size,
- desc->elementdescriptor);
-
- default: panic ("Invalid arraytype in multianewarray");
- }
- }
-
- /* if the last dimension has not been reached yet */
-
- if (desc->arraytype != ARRAYTYPE_ARRAY)
- panic ("multianewarray with too many dimensions");
-
- a = builtin_newarray_array(size, desc->elementdescriptor);
- if (!a) return NULL;
-
- for (i = 0; i < size; i++) {
- java_arrayheader *ea =
- nmultianewarray_part(n, dims, thisdim + 1, desc->elementdescriptor);
- if (!ea) return NULL;
-
- a -> data[i] = ea;
- }
-
- return (java_arrayheader*) a;
+ return (java_booleanarray*) builtin_newarray(size,primitivetype_table[ARRAYTYPE_BOOLEAN].arrayvftbl);
}
-#endif
/**************** function: builtin_nmultianewarray ***************************
return a;
}
-/* XXX delete */
-#if 0
-java_arrayheader *builtin_nmultianewarray (int size,
- constant_arraydescriptor *desc, long *dims)
-{
- (void) builtin_newarray_int(size); /* for compatibility with -old */
- return nmultianewarray_part (size, dims, 0, desc);
-}
-#endif
-
-
-
-/************************* function: builtin_aastore *************************
-
- Stores a reference to an object into an object array or into an array
- array. Before any action is performed, the validity of the operation is
- checked.
-
- Return value: 1 ... ok
- 0 ... this object cannot be stored into this array
-
-*****************************************************************************/
-
-/* XXX delete */
-#if 0
-s4 builtin_aastore (java_objectarray *a, s4 index, java_objectheader *o)
-{
- if (builtin_canstore(a,o)) {
- a->data[index] = o;
- return 1;
- }
- return 0;
-}
-#endif
-
-
-
-
-
/*****************************************************************************
METHOD LOGGING
Changes: Mark Probst
Philipp Tomsich
+ Edwin Steiner
- $Id: global.h 664 2003-11-21 18:24:01Z jowenn $
+ $Id: global.h 669 2003-11-23 14:04:20Z edwin $
*/
} constant_nameandtype;
-/*
- arraydescriptor describes array types. Basic array types contain their
- type in the arraytype field, objectclass contains a class pointer for
- arrays of objects (arraytype == ARRAYTYPE_OBJECT), elementdescriptor
- contains a pointer to an arraydescriptor which describes the element
- types in the case of arrays of arrays (arraytype == ARRAYTYPE_ARRAY).
-*/
-
-/* XXX delete */
-#if 0
-typedef struct constant_arraydescriptor {
- int arraytype;
- classinfo *objectclass;
- struct constant_arraydescriptor *elementdescriptor;
-} constant_arraydescriptor;
-#endif
-
-
/* data structures of the runtime system **************************************/
/* objects *********************************************************************
/* arrays **********************************************************************
- All arrays are objects (they need the object header with a pointer to a
- vvftbl (array class table). There is only one class for all arrays. The XXX change
- type of an array is stored directly in the array object. Following types
- are defined:
+ All arrays are objects (they need the object header with a pointer
+ to a vftbl (array class table). There is one class for each array
+ type. The array type is described by an arraydescriptor struct
+ which is referenced by the vftbl.
*/
/* CAUTION: Don't change the numerical values! These constants (with
java_objectheader *data[1];
} java_objectarray;
-/* XXX delete */
-#if 0
-typedef struct java_arrayarray {
- java_arrayheader header;
- constant_arraydescriptor *elementdescriptor;
- java_arrayheader *data[1];
-} java_arrayarray;
-#endif
-
/* structure for primitive classes ********************************************/
typedef struct primitivetypeinfo {
Changes: Carolyn Oates
- $Id: parse.c 665 2003-11-21 18:36:43Z jowenn $
+ $Id: parse.c 669 2003-11-23 14:04:20Z edwin $
*/
nextp = p + jcommandsize[opcode]; /* compute next instruction start */
s_count += stackreq[opcode]; /* compute stack element count */
- /* XXX remove log */
- /* log_text(opcode_names[opcode]); */
-
switch (opcode) {
case JAVA_NOP:
break;
Roman Obermaiser
Mark Probst
- $Id: loader.c 664 2003-11-21 18:24:01Z jowenn $
+ $Id: loader.c 669 2003-11-23 14:04:20Z edwin $
*/
java_objectheader *proto_java_lang_ArrayStoreException;
java_objectheader *proto_java_lang_ThreadDeath;
-/* XXX delete */
-#if 0
-void override_array_class(classinfo *c) {
- int i;
- classinfo *sup;
- utf *u=utf_new_char("clone");
- sup=c->super;
- class_showmethods(c);
-
- for (i=0;i<sup->methodscount;i++) {
- if (sup->methods[i].name==u) {
- method_clone_array.class = c;
- method_clone_array. flags = ACC_PUBLIC;
- method_clone_array.name = utf_new_char("clone");
- method_clone_array.descriptor = utf_new_char("()Ljava/lang/Object;");
-
- method_clone_array.jcode = NULL;
- method_clone_array.exceptiontable = NULL;
- method_clone_array.entrypoint = NULL;
- method_clone_array.mcode = NULL;
- method_clone_array.stubroutine = NULL;
- method_clone_array.methodUsed = NOTUSED;
- method_clone_array.monoPoly = MONO;
- method_clone_array.subRedefs = 0;
- method_clone_array.subRedefsUsed = 0;
- method_clone_array.flags=0;
- method_clone_array.xta = NULL;
- method_clone_array.stubroutine = createnativestub (&builtin_clone_array, &method_clone_array);
- c->vftbl->table[sup->methods[i].vftblindex]=method_clone_array.stubroutine;
- log_text("Found !!!! :)))))))))))))))))))))))))))))))))))))))))))))))))");
- }
-
-
- }
-}
-#endif
-
-
-
-
-
-
-
-
/************* functions for reading classdata *********************************
classfile = fopen(filename, "r");
if (classfile) { /* file exists */
- /* XXX remove */
- /*
- sprintf(logtext,"Opening file: %s",filename);
- dolog();
- */
-
/* determine size of classfile */
err = stat (filename, &buffer);
{
char *tstart; /* pointer to start of classname */
char ch;
- char *start = utf_ptr; /* XXX remove */
+ char *start = utf_ptr;
switch (*utf_ptr++) {
case 'B':
char *end_pos = utf_end(d); /* points behind utf string */
char *tstart; /* pointer to start of classname */
char c,ch;
- char *start; /* XXX remove */
+ char *start;
/* method descriptor must start with parenthesis */
/* XXX check length */
/* XXX check length */
/* check arguments */
while ((c = *utf_ptr++) != ')') {
- start = utf_ptr-1; /* XXX remove */
+ start = utf_ptr-1;
switch (c) {
case 'B':
checkfielddescriptor (utf_ptr,end_pos);
}
-
-/******************** Function: buildarraydescriptor ***************************
-
- creates a constant_arraydescriptor structure for the array type named by an
- utf string
-
-*******************************************************************************/
-
-/* XXX delete */
-#if 0
-constant_arraydescriptor * buildarraydescriptor(char *utf_ptr, u4 namelen)
-{
- constant_arraydescriptor *d;
-
- /* class_new( utf_new(utf_ptr,namelen) ); */ /* XXX remove */
-
- if (*utf_ptr++ != '[') panic ("Attempt to build arraydescriptor for non-array");
-
- d = NEW (constant_arraydescriptor);
- d -> objectclass = NULL;
- d -> elementdescriptor = NULL;
-
-#ifdef STATISTICS
- count_const_pool_len += sizeof(constant_arraydescriptor);
-#endif
-
- switch (*utf_ptr) {
- case 'Z': d -> arraytype = ARRAYTYPE_BOOLEAN; break;
- case 'B': d -> arraytype = ARRAYTYPE_BYTE; break;
- case 'C': d -> arraytype = ARRAYTYPE_CHAR; break;
- case 'D': d -> arraytype = ARRAYTYPE_DOUBLE; break;
- case 'F': d -> arraytype = ARRAYTYPE_FLOAT; break;
- case 'I': d -> arraytype = ARRAYTYPE_INT; break;
- case 'J': d -> arraytype = ARRAYTYPE_LONG; break;
- case 'S': d -> arraytype = ARRAYTYPE_SHORT; break;
-
- case '[':
- d -> arraytype = ARRAYTYPE_ARRAY;
- d -> elementdescriptor = buildarraydescriptor (utf_ptr, namelen-1);
- break;
-
- case 'L':
- d -> arraytype = ARRAYTYPE_OBJECT;
-
- d -> objectclass = class_new ( utf_new(utf_ptr+1, namelen-3) );
- d -> objectclass -> classUsed = NOTUSED; /* not used initially CO-RT */
- d -> objectclass -> impldBy = NULL;
- break;
- }
- return d;
-}
-#endif
-
-
-/******************* Function: freearraydescriptor *****************************
-
- removes a structure created by buildarraydescriptor from memory
-
-*******************************************************************************/
-
-/* XXX delete */
-#if 0
-static void freearraydescriptor (constant_arraydescriptor *d)
-{
- while (d) {
- constant_arraydescriptor *n = d->elementdescriptor;
- FREE (d, constant_arraydescriptor);
- d = n;
- }
-}
-#endif
-
-/*********************** Function: displayarraydescriptor *********************/
-
-/* XXX delete */
-#if 0
-static void displayarraydescriptor (constant_arraydescriptor *d)
-{
- switch (d->arraytype) {
- case ARRAYTYPE_BOOLEAN: printf ("boolean[]"); break;
- case ARRAYTYPE_BYTE: printf ("byte[]"); break;
- case ARRAYTYPE_CHAR: printf ("char[]"); break;
- case ARRAYTYPE_DOUBLE: printf ("double[]"); break;
- case ARRAYTYPE_FLOAT: printf ("float[]"); break;
- case ARRAYTYPE_INT: printf ("int[]"); break;
- case ARRAYTYPE_LONG: printf ("long[]"); break;
- case ARRAYTYPE_SHORT: printf ("short[]"); break;
- case ARRAYTYPE_ARRAY: displayarraydescriptor(d->elementdescriptor); printf("[]"); break;
- case ARRAYTYPE_OBJECT: utf_display(d->objectclass->name); printf("[]"); break;
- }
-}
-#endif
-
/***************** Function: print_arraydescriptor ****************************
Debugging helper for displaying an arraydescriptor
count_class_loads++;
#endif
- /* XXX remove */
- /* loadverbose = 1; */
-
/* output for debugging purposes */
if (loadverbose) {
methodinfo *clone;
int namelen;
- /* XXX remove logging */
- /*
- sprintf(logtext,"new array class: ");
- utf_sprint(logtext+strlen(logtext),c->name);
- dolog();
- */
-
/* Array classes are not loaded from classfiles. */
list_remove (&unloadedclasses, c);
break;
case 'L':
- /* XXX remove logging */
- /*
- sprintf(logtext,"Component class: ");
- utf_sprint(logtext+strlen(logtext),utf_new(c->name->text + 2,namelen - 3));
- dolog();
- if (class_get(utf_new(c->name->text + 2,namelen - 3)))
- log_text("Already created.");
- */
-
/* c is an array of objects. */
if (namelen < 4 || c->name->text[namelen-1] != ';')
panic("Invalid array class name.");
arraydescriptor *desc;
vftbl *compvftbl;
- /* XXX remove logging */
-
- /*
- sprintf(logtext,"linking array class: ");
- utf_sprint(logtext+strlen(logtext),c->name);
- dolog();
- */
-
-
/* Check the component type */
switch (c->name->text[1]) {
case '[':
desc->dimension = 1;
}
- /* XXX remove logging */
- /*
- print_arraydescriptor(stdout,desc);
- printf("\n");
- */
-
return desc;
}
arraydescriptor *arraydesc = NULL; /* descriptor for array classes */
- /* XXX remove log */
- /*
- sprintf(logtext,"trying to link: ");
- utf_sprint(logtext+strlen(logtext),c->name);
- dolog();
- */
-
/* check if all superclasses are already linked, if not put c at end of
unlinked list and return. Additionally initialize class fields. */
}
}
-/***************** function: create_array_class ********************************
-
- create class representing an array
-
-********************************************************************************/
-
-/* XXX delete */
-#if 0
-classinfo *create_array_class(utf *u)
-{
- classinfo *c = class_new (u);
- /* prevent loader from loading the array class */
- list_remove (&unloadedclasses, c);
- /* add to unlinked classes */
- list_addlast (&unlinkedclasses, c);
- c -> super = class_java_lang_Object;
- class_link(c);
- return c;
-}
-#endif
-
/*************** function: create_pseudo_classes *******************************
create pseudo classes used by the typechecker
Authors: Reinhard Grafl
- $Id: loader.h 664 2003-11-21 18:24:01Z jowenn $
+ $Id: loader.h 669 2003-11-23 14:04:20Z edwin $
*/
#define CLASSLOAD_LOAD 2
classinfo *class_from_descriptor(char *utf_ptr,char *end_ptr,char **next,int mode);
-/* create class representing specific arraytype */ /* XXX delete */
-classinfo *create_array_class(utf *u);
-
/* (used by class_new, don't use directly) */
void class_new_array(classinfo *c);
check_DATA = checkall
-checkall: x.tst jctest.tst fp.tst fptest.tst GCBench.tstrun
+checkall: x.tst jctest.tst fp.tst fptest.tst TestArrayClasses.tst GCBench.tstrun
%.tst:
../cacao sun.tools.javac.Main $*.java
fflush (logfile);
}
else {
- printf ("LOG: %s\n",logtext);
- fflush (stdout);
+ fprintf (stderr,"LOG: %s\n",logtext);
+ fflush (stderr);
}
}