@@ -43,7 +43,7 @@ void *type_desc_to_value(type_description *desc);
4343static 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
4848void 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