Branch: Tag:

2005-05-30

2005-05-30 12:38:43 by Martin Stjernholm <mast@lysator.liu.se>

Some damage control in a severely broken part of the resolver mess:
Now we at least get a warning if resolv() throws an error in pass 1 in
rtldebug mode. Also fixed a temporary leak of the backtrace in this
case.

Rev: src/program.c:1.569

2:   || This file is part of Pike. For copyright information see COPYRIGHT.   || Pike is distributed under GPL, LGPL and MPL. See the file COPYING   || for more information. - || $Id: program.c,v 1.568 2005/05/26 17:05:06 mast Exp $ + || $Id: program.c,v 1.569 2005/05/30 12:38:43 mast Exp $   */      #include "global.h" - RCSID("$Id: program.c,v 1.568 2005/05/26 17:05:06 mast Exp $"); + RCSID("$Id: program.c,v 1.569 2005/05/30 12:38:43 mast Exp $");   #include "program.h"   #include "object.h"   #include "dynamic_buffer.h"
1541:    }    pop_stack();    } -  else +  else {    if(Pike_compiler->compiler_pass==2) {    if (throw_value.type == T_STRING && !throw_value.u.string->size_shift) {    yyerror(throw_value.u.string->str);
1555:    handle_compile_exception ("Error resolving identifier.");    }    } +  else { +  /* FIXME: Error goes to /dev/null. Now we get a warning at +  * least in rtldebug mode, but this borken, borken, boRKen. :P */ +  struct svalue thrown; +  move_svalue (&thrown, &throw_value); +  throw_value.type = T_INT; + #ifdef PIKE_DEBUG +  { +  struct pike_string *msg = format_exception_for_error_msg (&thrown); +  if (msg && !msg->size_shift) { +  yywarning ("Ignoring resolv() exception in pass %d:", +  Pike_compiler->compiler_pass); +  yywarning (msg->str); +  free_string (msg);    } -  +  else +  yywarning ("Ignoring resolv() exception in pass %d", +  Pike_compiler->compiler_pass); +  } + #endif +  free_svalue (&thrown); +  } +  } +  }    END_CYCLIC();       return ret;