173 lines · 2.5 KB · C
RawDownload
typedef struct Sym Sym;typedef struct Symlist Symlist;typedef struct Type Type;typedef struct Typelist Typelist;typedef struct Dtype Dtype;typedef struct Btype Btype;typedef struct Names Names; struct Sym {	Llrb;	int lex;	Rune *name;	Type *type;	Type *newtype;	Names *sunames;	Symlist *sulist;	uchar tycl;	uchar block;	uchar suetype;}; struct Symlist {	Sym **sp, Sym **ep;	int cap;	Symlist *link;}; struct Btype {	Sym *sue;	u32int tycl;}; struct Type {	Btype;	Type *chantype;	Dtype *dtype, Dtype **dtail;}; struct Dtype {	int t;	int alen;	Typelist *param;	Dtype *link;}; struct Typelist {	Type **sp, **ep;	int cap;	Typelist *link;}; struct Names {	Llrbtree *t;	int block;	Names *parent;}; enum {	KVOID,	KCHAR,	KSHORT,	KINT,	KLONG,	KFLOAT,	KDOUBLE,	KSIGNED,	KUNSIGNED,	KCONST,	KVOLATILE,	KAUTO,	KREGISTER,	KSTATIC,	KEXTERN,	KTYPEDEF,	KCHAN,	KSTRUCT,	KUNION,	KENUM,	NKEYS, 	TVOID = 0,	TSHORT,	TLONG,	TVLONG,	TCHAR,	TINT,	TDOUBLE,	TFLOAT,	NTYPE,	BTYPE = NTYPE - 1, 	TSIGNED = NTYPE,	TUNSIGNED,	NSIGN,	BSIGN = NSIGN-1 ^ BTYPE, 	TCONST = TUNSIGNED + 1,	TAUTO,	TSTATIC,	TEXTERN,	TTYPEDEF,	NCLASS,	BCLASS = NCLASS-1 ^ (BSIGN|BTYPE), 	TVOLATILE = NCLASS,	TREGISTER, 	TDOTS, 	TPTR = 0,	TARR,	TFUNC,	TSTRUCT,	TUNION,	TENUM}; #pragma	varargck type "Y" Sym*#pragma varargck type "T" Type*#pragma varargck type "D" Type* void usage(void); int yyparse(void);int yylex(void);void yyerror(char*); Sym *lookup(Names*, Rune*);Sym *sym(Names*, Rune*);void symfree(Sym*);void pushblock(void);void popblock(void);Names *pushnames(Names*);Names *popnames(Names*);Names *addparent(Names*, Names*);void printsyms(void); int typeeq(Type*, Type*); Symlist *symlist(void);void symlistfree(Symlist*);Symlist *addsym(Symlist*, Sym*);Typelist *typelist(void);void typelistfree(Typelist*);Typelist *addtype(Typelist*, Type*);Type *type(void);void typefree(Type*);Dtype *dtype(Type*, int); void error(char*, ...);void warn(char*, ...);void *emalloc(ulong);void *emallocz(ulong);void *ecalloc(ulong, ulong);void *erealloc(void*, ulong);Rune *erunestrdup(Rune*);void efmtprint(Fmt*, char*, ...); void setupout(void);void pushfile(char*);void pushstream(int);Rune getr(void);int ungetr(void);void copyout(void);void nocopyout(void);void printchandecls(Symlist*);int isspacer(Rune);int isalphar(Rune);int isdigitr(Rune); extern int dbg, line, block, suelookup;extern char filename[1024];extern Names *namespace;