projects
/
cacao.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
6a98534
)
fix for Object[] oa = (Object[])java.lang.reflect.Array.newInstance(Runnable.class...
author
jowenn
<none@none>
Mon, 16 Feb 2004 04:00:59 +0000
(
04:00
+0000)
committer
jowenn
<none@none>
Mon, 16 Feb 2004 04:00:59 +0000
(
04:00
+0000)
builtin.c
patch
|
blob
|
history
src/vm/builtin.c
patch
|
blob
|
history
diff --git
a/builtin.c
b/builtin.c
index a631cd125cc0b76f8a91dbdd68c9f6815b9743e6..cfacf49eb80100d57fa857737bc379c07a9dabd3 100644
(file)
--- a/
builtin.c
+++ b/
builtin.c
@@
-34,7
+34,7
@@
calls instead of machine instructions, using the C calling
convention.
calls instead of machine instructions, using the C calling
convention.
- $Id: builtin.c 9
08 2004-02-02 00:51:04Z twisti
$
+ $Id: builtin.c 9
21 2004-02-16 04:00:59Z jowenn
$
*/
*/
@@
-219,8
+219,11
@@
static s4 builtin_descriptorscompatible(arraydescriptor *desc,arraydescriptor *t
if (desc->arraytype != ARRAYTYPE_OBJECT) return 1;
/* {both arrays are arrays of references} */
if (desc->arraytype != ARRAYTYPE_OBJECT) return 1;
/* {both arrays are arrays of references} */
- if (desc->dimension == target->dimension)
+ if (desc->dimension == target->dimension) {
+ /* an array which contains elements of interface types is allowed to be casted to Object (JOWENN)*/
+ if ( (desc->elementvftbl->baseval<0) && (target->elementvftbl->baseval==1) ) return 1;
return builtin_isanysubclass_vftbl(desc->elementvftbl,target->elementvftbl);
return builtin_isanysubclass_vftbl(desc->elementvftbl,target->elementvftbl);
+ }
if (desc->dimension < target->dimension) return 0;
/* {desc has higher dimension than target} */
if (desc->dimension < target->dimension) return 0;
/* {desc has higher dimension than target} */
@@
-574,6
+577,12
@@
java_arrayheader *builtin_newarray(s4 size, vftbl *arrayvftbl)
java_objectarray *builtin_anewarray(s4 size, classinfo *component)
{
java_objectarray *builtin_anewarray(s4 size, classinfo *component)
{
+/*
+ printf("builtin_anewarray: classvftbl: %d\n",component->classvftbl);
+ printf("builtin_anewarray: baseval: %d\n",component->vftbl->baseval);
+ utf_display(component->vftbl->class->name);
+ printf("\nbuiltin_anewarray: linked: %d\n",component->linked);
+ utf_display(component->super->name);*/
return (java_objectarray*) builtin_newarray(size, class_array_of(component)->vftbl);
}
return (java_objectarray*) builtin_newarray(size, class_array_of(component)->vftbl);
}
diff --git
a/src/vm/builtin.c
b/src/vm/builtin.c
index a631cd125cc0b76f8a91dbdd68c9f6815b9743e6..cfacf49eb80100d57fa857737bc379c07a9dabd3 100644
(file)
--- a/
src/vm/builtin.c
+++ b/
src/vm/builtin.c
@@
-34,7
+34,7
@@
calls instead of machine instructions, using the C calling
convention.
calls instead of machine instructions, using the C calling
convention.
- $Id: builtin.c 9
08 2004-02-02 00:51:04Z twisti
$
+ $Id: builtin.c 9
21 2004-02-16 04:00:59Z jowenn
$
*/
*/
@@
-219,8
+219,11
@@
static s4 builtin_descriptorscompatible(arraydescriptor *desc,arraydescriptor *t
if (desc->arraytype != ARRAYTYPE_OBJECT) return 1;
/* {both arrays are arrays of references} */
if (desc->arraytype != ARRAYTYPE_OBJECT) return 1;
/* {both arrays are arrays of references} */
- if (desc->dimension == target->dimension)
+ if (desc->dimension == target->dimension) {
+ /* an array which contains elements of interface types is allowed to be casted to Object (JOWENN)*/
+ if ( (desc->elementvftbl->baseval<0) && (target->elementvftbl->baseval==1) ) return 1;
return builtin_isanysubclass_vftbl(desc->elementvftbl,target->elementvftbl);
return builtin_isanysubclass_vftbl(desc->elementvftbl,target->elementvftbl);
+ }
if (desc->dimension < target->dimension) return 0;
/* {desc has higher dimension than target} */
if (desc->dimension < target->dimension) return 0;
/* {desc has higher dimension than target} */
@@
-574,6
+577,12
@@
java_arrayheader *builtin_newarray(s4 size, vftbl *arrayvftbl)
java_objectarray *builtin_anewarray(s4 size, classinfo *component)
{
java_objectarray *builtin_anewarray(s4 size, classinfo *component)
{
+/*
+ printf("builtin_anewarray: classvftbl: %d\n",component->classvftbl);
+ printf("builtin_anewarray: baseval: %d\n",component->vftbl->baseval);
+ utf_display(component->vftbl->class->name);
+ printf("\nbuiltin_anewarray: linked: %d\n",component->linked);
+ utf_display(component->super->name);*/
return (java_objectarray*) builtin_newarray(size, class_array_of(component)->vftbl);
}
return (java_objectarray*) builtin_newarray(size, class_array_of(component)->vftbl);
}