version 1.1, 1994/02/11 16:30:46
|
version 1.2, 1994/05/05 15:46:44
|
Line 7
|
Line 7
|
|
|
typedef void *Label; |
typedef void *Label; |
|
|
|
/* symbol indexed constants */ |
|
|
|
#define DOCOL 0 |
|
#define DOCON 1 |
|
#define DOVAR 2 |
|
#define DOUSER 3 |
|
#define DODOES 4 |
|
#define DOESJUMP 5 |
|
|
#include "machine.h" |
#include "machine.h" |
|
|
/* Forth data types */ |
/* Forth data types */ |
Line 45 Label *engine(Xt *ip, Cell *sp, Cell *rp
|
Line 54 Label *engine(Xt *ip, Cell *sp, Cell *rp
|
ca is the code address */ |
ca is the code address */ |
#define MAKE_CF(cfa,ca) ((*(Label *)(cfa)) = ((Label)ca)) |
#define MAKE_CF(cfa,ca) ((*(Label *)(cfa)) = ((Label)ca)) |
/* make a code field for a defining-word-defined word */ |
/* make a code field for a defining-word-defined word */ |
#define MAKE_DOES_CF(cfa,does_code) ({MAKE_CF(cfa,DODOES); \ |
#define MAKE_DOES_CF(cfa,does_code) ({MAKE_CF(cfa,symbols[DODOES]); \ |
((Cell *)cfa)[1] = (Cell)does_code;}) |
((Cell *)cfa)[1] = (Cell)does_code;}) |
/* the does handler resides between DOES> and the following Forth code */ |
/* the does handler resides between DOES> and the following Forth code */ |
#define DOES_HANDLER_SIZE 8 |
#define DOES_HANDLER_SIZE 8 |
Line 53 Label *engine(Xt *ip, Cell *sp, Cell *rp
|
Line 62 Label *engine(Xt *ip, Cell *sp, Cell *rp
|
#endif |
#endif |
|
|
#ifdef DEBUG |
#ifdef DEBUG |
# define NAME(string) puts(string); |
# define NAME(string) printf("%08x: %s\n",(int)ip,string); |
#else |
#else |
# define NAME(string) |
# define NAME(string) |
#endif |
#endif |
|
|
|
#define CF(const) (-const-2) |
|
|
|
#define CF_NIL -1 |