cc.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802
  1. /*
  2. * This file is part of the UCB release of Plan 9. It is subject to the license
  3. * terms in the LICENSE file found in the top-level directory of this
  4. * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
  5. * part of the UCB release of Plan 9, including this file, may be copied,
  6. * modified, propagated, or distributed except according to the terms contained
  7. * in the LICENSE file.
  8. */
  9. #include <u.h>
  10. #include <libc.h>
  11. #include <bio.h>
  12. #include <ctype.h>
  13. // For Harvey
  14. typedef unsigned short ushort;
  15. typedef unsigned char uchar;
  16. typedef unsigned long ulong;
  17. typedef unsigned int uint;
  18. typedef signed char schar;
  19. typedef long long vlong;
  20. typedef unsigned long long uvlong;
  21. #define YYSIZE_T usize
  22. #ifndef EXTERN
  23. #define EXTERN extern
  24. #endif
  25. typedef struct Node Node;
  26. typedef struct Sym Sym;
  27. typedef struct Type Type;
  28. typedef struct Funct Funct;
  29. typedef struct Decl Decl;
  30. typedef struct Io Io;
  31. typedef struct Hist Hist;
  32. typedef struct Term Term;
  33. typedef struct Init Init;
  34. typedef struct Bits Bits;
  35. typedef Rune TRune; /* target system type */
  36. #define NHUNK 50000L
  37. #define BUFSIZ 8192
  38. #define NSYMB 1500
  39. #define NHASH 1024
  40. #define STRINGSZ 200
  41. #define HISTSZ 20
  42. #define YYMAXDEPTH 1500
  43. #define NTERM 10
  44. #define MAXALIGN 7
  45. #define SIGN(n) (1ULL<<(n-1))
  46. #define MASK(n) (SIGN(n)|(SIGN(n)-1))
  47. #define BITS 5
  48. #define NVAR (BITS*sizeof(ulong)*8)
  49. struct Bits
  50. {
  51. ulong b[BITS];
  52. };
  53. struct Node
  54. {
  55. Node* left;
  56. Node* right;
  57. void* label;
  58. long pc;
  59. int reg;
  60. long xoffset;
  61. double fconst; /* fp constant */
  62. vlong vconst; /* non fp const */
  63. char* cstring; /* character string */
  64. TRune* rstring; /* rune string */
  65. Sym* sym;
  66. Type* type;
  67. long lineno;
  68. char op;
  69. char oldop;
  70. char xcast;
  71. char class;
  72. u8 etype;
  73. char complex;
  74. char addable;
  75. char scale;
  76. char garb;
  77. };
  78. #define Z ((Node*)0)
  79. struct Sym
  80. {
  81. Sym* link;
  82. Type* type;
  83. Type* suetag;
  84. Type* tenum;
  85. char* macro;
  86. long varlineno;
  87. long offset;
  88. vlong vconst;
  89. double fconst;
  90. Node* label;
  91. ushort lexical;
  92. char *name;
  93. ushort block;
  94. ushort sueblock;
  95. u8 class;
  96. char sym;
  97. char aused;
  98. char sig;
  99. };
  100. #define S ((Sym*)0)
  101. enum{
  102. SIGNONE = 0,
  103. SIGDONE = 1,
  104. SIGINTERN = 2,
  105. SIGNINTERN = 1729*325*1729,
  106. };
  107. struct Decl
  108. {
  109. Decl* link;
  110. Sym* sym;
  111. Type* type;
  112. long varlineno;
  113. long offset;
  114. short val;
  115. ushort block;
  116. char class;
  117. char aused;
  118. };
  119. #define D ((Decl*)0)
  120. struct Type
  121. {
  122. Sym* sym;
  123. Sym* tag;
  124. Funct* funct;
  125. Type* link;
  126. Type* down;
  127. long width;
  128. long offset;
  129. long lineno;
  130. schar shift;
  131. char nbits;
  132. u8 etype;
  133. char garb;
  134. };
  135. #define T ((Type*)0)
  136. #define NODECL ((void(*)(int, Type*, Sym*))0)
  137. struct Init /* general purpose initialization */
  138. {
  139. int code;
  140. ulong value;
  141. char* s;
  142. };
  143. EXTERN struct
  144. {
  145. char* p;
  146. int c;
  147. } fi;
  148. struct Io
  149. {
  150. Io* link;
  151. char* p;
  152. char b[BUFSIZ];
  153. short c;
  154. short f;
  155. };
  156. #define I ((Io*)0)
  157. struct Hist
  158. {
  159. Hist* link;
  160. char* name;
  161. long line;
  162. long offset;
  163. };
  164. #define H ((Hist*)0)
  165. EXTERN Hist* hist;
  166. struct Term
  167. {
  168. vlong mult;
  169. Node *node;
  170. };
  171. enum
  172. {
  173. Axxx,
  174. Ael1,
  175. Ael2,
  176. Asu2,
  177. Aarg0,
  178. Aarg1,
  179. Aarg2,
  180. Aaut3,
  181. NALIGN,
  182. };
  183. enum /* also in ../{8a,0a}.h */
  184. {
  185. Plan9 = 1<<0,
  186. Unix = 1<<1,
  187. Windows = 1<<2,
  188. };
  189. enum
  190. {
  191. DMARK,
  192. DAUTO,
  193. DSUE,
  194. DLABEL,
  195. };
  196. enum
  197. {
  198. OXXX,
  199. OADD,
  200. OADDR,
  201. OAND,
  202. OANDAND,
  203. OARRAY,
  204. OAS,
  205. OASI,
  206. OASADD,
  207. OASAND,
  208. OASASHL,
  209. OASASHR,
  210. OASDIV,
  211. OASHL,
  212. OASHR,
  213. OASLDIV,
  214. OASLMOD,
  215. OASLMUL,
  216. OASLSHR,
  217. OASMOD,
  218. OASMUL,
  219. OASOR,
  220. OASSUB,
  221. OASXOR,
  222. OBIT,
  223. OBREAK,
  224. OCASE,
  225. OCAST,
  226. OCOMMA,
  227. OCOND,
  228. OCONST,
  229. OCONTINUE,
  230. ODIV,
  231. ODOT,
  232. ODOTDOT,
  233. ODWHILE,
  234. OENUM,
  235. OEQ,
  236. OFOR,
  237. OFUNC,
  238. OGE,
  239. OGOTO,
  240. OGT,
  241. OHI,
  242. OHS,
  243. OIF,
  244. OIND,
  245. OINDREG,
  246. OINIT,
  247. OLABEL,
  248. OLDIV,
  249. OLE,
  250. OLIST,
  251. OLMOD,
  252. OLMUL,
  253. OLO,
  254. OLS,
  255. OLSHR,
  256. OLT,
  257. OMOD,
  258. OMUL,
  259. ONAME,
  260. ONE,
  261. ONOT,
  262. OOR,
  263. OOROR,
  264. OPOSTDEC,
  265. OPOSTINC,
  266. OPREDEC,
  267. OPREINC,
  268. OPROTO,
  269. OREGISTER,
  270. ORETURN,
  271. OSET,
  272. OSIGN,
  273. OSIZE,
  274. OSTRING,
  275. OLSTRING,
  276. OSTRUCT,
  277. OSUB,
  278. OSWITCH,
  279. OUNION,
  280. OUSED,
  281. OWHILE,
  282. OXOR,
  283. ONEG,
  284. OCOM,
  285. OPOS,
  286. OELEM,
  287. OTST, /* used in some compilers */
  288. OINDEX,
  289. OFAS,
  290. OREGPAIR,
  291. OEXREG,
  292. OEND
  293. };
  294. enum
  295. {
  296. TXXX,
  297. TCHAR,
  298. TUCHAR,
  299. TSHORT,
  300. TUSHORT,
  301. TINT,
  302. TUINT,
  303. TLONG,
  304. TULONG,
  305. TVLONG,
  306. TUVLONG,
  307. TFLOAT,
  308. TDOUBLE,
  309. TIND,
  310. TFUNC,
  311. TARRAY,
  312. TVOID,
  313. TSTRUCT,
  314. TUNION,
  315. TENUM,
  316. TDOT,
  317. NTYPE,
  318. TAUTO = NTYPE,
  319. TEXTERN,
  320. TSTATIC,
  321. TTYPEDEF,
  322. TTYPESTR,
  323. TREGISTER,
  324. TCONSTNT,
  325. TVOLATILE,
  326. TUNSIGNED,
  327. TSIGNED,
  328. TFILE,
  329. TOLD,
  330. NALLTYPES,
  331. /* adapt size of Rune to target system's size */
  332. TRUNE = sizeof(TRune)==4? TUINT: TUSHORT,
  333. };
  334. enum
  335. {
  336. CXXX,
  337. CAUTO,
  338. CEXTERN,
  339. CGLOBL,
  340. CSTATIC,
  341. CLOCAL,
  342. CTYPEDEF,
  343. CTYPESTR,
  344. CPARAM,
  345. CSELEM,
  346. CLABEL,
  347. CEXREG,
  348. NCTYPES,
  349. };
  350. enum
  351. {
  352. GXXX = 0,
  353. GCONSTNT = 1<<0,
  354. GVOLATILE = 1<<1,
  355. NGTYPES = 1<<2,
  356. GINCOMPLETE = 1<<2,
  357. };
  358. enum
  359. {
  360. BCHAR = 1L<<TCHAR,
  361. BUCHAR = 1L<<TUCHAR,
  362. BSHORT = 1L<<TSHORT,
  363. BUSHORT = 1L<<TUSHORT,
  364. BINT = 1L<<TINT,
  365. BUINT = 1L<<TUINT,
  366. BLONG = 1L<<TLONG,
  367. BULONG = 1L<<TULONG,
  368. BVLONG = 1L<<TVLONG,
  369. BUVLONG = 1L<<TUVLONG,
  370. BFLOAT = 1L<<TFLOAT,
  371. BDOUBLE = 1L<<TDOUBLE,
  372. BIND = 1L<<TIND,
  373. BFUNC = 1L<<TFUNC,
  374. BARRAY = 1L<<TARRAY,
  375. BVOID = 1L<<TVOID,
  376. BSTRUCT = 1L<<TSTRUCT,
  377. BUNION = 1L<<TUNION,
  378. BENUM = 1L<<TENUM,
  379. BFILE = 1L<<TFILE,
  380. BDOT = 1L<<TDOT,
  381. BCONSTNT = 1L<<TCONSTNT,
  382. BVOLATILE = 1L<<TVOLATILE,
  383. BUNSIGNED = 1L<<TUNSIGNED,
  384. BSIGNED = 1L<<TSIGNED,
  385. BAUTO = 1L<<TAUTO,
  386. BEXTERN = 1L<<TEXTERN,
  387. BSTATIC = 1L<<TSTATIC,
  388. BTYPEDEF = 1L<<TTYPEDEF,
  389. BTYPESTR = 1L<<TTYPESTR,
  390. BREGISTER = 1L<<TREGISTER,
  391. BINTEGER = BCHAR|BUCHAR|BSHORT|BUSHORT|BINT|BUINT|
  392. BLONG|BULONG|BVLONG|BUVLONG,
  393. BNUMBER = BINTEGER|BFLOAT|BDOUBLE,
  394. /* these can be overloaded with complex types */
  395. BCLASS = BAUTO|BEXTERN|BSTATIC|BTYPEDEF|BTYPESTR|BREGISTER,
  396. BGARB = BCONSTNT|BVOLATILE,
  397. };
  398. struct Funct
  399. {
  400. Sym* sym[OEND];
  401. Sym* castto[NTYPE];
  402. Sym* castfr[NTYPE];
  403. };
  404. EXTERN struct
  405. {
  406. Type* tenum; /* type of entire enum */
  407. Type* cenum; /* type of current enum run */
  408. vlong lastenum; /* value of current enum */
  409. double floatenum; /* value of current enum */
  410. } en;
  411. EXTERN int autobn;
  412. EXTERN long autoffset;
  413. EXTERN int blockno;
  414. EXTERN Decl* dclstack;
  415. EXTERN char debug[256];
  416. EXTERN Hist* ehist;
  417. EXTERN long firstbit;
  418. EXTERN Sym* firstarg;
  419. EXTERN Type* firstargtype;
  420. EXTERN Decl* firstdcl;
  421. EXTERN int fperror;
  422. EXTERN Sym* hash[NHASH];
  423. EXTERN int hasdoubled;
  424. EXTERN char* hunk;
  425. EXTERN char** include;
  426. EXTERN Io* iofree;
  427. EXTERN Io* ionext;
  428. EXTERN Io* iostack;
  429. EXTERN long lastbit;
  430. EXTERN char lastclass;
  431. EXTERN Type* lastdcl;
  432. EXTERN long lastfield;
  433. EXTERN Type* lasttype;
  434. EXTERN long lineno;
  435. EXTERN long nearln;
  436. EXTERN int maxinclude;
  437. EXTERN int nerrors;
  438. EXTERN int newflag;
  439. EXTERN long nhunk;
  440. EXTERN int ninclude;
  441. EXTERN Node* nodproto;
  442. EXTERN Node* nodcast;
  443. EXTERN Biobuf outbuf;
  444. EXTERN Biobuf diagbuf;
  445. EXTERN char* outfile;
  446. EXTERN char* pathname;
  447. EXTERN int peekc;
  448. EXTERN long stkoff;
  449. EXTERN Type* strf;
  450. EXTERN Type* strl;
  451. EXTERN char symb[NSYMB];
  452. EXTERN Sym* symstring;
  453. EXTERN int taggen;
  454. EXTERN Type* tfield;
  455. EXTERN Type* tufield;
  456. EXTERN int thechar;
  457. EXTERN char* thestring;
  458. EXTERN Type* thisfn;
  459. EXTERN long thunk;
  460. EXTERN Type* types[NTYPE];
  461. EXTERN Type* fntypes[NTYPE];
  462. EXTERN Node* initlist;
  463. EXTERN Term term[NTERM];
  464. EXTERN int nterm;
  465. EXTERN int packflg;
  466. EXTERN int fproundflg;
  467. EXTERN int profileflg;
  468. EXTERN int ncontin;
  469. EXTERN int newvlongcode;
  470. EXTERN int canreach;
  471. EXTERN int warnreach;
  472. EXTERN Bits zbits;
  473. extern char *onames[], *tnames[], *gnames[];
  474. extern char *cnames[], *qnames[], *bnames[];
  475. extern char tab[NTYPE][NTYPE];
  476. extern char comrel[], invrel[], logrel[];
  477. extern long ncast[], tadd[], tand[];
  478. extern long targ[], tasadd[], tasign[], tcast[];
  479. extern long tdot[], tfunct[], tindir[], tmul[];
  480. extern long tnot[], trel[], tsub[];
  481. extern char typeaf[];
  482. extern char typefd[];
  483. extern char typei[];
  484. extern char typesu[];
  485. extern char typesuv[];
  486. extern char typeu[];
  487. extern char typev[];
  488. extern char typec[];
  489. extern char typeh[];
  490. extern char typeil[];
  491. extern char typeilp[];
  492. extern char typechl[];
  493. extern char typechlv[];
  494. extern char typechlvp[];
  495. extern char typechlp[];
  496. extern char typechlpfd[];
  497. EXTERN char* typeswitch;
  498. EXTERN char* typeword;
  499. EXTERN char* typecmplx;
  500. extern ulong thash1;
  501. extern ulong thash2;
  502. extern ulong thash3;
  503. extern ulong thash[];
  504. /*
  505. * compat.c/unix.c/windows.c
  506. */
  507. int mywait(int*);
  508. int mycreat(char*, int);
  509. int systemtype(int);
  510. int pathchar(void);
  511. int myaccess(char*);
  512. char* mygetwd(char*, int);
  513. int myexec(char*, char*[]);
  514. int mydup(int, int);
  515. int myfork(void);
  516. int mypipe(int*);
  517. void* mysbrk(ulong);
  518. /*
  519. * parser
  520. */
  521. int yyparse(void);
  522. int mpatov(char*, vlong*);
  523. /*
  524. * lex.c
  525. */
  526. void* allocn(void*, long, long);
  527. void* alloc(long);
  528. void cinit(void);
  529. int compile(char*, char**, int);
  530. void errorexit(void);
  531. int filbuf(void);
  532. int getc(void);
  533. long getr(void);
  534. int getnsc(void);
  535. Sym* lookup(void);
  536. void main(int, char*[]);
  537. void newfile(char*, int);
  538. void newio(void);
  539. void pushio(void);
  540. long escchar(long, int, int);
  541. Sym* slookup(char*);
  542. void syminit(Sym*);
  543. void unget(int);
  544. long yylex(void);
  545. int Lconv(Fmt*);
  546. int Tconv(Fmt*);
  547. int FNconv(Fmt*);
  548. int Oconv(Fmt*);
  549. int Qconv(Fmt*);
  550. int VBconv(Fmt*);
  551. void setinclude(char*);
  552. /*
  553. * mac.c
  554. */
  555. void dodefine(char*);
  556. void domacro(void);
  557. Sym* getsym(void);
  558. long getnsn(void);
  559. void linehist(char*, int);
  560. void macdef(void);
  561. void macprag(void);
  562. void macend(void);
  563. void macexpand(Sym*, char*);
  564. void macif(int);
  565. void macinc(void);
  566. void maclin(void);
  567. void macund(void);
  568. /*
  569. * dcl.c
  570. */
  571. Node* doinit(Sym*, Type*, long, Node*);
  572. Type* tcopy(Type*);
  573. Node* init1(Sym*, Type*, long, int);
  574. Node* newlist(Node*, Node*);
  575. void adecl(int, Type*, Sym*);
  576. int anyproto(Node*);
  577. void argmark(Node*, int);
  578. void dbgdecl(Sym*);
  579. Node* dcllabel(Sym*, int);
  580. Node* dodecl(void(*)(int, Type*, Sym*), int, Type*, Node*);
  581. Sym* mkstatic(Sym*);
  582. void doenum(Sym*, Node*);
  583. void snap(Type*);
  584. Type* dotag(Sym*, int, int);
  585. void edecl(int, Type*, Sym*);
  586. Type* fnproto(Node*);
  587. Type* fnproto1(Node*);
  588. void markdcl(void);
  589. Type* paramconv(Type*, int);
  590. void pdecl(int, Type*, Sym*);
  591. Decl* push(void);
  592. Decl* push1(Sym*);
  593. Node* revertdcl(void);
  594. long round(long, int);
  595. int rsametype(Type*, Type*, int, int);
  596. int sametype(Type*, Type*);
  597. ulong sign(Sym*);
  598. ulong signature(Type*);
  599. void sualign(Type*);
  600. void tmerge(Type*, Sym*);
  601. void walkparam(Node*, int);
  602. void xdecl(int, Type*, Sym*);
  603. Node* contig(Sym*, Node*, long);
  604. /*
  605. * com.c
  606. */
  607. void ccom(Node*);
  608. void complex(Node*);
  609. int tcom(Node*);
  610. int tcoma(Node*, Node*, Type*, int);
  611. int tcomd(Node*);
  612. int tcomo(Node*, int);
  613. int tcomx(Node*);
  614. int tlvalue(Node*);
  615. void constas(Node*, Type*, Type*);
  616. Node* uncomma(Node*);
  617. Node* uncomargs(Node*);
  618. /*
  619. * con.c
  620. */
  621. void acom(Node*);
  622. void acom1(vlong, Node*);
  623. void acom2(Node*, Type*);
  624. int acomcmp1(const void*, const void*);
  625. int acomcmp2(const void*, const void*);
  626. int addo(Node*);
  627. void evconst(Node*);
  628. /*
  629. * funct.c
  630. */
  631. int isfunct(Node*);
  632. void dclfunct(Type*, Sym*);
  633. /*
  634. * sub.c
  635. */
  636. void arith(Node*, int);
  637. int deadheads(Node*);
  638. Type* dotsearch(Sym*, Type*, Node*, long*);
  639. long dotoffset(Type*, Type*, Node*);
  640. void gethunk(void);
  641. Node* invert(Node*);
  642. int bitno(long);
  643. void makedot(Node*, Type*, long);
  644. int mixedasop(Type*, Type*);
  645. Node* new(int, Node*, Node*);
  646. Node* new1(int, Node*, Node*);
  647. int nilcast(Type*, Type*);
  648. int nocast(Type*, Type*);
  649. void prtree(Node*, char*);
  650. void prtree1(Node*, int, int);
  651. void relcon(Node*, Node*);
  652. int relindex(int);
  653. int simpleg(long);
  654. Type* garbt(Type*, long);
  655. int simplec(long);
  656. Type* simplet(long);
  657. int stcompat(Node*, Type*, Type*, long[]);
  658. int tcompat(Node*, Type*, Type*, long[]);
  659. void tinit(void);
  660. Type* typ(int, Type*);
  661. Type* copytyp(Type*);
  662. void typeext(Type*, Node*);
  663. void typeext1(Type*, Node*);
  664. int side(Node*);
  665. int vconst(Node*);
  666. int log2(uvlong);
  667. int vlog(Node*);
  668. int topbit(ulong);
  669. void simplifyshift(Node*);
  670. long typebitor(long, long);
  671. void diag(Node*, char*, ...);
  672. void warn(Node*, char*, ...);
  673. void yyerror(char*, ...);
  674. void fatal(Node*, char*, ...);
  675. /*
  676. * acid.c
  677. */
  678. void acidtype(Type*);
  679. void acidvar(Sym*);
  680. /*
  681. * pickle.c
  682. */
  683. void pickletype(Type*);
  684. /*
  685. * bits.c
  686. */
  687. Bits bor(Bits, Bits);
  688. Bits band(Bits, Bits);
  689. Bits bnot(Bits);
  690. int bany(Bits*);
  691. int bnum(Bits);
  692. Bits blsh(u32);
  693. int beq(Bits, Bits);
  694. int bset(Bits, u32);
  695. /*
  696. * dpchk.c
  697. */
  698. void dpcheck(Node*);
  699. void arginit(void);
  700. void pragvararg(void);
  701. void pragpack(void);
  702. void pragfpround(void);
  703. void pragprofile(void);
  704. void pragincomplete(void);
  705. /*
  706. * calls to machine depend part
  707. */
  708. void codgen(Node*, Node*);
  709. void gclean(void);
  710. void gextern(Sym*, Node*, long, long);
  711. void ginit(void);
  712. long outstring(char*, long);
  713. long outlstring(TRune*, long);
  714. void xcom(Node*);
  715. long exreg(Type*);
  716. long align(long, Type*, int);
  717. long maxround(long, long);
  718. extern schar ewidth[];
  719. /*
  720. * com64
  721. */
  722. int com64(Node*);
  723. void com64init(void);
  724. void bool64(Node*);
  725. double convvtof(vlong);
  726. vlong convftov(double);
  727. double convftox(double, int);
  728. vlong convvtox(vlong, int);
  729. /*
  730. * machcap
  731. */
  732. int machcap(Node*);
  733. /*
  734. #pragma varargck argpos warn 2
  735. #pragma varargck argpos diag 2
  736. #pragma varargck argpos yyerror 1
  737. #pragma varargck type "F" Node*
  738. #pragma varargck type "L" long
  739. #pragma varargck type "Q" long
  740. #pragma varargck type "O" int
  741. #pragma varargck type "T" Type*
  742. #pragma varargck type "|" int
  743. */