Branch: Tag:

1999-11-04

1999-11-04 02:35:31 by Henrik Grubbström (Grubba) <grubba@grubba.org>

Added support to specify an error handler to compile() et al.

Rev: lib/master.pike.in:1.66
Rev: src/language.yacc:1.129
Rev: src/program.c:1.170
Rev: src/program.h:1.65

1: - /* $Id: master.pike.in,v 1.65 1999/11/03 23:52:07 grubba Exp $ + /* $Id: master.pike.in,v 1.66 1999/11/04 02:35:31 grubba Exp $    *    * Master-file for Pike.    *
234:      #define capitalize(X) (upper_case((X)[..0])+(X)[1..])    - static program low_findprog(string pname, string ext) + static program low_findprog(string pname, string ext, object|void handler)   {    program ret;    array s;
262:    AUTORELOAD_CHECK_FILE(fname+".o");    return programs[fname]=decode_value(_static_modules.files()->Fd(fname+".o","r")->read(),Codec());    }; -  if(want_warnings) -  werror("Warning: Failed to decode %s.o:\n" -  " : \t%s\n", -  fname, -  err[0]); +  if(want_warnings) { +  if (handler) { +  handler->compile_warning(fname, 0, +  sprintf("Decode failed:\n" +  "\t%s", err[0])); +  } else { +  compile_warning(fname, 0, +  sprintf("Decode failed:\n" +  "\t%s", err[0]));    }    } -  +  } +  }          if ( mixed e=catch { ret=compile_file(fname); } )
299:    }   }    - static program findprog(string pname, string ext) + static program findprog(string pname, string ext, object|void handler)   {    switch(ext)    {    case ".pike":    case ".so": -  return low_findprog(pname,ext); +  return low_findprog(pname,ext,handler);       default:    pname+=ext;    return -  low_findprog(pname,"") || -  low_findprog(pname,".pike") || -  low_findprog(pname,".so"); +  low_findprog(pname,"", handler) || +  low_findprog(pname,".pike", handler) || +  low_findprog(pname,".so", handler);    }   }   
321:    * or a implict cast. In the future it might receive more arguments,    * to aid the master finding the right program.    */ - program cast_to_program(string pname, string current_file) + program cast_to_program(string pname, string current_file, object|void handler)   {    string ext;    string nname;
338:    if(IS_ABSOLUTE_PATH(pname))    {    pname=combine_path("/",pname); -  return findprog(pname,ext); +  return findprog(pname,ext,handler);    }else{    string cwd;    if(current_file)
348:    cwd=getcwd();    }    -  if(program ret=findprog(combine_path(cwd,pname),ext)) +  if(program ret=findprog(combine_path(cwd,pname),ext,handler))    return ret;       foreach(pike_program_path, string path) -  if(program ret=findprog(combine_path(path,pname),ext)) +  if(program ret=findprog(combine_path(path,pname),ext,handler))    return ret;       return 0;
475:    * previous_object(), can be virtually anything in this function, as it    * is called from the compiler.    */ - program handle_inherit(string pname, string current_file) + program handle_inherit(string pname, string current_file, object|void handler)   { -  return cast_to_program(pname, current_file); +  return cast_to_program(pname, current_file, handler);   }      mapping (program:object) objects=([object_program(this_object()):this_object()]);
705:    return fc[fullname]=UNDEFINED;   }    - mixed handle_import(string what, string|void current_file) + mixed handle_import(string what, string|void current_file, object|void handler)   {    string *tmp,path;    if(current_file)
1043:    if(!inhibit_compile_errors)    {    if(want_warnings) -  werror(sprintf("%s:%d:%s\n",trim_file_name(file),line,err)); +  werror(sprintf("%s:%d:Warning: %s\n",trim_file_name(file),line,err));    }   }