home *** CD-ROM | disk | FTP | other *** search
- /*
- Little Smalltalk
- definitions used by parser
- */
-
-
- /* enum vartypes {instvar, argvar, tempvar}; */
- #define instvar 0
- #define argvar 1
- #define tempvar 2
-
- struct varstruct {
- struct varstruct *nextvar;
- int vtype;
- char *text;
- short position;
- };
-
- /* enum objtypes {classobj, varobj, instvarobj, contvarobj,
- litobj, pseuobj, primobj, exprobj, blockobj}; */
- #define classobj 0
- #define varobj 1
- #define instvarobj 2
- #define contvarobj 3
- #define litobj 4
- #define pseuobj 5
- #define primobj 6
- #define exprobj 7
- #define blockobj 8
-
- struct objstruct {
- int objtype;
- union {
- char *varname;
- int varoffset;
- struct litstruct *litinfo;
- /* enum pseuvars */ int pseuinfo;
- struct primstruct *priminfo;
- struct statestruct *stateinfo;
- struct blockstruct *blockinfo;
- } ee;
- };
-
- struct blockstruct {
- int arglocation;
- int numargs;
- struct statestruct *bstates;
- };
-
- /* enum littypes {numlit, fnumlit, charlit, strlit, symlit, arlit, bytelit}; */
- #define numlit 0
- #define fnumlit 1
- #define charlit 2
- #define strlit 3
- #define symlit 4
- #define arlit 5
- #define bytelit 6
-
- struct litstruct {
- /* enum littypes */ int littype;
- union {
- int litint;
- char litchar;
- char *litstr;
- char *litsym;
- struct litlist *litarry;
- } ll;
- };
-
- struct litlist {
- struct litstruct *litele;
- struct litlist *nextlit;
- int litposition;
- };
-
- struct primstruct {
- int primnumber;
- struct primlist *plist;
- } ;
-
- struct primlist {
- struct primlist *nextprim;
- struct objstruct *pobject;
- };
-
- /* enum cmdtypes {reccmd, uncmd, bincmd, keycmd, semistart, semiend}; */
- #define reccmd 0
- #define uncmd 1
- #define bincmd 2
- #define keycmd 3
- #define semistart 4
- #define semiend 5
-
- struct exprstruct {
- /* enum cmdtypes */ int cmdtype;
- char *cmdname;
- struct exprstruct *receiver;
- union {
- struct exprstruct *argument;
- struct keylist *keys;
- struct objstruct *recobj;
- } cc;
- struct exprstruct *nextcmd;
- };
-
- /* enum statetypes {blkupar, upar, asgn, iasgn, casgn, expr}; */
- #define blkupar 0
- #define upar 1
- #define asgn 2
- #define iasgn 3
- #define casgn 4
- #define expr 5
-
- struct statestruct {
- /* enum statetypes */ int statetype;
- struct statestruct *nextstate;
- union {
- struct varstruct *variable;
- int varpos;
- } mm;
- union {
- struct statestruct *stateexpr;
- struct exprstruct *cmd;
- } nn;
- };
-
- struct keylist {
- char *keyword;
- struct exprstruct *arg;
- struct keylist *nextkey;
- };
-
- struct methodstruct {
- struct exprstruct *pattern;
- int numtempvars;
- struct statestruct *states;
- struct methodstruct *nextmethod;
- };
-
- struct classstruct {
- char *name;
- char *super;
- };
-
- #define structalloc(type) (struct type *) alloc(sizeof (struct type ))
-
- extern struct varstruct *instvars;
- extern struct varstruct *contextvars;
-
- #define addinst(x) (instvars = addvlist(mkvar(x, instvar), instvars))
-
- extern char *walloc();
-