1libpp change history 2 3 ----- minor sync release ----- 409/11/89 add extra sun style 1,2 arg to line syncs in ppline with pp:linetype 5 add pp:oldc to convert __STDC__ void* and prototypes to old C 608/11/89 fix <...> include dir bug 708/08/89 add SYM_INIT for #define during INIT 807/28/89 delete STRIPTOP, STRIP only T_STRING & T_CHARCONST at pp.level==1 9 add ppcargs() compatibility command line argument parse 1007/17/89 dialect: ANSI (default) or (Reiser) compatibility 11 style: extended (default) or strict 12 use pathprobe(3) for dynamic ppdefault.h 13 add PP_PROBE to specify pathprobe() processor 14 add -[DI]+ to invert options in ppargs() 15 delete PP_ANSI, PP_DIALECT, PP_INITDIR, PP_LANGUAGE 16 delete PP_NONHOSTED, PP_NOPASSTHROUGH, PP_PHASEOUT 17 add #pragma's for most ppargs() options 18 add #option(pragma-option) predicate test 19 PP_MACREF now called during initialization 2007/11/89 add PP_BUILTIN for external #(...) handler 21 add line number to missing endif message 22 ignore errors in skipped ppexpr() &&, || and ?: subexpressions 23 add space before macro actual in replacement text 2407/04/89 fix PP_TRUNCATE interaction with PP_COMPILE 2506/30/89 #define x #; x was recognized as directive # 2606/27/89 don't pass comments during #if skip 2705/01/89 add L"..." and L'...' wide quoted constants 28 mixed "..." and L"..." ok -- L"..." for COMPILE, first otherwise 29 fix PASSCOMMENTS in directives 30 allow #define f(a,) for COMPATIBILITY 31 fix literal string concatenation bugs 32 fix header parsing in non-active if-blocks 33 #endmac now takes no arg 3404/11/89 tone down unknown directive diagnostic in conditional 3504/07/89 move macref call before arg processing 3603/27/89 fix pplex bug that bombed line sync for last line == #include 3703/15/89 fix PP_TRUNCATE macro id bit table checks 38 remove compatibility option s from ppargs() -- belongs in cmds 3903/08/89 remove ``empty character constant'' warning for PASSTHROUGH 4002/28/89 fix variable n usage conflict for DEFINE: in ppcontrol 4102/22/89 fix -T conflict with __GNUC__ in ppargs 4202/01/89 add -T (PP_TRUNCATE) for old non-flexname compiler compatibility 4301/31/89 -I-M-<char><suffix> finds map file by mapping input file name 44 -I-H[directory] allowed for fine hosted control 4501/24/89 fix #undef of SYM_READONLY macro message 46 add PPCOMPATIBLE for compatibility installation in /lib/cpp 47 add PP_MAP & -I-M to map include files for minimal including 4801/18/89 fix pp.token setting by noting with pp.state|=TOKENSET 4901/11/89 fix #if skip bug where quoted token set begin line state 5012/11/88 add error checking wrappers to *alloc() 5112/05/88 add PP_FILEDEPS (-M) and FILEDEPS mode for BSD compatibility 5212/01/88 add #macdef-#endmac and change actualsync() char to SYNC ('\r') 5311/30/88 TOKOUTBUF controls 11/28/88 STANDALONE speedup 5411/28/88 speed up STANDALONE by avoiding pp.token copy 5511/22/88 add comment removal to string_special 5611/11/88 LIBEXPR enables expr(3) in ppexpr() (12K extra text) 5710/11/88 move VARQUOTE to pp.mode 5810/01/88 allow checkpoint files for !STANDALONE 5908/31/88 add pp.undefsym for pp.macref's on undefined symbols 6008/23/88 0xe+N -> `0xe' `+' `N' 6108/16/88 fix ppckeys.c: T_DOUBLE->T_DOUBLE_T, T_FLOAT->T_FLOAT_T 6207/17/88 add \newline to string_special 63 add line number arg to pp.comment call 64 move private stuff from pp.h to pplib.h 65 add ignored -v to ppargs() (GNU uses this) 6606/22/88 move pp.macref check; stack pp.state in ppcontrol() 67 add PP_INCREF and (*pp.incref)(old-file, new-file, push|return) 6806/11/88 add pp.macref 69 add ppckeys.h and C, C++ and pcc-based C keyword tables 7006/01/88 convert to new hash library interface 7105/31/88 pp:readonly in PP_INIT only for STRICT 7205/11/88 T_MOREARGS -> T_VARIADIC; add SYM_VARIADIC for ... last macro arg 7305/03/88 fix empty include file bug by omitting empty check 7404/27/88 ignore space in pragma % maps to accomodate SCCS %.% expansion 7504/19/88 change pp.h to check for old nmake cpp clash with ppsymbol 7604/11/88 fix flag check bug in ppload() 7702/29/88 add MAP_ECHO and %E for MAP_RESCAN + echo 78 PP_INITDIR inserted before PP_STANDARD during initialization 7902/18/88 ignore malformed #'s in COMPATIBILITY macro definitions 80 add pp.prefix, PP_PREFIX and -I-P for prefix dir "..." includes 8102/10/88 add NOQUOTE to disable ' and " and decouple from VARQUOTE 82 add keyword and quote pragmas 8302/02/88 add strcmp builtin predicate for token string value comparison 8401/24/88 fix <backslash><newline> handling in #define on bsd 8501/20/88 add %T and fix %[...] pragma mapping formats 8601/11/88 complete 12/11/87 COMPATIBILITY macro arg /**/ pasting bug fix 87 complete KEYWORD support 8801/08/88 add PP_KEYWORD, (pp.state & KEYWORD), -D-K and #if KEYARGS 8901/06/88 hex char constants are now variable length 9001/04/88 do not add terminator for COMPATIBILITY " and ' constants 9112/11/87 remove #multiple in lieu of #pragma multiple 92 add %R MAP_RESCAN option to rescan pragma/directive mapping 93 fix COMPATIBILITY macro arg /**/ pasting bug 9412/08/87 recode for updated hash library interface 95 add T_PTRMEMREF ->* and T_DOTREF .* C++ operator tokens 9612/01/87 reorganize pp token numbers to span 0401..0477 9711/22/87 add operand error checks to ppexpr() 98 add PP_DEFAULT and -I-Dfile for fine PPDEFAULT control 9911/11/87 pppragma() now omits space after # for primitive passes (uts) 10010/30/87 fix line count on `newline' in ['"] constant warning 10110/29/87 add MAP_PLUSCOMMENT and %P to pragma|directive mapping 10210/28/87 add head & tail args to ppcomment; pass // comments as is 10310/23/87 add warning for multiple ppop(PP_LOCAL) calls 10410/16/87 change PP_HOSTED to PP_HOSTDIR, add PP_HOSTED and PP_NONHOSTED 105 add #(BASE) that expands to base name of #(FILE) 10610/15/87 for PASSTHROUGH each line of multi-line "..." or '...' is a token 10710/14/87 add ppmultiple() for multiple include test ops 10810/11/87 delete CONVERTASSIGN -> `=<op>' no longer recognized 109 delete C++ := -> = conversion 110 fix COMPATIBILITY macro recursion bug 111 add `#pragma multiple' equivalent to `#multiple' 11210/06/87 split pplex.c adding ppdirective.c and ppbuiltin.c 113 don't recognize obsolete assignments for PLUSPLUS 11410/05/87 fix PLUSPLUS PASSCOMMENTS bug `// */' -> `/* ***/' 11510/01/87 allow newlines in ' and " constants for PASSTHROUGH 11609/28/87 fix CONVERTCC STRICT bug that omitted octal character constants 117 add CATLITERAL compile switch for adjacent string literal concatenation 118 fix "\07" "3" -> "\073" string literal concatenation bug -> "\0073" 11909/18/87 complete ppdump() and ppload() checkpoint support 12009/17/87 fix macro formal bug that didn't update pointers after realloc() 121 add PP_DONE complement op to PP_INIT 122 add SYM_BUILTIN and #pragma pp:builtin to note builtin macros 123 add PP_DUMP, -D-D and #pragma pp:load checkpoint support 12408/20/87 fix bug that omitted some actualsync() calls for '\n' in pp.in->actual 12508/19/87 fix pp.linesync==0 && PASSTHROUGH bug that omitted '\n' after "token" 12608/11/87 fix #($var) null pointer bug 12707/31/87 fix linesync bug for comment after #include in PASSCOMMENTS 12807/24/87 add PP_NOPASSTHROUGH 12907/16/87 fix predicate missing # ambiguity warning 13007/09/87 fix `macro("@*")' bug in expand_special() 13106/17/87 fix comment error message check that was off by one line 13206/16/87 remove #pragma pp:multiple; add #multiple; retain PP_MULTIPLE 13306/08/87 add # operator to disambiguate predicate tests 134 inhibit more warnings on hosted files 135 make diagnostics more consistent -- a little more work 136 PP_READ files and their included files always marked hosted 13706/05/87 fix macro actual arg collection with imbedded #include, #line 13805/28/87 add `#pragma pp:multiple *' to mark all files multiple 139 add -D-M for command line equivalent to `#pragma pp:multiple *' 14005/01/87 clarify HOSTED and SYM_PREDEFINED 14104/24/87 split pplex.c into smaller files -- too big for some compilers 142 move common wrapper routines into the library 143 fix ppargs() to cooperate with other option parsers 14404/22/87 remove getenv("PPSTANDARD") override of PP_STANDARD 14504/21/87 replace yacc parser with recursive expr() from library streval() 14604/20/87 add #((<expr>)) expression evaluation on (x) 147 add #(<sym>=<expr>) to dynamically evaluate macro values 14804/11/87 home brew output buffering for PP_STANDALONE -- up to 10% 149 cleanup 15004/10/87 change T_STRING concatenation in preparation for new output buffering 15104/09/87 fix character constant conversion warnings 15204/07/87 fix \\n and ??/\n bugs in comment scan 15304/06/87 add DIGIT, HEX, OCTAL and NONOCTAL case classes to ppdefs.h 154 use GETCHR() and ISSPECIAL() in outer pplex() loop -- up to 10% 155 fix macro actual arg count test 15604/03/87 add PP_TEST and TEST1, TEST2 to mode for internal tests 15704/02/87 delete PPDEFAULT and generalize with PP_READ 158 note `# <line> "<file>"' as non-standard 159 add check for malloc() out of space 16004/01/87 C specific error messages only if language="C" 161 C++ specific error messages only if language="C++" 16203/31/87 delete command() predicate -- gateway for trojan horse 16303/30/87 add dialect() and language() builtin predicates 164 change in->standard to in->hosted and STANDARD to HOSTED 165 add PP_HOSTED and change PP_NOSTANDARD to PP_NOHOSTED 166 ignore #pragma for non-hosted files in STRICT dialect 16703/27/87 add predop(); delete pp:plusplus 168 pp:dialect and pp:language for verification only 16903/24/87 ----- first release ----- 17003/24/87 ----- first release ----- 17103/23/87 allow WARN to apply to all dialects 172 fix pp:directive `...multiple...' warning 173 add MAP_NEWLINE to separate multiple pragmas 17403/22/87 warn about null macro args for STRICT 175 add PP_LANGUAGE, `#pragma language [language]' 176 warn about newline in macro call arguments in directives 177 warn about directives in macro call arguments for STRICT 178 validate character constants in #if expressions 17903/20/87 add PP_DIRECTIVE and PP_LOCAL 180 add %I (ignore) map format and allow %X for pragma args 18103/19/87 change PP_DEFAULT to PP_STANDARD, add PP_DIALECT 182 add dialect arg to PP_COMPATIBILITY, PP_DIALECT and PP_STRICT 183 add `#pragma pp:pragma pass:option format' mapping 18403/18/87 delete pp:obsolete; fix `#pragma version' 185 fixed macro stack frame bug during recursive macro arg expansion 186 change CONFORMING, PP_CONFORMING to STRICT, PP_STRICT 187 add `#pragma dialect [dialect]' verification 18803/17/87 add PP_NOSTANDARD to disable any special handling of std files 189 refine mkdefault.sh for sun workstations 190 remove comma operator from pp.yacc since it implies side effects 191 add argument type checking for pp:directive and pp:obsolete 19203/16/87 refine CONFORMING messages 193 disambiguate most #assert/#define clashes 194 add PASSCOMMENT and (*ppcomment)() for old lint fans 19503/14/87 #undef in pp:readonly marks id as readonly macro 19603/11/87 warn about macros that are predicates in #if expressions 197 add mode to handle uncoupled flag bit overflow from state 19803/04/87 fix COMPATIBILITY to expand a macro in its definition 19902/24/87 add gentab.sh and mkdefault.sh to Makefile 20002/20/87 add IN_RECURSIVE for proper handling of #(...) 20102/16/87 add #unassert; PP_WARN & WARN to note obsolete usage 202 only recognize directive if # is first char for (state&COMPATIBILITY) 203 generalize gentab.sh and retrofit pp.tab 204 change in->name.file to be the name of including file 20502/13/87 add pp.tab; PP_PRAGMA "x=y" -> "#pragma x y" 206 add #(x y...) -> "#x y..." for recursive directive evaluation 20702/12/87 #pragma [pass:] [no]option [arg ...] 208 #pragma pp:[no]directive [pass:]<new-directive> 209 #pragma pp:id <identifier-character> 21002/11/87 distribute post-token switch in pplex() to individual cases (~5%) 21102/09/87 clarify invalid numeric token gobble 212 add VARQUOTE & PP_VARQUOTE for `X...X vs. '...' & "..." constants 21302/06/87 change STRICT to CONFORMING; add PP_CONFORMING 21402/06/87 change PPBUILTIN to #(<id>) 21502/05/87 clarify /*...*/ concatenation for (state&COMPATIBILITY) 216 add convertcc() to convert new char const to old style 217 rework # op to work with convertcc() 21802/04/87 add =<op> obsolete operators for (state&COMPATIBILITY) 21902/02/87 fix expand() to save and restore (state&DISABLE) 22012/17/86 first code 221