diff --git a/src/error.c b/src/error.c index 1e0c968a681d2299b2465275befcec171dd18211..0207417f142418659022ec22c471af42924811da 100644 --- a/src/error.c +++ b/src/error.c @@ -35,7 +35,7 @@ void throw() ATTRIBUTE((noreturn)) #ifdef DEBUG if(sp - evaluator_stack < recoveries->sp) - fatal("Error in error.\n"); + fatal("Stack error in error.\n"); #endif while(fp != recoveries->fp) diff --git a/src/interpret.c b/src/interpret.c index 34219756a7c1e3a20dca17a671365846de7e4eca..25cdaa884ae297c1c21e2b8b9a1e45d2bc9c4a8c 100644 --- a/src/interpret.c +++ b/src/interpret.c @@ -4,7 +4,7 @@ ||| See the files COPYING and DISCLAIMER for more information. \*/ #include "global.h" -RCSID("$Id: interpret.c,v 1.43 1997/07/19 20:25:24 hubbe Exp $"); +RCSID("$Id: interpret.c,v 1.44 1997/08/03 09:55:06 hubbe Exp $"); #include "interpret.h" #include "object.h" #include "program.h" @@ -521,6 +521,9 @@ static void eval_instruction(unsigned char *pc) if(fp->fun>=0 && fp->current_object->prog && fp->locals+fp->num_locals > sp) fatal("Stack error (stupid!).\n"); + + if(recoveries && sp-evaluator_stack < recoveries->sp) + fatal("Stack error (underflow)\n"); if(d_flag > 9) do_debug(); diff --git a/src/language.yacc b/src/language.yacc index a9e7a33ba292f45acf18421f47210fb1d60f1b65..d48a2668b911c1405f1d744b94eabaa8b3691c34 100644 --- a/src/language.yacc +++ b/src/language.yacc @@ -156,7 +156,7 @@ /* This is the grammar definition of Pike. */ #include "global.h" -RCSID("$Id: language.yacc,v 1.43 1997/06/07 01:16:26 hubbe Exp $"); +RCSID("$Id: language.yacc,v 1.44 1997/08/03 09:55:07 hubbe Exp $"); #ifdef HAVE_MEMORY_H #include <memory.h> #endif @@ -542,6 +542,10 @@ def: modifiers type_or_error optional_stars F_IDENTIFIER '(' arguments ')' } dooptcode($4, $9, $<string>8, $1); +#ifdef DEBUG + if(recoveries && sp-evaluator_stack < recoveries->sp) + fatal("Stack error (underflow)\n"); +#endif } if(local_variables->current_return_type) { @@ -560,7 +564,7 @@ def: modifiers type_or_error optional_stars F_IDENTIFIER '(' arguments ')' | error ';' { yyerrok; } { reset_type_stack(); - if(num_parse_error>5) YYACCEPT; +/* if(num_parse_error>5) YYACCEPT; */ } ; @@ -891,6 +895,10 @@ lambda: F_LAMBDA mknode(F_ARG_LIST,$4,mknode(F_RETURN,mkintnode(0),0)), type, 0); +#ifdef DEBUG + if(recoveries && sp-evaluator_stack < recoveries->sp) + fatal("Stack error (underflow)\n"); +#endif free_string(name); free_string(type); comp_stackp=$<number>2; @@ -1348,6 +1356,11 @@ void yyerror(char *str) extern int num_parse_error; extern int cumulative_parse_error; +#ifdef DEBUG + if(recoveries && sp-evaluator_stack < recoveries->sp) + fatal("Stack error (underflow)\n"); +#endif + if (num_parse_error > 5) return; num_parse_error++; cumulative_parse_error++; @@ -1365,6 +1378,10 @@ void yyerror(char *str) sp++; SAFE_APPLY_MASTER("compile_error",3); pop_stack(); +#ifdef DEBUG + if(recoveries && sp-evaluator_stack < recoveries->sp) + fatal("Stack error (underflow)\n"); +#endif }else{ (void)fprintf(stderr, "%s:%ld: %s\n", current_file->str, diff --git a/src/las.c b/src/las.c index 4597137111c92c92a05eee410f94f8401ffa7a14..386ec58766579cac14436088aab2d91df2f80e69 100644 --- a/src/las.c +++ b/src/las.c @@ -4,7 +4,7 @@ ||| See the files COPYING and DISCLAIMER for more information. \*/ #include "global.h" -RCSID("$Id: las.c,v 1.34 1997/05/22 23:27:32 hubbe Exp $"); +RCSID("$Id: las.c,v 1.35 1997/08/03 09:55:09 hubbe Exp $"); #include "language.h" #include "interpret.h" @@ -2037,6 +2037,11 @@ int dooptcode(struct pike_string *name, int args, vargs, ret; struct svalue *foo; +#ifdef DEBUG + if(recoveries && sp-evaluator_stack < recoveries->sp) + fatal("Stack error before dooptcode (underflow)\n"); +#endif + #ifdef DEBUG if(a_flag > 1) fprintf(stderr,"Doing function '%s' at %x\n",name->str,PC); @@ -2084,6 +2089,11 @@ int dooptcode(struct pike_string *name, do_code_block(n); } +#ifdef DEBUG + if(recoveries && sp-evaluator_stack < recoveries->sp) + fatal("Stack error after do_code_block (underflow)\n"); +#endif + ret=define_function(name, type, modifiers, diff --git a/src/program.c b/src/program.c index e0f9fdaf2aa7d06ef00e34294b2ca134e70f8bb5..4cc6967ce4067c4bc9ffbc04f80e93fb5dada746 100644 --- a/src/program.c +++ b/src/program.c @@ -4,7 +4,7 @@ ||| See the files COPYING and DISCLAIMER for more information. \*/ #include "global.h" -RCSID("$Id: program.c,v 1.35 1997/07/18 01:44:22 hubbe Exp $"); +RCSID("$Id: program.c,v 1.36 1997/08/03 09:55:11 hubbe Exp $"); #include "program.h" #include "object.h" #include "dynamic_buffer.h" @@ -113,7 +113,12 @@ int find_module_identifier(struct pike_string *ident) { JMP_BUF tmp; - if(SETJMP(tmp)) +#ifdef DEBUG + if(recoveries && sp-evaluator_stack < recoveries->sp) + fatal("Stack error in compiation (underflow)\n"); +#endif + + if(SETJMP(tmp)) { ONERROR tmp; SET_ONERROR(tmp,exit_on_error,"Error in handle_error in master object!"); @@ -1518,6 +1523,10 @@ void compile() init_node=0; yyparse(); /* Parse da program */ +#ifdef DEBUG + if(recoveries && sp-evaluator_stack < recoveries->sp) + fatal("Stack error in compilation (underflow after yyparse)\n"); +#endif free_all_local_names(); }