enum { Eof = -1, Strsize = 4096, Hashsize = 128, Mempergc = 1024*1024, }; /* Gc.type, needs to list every type Gc struct is in */ enum { GSTRING = 1, GPOINTER, GNODE, GLIST, }; #pragma varargck type "L" void extern char symbol[Strsize]; extern Lsym* hash[Hashsize]; extern Lsym* curfn; extern jmp_buf err; extern char *pptypenames[TMAX]; struct Value { char set; Store store; Value* pop; Lsym* scope; Rplace* ret; }; List* addlist(List*, List*); Node* an(int, Node*, Node*); void append(Node*, Node*, Node*); int bool(Node*); void build(Node*); void call(char*, Node*, Node*, Node*, Node*); List* construct(Node*); void delete(List*, int n, Node*); Lsym* enter(char*, int); void execute(Node*); void syncheck(Node*); void execrec(Node*); void flatten(Node**, Node*, int*); void gc(int); void* gmalloc(long); void installbuiltin(void); void kinit(void); int Lfmt(Fmt*); int listcmp(List*, List*); int listlen(List*); List* listvar(char*, vlong); Lsym* look(char*); Lsym* mkvar(char*); void nthelem(List*, int, Node*); void nthlist(List*, int, Node*); void pcode(Node*, int); void pexpr(Node*); int popio(void); void pstr(String*); void pushfile(char*); void pushstr(Node*); void readtext(char*); void restartio(void); String *runenode(Rune*); int scmp(String*, String*); String* stradd(String*, String*); String* straddrune(String*, Rune); String* strnode(char*); String* strnodlen(char*, int); void unwind(void); void varsym(void); void whatis(Lsym*); void yyerror(char*, ...); int yylex(void); int yyparse(void); #pragma varargck argpos pperror 1 #pragma varargck argpos yyerror 1 #define container_of(ptr, type, member) \ ((type *)((char *)(ptr) - offsetof(type, member)))