diff --git a/src/interpret.c b/src/interpret.c index 483a3abab668b09c6ee098311400d4870dd6231e..e505d0f06d513aa19826044c7fa33226ed2e44a9 100644 --- a/src/interpret.c +++ b/src/interpret.c @@ -981,6 +981,8 @@ void apply_low(struct object *o, int fun, int args) clear_svalues(sp, num_locals - args); sp += num_locals - args; #ifdef DEBUG + if(num_locals < num_args) + fatal("Wrong number of arguments or locals in function def.\n"); fp->num_locals=num_locals; fp->num_args=num_args; #endif diff --git a/src/language.y b/src/language.y index 9d0cbc9fae7ce17071b2e1fb3d62636179a3626b..aca0a19b5b7c7f38131261126e945a84c9f91058 100644 --- a/src/language.y +++ b/src/language.y @@ -1137,6 +1137,7 @@ void free_all_local_names() local_variables->variable[e].type=0; } local_variables->current_number_of_locals = 0; + local_variables->max_number_of_locals = 0; } static void push_locals() diff --git a/src/program.c b/src/program.c index a46c0d3842cfddb3fa7913b393c59afca2e6df1b..a801176e4af60e6d66d308bab3042191e774e37b 100644 --- a/src/program.c +++ b/src/program.c @@ -116,9 +116,10 @@ void start_new_program() low_my_binary_strcat((char *)&name,sizeof(name),&inherit_names); num_parse_error=0; - local_variables=ALLOC_STRUCT(locals); + local_variables=ALLOC_STRUCT(locals); local_variables->next=0; local_variables->current_number_of_locals=0; + local_variables->max_number_of_locals=0; local_variables->current_type=0; local_variables->current_return_type=0; } @@ -534,7 +535,6 @@ void set_exit_callback(void (*exit)(char *,struct object *)) } - int low_reference_inherited_identifier(int e,struct lpc_string *name) { struct reference funp;