da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/***********************************************************************
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* This software is part of the ast package *
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz* Copyright (c) 1986-2009 AT&T Intellectual Property *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* and is licensed under the *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Common Public License, Version 1.0 *
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin* by AT&T Intellectual Property *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* A copy of the License is available at *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* http://www.opensource.org/licenses/cpl1.0.txt *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Information and Software Systems Research *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* AT&T Research *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Florham Park NJ *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Glenn Fowler <gsf@research.att.com> *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin***********************************************************************/
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#pragma prototyped
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/*
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * Glenn Fowler
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * AT&T Research
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * preprocessor library public definitions
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#ifndef _PP_H
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define _PP_H
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#ifdef ppsymbol
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/*
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * undo old nmake cpp name-space intrusion
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * this disables __LINE__, __FILE__, __DATE__ and __TIME__
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#undef ppsymbol
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#undef __LINE__
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define __LINE__ 0
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#undef __FILE__
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define __FILE__ "libpp"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#undef __DATE__
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define __DATE__ "MMM DD YYYY"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#undef __TIME__
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define __TIME__ "HH:MM:SS"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#if PROTOMAIN
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define HASH_HEADER int hash_header
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define Hash_table_t char
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define Sfio_t char
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define CC_bel (('A'==0301)?0057:0007)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define CC_esc (('A'==0301)?0047:0033)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define CC_vt 0013
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#else
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#include <limits.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#include <hash.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#include <error.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#include <ccode.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PPDEFAULT "pp_default.h" /* runtime definitions */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PPPROBE "cc" /* default probe key */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PPSTANDARD "/usr/include" /* standard include dir */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PPBLKSIZ 1024 /* unit block size */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PPBAKSIZ (1*PPBLKSIZ) /* input pushback size */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PPBUFSIZ (32*PPBLKSIZ) /* io buffer size */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PPTOKSIZ ((PPBUFSIZ/2)-1) /* max token size */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin#define PPWRITE(n) do{if(write(1,pp.outbuf,n)!=(n))pperror(ERROR_SYSTEM|3,"%s: write error",pp.outfile);pp.offset+=(n);pp.lastout=pp.outbuf[(n)-1];}while(0)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define pplastout() ((pp.outp>pp.outbuf)?*(pp.outp-1):pp.lastout)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define ppoffset() (pp.offset+pppendout())
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define pppendout() (pp.outp-pp.outbuf)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define ppputchar(c) (*pp.outp++=(c))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define ppflushout() do{if(pp.outp>pp.outbuf){PPWRITE(pp.outp-pp.outbuf);pp.outp=pp.outbuf;}}while(0)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define ppcheckout() do{if(pp.outp>pp.oute){PPWRITE(PPBUFSIZ);if(pp.outbuf==pp.outb){pp.outbuf+=PPBUFSIZ;pp.oute+=PPBUFSIZ;}else{pp.outbuf-=PPBUFSIZ;memcpy(pp.outbuf,pp.oute,pp.outp-pp.oute);pp.oute-=PPBUFSIZ;pp.outp-=2*PPBUFSIZ;}}}while(0)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define ppsymget(t,n) (struct ppsymbol*)hashlook(t,n,HASH_LOOKUP,NiL)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define ppsymref(t,n) (struct ppsymbol*)hashlook(t,n,pp.truncate?HASH_LOOKUP:HASH_LOOKUP|HASH_INTERNAL,NiL)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define ppsymset(t,n) (struct ppsymbol*)hashlook(t,n,HASH_CREATE|HASH_SIZE(sizeof(struct ppsymbol)),NiL)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#if CHAR_MIN < 0
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz#define pptype (ppctype-(CHAR_MIN))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#else
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define pptype (ppctype)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define C_ID (1<<0)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define C_DIG (1<<1)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define C_SPLICE (1<<2)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define ppisdig(c) ((pptype)[c]&C_DIG)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define ppisid(c) ((pptype)[c]&C_ID)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define ppisidig(c) ((pptype)[c]&(C_ID|C_DIG))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define ppismac(c) ((pptype)[c]&(C_ID|C_DIG|C_SPLICE))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define ppissplice(c) ((pptype)[c]&C_SPLICE)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define setid(c) ((pptype)[c]|=C_ID)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define clrid(c) ((pptype)[c]&=~C_ID)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define setdig(c) ((pptype)[c]|=C_DIG)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define setsplice(c) ((pptype)[c]|=C_SPLICE)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define REF_CREATE (REF_NORMAL+1) /* include wrapper (internal) */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define REF_DELETE (REF_NORMAL+2) /* macro definition (internal) */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define REF_NORMAL 0 /* normal macro reference */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define REF_IF (-1) /* if, ifdef, ifndef, elif */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define REF_UNDEF (-2) /* undef */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SYM_ACTIVE (1L<<0) /* active macro lock */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SYM_BUILTIN (1L<<1) /* builtin macro */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SYM_DISABLED (1L<<2) /* macro expansion disabled */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SYM_EMPTY (1L<<3) /* allow empty/missing actuals */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SYM_FINAL (1L<<4) /* final hosted value */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SYM_FUNCTION (1L<<5) /* macro with args */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SYM_INIT (1L<<6) /* initialization macro */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SYM_INITIAL (1L<<7) /* initial hosted value */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SYM_KEYWORD (1L<<8) /* keyword identifier */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SYM_LEX (1L<<9) /* ppsymkey with lex field */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SYM_MULTILINE (1L<<10) /* multi-line macro */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SYM_NOEXPAND (1L<<11) /* no identifiers in macro body */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SYM_NOTICED (1L<<12) /* symbol noticed in output */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SYM_PREDEFINED (1L<<13) /* predefined macro */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SYM_PREDICATE (1L<<14) /* also a predicate */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SYM_READONLY (1L<<15) /* readonly macro */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SYM_REDEFINE (1L<<16) /* ok to redefine */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SYM_VARIADIC (1L<<17) /* variadic macro with args */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define SYM_UNUSED 24 /* first unused symbol flag bit */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_ASSERT 1 /* preassert symbol */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_BUILTIN 2 /* #(<id>) handler */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_CDIR 3 /* C (vs. C++) file dirs follow */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_CHOP 4 /* include prefix chop */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_COMMENT 5 /* passed comment handler */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_COMPATIBILITY 6 /* old (Reiser) dialect */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_COMPILE 7 /* tokenize for front end */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_DEBUG 8 /* set debug trace level */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_DEFINE 9 /* predefine symbol */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_DEFAULT 10 /* read default include files */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_DIRECTIVE 11 /* initialization directive */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_DONE 12 /* all processing done */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_DUMP 13 /* do checkpoint dump */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_FILEDEPS 14 /* output file dependencies */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_FILENAME 15 /* set input file name */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_HOSTDIR 16 /* hosted file dirs follow */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_ID 17 /* add to identifier set */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_IGNORE 18 /* ignore this include file */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_IGNORELIST 19 /* include ignore list file */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_INCLUDE 20 /* add dir to include search */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_INCREF 21 /* include file push/ret handler*/
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_INIT 22 /* one time initialization */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_INPUT 23 /* set input source file */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_KEYARGS 24 /* name=value macro args */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_LINE 25 /* line sync handler */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_LINEBASE 26 /* base name in line sync */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_LINEFILE 27 /* line sync requires file arg */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_LINEID 28 /* PP_LINE directive id */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_LINETYPE 29 /* # extra line sync type args */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_LOCAL 30 /* previous PP_INCLUDE for "" */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_MACREF 31 /* macro def/ref handler */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_MULTIPLE 32 /* set all files multiple */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_NOHASH 33 /* don't hash PP_COMPILE T_ID's */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_NOISE 34 /* convert T_X_* to T_NOISE */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_OPTION 35 /* set pragma option */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_OPTARG 36 /* unknown option arg handler */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_OUTPUT 37 /* set output file sink */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_PASSTHROUGH 38 /* ppcpp() expands # lines only */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_PEDANTIC 39 /* pedantic non-hosted warnings */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_PLUSCOMMENT 40 /* enable C++ comments */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_PLUSPLUS 41 /* tokenize for C++ */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_POOL 42 /* pool for multiple io passes */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_PRAGMA 43 /* passed pragma handler */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_PRAGMAFLAGS 44 /* global pragma flags */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_PROBE 45 /* ppdefault probe key */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_QUOTE 46 /* add to quote set */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_READ 47 /* include file without output */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_REGUARD 48 /* file pop emits guard define */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_RESERVED 49 /* COMPILE reserved keyword */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_RESET 50 /* reset to initiali predefs */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_SPACEOUT 51 /* pplex returns space,newline */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_STANDALONE 52 /* standalone preprocessor */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_STANDARD 53 /* standard include dir */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_STRICT 54 /* strict implementation */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_TEST 55 /* enable (undocumented) tests */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_TEXT 56 /* include file with output */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_TRANSITION 57 /* on COMPATIBILITY boundary */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_TRUNCATE 58 /* truncate macro names */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_UNDEF 59 /* undef symbol after ppdefault */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_VENDOR 60 /* vendor file dirs follow */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_WARN 61 /* enable annoying warnings */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_comment (1<<0) /* PP_COMMENT is set */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_compatibility (1<<1) /* PP_COMPATIBILITY is set */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_hosted (1<<2) /* current file is hosted */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_linebase (1<<3) /* base name in line sync */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_linefile (1<<4) /* line sync file arg required */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_linehosted (1<<5) /* line sync hosted arg required*/
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_lineignore (1<<6) /* line sync for ignored file */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_linetype (1<<7) /* line sync type arg required */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_strict (1<<8) /* PP_STRICT is set */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_transition (1<<9) /* PP_TRANSITION is set */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_deps (1<<0) /* generate header deps */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_deps_file (1<<1) /* write deps to separate file */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_deps_generated (1<<2) /* missing deps are generated */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_deps_local (1<<3) /* only local header deps */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_sync 0 /* normal line sync */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_sync_push '1' /* [3] include file push */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_sync_pop '2' /* [3] include file pop */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_sync_ignore '3' /* [3] ignored include file */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_sync_hosted '3' /* [4] hosted include file */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_SYNC_PUSH (1<<0) /* pp.incref PP_sync_push type */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_SYNC_POP (1<<1) /* pp.incref PP_sync_pop type */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_SYNC_IGNORE (1<<2) /* pp.incref PP_sync_ignore type*/
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_SYNC_HOSTED (1<<3) /* pp.incref PP_sync_hosted type*/
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PP_SYNC_INSERT (1<<4) /* pinserted by other means */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/*
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * numeric modifiers
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * NOTE: 0400 is claimed by error in yacc
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * (N_PP+30) is the largest valid pp token
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * free tokens start at T_TOKEN
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define N_PP 0401 /* pp tokens 0401..0437 */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define N_NUMBER 0440 /* numbers 0440..0477 */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define N_TEST (N_NUMBER|07700)/* number test mask */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define N_TOKEN 0500 /* free 0500..07777 */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define N_WIDE 1 /* wide quoted constant */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/*
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * NOTE: preserve the token ranges and encodings for is*(x)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define ppisnumber(x) (((x)&N_TEST)==N_NUMBER)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define ppisinteger(x) (((x)&(N_TEST|N_REAL))==N_NUMBER)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define ppisreal(x) (((x)&(N_TEST|N_REAL))==(N_NUMBER|N_REAL))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define ppisassignop(x) (((x)>=T_MPYEQ)&&((x)<=T_OREQ))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define ppisseparate(x) (((x)>=N_PP)&&((x)<=T_WSTRING)||((x)>=N_NUMBER)||((x)=='+')||((x)=='-'))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define N_LONG 0001
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define N_UNSIGNED 0002 /* if ppisinteger(x) */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define N_FLOAT 0002 /* if ppisreal(x) */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define N_REAL 0004
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define N_OCTAL 0010
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define N_HEXADECIMAL 0020
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define N_EXPONENT 010000 /* for lexing only */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define N_SIGN 020000 /* for lexing only */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define N_TRAILING 040000 /* for lexing only */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#if !defined(T_DOUBLE)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/*
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * numeric constants
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_DOUBLE (N_NUMBER|N_REAL)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_DOUBLE_L (N_NUMBER|N_REAL|N_LONG)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_FLOAT (N_NUMBER|N_REAL|N_FLOAT)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_DECIMAL (N_NUMBER)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_DECIMAL_L (N_NUMBER|N_LONG)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_DECIMAL_U (N_NUMBER|N_UNSIGNED)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_DECIMAL_UL (N_NUMBER|N_UNSIGNED|N_LONG)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_OCTAL (N_NUMBER|N_OCTAL)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_OCTAL_L (N_NUMBER|N_OCTAL|N_LONG)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_OCTAL_U (N_NUMBER|N_OCTAL|N_UNSIGNED)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_OCTAL_UL (N_NUMBER|N_OCTAL|N_UNSIGNED|N_LONG)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_HEXADECIMAL (N_NUMBER|N_HEXADECIMAL)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_HEXADECIMAL_L (N_NUMBER|N_HEXADECIMAL|N_LONG)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_HEXADECIMAL_U (N_NUMBER|N_HEXADECIMAL|N_UNSIGNED)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_HEXADECIMAL_UL (N_NUMBER|N_HEXADECIMAL|N_UNSIGNED|N_LONG)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_HEXDOUBLE (N_NUMBER|N_HEXADECIMAL|N_REAL)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_HEXDOUBLE_L (N_NUMBER|N_HEXADECIMAL|N_REAL|N_LONG)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/*
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * identifier and invalid token
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_ID (N_PP+0)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_INVALID (N_PP+1)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/*
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * quoted constants
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_HEADER (N_PP+2) /* <..> */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_CHARCONST (N_PP+3) /* '..' */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_WCHARCONST (T_CHARCONST|N_WIDE) /* L'..' */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_STRING (N_PP+5) /* ".." */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_WSTRING (T_STRING|N_WIDE) /* L".." */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/*
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * multichar operators
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_PTRMEM (N_PP+7) /* -> */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_ADDADD (N_PP+8) /* ++ */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_SUBSUB (N_PP+9) /* -- */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_LSHIFT (N_PP+10) /* << */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_RSHIFT (N_PP+11) /* >> */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_LE (N_PP+12) /* <= */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_GE (N_PP+13) /* >= */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_EQ (N_PP+14) /* == */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_NE (N_PP+15) /* != */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_ANDAND (N_PP+16) /* && */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_OROR (N_PP+17) /* || */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_MPYEQ (N_PP+18) /* *= */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_DIVEQ (N_PP+19) /* /= */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_MODEQ (N_PP+20) /* %= */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_ADDEQ (N_PP+21) /* += */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_SUBEQ (N_PP+22) /* -= */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_LSHIFTEQ (N_PP+23) /* <<= */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_RSHIFTEQ (N_PP+24) /* >>= */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_ANDEQ (N_PP+25) /* &= */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_XOREQ (N_PP+26) /* ^= */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_OREQ (N_PP+27) /* |= */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_TOKCAT (N_PP+28) /* ## */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_VARIADIC (N_PP+29) /* ... */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/*
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * C++ tokens
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_DOTREF (N_TOKEN+0) /* .* */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_PTRMEMREF (N_TOKEN+1) /* ->* */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_SCOPE (N_TOKEN+2) /* :: */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/*
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * compiler tokens
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_UMINUS (N_TOKEN+3)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/*
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * start of free tokens
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define T_TOKEN (N_TOKEN+4)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinstruct ppdirs /* directory list */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* name; /* directory name */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin struct ppdirs* next; /* next in list */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#ifdef _PP_DIRS_PRIVATE_
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _PP_DIRS_PRIVATE_
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin};
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinstruct ppkeyword /* pp keyword info */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* name; /* keyword name */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int value; /* keyword token value */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin};
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinstruct ppmacro /* pp macro info */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int arity; /* # formal arguments */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* value; /* definition value */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#ifdef _PP_MACRO_PRIVATE_
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _PP_MACRO_PRIVATE_
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin};
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinstruct ppsymbol /* pp symbol info */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin HASH_HEADER; /* hash stuff and symbol name */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin unsigned long flags; /* SYM_* status */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin struct ppmacro* macro; /* macro info */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin void* value; /* value (for other passes) */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#ifdef _PP_SYMBOL_PRIVATE_
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _PP_SYMBOL_PRIVATE_
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin};
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define _PP_CONTEXT_BASE_ ((char*)&pp.lcldirs)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define _PP_CONTEXT_PUBLIC_ \
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin struct ppdirs* lcldirs; /* the "..." dir list */ \
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin struct ppdirs* stddirs; /* next is the <...> dir list */ \
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int flags; /* PP_[a-z]* flags */ \
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin Hash_table_t* symtab; /* macro and id hash table */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinstruct ppglobals /* globals accessed by pp.* */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin const char* version; /* version stamp */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* lineid; /* line sync directive id */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* outfile; /* output file name */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* pass; /* pass name */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* token; /* pplex() token name */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin struct ppsymbol* symbol; /* last symbol if PP_COMPILE */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin /* exposed for the output macros */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* outb; /* output buffer base */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* outbuf; /* output buffer */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* outp; /* outbuf pointer */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char* oute; /* outbuf end */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin unsigned long offset; /* output offset */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#ifdef _PP_CONTEXT_PUBLIC_
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _PP_CONTEXT_PUBLIC_ /* public context */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#ifdef _PP_CONTEXT_PRIVATE_
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _PP_CONTEXT_PRIVATE_ /* library private context */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#ifdef _PP_GLOBALS_PRIVATE_
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin _PP_GLOBALS_PRIVATE_ /* library private additions */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin};
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/*
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * library interface globals
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define ppctype _pp_ctype
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern struct ppglobals pp;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern char ppctype[];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int ppargs(char**, int);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern void ppcpp(void);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern void ppcomment(char*, char*, char*, int);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern void* ppcontext(void*, int);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern void pperror(int, ...);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern void ppincref(char*, char*, int, int);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern void ppinput(char*, char*, int);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int pplex(void);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern void ppline(int, char*);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern void ppmacref(struct ppsymbol*, char*, int, int, unsigned long);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern void ppop(int, ...);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern void pppragma(char*, char*, char*, char*, int);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int ppprintf(char*, ...);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int ppsync(void);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif