--- gforth/engine/engine.c 2001/03/18 12:39:34 1.29 +++ gforth/engine/engine.c 2002/01/04 20:31:54 1.37 @@ -19,7 +19,10 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. */ +undefine(`symbols') + #include "config.h" +#include "forth.h" #include #include #include @@ -27,7 +30,6 @@ #include #include #include -#include "forth.h" #include "io.h" #include "threaded.h" #ifndef STANDALONE @@ -196,6 +198,7 @@ DCell timeval2us(struct timeval *tvp) #ifdef HAS_FILE static char* fileattr[6]={"rb","rb","r+b","r+b","wb","wb"}; +static char* pfileattr[6]={"r","r","r+","r+","w","w"}; #ifndef O_BINARY #define O_BINARY 0 @@ -299,6 +302,7 @@ static int ufileattr[6]= { #else #define SUPER_END #endif +#define SUPER_CONTINUE #ifdef GFORTH_DEBUGGING /* define some VM registers as global variables, so they survive exceptions; @@ -308,7 +312,37 @@ Xt *ip; Cell *rp; #endif -Label *engine(Xt *ip0, Cell *sp0, Cell *rp0, Float *fp0, Address lp0) +#ifdef DEBUG +#define CFA_TO_NAME(__cfa) \ + Cell len, i; \ + char * name = __cfa; \ + for(i=0; i<32; i+=sizeof(Cell)) { \ + len = ((Cell*)name)[-1]; \ + if(len < 0) { \ + len &= 0x1F; \ + if((len+sizeof(Cell)) > i) break; \ + } len = 0; \ + name -= sizeof(Cell); \ + } +#endif + +Xt *primtable(Label symbols[], Cell size) +{ +#ifdef DIRECT_THREADED + return symbols; +#else /* !defined(DIRECT_THREADED) */ + Xt *xts = (Xt *)malloc(size*sizeof(Xt)); + Cell i; + + for (i=0; i