--- bc/bc/load.c +++ bc/bc/load.c @@ -149,7 +149,8 @@ load_code (const char *code) unsigned long label_no; unsigned long vaf_name; /* variable, array or function number. */ unsigned long func; - static program_counter save_adr; + /* static: functions may be split over multiple calls to load_code(). */ + static program_counter save_adr = {-1, -1}; /* Initialize. */ str = code; @@ -280,8 +281,13 @@ load_code (const char *code) break; case ']': /* A function end */ + if (save_adr.pc_func == -1) { + fprintf(stderr, "']': not in a 'F'(unction).\n"); + exit(1); + } functions[load_adr.pc_func].f_defined = TRUE; load_adr = save_adr; + save_adr.pc_func = -1; break; case 'C': /* Call a function. */