1 /*
2  * Common definitions for the interpreter and compiler
3  */
4 
5 #ifndef FFI_H
6 #define FFI_H
7 
8 #define CELLSIZE 20000000
9 static const int NIL = 0;
10 static const int T = 2;
11 static const int SMALL_INT_MAX = 1000000000;
12 static const int SMALL_INT_MIN = -1000000000;
13 static const int INT_FLAG = 1073741824;	// #b01000000_00000000_00000000_00000000
14 static const int INT_MASK = 1073741823;	// #b00111111_11111111_11111111_11111111
15 static inline bool
CELLRANGE(int x)16 CELLRANGE(int x)
17 {
18     return (x < CELLSIZE && x >= 0);
19 }
20 
21 enum Option {
22     CONSTN = 1,
23     IMMUTABLE,
24     SYSTEM,			// class of provided by system
25     USER,			// class of user' definition
26     GLOBAL,			// global variable
27     CONTINUABLE,		// continuable condition
28     NOTCONT,			// no continuable condition
29     ABSTRACT,			// abstract class
30     METACLASS,          // meta class
31 
32     // *** WARNING: THE FOLLOWING ARE INTERNAL VALUES THAT CLIENTS SHOULD
33     // NOT USE ***
34     AROUND, BEFORE, PRIMARY, AFTER, EISL_OPEN, EISL_INPUT, EISL_OUTPUT,
35     EISL_INSTR, EISL_OUTSTR, EISL_CLOSESTR,
36 };
37 
38 typedef int     (*fn0)(void);
39 typedef int     (*fn1)(int);
40 typedef int     (*fn2)(int, int);
41 typedef int     (*fn3)(char *);
42 typedef long long int (*fn4)(int);
43 typedef int     (*fn5)(int, int, int);
44 typedef char   *(*fn6)(int);
45 typedef double  (*fn7)(int);
46 typedef int     (*fn8)(double);
47 typedef void    (*tfunc)(const char *, int(*func)(int));
48 
49 enum { CHECKGBC_IDX, GBC_IDX, FRESHCELL_IDX, FREECELL_IDX,
50     GBCSW_IDX, GETWP_IDX, ARGPOP_IDX, SHELTERPOP_IDX,
51     POP_IDX, GETDYNPT_IDX, NUM_FN0S
52 };
53 enum { CAR_IDX, CDR_IDX, CADR_IDX, CADDR_IDX,
54     CAAR_IDX, CADAR_IDX, LIST1_IDX, EVAL_IDX,
55     AUX_IDX, LENGTH_IDX, SUBRP_IDX, FSUBRP_IDX,
56     FUNCTIONP_IDX, MACROP_IDX, INTEGERP_IDX, LONGNUMP_IDX,
57     BIGNUMP_IDX, GETINT_IDX, MAKEINT_IDX, MAKEINTLONG_IDX,
58     VECTOR_IDX, FASTCAR_IDX, FASTCDR_IDX, FINDENV_IDX,
59     FINDDYN_IDX, ARGPUSH_IDX, SHELTERPUSH_IDX, PUSH_IDX,
60     GETOPT_IDX, GETPROP_IDX, SETDYNPT_IDX, SETCATCHSYMBOLS_IDX,
61     NUM_FN1S
62 };
63 enum { CONS_IDX, NTH_IDX, SETCAR_IDX, SETCDR_IDX,
64     SETAUX_IDX, SETOPT_IDX, CALLSUBR_IDX, LIST2_IDX,
65     NTHCDR_IDX, APPLY_IDX, PLUS_IDX, MINUS_IDX,
66     MULT_IDX, QUOTIENT_IDX, REMAINDER_IDX, DIVIDE_IDX,
67     EQP_IDX, EQLP_IDX, NUMEQP_IDX, SMALLERP_IDX,
68     EQSMALLERP_IDX, GREATERP_IDX, EQGREATERP_IDX, MEMBER_IDX,
69     CONVERT_IDX, ARRAY_IDX, SETDYNENV_IDX, ADDDYNENV_IDX,
70     SETDYNAMIC_IDX, SETPROP_IDX, ADAPTP_IDX, MATCHP_IDX, ILOSERR_IDX , NUM_FN2S
71 };
72 enum { MAKESTR_IDX, MAKESYM_IDX, MAKECHAR_IDX, MAKESTRFLT_IDX,
73     MAKEBIG_IDX, MAKESTRLONG_IDX, MAKEFASTSTRLONG_IDX, NUM_FN3S
74 };
75 enum { GETLONG_IDX, NUM_FN4S };
76 enum { STRINGSET_IDX, ARRAYSET_IDX, MEMBER1_IDX, NUM_FN5S };
77 enum { GETNAME_IDX, NUM_FN6S };
78 enum { GETFLT_IDX, NUM_FN7S };
79 enum { MAKEDOUBLEFLT_IDX, NUM_FN8S };
80 
81 #endif
82