mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-03-09 15:50:02 +00:00
This takes another step towards cleaning up the build system. We now do not even pretend to be theoretically compatible with pre-1989 K&R C compilers or with C++ compilers. In practice, this had already been broken for many years due to bit rot. Commit46593a89already removed the license handling enormity that depended on proto, so now we can cleanly remove it altogether. But we do need to leave some backwards compatibility stubs to keep the build system compatible with older AST code; it should remain possible to build older ksh versions with the current build system (the bin/ and src/cmd/INIT/ directories) for testing purposes. So as of now there is no more __MANGLE__d rubbish in your generated header files. This is only about a quarter of a century overdue... This commit also includes a huge amount of code cleanup to remove thousands of unused K&R C fallbacks and other cruft, particularly in libast. This code base should now be a little easier to understand for people who are familiar with a modern(ish) C standard. ratz is now also removed; this was a standalone and simplified 2005 version of gunzip. As of6137b99a, none of our code uses it, even theoretically. And the real g(un)zip is now everywhere. src/cmd/INIT/proto.c, src/cmd/INIT/ratz.c: - Removed. COPYRIGHT: - Remove zlib license; this only applied to ratz. bin/package, src/cmd/INIT/package.sh: - Related cleanups. - Unset LC_ALL before invoking a new shell, respecting the user's locale again and avoiding multibyte character corruption on the command line. src/cmd/INIT/proto.sh: - Add stub for backwards compatibility with Mamfiles that depend on proto. It does nothing but pass input without modification and is now installed as the new arch/*/bin/proto by src/cmd/INIT/Mamfile. src/cmd/INIT/iffe.sh: - Ignore the proto-related -e (--package) and -p (--prototyped) options; keep parsing them for backwards compatibility. - Trim the macros passed to every test to their standard C versions, removing K&R C and C++ versions. These are now considered to be for backwards compatibility only. src/cmd/INIT/iffe.tst: - Remove proto(1) mangling code. By the way, iffe can be regression-tested as follows: $ bin/package use # set up environment in a child shell $ regress src/cmd/INIT/iffe.tst $ exit # leave package environment src/cmd/INIT/make.probe, src/cmd/INIT/probe.win32: - Remove code to handle C++. src/lib/libast/features/common: - As in iffe.sh above, trim macros designed for compatibility with C++ and ancient C compilers to their standard C versions and comment that they are for backwards compatibility with AST code. This is needed to keep all the old ast and ksh code compiling. src/cmd/ksh93/sh/init.c, src/cmd/ksh93/sh/name.c: - Clarify libshell ABI compatibility function versions of macros. A "proto workaround" comment in the original code mislead me into thinking this had something to do with the removed proto(1), but it's unrelated. Call the workaround macro BYPASS_MACRO instead. src/cmd/ksh93/include/defs.h: - sh_sigcheck() macro: allow &sh as an argument: parenthesise shp. src/cmd/ksh93/sh/nvtype.c: - Remove unused nv_mkstruct() function. (re:d0a5cab1) **/features/*: - Remove obsolete iffe 'set prototyped' option. **/Mamfile: - Remove all references to the ast/prototyped.h header. - Remove all use of the proto command. Simply copy instead. *** 850-ish source files: *** - Remove all '#pragma prototyped' directives. - Remove all C++ compat code conditional upon defined(__cplusplus). - Remove all use of the _ARG_ macro, which on standard C expands to its argument: #define _ARG_(x) x (on K&R C, it expanded to nothing) - Remove all use of _BEGIN_EXTERNS_ and _END_EXTERNS_ macros (empty on standard C; this was for C++ compatibility) - Reduce all #if __STD_C (standard code) #else (K&R code) #endif blocks to the standard code only, without use of the macro. - Same for _STD_ macro which seems to have had the same function. - Change all instances of 'Void_t' to standard 'void'.
160 lines
6.3 KiB
C
160 lines
6.3 KiB
C
/***********************************************************************
|
|
* *
|
|
* This software is part of the ast package *
|
|
* Copyright (c) 1982-2011 AT&T Intellectual Property *
|
|
* Copyright (c) 2020-2021 Contributors to ksh 93u+m *
|
|
* and is licensed under the *
|
|
* Eclipse Public License, Version 1.0 *
|
|
* by AT&T Intellectual Property *
|
|
* *
|
|
* A copy of the License is available at *
|
|
* http://www.eclipse.org/org/documents/epl-v10.html *
|
|
* (with md5 checksum b35adb5213ca9657e911e9befb180842) *
|
|
* *
|
|
* Information and Software Systems Research *
|
|
* AT&T Research *
|
|
* Florham Park NJ *
|
|
* *
|
|
* David Korn <dgk@research.att.com> *
|
|
* *
|
|
***********************************************************************/
|
|
#ifndef S_BREAK
|
|
#define S_BREAK 1 /* end of token */
|
|
#define S_EOF 2 /* end of buffer */
|
|
#define S_NL 3 /* new-line when not a token */
|
|
#define S_RES 4 /* first character of reserved word */
|
|
#define S_NAME 5 /* other identifier characters */
|
|
#define S_REG 6 /* non-special characters */
|
|
#define S_TILDE 7 /* first char is tilde */
|
|
#define S_PUSH 8
|
|
#define S_POP 9
|
|
#define S_BRACT 10
|
|
#define S_LIT 11 /* literal quote character */
|
|
#define S_NLTOK 12 /* new-line token */
|
|
#define S_OP 13 /* operator character */
|
|
#define S_PAT 14 /* pattern characters * and ? */
|
|
#define S_EPAT 15 /* pattern char when followed by ( */
|
|
#define S_EQ 16 /* assignment character */
|
|
#define S_COM 17 /* comment character */
|
|
#define S_MOD1 18 /* ${...} modifier character - old quoting */
|
|
#define S_MOD2 19 /* ${...} modifier character - new quoting */
|
|
#define S_ERR 20 /* invalid character in ${...} */
|
|
#define S_SPC1 21 /* special prefix characters after $ */
|
|
#define S_SPC2 22 /* special characters after $ */
|
|
#define S_DIG 23 /* digit character after $ */
|
|
#define S_ALP 24 /* alphabetic character after $ */
|
|
#define S_LBRA 25 /* left brace after $ */
|
|
#define S_RBRA 26 /* right brace after $ */
|
|
#define S_PAR 27 /* set for $( */
|
|
#define S_ENDCH 28 /* macro expansion terminator */
|
|
#define S_SLASH 29 /* / character terminates ~ expansion */
|
|
#define S_COLON 30 /* for character : */
|
|
#define S_LABEL 31 /* for goto label */
|
|
#define S_EDOL 32 /* ends $identifier */
|
|
#define S_BRACE 33 /* left brace */
|
|
#define S_DOT 34 /* . char */
|
|
#define S_META 35 /* | & ; < > inside ${...} reserved for future use */
|
|
#define S_SPACE S_BREAK /* IFS space characters */
|
|
#define S_DELIM S_RES /* IFS delimiter characters */
|
|
#define S_MBYTE S_NAME /* IFS first byte of multi-byte char */
|
|
#define S_BLNK 36 /* space or tab */
|
|
/* The following must be the highest numbered states */
|
|
#define S_QUOTE 37 /* double quote character */
|
|
#define S_GRAVE 38 /* old comsub character */
|
|
#define S_ESC 39 /* escape character */
|
|
#define S_DOL 40 /* $ substitution character */
|
|
#define S_ESC2 41 /* escape character inside '...' */
|
|
|
|
/* These are the lexical state table names */
|
|
/* See lexstates.c (ST_NONE must be last) */
|
|
#define ST_BEGIN 0
|
|
#define ST_NAME 1
|
|
#define ST_NORM 2
|
|
#define ST_LIT 3
|
|
#define ST_QUOTE 4
|
|
#define ST_NESTED 5
|
|
#define ST_DOL 6
|
|
#define ST_BRACE 7
|
|
#define ST_DOLNAME 8
|
|
#define ST_MACRO 9
|
|
#define ST_QNEST 10
|
|
#define ST_MOD1 11
|
|
#define ST_NONE 12
|
|
|
|
#include "FEATURE/locale"
|
|
|
|
#if _hdr_wchar
|
|
# include <wchar.h>
|
|
# if _hdr_wctype
|
|
# include <wctype.h>
|
|
# undef isalpha
|
|
# define isalpha(x) iswalpha(x)
|
|
# if defined(iswblank) || _lib_iswblank
|
|
# undef isblank
|
|
# define isblank(x) iswblank(x)
|
|
# else
|
|
# if _lib_wctype && _lib_iswctype
|
|
# define _lib_iswblank -1
|
|
# undef isblank
|
|
# define isblank(x) local_iswblank(x)
|
|
extern int local_iswblank(wchar_t);
|
|
# endif
|
|
# endif
|
|
# endif
|
|
#endif
|
|
#ifndef isblank
|
|
# define isblank(x) ((x)==' '||(x)=='\t')
|
|
#endif
|
|
|
|
#undef LEN
|
|
#if SHOPT_MULTIBYTE
|
|
# define LEN _Fcin.fclen
|
|
# define isaname(c) ((c)>0x7f?isalpha(c): sh_lexstates[ST_NAME][(c)]==0)
|
|
# define isaletter(c) ((c)>0x7f?isalpha(c): sh_lexstates[ST_DOL][(c)]==S_ALP && (c)!='.')
|
|
#else
|
|
# undef mbwide
|
|
# define mbwide() (0)
|
|
# define LEN 1
|
|
# define isaname(c) (sh_lexstates[ST_NAME][c]==0)
|
|
# define isaletter(c) (sh_lexstates[ST_DOL][c]==S_ALP && (c)!='.')
|
|
#endif
|
|
#define STATE(s,c) (s[mbwide()?((c=fcmbget(&LEN)),LEN>1?'a':c):(c=fcget())])
|
|
#define isadigit(c) (sh_lexstates[ST_DOL][c]==S_DIG)
|
|
#define isastchar(c) ((c)=='@' || (c)=='*')
|
|
#define isexp(c) (sh_lexstates[ST_MACRO][c]==S_PAT||(c)=='$'||(c)=='`')
|
|
#define ismeta(c) (sh_lexstates[ST_NAME][c]==S_BREAK)
|
|
|
|
extern char *sh_lexstates[ST_NONE];
|
|
extern const char *sh_lexrstates[ST_NONE];
|
|
extern const char e_lexversion[];
|
|
extern const char e_lexspace[];
|
|
extern const char e_lexslash[];
|
|
extern const char e_lexlabignore[];
|
|
extern const char e_lexlabunknown[];
|
|
extern const char e_lexsyntax1[];
|
|
extern const char e_lexsyntax2[];
|
|
extern const char e_lexsyntax3[];
|
|
extern const char e_lexsyntax4[];
|
|
extern const char e_lexsyntax5[];
|
|
extern const char e_lexwarnvar[];
|
|
extern const char e_lexarithwarn[];
|
|
extern const char e_lexobsolete1[];
|
|
extern const char e_lexobsolete2[];
|
|
extern const char e_lexobsolete3[];
|
|
extern const char e_lexobsolete4[];
|
|
extern const char e_lexobsolete5[];
|
|
extern const char e_lexobsolete6[];
|
|
extern const char e_lexnonstandard[];
|
|
extern const char e_lexusebrace[];
|
|
extern const char e_lexusequote[];
|
|
extern const char e_lexescape[];
|
|
extern const char e_lexquote[];
|
|
extern const char e_lexnested[];
|
|
extern const char e_lexbadchar[];
|
|
extern const char e_lexlongquote[];
|
|
extern const char e_lexfuture[];
|
|
extern const char e_lexzerobyte[];
|
|
extern const char e_lexemptyfor[];
|
|
extern const char e_lextypeset[];
|
|
extern const char e_lexcharclass[];
|
|
#endif
|