cc.h 13 KB

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