version 1.51, 2002/12/21 11:59:21
|
version 1.61, 2003/03/09 15:17:03
|
Line 1
|
Line 1
|
/* Gforth virtual machine (aka inner interpreter) |
/* Gforth virtual machine (aka inner interpreter) |
|
|
Copyright (C) 1995,1996,1997,1998,2000 Free Software Foundation, Inc. |
Copyright (C) 1995,1996,1997,1998,2000,2003 Free Software Foundation, Inc. |
|
|
This file is part of Gforth. |
This file is part of Gforth. |
|
|
Line 64
|
Line 64
|
#define SEEK_SET 0 |
#define SEEK_SET 0 |
#endif |
#endif |
|
|
#define IOR(flag) ((flag)? -512-errno : 0) |
#ifndef HAVE_FSEEKO |
|
#define fseeko fseek |
struct F83Name { |
#endif |
struct F83Name *next; /* the link field for old hands */ |
|
char countetc; |
|
char name[0]; |
|
}; |
|
|
|
#define F83NAME_COUNT(np) ((np)->countetc & 0x1f) |
|
|
|
struct Longname { |
|
struct Longname *next; /* the link field for old hands */ |
|
Cell countetc; |
|
char name[0]; |
|
}; |
|
|
|
#define LONGNAME_COUNT(np) ((np)->countetc & (((~((UCell)0))<<3)>>3)) |
#ifndef HAVE_FTELLO |
|
#define ftello ftell |
|
#endif |
|
|
#define NULLC '\0' |
#define NULLC '\0' |
|
|
Line 206 extern int gforth_memcmp(const char * s1
|
Line 196 extern int gforth_memcmp(const char * s1
|
#define engine engine2 |
#define engine engine2 |
#define VARIANT(v) (v) |
#define VARIANT(v) (v) |
#define JUMP(target) goto I_noop |
#define JUMP(target) goto I_noop |
#define LABEL(name) J_##name: asm(".skip 16"); I_##name: |
#define LABEL(name) J_##name: SKIP16; I_##name: |
#define IN_ENGINE2 |
#define IN_ENGINE2 |
|
|
#elif ENGINE==3 |
#elif ENGINE==3 |
Line 262 Label *engine(Xt *ip0, Cell *sp0, Cell *
|
Line 252 Label *engine(Xt *ip0, Cell *sp0, Cell *
|
/* the following entry is normally unused; |
/* the following entry is normally unused; |
it is there because its index indicates a does-handler */ |
it is there because its index indicates a does-handler */ |
CPU_DEP1, |
CPU_DEP1, |
#define INST_ADDR(name) (Label)&&I_##name |
#define INST_ADDR(name) ((Label)&&I_##name) |
#include "prim_lab.i" |
#include "prim_lab.i" |
#undef INST_ADDR |
#undef INST_ADDR |
(Label)&&after_last, |
(Label)&&after_last, |
(Label)0, |
(Label)0, |
#define INST_ADDR(name) (Label)&&K_##name |
#define INST_ADDR(name) ((Label)&&K_##name) |
#include "prim_lab.i" |
#include "prim_lab.i" |
#undef INST_ADDR |
#undef INST_ADDR |
#define INST_ADDR(name) (Label)&&J_##name |
#define INST_ADDR(name) ((Label)&&J_##name) |
#include "prim_lab.i" |
#include "prim_lab.i" |
#undef INST_ADDR |
#undef INST_ADDR |
}; |
}; |
Line 299 Label *engine(Xt *ip0, Cell *sp0, Cell *
|
Line 289 Label *engine(Xt *ip0, Cell *sp0, Cell *
|
xts[i] = symbols[i] = (Label)routines[i]; |
xts[i] = symbols[i] = (Label)routines[i]; |
for (; routines[i]!=0; i++) { |
for (; routines[i]!=0; i++) { |
if (i>=MAX_SYMBOLS) { |
if (i>=MAX_SYMBOLS) { |
fprintf(stderr,"gforth-ditc: more than %d primitives\n",MAX_SYMBOLS); |
fprintf(stderr,"gforth-ditc: more than %ld primitives\n",(long)MAX_SYMBOLS); |
exit(1); |
exit(1); |
} |
} |
xts[i] = symbols[i] = &routines[i]; |
xts[i] = symbols[i] = &routines[i]; |