Branch: Tag:

2000-01-16

2000-01-16 00:32:50 by Fredrik Hübinette (Hubbe) <hubbe@hubbe.net>

new overloading routine in define_function (might need to be
implemented in define_variable and define_constant as well)

Rev: src/program.c:1.199

5:   \*/   /**/   #include "global.h" - RCSID("$Id: program.c,v 1.198 2000/01/13 23:21:22 grubba Exp $"); + RCSID("$Id: program.c,v 1.199 2000/01/16 00:32:50 hubbe Exp $");   #include "program.h"   #include "object.h"   #include "dynamic_buffer.h"
2378:       ref.inherit_offset = 0;    ref.id_flags = flags; + #if 0    new_program->identifier_references[i]=ref; -  + #else +  { +  int z; +  /* This loop could possibly be optimized by looping over +  * each inherit and looking up 'name' in each inherit +  * and then see if should be overwritten +  * /Hubbe +  */ +  +  for(z=0;z<new_program->num_identifier_references;z++) +  { +  /* Do zapp hidden identifiers */ +  if(new_program->identifier_references[z].id_flags & ID_HIDDEN) +  continue; +  +  /* Do not zapp inline ('local') identifiers */ +  if(new_program->identifier_references[z].inherit_offset && +  (new_program->identifier_references[z].id_flags & ID_INLINE)) +  continue; +  +  /* Do not zapp functions with the wrong name... */ +  if(ID_FROM_INT(new_program, z)->name != name) +  continue; +  +  new_program->identifier_references[z]=ref; +  } +  + #ifdef PIKE_DEBUG +  if(MEMCMP(new_program->identifier_references+i, &ref,sizeof(ref))) +  fatal("New function overloading algorithm failed!\n"); + #endif +  +  } + #endif    return i;    }   make_a_new_def: