@@ -663,6 +663,10 @@ int float_to_int_raw(float toconv) {
663663}
664664
665665int check_for_default_value (ccInternalList &targ, int funcsym, int numparams) {
666+ const int arg_idx = numparams % 100 ;
667+ assert (static_cast <uint32_t >(funcsym) < sym.entries .size ());
668+ assert (static_cast <uint32_t >(arg_idx) < sym.entries [funcsym].funcparams .size ());
669+
666670 if (sym.get_type (targ.peeknext ()) == SYM_ASSIGN) {
667671 const char *vartype = sym.get_name (targ.script [targ.pos - 2 ]);
668672 // parameter has default value
@@ -711,9 +715,8 @@ int check_for_default_value(ccInternalList &targ, int funcsym, int numparams) {
711715 }
712716 }
713717
714- sym.entries [funcsym].funcparams [numparams % 100 ].DefaultValue = defaultValue;
715- sym.entries [funcsym].funcparams [numparams % 100 ].HasDefaultValue = true ;
716-
718+ sym.entries [funcsym].funcparams [arg_idx].DefaultValue = defaultValue;
719+ sym.entries [funcsym].funcparams [arg_idx].HasDefaultValue = true ;
717720 }
718721
719722 return 0 ;
@@ -862,6 +865,7 @@ int process_function_declaration(ccInternalList &targ, ccCompiledScript*scrip,
862865
863866 sym.entries [funcsym].stype = SYM_FUNCTION;
864867 sym.entries [funcsym].ssize = varsize; // save return type size
868+ sym.entries [funcsym].funcparams .resize (1 );
865869 sym.entries [funcsym].funcparams [0 ].Type = vtwas; // return type
866870
867871 if (is_const)
@@ -932,30 +936,28 @@ int process_function_declaration(ccInternalList &targ, ccCompiledScript*scrip,
932936 }
933937 else if (next_type == SYM_VARTYPE) {
934938 // function parameter
935- if ((numparams % 100 ) >= MAX_FUNCTION_PARAMETERS) {
936- cc_error (" too many parameters defined for function" );
937- return -1 ;
938- }
939939 if (cursym == sym.normalVoidSym ) {
940940 cc_error (" 'void' invalid type for function parameter" );
941941 return -1 ;
942942 }
943943 int isPointerParam = 0 ;
944944 // save the parameter type (numparams starts from 1)
945- sym.entries [funcsym].funcparams [numparams % 100 ].Type = cursym;
946- sym.entries [funcsym].funcparams [numparams % 100 ].DefaultValue = 0 ;
947- sym.entries [funcsym].funcparams [numparams % 100 ].HasDefaultValue = false ;
945+ const int arg_idx = numparams % 100 ;
946+ sym.entries [funcsym].funcparams .resize (arg_idx + 1 );
947+ sym.entries [funcsym].funcparams [arg_idx].Type = cursym;
948+ sym.entries [funcsym].funcparams [arg_idx].DefaultValue = 0 ;
949+ sym.entries [funcsym].funcparams [arg_idx].HasDefaultValue = false ;
948950
949951 if (next_is_const)
950- sym.entries [funcsym].funcparams [numparams % 100 ].Type |= STYPE_CONST;
952+ sym.entries [funcsym].funcparams [arg_idx ].Type |= STYPE_CONST;
951953
952954 functype[strlen (functype)+1 ] = 0 ;
953955 functype[strlen (functype)] = (char )cursym; // save variable type
954956 if (check_not_eof (targ))
955957 return -1 ;
956958 if (strcmp (sym.get_name (targ.peeknext ()), " *" ) == 0 ) {
957959 // pointer
958- sym.entries [funcsym].funcparams [numparams % 100 ].Type |= STYPE_POINTER;
960+ sym.entries [funcsym].funcparams [arg_idx ].Type |= STYPE_POINTER;
959961 isPointerParam = 1 ;
960962 targ.getnext ();
961963 if ((sym.entries [cursym].flags & SFLG_MANAGED) == 0 ) {
@@ -970,7 +972,7 @@ int process_function_declaration(ccInternalList &targ, ccCompiledScript*scrip,
970972 }
971973
972974 if (sym.entries [cursym].flags & SFLG_AUTOPTR) {
973- sym.entries [funcsym].funcparams [numparams % 100 ].Type |= STYPE_POINTER;
975+ sym.entries [funcsym].funcparams [arg_idx ].Type |= STYPE_POINTER;
974976 isPointerParam = 1 ;
975977 }
976978
@@ -1034,7 +1036,7 @@ int process_function_declaration(ccInternalList &targ, ccCompiledScript*scrip,
10341036 }
10351037 else if (dynArrayStatus > 0 )
10361038 {
1037- sym.entries [funcsym].funcparams [(numparams - 1 ) % 100 ].Type |= STYPE_DYNARRAY;
1039+ sym.entries [funcsym].funcparams [arg_idx ].Type |= STYPE_DYNARRAY;
10381040 if (createdLocalVar)
10391041 {
10401042 sym.entries [cursym].flags |= SFLG_DYNAMICARRAY | SFLG_ARRAY;
@@ -2780,6 +2782,7 @@ int parse_sub_expr(int32_t *symlist, int listlen, ccCompiledScript*scrip) {
27802782
27812783 if (num_supplied_args < func_args) {
27822784 // not enough arguments -- see if we can supply default values
2785+ assert (static_cast <uint32_t >(func_args) < sym.entries [funcsym].funcparams .size ());
27832786 for (int ii = func_args; ii > num_supplied_args; ii--) {
27842787
27852788 if (!sym.entries [funcsym].funcparams [ii].HasDefaultValue ) {
0 commit comments