Branch: Tag:

2001-03-20

2001-03-20 02:45:51 by Fredrik Hübinette (Hubbe) <hubbe@hubbe.net>

second step towards two-pass compilation over several files..

Rev: lib/master.pike.in:1.148
Rev: src/builtin.cmod:1.24
Rev: src/builtin_functions.c:1.355
Rev: src/object.c:1.164
Rev: src/object.h:1.58
Rev: src/program.c:1.304
Rev: src/program.h:1.120

5:   \*/   /**/   #include "global.h" - RCSID("$Id: builtin_functions.c,v 1.354 2001/03/17 21:09:06 grubba Exp $"); + RCSID("$Id: builtin_functions.c,v 1.355 2001/03/20 02:45:50 hubbe Exp $");   #include "interpret.h"   #include "svalue.h"   #include "pike_macros.h"
3239:    */   PMOD_EXPORT void f_compile(INT32 args)   { -  struct program *p; +  struct program *p=0;    struct object *o; -  +  struct object *placeholder=0;    int major=-1;    int minor=-1;   
3250:    BIT_VOID | BIT_INT | BIT_OBJECT,    BIT_VOID | BIT_INT,    BIT_VOID | BIT_INT, +  BIT_VOID | BIT_INT | BIT_PROGRAM, +  BIT_VOID | BIT_INT | BIT_OBJECT,    0);       o=0; -  if (args > 1) -  if(Pike_sp[1-args].type == T_OBJECT) -  o=Pike_sp[1-args].u.object; -  -  if(args == 3) +  switch(args) +  { +  case 3:    SIMPLE_BAD_ARG_ERROR("compile", 4, "int"); -  +  default: +  if(Pike_sp[5-args].type == T_OBJECT) +  placeholder=Pike_sp[5-args].u.object;    -  if(args > 3) -  { +  case 5: +  if(Pike_sp[4-args].type == T_PROGRAM) +  p=Pike_sp[4-args].u.program; +  +  case 4:    major=sp[2-args].u.integer;    minor=sp[3-args].u.integer; -  } +     -  +  case 2: +  if(Pike_sp[1-args].type == T_OBJECT) +  o=Pike_sp[1-args].u.object;    -  p = compile(Pike_sp[-args].u.string, o, major, minor); +  case 0: case 1: break; +  }    -  +  p = compile(Pike_sp[-args].u.string, o, major, minor, p, placeholder); +    #ifdef PIKE_DEBUG    if(!(p->flags & PROGRAM_FINISHED))    fatal("Got unfinished program from internal compile().\n");
7565:   /* function(string...:string) */    ADD_EFUN("combine_path",f_combine_path,tFuncV(tNone,tStr,tStr),0);    - /* function(string,object|void,mixed...:program) */ -  ADD_EFUN("compile", f_compile, tFuncV(tStr tOr(tObj, tVoid) tOr(tInt, tVoid) tOr(tInt, tVoid) ,tMix,tPrg), +  ADD_EFUN("compile", f_compile, +  tFunc(tStr tOr(tObj, tVoid) tOr(tInt, tVoid) tOr(tInt, tVoid) tOr(tPrg, tVoid) tOr(tObj, tVoid) ,tPrg),    OPT_EXTERNAL_DEPEND);      /* function(1=mixed:1) */