Branch: Tag:

2005-05-30

2005-05-30 12:36:08 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.591

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.590 2005/05/26 17:04:38 mast Exp $ + || $Id: program.c,v 1.591 2005/05/30 12:36:08 mast Exp $   */      #include "global.h"
1563:    }    pop_stack();    } -  else +  else {    if(Pike_compiler->compiler_pass==2) {    if (throw_value.type == T_STRING) {    my_yyerror("%S", throw_value.u.string);
1574:    handle_compile_exception ("Error resolving %S.", ident);    }    } +  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) { +  yywarning ("Ignoring resolv() exception in pass %d:", +  Pike_compiler->compiler_pass); +  yywarning ("%S", msg); +  free_string (msg);    } -  +  else +  yywarning ("Ignoring resolv() exception in pass %d", +  Pike_compiler->compiler_pass); +  } + #endif +  free_svalue (&thrown); +  } +  } +  }    END_CYCLIC();       return ret;