- value = (int64_t) ((java_lang_Byte *) param)->value;
- else
- goto illegal_arg;
-
- vmargs[i].data.l = value;
- break;
-
- case PRIMITIVETYPE_LONG:
- if (c == class_java_lang_Long)
- value = (int64_t) ((java_lang_Long *) param)->value;
- else if (c == class_java_lang_Integer)
- value = (int64_t) ((java_lang_Integer *) param)->value;
- else if (c == class_java_lang_Short)
- value = (int64_t) ((java_lang_Short *) param)->value;
- else if (c == class_java_lang_Byte)
- value = (int64_t) ((java_lang_Byte *) param)->value;
- else
- goto illegal_arg;
-
- vmargs[i].data.l = value;
- break;
-
- case PRIMITIVETYPE_FLOAT:
- if (c == class_java_lang_Float)
- vmargs[i].data.f = (jfloat) ((java_lang_Float *) param)->value;
- else
- goto illegal_arg;
- break;
-
- case PRIMITIVETYPE_DOUBLE:
- if (c == class_java_lang_Double)
- vmargs[i].data.d = (jdouble) ((java_lang_Double *) param)->value;
- else if (c == class_java_lang_Float)
- vmargs[i].data.f = (jfloat) ((java_lang_Float *) param)->value;
- else
- goto illegal_arg;
- break;
-
- default:
- goto illegal_arg;
- }
- break;
-
- case TYPE_ADR:
- if (!resolve_class_from_typedesc(paramtypes, true, true, &c))
- return false;
-
- if (params->data[j] != 0) {
- if (paramtypes->arraydim > 0) {
- if (!builtin_arrayinstanceof(params->data[j], c))
- goto illegal_arg;
-
- } else {
- if (!builtin_instanceof(params->data[j], c))
- goto illegal_arg;
- }
- }
-
- vmargs[i].type = TYPE_ADR;
- vmargs[i].data.l = (u8) (ptrint) params->data[j];
- break;
-
- default:
- goto illegal_arg;
- }
- }
-
-/* if (rettype) */
-/* *rettype = descr->returntype.decltype; */
-
- return true;
-
-illegal_arg:
- exceptions_throw_illegalargumentexception();
- return false;
-}
-#else
-uint64_t *vm_array_from_objectarray(methodinfo *m, java_objectheader *o,
- java_objectarray *params)
-{
- methoddesc *md;
- paramdesc *pd;
- typedesc *td;
- uint64_t *array;
- java_objectheader *param;
- classinfo *c;
- int32_t i;
- int32_t j;
- imm_union value;
-
- /* get the descriptors */
-
- md = m->parseddesc;
- pd = md->params;
- td = md->paramtypes;
-
- /* allocate argument array */
-
- array = DMNEW(uint64_t, INT_ARG_CNT + FLT_ARG_CNT + md->memuse);
-
- /* if method is non-static fill first block and skip `this' pointer */
-
- i = 0;
-
- if (o != NULL) {
- /* this pointer */
- vm_array_store_adr(array, pd, o);
-
- pd++;
- td++;
- i++;
- }
-
- for (j = 0; i < md->paramcount; i++, j++, pd++, td++) {
- param = params->data[j];
-
- switch (td->type) {
- case TYPE_INT:
- if (param == NULL)
- goto illegal_arg;
-
- /* convert the value according to its declared type */
-
- c = param->vftbl->class;
-
- switch (td->decltype) {
- case PRIMITIVETYPE_BOOLEAN:
- if (c == class_java_lang_Boolean)
- value.i = ((java_lang_Boolean *) param)->value;
- else
- goto illegal_arg;
- break;
-
- case PRIMITIVETYPE_BYTE:
- if (c == class_java_lang_Byte)
- value.i = ((java_lang_Byte *) param)->value;
- else
- goto illegal_arg;
- break;
-
- case PRIMITIVETYPE_CHAR:
- if (c == class_java_lang_Character)
- value.i = ((java_lang_Character *) param)->value;
- else
- goto illegal_arg;
- break;
-
- case PRIMITIVETYPE_SHORT:
- if (c == class_java_lang_Short)
- value.i = ((java_lang_Short *) param)->value;
- else if (c == class_java_lang_Byte)
- value.i = ((java_lang_Byte *) param)->value;
- else
- goto illegal_arg;
- break;
-
- case PRIMITIVETYPE_INT:
- if (c == class_java_lang_Integer)
- value.i = ((java_lang_Integer *) param)->value;
- else if (c == class_java_lang_Short)
- value.i = ((java_lang_Short *) param)->value;
- else if (c == class_java_lang_Byte)
- value.i = ((java_lang_Byte *) param)->value;