Skip to content

Commit 3248d3e

Browse files
committed
- Updated get_array_sizes in dynload.c to use existing dimension information from the Values.ARRAY
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@4973 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
1 parent a0776c5 commit 3248d3e

File tree

1 file changed

+11
-21
lines changed

1 file changed

+11
-21
lines changed

Compiler/runtime/dynload.c

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ void *type_desc_to_value(type_description *desc);
4343
static int execute_function(void *in_arg, void **out_arg,
4444
int (* func)(type_description *,
4545
type_description *));
46-
int parse_array(type_description *desc, void *arrdata);
46+
int parse_array(type_description *desc, void *arrdata, void *dimLst);
4747

4848
void DynLoad_5finit(void)
4949
{
@@ -474,7 +474,8 @@ static int value_to_type_desc(void *value, type_description *desc)
474474
}; break;
475475
case Values__ARRAY_3dBOX2: {
476476
void *data = RML_STRUCTDATA(value)[0];
477-
if (parse_array(desc, data)) {
477+
void *dimLst = RML_STRUCTDATA(value)[1];
478+
if (parse_array(desc, dims)) {
478479
printf("Parsing of array failed\n");
479480
return -1;
480481
}
@@ -666,28 +667,17 @@ static int get_array_type_and_dims(type_description *desc, void *arrdata)
666667
}
667668
}
668669

669-
static int get_array_sizes(int curdim, int dims, int *dim_size, void *arrdata)
670+
static int get_array_sizes(int dims, int *dim_size, void *dimLst)
670671
{
671-
int size = 0;
672-
void *ptr = arrdata;
673-
674-
assert(curdim > 0 && curdim <= dims);
672+
int i;
673+
void *ptr = dimLst;
675674

676-
while (RML_GETHDR(ptr) != RML_NILHDR) {
677-
++size;
675+
for (i = 0; i < dims; i++) {
676+
assert(RML_GETHDR(ptr) != RML_NILHDR);
677+
dim_size[i] = RML_UNTAGFIXNUM(RML_CAR(ptr));
678678
ptr = RML_CDR(ptr);
679679
}
680680

681-
dim_size[curdim - 1] = size;
682-
683-
if (size > 0) {
684-
void *item = RML_CAR(arrdata);
685-
if (RML_HDRCTOR(RML_GETHDR(item)) == Values__ARRAY_3dBOX2) {
686-
return get_array_sizes(curdim + 1, dims, dim_size,
687-
RML_STRUCTDATA(item)[0]);
688-
}
689-
}
690-
691681
return 0;
692682
}
693683

@@ -758,7 +748,7 @@ static int get_array_data(int curdim, int dims, const int *dim_size,
758748
return 0;
759749
}
760750

761-
int parse_array(type_description *desc, void *arrdata)
751+
int parse_array(type_description *desc, void *arrdata, void *dimLst)
762752
{
763753
int dims, *dim_size;
764754
void *data;
@@ -790,7 +780,7 @@ int parse_array(type_description *desc, void *arrdata)
790780
assert(0);
791781
return -1;
792782
}
793-
if (get_array_sizes(1, dims, dim_size, arrdata))
783+
if (get_array_sizes(dims, dim_size, dimLst))
794784
return -1;
795785
switch (desc->type) {
796786
case TYPE_DESC_REAL_ARRAY:

0 commit comments

Comments
 (0)