Branch: Tag:

2008-04-14

2008-04-14 10:14:41 by Henrik Grubbström (Grubba) <grubba@grubba.org>

Pike compiler mega patch.
Added predef::CompilerEnvironment, which is a wrapper for struct compilation.
Moved the definition of struct compilation to the new header file "pike_compiler.h".
The compilation struct is now contained in the current context in the current_object during compilation.
The global variable lex is no more, it has moved into the compilation struct.
Added enter_compiler() and exit_compiler().
predef::compile() is now shorthand for predef::CompilerContext()->compile().

Rev: src/builtin_functions.c:1.652
Rev: src/compilation.h:1.35
Rev: src/docode.c:1.197
Rev: src/docode.h:1.20
Rev: src/dynamic_load.c:1.90
Rev: src/encode.c:1.263
Rev: src/language.yacc:1.411
Rev: src/las.c:1.406
Rev: src/lex.c:1.121
Rev: src/lex.h:1.36
Rev: src/lexer.h:1.66
Rev: src/module.c:1.52
Rev: src/object.c:1.284
Rev: src/operators.c:1.230
Rev: src/pike_compiler.h:1.1
Rev: src/pike_types.c:1.321
Rev: src/program.c:1.660
Rev: src/program.h:1.237

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: compilation.h,v 1.34 2008/04/10 10:42:29 grubba Exp $ + || $Id: compilation.h,v 1.35 2008/04/14 10:14:35 grubba Exp $   */      /*
97:   #endif       + #ifdef INIT + #define IMEMBER(X,Y,Z) MEMCPY((char *)&(c->Y), (char *)&(Pike_compiler->Y), sizeof(c->Y)); + #define STACKMEMBER(X,Y,Z) (c->Y=Pike_compiler->Y); + #define ZMEMBER(X,Y,Z) MEMSET((char *)&(c->Y), 0, sizeof(c->Y)); + #define SNAME(X,Y) { \ +  c->previous = Pike_compiler; + #define SEND \ +  Pike_compiler = c; \ +  } +  + #endif +  +  + #ifdef EXIT + #define IMEMBER(X,Y,Z) + #define ZMEMBER(X,Y,Z) +  + #define STACKMEMBER(X,Y,Z) DO_DEBUG_CODE( \ +  if(c->Y < oLd->Y) \ +  Pike_fatal("Stack " #Y " shrunk %ld steps compilation, currently: %p.\n", \ +  PTRDIFF_T_TO_LONG(oLd->Y - c->Y), c->Y); ) +  + #define SNAME(X,Y) { \ +  struct X *oLd = c->previous; +  + #define SEND \ +  if (Pike_compiler == c) { \ +  Pike_compiler=oLd; \ +  } else { \ +  struct program_state *tmp = Pike_compiler; \ +  while (tmp && (tmp->previous != c)) \ +  tmp = tmp->previous; \ +  if (tmp) tmp->previous = oLd; \ +  else Pike_fatal("Lost track of compiler_state %p\n", c); \ +  } \ +  } + #undef PCODE + #define PCODE(X) X + #endif +  +    #ifdef PIKE_DEBUG   #define STRMEMBER(X,Y) \    PCODE(if(Pike_compiler->X) Pike_fatal("Variable " #X " not deallocated properly.\n");) \
144:      #undef EXTERN   #undef STRUCT + #undef EXIT + #undef INIT   #undef PUSH   #undef POP   #undef DECLARE   #undef DO_DEBUG_CODE