Fix warnings.

SVN revision: 28039
This commit is contained in:
Kim Woelders 2007-01-18 04:54:58 +00:00
parent f53600e1e8
commit 76e115e94d
10 changed files with 957 additions and 1400 deletions

View File

@ -20,9 +20,8 @@
bin_PROGRAMS = epp
epp_SOURCES = \
cpplib.h \
cpplib.h \
cpphash.h \
header.h \
cppalloc.c \
cpperror.c \
cppexp.c \

View File

@ -22,19 +22,18 @@
* You are forbidden to forbid anyone else to use, share and improve
* what you give them. Help stamp out software-hoarding! */
#include "config.h"
#include <stdlib.h>
#include "header.h"
#include "config.h"
#include "cpplib.h"
static void
memory_full()
memory_full(void)
{
fatal("Memory exhausted.");
cpp_fatal("Memory exhausted.");
}
void *
xmalloc(size)
unsigned size;
xmalloc(unsigned size)
{
char *ptr = (char *)malloc(size);
@ -46,9 +45,7 @@ xmalloc(size)
}
void *
xrealloc(old, size)
void *old;
unsigned size;
xrealloc(void *old, unsigned size)
{
char *ptr = (char *)realloc(old, size);
@ -58,8 +55,7 @@ xrealloc(old, size)
}
void *
xcalloc(number, size)
unsigned number, size;
xcalloc(unsigned number, unsigned size)
{
char *ptr = (char *)calloc(number, size);

View File

@ -24,16 +24,14 @@
#include <stdio.h>
#include <stdlib.h>
#include "header.h"
#include "config.h"
#include "cpplib.h"
/* Print the file names and line numbers of the #include
* commands which led to the current file. */
void fatal(char *str, char *arg);
void
cpp_print_containing_files(pfile)
cpp_reader *pfile;
cpp_print_containing_files(cpp_reader * pfile)
{
cpp_buffer *ip;
int first = 1;
@ -74,10 +72,8 @@ cpp_print_containing_files(pfile)
}
void
cpp_file_line_for_message(pfile, filename, line, column)
cpp_reader *pfile;
char *filename;
int line, column;
cpp_file_line_for_message(cpp_reader * pfile, const char *filename,
int line, int column)
{
pfile = NULL;
if (column > 0)
@ -92,34 +88,51 @@ cpp_file_line_for_message(pfile, filename, line, column)
/* IS_ERROR is 1 for error, 0 for warning */
void
cpp_message(pfile, is_error, msg, arg1, arg2, arg3)
int is_error;
cpp_reader *pfile;
char *msg;
char *arg1, *arg2, *arg3;
cpp_message_v(cpp_reader * pfile, int is_error, const char *msg, va_list args)
{
if (is_error)
pfile->errors++;
else
fprintf(stderr, "warning: ");
fprintf(stderr, msg, arg1, arg2, arg3);
vfprintf(stderr, msg, args);
fprintf(stderr, "\n");
}
void
fatal(str, arg)
char *str, *arg;
cpp_message(cpp_reader * pfile, int is_error, const char *msg, ...)
{
va_list args;
va_start(args, msg);
cpp_message_v(pfile, is_error, msg, args);
va_end(args);
}
static void
cpp_fatal_v(const char *msg, va_list args)
{
fprintf(stderr, "%s: ", progname);
fprintf(stderr, str, arg);
vfprintf(stderr, msg, args);
fprintf(stderr, "\n");
exit(FATAL_EXIT_CODE);
}
void
cpp_pfatal_with_name(pfile, name)
cpp_reader *pfile;
char *name;
cpp_fatal(const char *msg, ...)
{
va_list args;
va_start(args, msg);
cpp_fatal_v(msg, args);
va_end(args);
}
void
cpp_pfatal_with_name(cpp_reader * pfile, const char *name)
{
cpp_perror_with_name(pfile, name);
#ifdef VMS

View File

@ -25,7 +25,8 @@
/* Parse a C expression from text in a string */
#include "config.h"
#include "header.h"
#include "cpplib.h"
#include "cpphash.h"
#ifdef __EMX__
#include <strings.h>
@ -102,10 +103,6 @@ struct arglist
* number with SUM's sign, where A, B, and SUM are all C integers. */
#define possible_sum_sign(a, b, sum) ((((a) ^ (b)) | ~ ((a) ^ (sum))) < 0)
static void integer_overflow();
static long left_shift();
static long right_shift();
#define ERROR 299
#define OROR 300
#define ANDAND 301
@ -141,14 +138,11 @@ struct operation
/* maybe needs to actually deal with floating point numbers */
struct operation
parse_number(pfile, start, olen)
cpp_reader *pfile;
char *start;
int olen;
static struct operation
parse_number(cpp_reader * pfile, const char *start, int olen)
{
struct operation op;
char *p = start;
const char *p = start;
int c;
unsigned long n = 0, nd, ULONG_MAX_over_base;
int base = 10;
@ -251,7 +245,7 @@ parse_number(pfile, start, olen)
struct token
{
char *operator;
const char *oper;
int token;
};
@ -271,9 +265,8 @@ static struct token tokentab2[] = {
/* Read one token. */
struct operation
cpp_lex(pfile)
cpp_reader *pfile;
static struct operation
cpp_lex(cpp_reader * pfile)
{
int c;
struct token *toktab;
@ -282,6 +275,9 @@ cpp_lex(pfile)
unsigned char *tok_start, *tok_end;
int old_written;
op.value = 0;
op.unsignedp = 0;
retry:
old_written = CPP_WRITTEN(pfile);
@ -332,7 +328,7 @@ cpp_lex(pfile)
unsigned width = MAX_CHAR_TYPE_SIZE;
int wide_flag = 0;
int max_chars;
char *ptr = (char*)tok_start;
char *ptr = (char *)tok_start;
#ifdef MULTIBYTE_CHARS
char token_buffer[MAX_LONG_TYPE_SIZE /
@ -360,7 +356,7 @@ cpp_lex(pfile)
while (1)
{
if (ptr >= (char*)CPP_PWRITTEN(pfile) || (c = *ptr++) == '\'')
if (ptr >= (char *)CPP_PWRITTEN(pfile) || (c = *ptr++) == '\'')
break;
if (c == '\\')
@ -403,7 +399,7 @@ cpp_lex(pfile)
{
int num_bits = num_chars * width;
if (cpp_lookup(pfile, "__CHAR_UNSIGNED__",
if (cpp_lookup("__CHAR_UNSIGNED__",
sizeof("__CHAR_UNSIGNED__") - 1, -1)
|| ((result >> (num_bits - 1)) & 1) == 0)
op.value
@ -452,9 +448,9 @@ cpp_lex(pfile)
/* See if it is a special token of length 2. */
if (tok_start + 2 == tok_end)
{
for (toktab = tokentab2; toktab->operator != NULL; toktab++)
if (tok_start[0] == toktab->operator[0]
&& tok_start[1] == toktab->operator[1])
for (toktab = tokentab2; toktab->oper != NULL; toktab++)
if (tok_start[0] == toktab->oper[0]
&& tok_start[1] == toktab->oper[1])
break;
if (toktab->token == ERROR)
{
@ -492,9 +488,7 @@ cpp_lex(pfile)
* after the zeros. A value of 0 does not mean end of string. */
int
cpp_parse_escape(pfile, string_ptr)
cpp_reader *pfile;
char **string_ptr;
cpp_parse_escape(cpp_reader * pfile, char **string_ptr)
{
int c = *(*string_ptr)++;
@ -594,19 +588,14 @@ cpp_parse_escape(pfile, string_ptr)
}
static void
integer_overflow(pfile)
cpp_reader *pfile;
integer_overflow(cpp_reader * pfile)
{
if (CPP_PEDANTIC(pfile))
cpp_pedwarn(pfile, "integer overflow in preprocessor expression");
}
static long
left_shift(pfile, a, unsignedp, b)
cpp_reader *pfile;
long a;
int unsignedp;
unsigned long b;
left_shift(cpp_reader * pfile, long a, int unsignedp, unsigned long b)
{
if (b >= HOST_BITS_PER_LONG)
{
@ -627,11 +616,7 @@ left_shift(pfile, a, unsignedp, b)
}
static long
right_shift(pfile, a, unsignedp, b)
cpp_reader *pfile;
long a;
int unsignedp;
unsigned long b;
right_shift(cpp_reader * pfile, long a, int unsignedp, unsigned long b)
{
pfile = NULL;
if (b >= HOST_BITS_PER_LONG)
@ -672,9 +657,8 @@ right_shift(pfile, a, unsignedp, b)
/* Parse and evaluate a C expression, reading from PFILE.
* Returns the value of the expression. */
HOST_WIDE_INT cpp_parse_expr(pfile)
cpp_reader *
pfile;
HOST_WIDE_INT
cpp_parse_expr(cpp_reader * pfile)
{
/* The implementation is an operator precedence parser,
* i.e. a bottom-up parser, using a stack for not-yet-reduced tokens.

View File

@ -22,36 +22,22 @@
* You are forbidden to forbid anyone else to use, share and improve
* what you give them. Help stamp out software-hoarding! */
#include "header.h"
#include "cpplib.h"
#include "cpphash.h"
static HASHNODE *hashtab[HASHSIZE];
HASHNODE *cpp_lookup(struct parse_file *pfile,
const unsigned char *name, int len, int hash);
void delete_macro(HASHNODE * hp);
HASHNODE *install(unsigned char *name, int len, enum node_type type,
int ivalue, char *value, int hash);
/* Define a generic NULL if one hasn't already been defined. */
#ifndef NULL
#define NULL 0
#endif
#ifndef __STDC__
#define const
#define volatile
#endif
#include <string.h>
#include <stdlib.h>
#define IS_IDCHAR(ch) is_idchar[(unsigned char)(ch)]
/*
* return hash function on name. must be compatible with the one
* computed a step at a time, elsewhere
*/
int
hashf(const unsigned char *name, int len, int hashsize)
hashf(const char *name, int len, int hashsize)
{
int r = 0;
@ -72,16 +58,14 @@ hashf(const unsigned char *name, int len, int hashsize)
* Otherwise, compute the hash code.
*/
HASHNODE *
cpp_lookup(struct parse_file * pfile, const unsigned char *name, int len,
int hash)
cpp_lookup(const char *name, int len, int hash)
{
const unsigned char *bp;
const char *bp;
HASHNODE *bucket;
pfile = NULL;
if (len < 0)
{
for (bp = name; is_idchar[*bp]; bp++);
for (bp = name; IS_IDCHAR(*bp); bp++);
len = bp - name;
}
if (hash < 0)
@ -90,7 +74,8 @@ cpp_lookup(struct parse_file * pfile, const unsigned char *name, int len,
bucket = hashtab[hash];
while (bucket)
{
if (bucket->length == len && strncmp(bucket->name, name, len) == 0)
if (bucket->length == len
&& strncmp((const char *)bucket->name, name, len) == 0)
return bucket;
bucket = bucket->next;
}
@ -112,8 +97,7 @@ cpp_lookup(struct parse_file * pfile, const unsigned char *name, int len,
* If #undef freed the DEFINITION, that would crash. */
void
delete_macro(hp)
HASHNODE *hp;
delete_macro(HASHNODE * hp)
{
if (hp->prev != NULL)
@ -157,22 +141,17 @@ delete_macro(hp)
* Otherwise, compute the hash code.
*/
HASHNODE *
install(name, len, type, ivalue, value, hash)
unsigned char *name;
int len;
enum node_type type;
int ivalue;
char *value;
int hash;
install(const char *name, int len, enum node_type type, int ivalue, char *value,
int hash)
{
HASHNODE *hp;
int i, bucket;
unsigned char *p, *q;
const char *p;
if (len < 0)
{
p = name;
while (is_idchar[*p])
while (IS_IDCHAR(*p))
p++;
len = p - name;
}
@ -194,18 +173,14 @@ install(name, len, type, ivalue, value, hash)
hp->value.ival = ivalue;
else
hp->value.cpval = value;
hp->name = ((unsigned char *)hp) + sizeof(HASHNODE);
p = hp->name;
q = name;
for (i = 0; i < len; i++)
*p++ = *q++;
hp->name = ((char *)hp) + sizeof(HASHNODE);
memcpy(hp->name, name, len);
hp->name[len] = 0;
return hp;
}
void
cpp_hash_cleanup(pfile)
cpp_reader *pfile;
cpp_hash_cleanup(cpp_reader * pfile)
{
int i;

View File

@ -18,7 +18,7 @@ struct hashnode
* of the chain and gets deleted. */
enum node_type type; /* type of special token */
int length; /* length of token, for quick comparison */
unsigned char *name; /* the actual name */
char *name; /* the actual name */
union hashval value; /* pointer to expansion, or whatever */
};
@ -35,5 +35,9 @@ typedef struct hashnode HASHNODE;
#define HASHSTEP(old, c) ((old << 2) + c)
#define MAKE_POS(v) (v & 0x7fffffff) /* make number positive */
extern HASHNODE *install
PARAMS((unsigned char *, int, enum node_type, int, char *, int));
extern int hashf(const char *name, int len, int hashsize);
extern HASHNODE *cpp_lookup(const char *name, int len, int hash);
extern void delete_macro(HASHNODE * hp);
extern HASHNODE *install(const char *name, int len, enum node_type type,
int ivalue, char *value, int hash);
extern void cpp_hash_cleanup(cpp_reader * pfile);

File diff suppressed because it is too large Load Diff

View File

@ -21,139 +21,137 @@ Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
You are forbidden to forbid anyone else to use, share and improve
what you give them. Help stamp out software-hoarding! */
#include <stdarg.h>
#include <sys/types.h>
#include <sys/stat.h>
#ifdef __cplusplus
extern "C"
{
#ifndef HOST_BITS_PER_WIDE_INT
#if HOST_BITS_PER_LONG > HOST_BITS_PER_INT
#define HOST_BITS_PER_WIDE_INT HOST_BITS_PER_LONG
#define HOST_WIDE_INT long
#else
#define HOST_BITS_PER_WIDE_INT HOST_BITS_PER_INT
#define HOST_WIDE_INT int
#endif
#endif
#define STATIC_BUFFERS
struct parse_file;
typedef struct cpp_reader cpp_reader;
typedef struct cpp_buffer cpp_buffer;
typedef struct cpp_options cpp_options;
typedef struct hashnode cpp_hashnode;
typedef struct cpp_reader cpp_reader;
typedef struct cpp_buffer cpp_buffer;
typedef struct cpp_options cpp_options;
enum cpp_token
{
CPP_EOF = -1,
CPP_OTHER = 0,
CPP_COMMENT = 1,
CPP_HSPACE,
CPP_VSPACE, /* newlines and #line directives */
CPP_NAME,
CPP_NUMBER,
CPP_CHAR,
CPP_STRING,
CPP_DIRECTIVE,
CPP_LPAREN, /* "(" */
CPP_RPAREN, /* ")" */
CPP_LBRACE, /* "{" */
CPP_RBRACE, /* "}" */
CPP_COMMA, /* "," */
CPP_SEMICOLON, /* ";" */
CPP_3DOTS, /* "..." */
/* POP_TOKEN is returned when we've popped a cpp_buffer. */
CPP_POP
};
enum cpp_token
{
CPP_EOF = -1,
CPP_OTHER = 0,
CPP_COMMENT = 1,
CPP_HSPACE,
CPP_VSPACE, /* newlines and #line directives */
CPP_NAME,
CPP_NUMBER,
CPP_CHAR,
CPP_STRING,
CPP_DIRECTIVE,
CPP_LPAREN, /* "(" */
CPP_RPAREN, /* ")" */
CPP_LBRACE, /* "{" */
CPP_RBRACE, /* "}" */
CPP_COMMA, /* "," */
CPP_SEMICOLON, /* ";" */
CPP_3DOTS, /* "..." */
/* POP_TOKEN is returned when we've popped a cpp_buffer. */
CPP_POP
};
#ifndef PARAMS
#ifdef __STDC
#define PARAMS(P) P
#else
#define PARAMS(P) ()
#endif
#endif /* !PARAMS */
typedef enum cpp_token (*parse_underflow_t) PARAMS((cpp_reader *));
typedef int (*parse_cleanup_t) PARAMS((cpp_buffer *, cpp_reader *));
typedef enum cpp_token (*parse_underflow_t) (cpp_reader *);
typedef int (*parse_cleanup_t) (cpp_buffer *, cpp_reader *);
/* A parse_marker indicates a previous position,
which we can backtrack to. */
struct parse_marker
{
cpp_buffer *buf;
struct parse_marker *next;
int position;
};
struct parse_marker
{
cpp_buffer *buf;
struct parse_marker *next;
int position;
};
extern void parse_set_mark PARAMS((struct parse_marker *, cpp_reader *));
extern void parse_clear_mark PARAMS((struct parse_marker *));
extern void parse_goto_mark PARAMS((struct parse_marker *, cpp_reader *));
extern void parse_move_mark PARAMS((struct parse_marker *, cpp_reader *));
extern int cpp_handle_options PARAMS((cpp_reader *, int, char **));
extern enum cpp_token cpp_get_token PARAMS((cpp_reader *));
extern void cpp_skip_hspace PARAMS((cpp_reader *));
extern enum cpp_token cpp_get_non_space_token PARAMS((cpp_reader *));
extern int cpp_handle_options(cpp_reader * pfile, int, char **);
extern enum cpp_token cpp_get_token(cpp_reader * pfile);
extern void cpp_skip_hspace(cpp_reader * pfile);
/* Maintain and search list of included files, for #import. */
#define IMPORT_HASH_SIZE 31
struct import_file
{
char *name;
ino_t inode;
dev_t dev;
struct import_file *next;
};
struct import_file
{
char *name;
ino_t inode;
dev_t dev;
struct import_file *next;
};
/* If we have a huge buffer, may need to cache more recent counts */
#define CPP_LINE_BASE(BUF) ((BUF)->buf + (BUF)->line_base)
struct cpp_buffer
{
unsigned char *buf;
unsigned char *cur;
unsigned char *rlimit; /* end of valid data */
unsigned char *alimit; /* end of allocated buffer */
unsigned char *prev; /* start of current token */
enum dump_type
{
dump_none = 0, dump_only, dump_names, dump_definitions
};
char *fname;
/* Filename specified with #line command. */
char *nominal_fname;
struct cpp_buffer
{
unsigned char *buf;
unsigned char *cur;
unsigned char *rlimit; /* end of valid data */
unsigned char *alimit; /* end of allocated buffer */
unsigned char *prev; /* start of current token */
/* Record where in the search path this file was found.
* For #include_next. */
struct file_name_list *dir;
const char *fname;
/* Filename specified with #line command. */
const char *nominal_fname;
long line_base;
long lineno; /* Line number at CPP_LINE_BASE. */
long colno; /* Column number at CPP_LINE_BASE. */
/* Record where in the search path this file was found.
* For #include_next. */
struct file_name_list *dir;
long line_base;
long lineno; /* Line number at CPP_LINE_BASE. */
long colno; /* Column number at CPP_LINE_BASE. */
#ifndef STATIC_BUFFERS
cpp_buffer *chain;
cpp_buffer *chain;
#endif
parse_underflow_t underflow;
parse_cleanup_t cleanup;
void *data;
struct parse_marker *marks;
/* Value of if_stack at start of this file.
* Used to prohibit unmatched #endif (etc) in an include file. */
struct if_stack *if_stack;
parse_underflow_t underflow;
parse_cleanup_t cleanup;
void *data;
struct parse_marker *marks;
/* Value of if_stack at start of this file.
* Used to prohibit unmatched #endif (etc) in an include file. */
struct if_stack *if_stack;
/* True if this is a header file included using <FILENAME>. */
char system_header_p;
char seen_eof;
/* True if this is a header file included using <FILENAME>. */
char system_header_p;
char seen_eof;
/* True if buffer contains escape sequences.
* Currently there are are only two kind:
* "@-" means following identifier should not be macro-expanded.
* "@ " means a token-separator. This turns into " " in final output
* if not stringizing and needed to separate tokens; otherwise nothing.
* "@@" means a normal '@'.
* (An '@' inside a string stands for itself and is never an escape.) */
char has_escapes;
};
/* True if buffer contains escape sequences.
* Currently there are are only two kind:
* "@-" means following identifier should not be macro-expanded.
* "@ " means a token-separator. This turns into " " in final output
* if not stringizing and needed to separate tokens; otherwise nothing.
* "@@" means a normal '@'.
* (An '@' inside a string stands for itself and is never an escape.) */
char has_escapes;
};
struct cpp_pending; /* Forward declaration - for C++. */
struct file_name_map_list;
struct cpp_pending; /* Forward declaration - for C++. */
struct file_name_map_list;
typedef struct assertion_hashnode ASSERTION_HASHNODE;
typedef struct assertion_hashnode ASSERTION_HASHNODE;
#define ASSERTION_HASHSIZE 37
#ifdef STATIC_BUFFERS
@ -162,97 +160,97 @@ extern "C"
#define CPP_STACK_MAX 200
#endif
struct cpp_reader
{
unsigned char *limit;
parse_underflow_t get_token;
cpp_buffer *buffer;
struct cpp_reader
{
unsigned char *limit;
parse_underflow_t get_token;
cpp_buffer *buffer;
#ifdef STATIC_BUFFERS
cpp_buffer buffer_stack[CPP_STACK_MAX];
cpp_buffer buffer_stack[CPP_STACK_MAX];
#endif
int errors; /* Error counter for exit code */
void *data;
int errors; /* Error counter for exit code */
void *data;
unsigned char *token_buffer;
int token_buffer_size;
unsigned char *token_buffer;
int token_buffer_size;
/* Line where a newline was first seen in a string constant. */
int multiline_string_line;
/* Line where a newline was first seen in a string constant. */
int multiline_string_line;
/* Current depth in #include directives that use <...>. */
int system_include_depth;
/* Current depth in #include directives that use <...>. */
int system_include_depth;
/* List of included files that contained #pragma once. */
struct file_name_list *dont_repeat_files;
/* List of included files that contained #pragma once. */
struct file_name_list *dont_repeat_files;
/* List of other included files.
* If ->control_macro if nonzero, the file had a #ifndef
* around the entire contents, and ->control_macro gives the macro name. */
struct file_name_list *all_include_files;
/* List of other included files.
* If ->control_macro if nonzero, the file had a #ifndef
* around the entire contents, and ->control_macro gives the macro name. */
struct file_name_list *all_include_files;
/* Current maximum length of directory names in the search path
* for include files. (Altered as we get more of them.) */
int max_include_len;
/* Current maximum length of directory names in the search path
* for include files. (Altered as we get more of them.) */
int max_include_len;
/* Hash table of files already included with #include or #import. */
struct import_file *import_hash_table[IMPORT_HASH_SIZE];
/* Hash table of files already included with #include or #import. */
struct import_file *import_hash_table[IMPORT_HASH_SIZE];
struct if_stack *if_stack;
struct if_stack *if_stack;
/* Nonzero means we are inside an IF during a -pcp run. In this mode
* macro expansion is done, and preconditions are output for all macro
* uses requiring them. */
char pcp_inside_if;
/* Nonzero means we are inside an IF during a -pcp run. In this mode
* macro expansion is done, and preconditions are output for all macro
* uses requiring them. */
char pcp_inside_if;
/* Nonzero means we have printed (while error reporting) a list of
* containing files that matches the current status. */
char input_stack_listing_current;
/* Nonzero means we have printed (while error reporting) a list of
* containing files that matches the current status. */
char input_stack_listing_current;
/* If non-zero, macros are not expanded. */
char no_macro_expand;
/* If non-zero, macros are not expanded. */
char no_macro_expand;
/* Print column number in error messages. */
char show_column;
/* Print column number in error messages. */
char show_column;
/* We're printed a warning recommending against using #import. */
char import_warning;
/* We're printed a warning recommending against using #import. */
char import_warning;
/* If true, character between '<' and '>' are a single (string) token. */
char parsing_include_directive;
/* If true, character between '<' and '>' are a single (string) token. */
char parsing_include_directive;
/* True if escape sequences (as described for has_escapes in
* parse_buffer) should be emitted. */
char output_escapes;
/* True if escape sequences (as described for has_escapes in
* parse_buffer) should be emitted. */
char output_escapes;
/* 0: Have seen non-white-space on this line.
* 1: Only seen white space so far on this line.
* 2: Only seen white space so far in this file. */
char only_seen_white;
/* 0: Have seen non-white-space on this line.
* 1: Only seen white space so far on this line.
* 2: Only seen white space so far in this file. */
char only_seen_white;
/* Nonzero means this file was included with a -imacros or -include
* command line and should not be recorded as an include file. */
/* Nonzero means this file was included with a -imacros or -include
* command line and should not be recorded as an include file. */
int no_record_file;
int no_record_file;
long lineno;
long lineno;
struct tm *timebuf;
struct tm *timebuf;
ASSERTION_HASHNODE *assertion_hashtab[ASSERTION_HASHSIZE];
ASSERTION_HASHNODE *assertion_hashtab[ASSERTION_HASHSIZE];
/* Buffer of -M output. */
char *deps_buffer;
/* Buffer of -M output. */
char *deps_buffer;
/* Number of bytes allocated in above. */
int deps_allocated_size;
/* Number of bytes allocated in above. */
int deps_allocated_size;
/* Number of bytes used. */
int deps_size;
/* Number of bytes used. */
int deps_size;
/* Number of bytes since the last newline. */
int deps_column;
};
/* Number of bytes since the last newline. */
int deps_column;
};
#define CPP_BUF_PEEK(BUFFER) \
((BUFFER)->cur < (BUFFER)->rlimit ? *(BUFFER)->cur : EOF)
@ -296,117 +294,117 @@ extern "C"
#endif
/* Pointed to by parse_file::data. */
struct cpp_options
{
char *in_fname;
struct cpp_options
{
const char *in_fname;
/* Name of output file, for error messages. */
char *out_fname;
/* Name of output file, for error messages. */
const char *out_fname;
struct file_name_map_list *map_list;
struct file_name_map_list *map_list;
/* Non-0 means -v, so print the full set of include dirs. */
char verbose;
/* Non-0 means -v, so print the full set of include dirs. */
char verbose;
/* Nonzero means use extra default include directories for C++. */
/* Nonzero means use extra default include directories for C++. */
char cplusplus;
char cplusplus;
/* Nonzero means handle cplusplus style comments */
/* Nonzero means handle cplusplus style comments */
char cplusplus_comments;
char cplusplus_comments;
/* Nonzero means handle #import, for objective C. */
/* Nonzero means handle #import, for objective C. */
char objc;
char objc;
/* Nonzero means this is an assembly file, and allow
* unknown directives, which could be comments. */
/* Nonzero means this is an assembly file, and allow
* unknown directives, which could be comments. */
int lang_asm;
int lang_asm;
/* Nonzero means turn NOTREACHED into #pragma NOTREACHED etc */
/* Nonzero means turn NOTREACHED into #pragma NOTREACHED etc */
char for_lint;
char for_lint;
/* Nonzero means handle CHILL comment syntax
* and output CHILL string delimiter for __DATE___ etc. */
/* Nonzero means handle CHILL comment syntax
* and output CHILL string delimiter for __DATE___ etc. */
char chill;
char chill;
/* Nonzero means copy comments into the output file. */
/* Nonzero means copy comments into the output file. */
char put_out_comments;
char put_out_comments;
/* Nonzero means don't process the ANSI trigraph sequences. */
/* Nonzero means don't process the ANSI trigraph sequences. */
char no_trigraphs;
char no_trigraphs;
/* Nonzero means print the names of included files rather than
* the preprocessed output. 1 means just the #include "...",
* 2 means #include <...> as well. */
/* Nonzero means print the names of included files rather than
* the preprocessed output. 1 means just the #include "...",
* 2 means #include <...> as well. */
char print_deps;
char print_deps;
/* Nonzero if missing .h files in -M output are assumed to be generated
* files and not errors. */
/* Nonzero if missing .h files in -M output are assumed to be generated
* files and not errors. */
char print_deps_missing_files;
char print_deps_missing_files;
/* If true, fopen (deps_file, "a") else fopen (deps_file, "w"). */
char print_deps_append;
/* If true, fopen (deps_file, "a") else fopen (deps_file, "w"). */
char print_deps_append;
/* Nonzero means print names of header files (-H). */
/* Nonzero means print names of header files (-H). */
char print_include_names;
char print_include_names;
/* Nonzero means try to make failure to fit ANSI C an error. */
/* Nonzero means try to make failure to fit ANSI C an error. */
char pedantic_errors;
char pedantic_errors;
/* Nonzero means don't print warning messages. -w. */
/* Nonzero means don't print warning messages. -w. */
char inhibit_warnings;
char inhibit_warnings;
/* Nonzero means warn if slash-star appears in a comment. */
/* Nonzero means warn if slash-star appears in a comment. */
char warn_comments;
char warn_comments;
/* Nonzero means warn if there are any trigraphs. */
/* Nonzero means warn if there are any trigraphs. */
char warn_trigraphs;
char warn_trigraphs;
/* Nonzero means warn if #import is used. */
/* Nonzero means warn if #import is used. */
char warn_import;
char warn_import;
/* Nonzero means warn if a macro argument is (or would be)
* stringified with -traditional. */
/* Nonzero means warn if a macro argument is (or would be)
* stringified with -traditional. */
char warn_stringify;
char warn_stringify;
/* Nonzero means turn warnings into errors. */
/* Nonzero means turn warnings into errors. */
char warnings_are_errors;
char warnings_are_errors;
/* Nonzero causes output not to be done,
* but directives such as #define that have side effects
* are still obeyed. */
/* Nonzero causes output not to be done,
* but directives such as #define that have side effects
* are still obeyed. */
char no_output;
char no_output;
/* Nonzero means don't output line number information. */
/* Nonzero means don't output line number information. */
char no_line_commands;
char no_line_commands;
/* Nonzero means output the text in failing conditionals,
inside #failed ... #endfailed. */
char output_conditionals;
char output_conditionals;
/* Nonzero means -I- has been seen,
* so don't look for #include "foo" the source-file directory. */
char ignore_srcdir;
/* Nonzero means -I- has been seen,
* so don't look for #include "foo" the source-file directory. */
char ignore_srcdir;
/* Zero means dollar signs are punctuation.
-$ stores 0; -traditional may store 1. Default is 1 for VMS, 0 otherwise.
@ -415,44 +413,44 @@ extern "C"
#define lose(b) foo (b)
#define test$
lose (test) */
char dollars_in_ident;
char dollars_in_ident;
#ifndef DOLLARS_IN_IDENTIFIERS
#define DOLLARS_IN_IDENTIFIERS 1
#endif
/* Nonzero means try to imitate old fashioned non-ANSI preprocessor. */
char traditional;
/* Nonzero means try to imitate old fashioned non-ANSI preprocessor. */
char traditional;
/* Nonzero means give all the error messages the ANSI standard requires. */
char pedantic;
/* Nonzero means give all the error messages the ANSI standard requires. */
char pedantic;
char done_initializing;
char done_initializing;
struct file_name_list *include; /* First dir to search */
/* First dir to search for <file> */
/* This is the first element to use for #include <...>.
* If it is 0, use the entire chain for such includes. */
struct file_name_list *first_bracket_include;
/* This is the first element in the chain that corresponds to
* a directory of system header files. */
struct file_name_list *first_system_include;
struct file_name_list *last_include; /* Last in chain */
struct file_name_list *include; /* First dir to search */
/* First dir to search for <file> */
/* This is the first element to use for #include <...>.
* If it is 0, use the entire chain for such includes. */
struct file_name_list *first_bracket_include;
/* This is the first element in the chain that corresponds to
* a directory of system header files. */
struct file_name_list *first_system_include;
struct file_name_list *last_include; /* Last in chain */
/* Chain of include directories to put at the end of the other chain. */
struct file_name_list *after_include;
struct file_name_list *last_after_include; /* Last in chain */
/* Chain of include directories to put at the end of the other chain. */
struct file_name_list *after_include;
struct file_name_list *last_after_include; /* Last in chain */
/* Chain to put at the start of the system include files. */
struct file_name_list *before_system;
struct file_name_list *last_before_system; /* Last in chain */
/* Chain to put at the start of the system include files. */
struct file_name_list *before_system;
struct file_name_list *last_before_system; /* Last in chain */
/* Directory prefix that should replace `/usr' in the standard
* include file directories. */
char *include_prefix;
/* Directory prefix that should replace `/usr' in the standard
* include file directories. */
char *include_prefix;
char inhibit_predefs;
char no_standard_includes;
char no_standard_cplusplus_includes;
char inhibit_predefs;
char no_standard_includes;
char no_standard_cplusplus_includes;
/* dump_only means inhibit output of the preprocessed text
and instead output the definitions of all user-defined
@ -461,9 +459,7 @@ extern "C"
dump_definitions means pass the whole definition (plus #define) through
*/
enum
{ dump_none = 0, dump_only, dump_names, dump_definitions }
dump_macros;
enum dump_type dump_macros;
/* Nonzero means pass all #define and #undef directives which we actually
process through to the output stream. This feature is used primarily
@ -471,18 +467,18 @@ extern "C"
debuggers which understand about preprocessor macros, but it may
also be useful with -E to figure out how symbols are defined, and
where they are defined. */
int debug_output;
int debug_output;
/* Pending -D, -U and -A options, in reverse order. */
struct cpp_pending *pending;
/* Pending -D, -U and -A options, in reverse order. */
struct cpp_pending *pending;
/* File name which deps are being written to.
* This is 0 if deps are being written to stdout. */
char *deps_file;
/* File name which deps are being written to.
* This is 0 if deps are being written to stdout. */
char *deps_file;
/* Target-name to write with the dependency information. */
char *deps_target;
};
/* Target-name to write with the dependency information. */
char *deps_target;
};
#define CPP_TRADITIONAL(PFILE) (CPP_OPTIONS(PFILE)-> traditional)
#define CPP_PEDANTIC(PFILE) (CPP_OPTIONS (PFILE)->pedantic)
@ -490,7 +486,7 @@ extern "C"
/* Name under which this program was invoked. */
extern char *progname;
extern char *progname;
/* The structure of a node in the hash table. The hash table
has entries for all tokens defined by #define commands (type T_MACRO),
@ -500,55 +496,46 @@ extern "C"
by a separate piece of code. */
/* different flavors of hash nodes --- also used in keyword table */
enum node_type
{
T_DEFINE = 1, /* the `#define' keyword */
T_INCLUDE, /* the `#include' keyword */
T_INCLUDE_NEXT, /* the `#include_next' keyword */
T_IMPORT, /* the `#import' keyword */
T_IFDEF, /* the `#ifdef' keyword */
T_IFNDEF, /* the `#ifndef' keyword */
T_IF, /* the `#if' keyword */
T_ELSE, /* `#else' */
T_PRAGMA, /* `#pragma' */
T_ELIF, /* `#elif' */
T_UNDEF, /* `#undef' */
T_LINE, /* `#line' */
T_ERROR, /* `#error' */
T_WARNING, /* `#warning' */
T_ENDIF, /* `#endif' */
T_SCCS, /* `#sccs', used on system V. */
T_IDENT, /* `#ident', used on system V. */
T_ASSERT, /* `#assert', taken from system V. */
T_UNASSERT, /* `#unassert', taken from system V. */
T_SPECLINE, /* special symbol `__LINE__' */
T_DATE, /* `__DATE__' */
T_FILE, /* `__FILE__' */
T_BASE_FILE, /* `__BASE_FILE__' */
T_INCLUDE_LEVEL, /* `__INCLUDE_LEVEL__' */
T_VERSION, /* `__VERSION__' */
T_SIZE_TYPE, /* `__SIZE_TYPE__' */
T_PTRDIFF_TYPE, /* `__PTRDIFF_TYPE__' */
T_WCHAR_TYPE, /* `__WCHAR_TYPE__' */
T_USER_LABEL_PREFIX_TYPE, /* `__USER_LABEL_PREFIX__' */
T_REGISTER_PREFIX_TYPE, /* `__REGISTER_PREFIX__' */
T_TIME, /* `__TIME__' */
T_CONST, /* Constant value, used by `__STDC__' */
T_MACRO, /* macro defined by `#define' */
T_DISABLED, /* macro temporarily turned off for rescan */
T_SPEC_DEFINED, /* special `defined' macro for use in #if statements */
T_PCSTRING, /* precompiled string (hashval is KEYDEF *) */
T_UNUSED /* Used for something not defined. */
};
/* Structure returned by create_definition */
typedef struct macrodef MACRODEF;
struct macrodef
{
struct definition *defn;
unsigned char *symnam;
int symlen;
};
enum node_type
{
T_DEFINE = 1, /* the `#define' keyword */
T_INCLUDE, /* the `#include' keyword */
T_INCLUDE_NEXT, /* the `#include_next' keyword */
T_IMPORT, /* the `#import' keyword */
T_IFDEF, /* the `#ifdef' keyword */
T_IFNDEF, /* the `#ifndef' keyword */
T_IF, /* the `#if' keyword */
T_ELSE, /* `#else' */
T_PRAGMA, /* `#pragma' */
T_ELIF, /* `#elif' */
T_UNDEF, /* `#undef' */
T_LINE, /* `#line' */
T_ERROR, /* `#error' */
T_WARNING, /* `#warning' */
T_ENDIF, /* `#endif' */
T_SCCS, /* `#sccs', used on system V. */
T_IDENT, /* `#ident', used on system V. */
T_ASSERT, /* `#assert', taken from system V. */
T_UNASSERT, /* `#unassert', taken from system V. */
T_SPECLINE, /* special symbol `__LINE__' */
T_DATE, /* `__DATE__' */
T_FILE, /* `__FILE__' */
T_BASE_FILE, /* `__BASE_FILE__' */
T_INCLUDE_LEVEL, /* `__INCLUDE_LEVEL__' */
T_VERSION, /* `__VERSION__' */
T_SIZE_TYPE, /* `__SIZE_TYPE__' */
T_PTRDIFF_TYPE, /* `__PTRDIFF_TYPE__' */
T_WCHAR_TYPE, /* `__WCHAR_TYPE__' */
T_USER_LABEL_PREFIX_TYPE, /* `__USER_LABEL_PREFIX__' */
T_REGISTER_PREFIX_TYPE, /* `__REGISTER_PREFIX__' */
T_TIME, /* `__TIME__' */
T_CONST, /* Constant value, used by `__STDC__' */
T_MACRO, /* macro defined by `#define' */
T_DISABLED, /* macro temporarily turned off for rescan */
T_SPEC_DEFINED, /* special `defined' macro for use in #if statements */
T_PCSTRING, /* precompiled string (hashval is KEYDEF *) */
T_UNUSED /* Used for something not defined. */
};
/* Structure allocated for every #define. For a simple replacement
such as
@ -571,87 +558,94 @@ extern "C"
{ (0, 1), (1, 1), (1, 1), ..., (1, 1), NULL }
where (x, y) means (nchars, argno). */
typedef struct definition DEFINITION;
struct definition
{
int nargs;
int length; /* length of expansion string */
int predefined; /* True if the macro was builtin or */
/* came from the command line */
unsigned char *expansion;
int line; /* Line number of definition */
char *file; /* File of definition */
char rest_args; /* Nonzero if last arg. absorbs the rest */
struct reflist
{
struct reflist *next;
char stringify; /* nonzero if this arg was preceded by a
struct reflist
{
struct reflist *next;
char stringify; /* nonzero if this arg was preceded by a
* # operator. */
char raw_before; /* Nonzero if a ## operator before arg. */
char raw_after; /* Nonzero if a ## operator after arg. */
char rest_args; /* Nonzero if this arg. absorbs the rest */
int nchars; /* Number of literal chars to copy before
* this arg occurrence. */
int argno; /* Number of arg to substitute (origin-0) */
}
*pattern;
union
{
/* Names of macro args, concatenated in reverse order
* with comma-space between them.
* The only use of this is that we warn on redefinition
* if this differs between the old and new definitions. */
unsigned char *argnames;
}
args;
};
char raw_before; /* Nonzero if a ## operator before arg. */
char raw_after; /* Nonzero if a ## operator after arg. */
char rest_args; /* Nonzero if this arg. absorbs the rest */
int nchars; /* Number of literal chars to copy before
* this arg occurrence. */
int argno; /* Number of arg to substitute (origin-0) */
};
extern unsigned char is_idchar[256];
typedef struct definition DEFINITION;
struct definition
{
int nargs;
int length; /* length of expansion string */
int predefined; /* True if the macro was builtin or */
/* came from the command line */
unsigned char *expansion;
int line; /* Line number of definition */
const char *file; /* File of definition */
char rest_args; /* Nonzero if last arg. absorbs the rest */
struct reflist *pattern;
union
{
/* Names of macro args, concatenated in reverse order
* with comma-space between them.
* The only use of this is that we warn on redefinition
* if this differs between the old and new definitions. */
unsigned char *argnames;
}
args;
};
extern unsigned char is_idchar[256];
/* Stack of conditionals currently in progress
(including both successful and failing conditionals). */
struct if_stack
{
struct if_stack *next; /* for chaining to the next stack frame */
char *fname; /* copied from input when frame is made */
int lineno; /* similarly */
int if_succeeded; /* true if a leg of this if-group
struct if_stack
{
struct if_stack *next; /* for chaining to the next stack frame */
const char *fname; /* copied from input when frame is made */
int lineno; /* similarly */
int if_succeeded; /* true if a leg of this if-group
* has been passed through rescan */
unsigned char *control_macro; /* For #ifndef at start of file,
* this is the macro name tested. */
enum node_type type; /* type of last directive seen in this group */
};
typedef struct if_stack IF_STACK_FRAME;
unsigned char *control_macro; /* For #ifndef at start of file,
* this is the macro name tested. */
enum node_type type; /* type of last directive seen in this group */
};
typedef struct if_stack IF_STACK_FRAME;
extern void cpp_buf_line_and_col PARAMS((cpp_buffer *, long *, long *));
extern cpp_buffer *cpp_file_buffer PARAMS((cpp_reader *));
extern void cpp_define PARAMS((cpp_reader *, unsigned char *));
extern void cpp_buf_line_and_col(cpp_buffer *, long *, long *);
extern cpp_buffer *cpp_file_buffer(cpp_reader *);
extern void cpp_define(cpp_reader *, unsigned char *);
extern void cpp_error();
extern void cpp_warning();
extern void cpp_pedwarn();
extern void cpp_error_with_line();
extern void cpp_pedwarn_with_line();
extern void cpp_pedwarn_with_file_and_line();
extern void fatal();
extern void cpp_error_from_errno();
extern void cpp_perror_with_name();
extern void cpp_pfatal_with_name();
extern void cpp_error(cpp_reader * pfile, const char *msg, ...);
extern void cpp_warning(cpp_reader * pfile, const char *msg, ...);
extern void cpp_pedwarn(cpp_reader * pfile, const char *msg, ...);
extern void cpp_fatal(const char *msg, ...);
extern void cpp_file_line_for_message(cpp_reader * pfile,
const char *filename, int line,
int column);
extern void cpp_perror_with_name(cpp_reader * pfile, const char *name);
extern void cpp_pfatal_with_name(cpp_reader * pfile, const char *name);
extern void cpp_message(cpp_reader * pfile, int is_error,
const char *msg, ...);
extern void cpp_message_v(cpp_reader * pfile, int is_error,
const char *msg, va_list args);
extern void cpp_grow_buffer PARAMS((cpp_reader *, long));
extern int cpp_parse_escape PARAMS((cpp_reader *, char **));
extern cpp_buffer *cpp_push_buffer
PARAMS((cpp_reader *, unsigned char *, long));
extern cpp_buffer *cpp_pop_buffer PARAMS((cpp_reader *));
extern void cpp_grow_buffer(cpp_reader * pfile, long n);
extern int cpp_parse_escape(cpp_reader * pfile, char **string_ptr);
extern cpp_hashnode *cpp_lookup PARAMS((cpp_reader *, const unsigned char *,
int, int));
void cpp_print_containing_files(cpp_reader * pfile);
HOST_WIDE_INT cpp_parse_expr(cpp_reader * pfile);
void skip_rest_of_line(cpp_reader * pfile);
void init_parse_file(cpp_reader * pfile);
void init_parse_options(struct cpp_options *opts);
int push_parse_file(cpp_reader * pfile, const char *fname);
void cpp_finish(cpp_reader * pfile);
int cpp_read_check_assertion(cpp_reader * pfile);
void *xmalloc(unsigned size);
void *xrealloc(void *old, unsigned size);
void *xcalloc(unsigned number, unsigned size);
#ifdef __EMX__
#define PATH_SEPARATOR ';'
#endif
#ifdef __cplusplus
}
#endif

View File

@ -20,31 +20,18 @@
* You are forbidden to forbid anyone else to use, share and improve
* what you give them. Help stamp out software-hoarding! */
#include "header.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "config.h"
extern char *getenv();
#include "cpplib.h"
cpp_reader parse_in;
cpp_options options;
/* More 'friendly' abort that prints the line and file.
* config.h can #define abort fancy_abort if you like that sort of thing. */
void
fancy_abort()
{
fatal("Internal gcc abort.");
}
int
main(argc, argv)
int argc;
char **argv;
main(int argc, char **argv)
{
char *p;
int i;
@ -67,7 +54,7 @@ main(argc, argv)
argi += cpp_handle_options(&parse_in, argc - argi, argv + argi);
if (argi < argc)
fatal("Invalid option `%s'", argv[argi]);
cpp_fatal("Invalid option `%s'", argv[argi]);
parse_in.show_column = 1;
i = push_parse_file(&parse_in, opts->in_fname);

View File

@ -1,82 +0,0 @@
/*
* declares.h
* This is a file with some declarations in it to get everyone to shut up :)
* --Mandrake
*/
#include "cpplib.h"
#ifndef HOST_BITS_PER_WIDE_INT
#if HOST_BITS_PER_LONG > HOST_BITS_PER_INT
#define HOST_BITS_PER_WIDE_INT HOST_BITS_PER_LONG
#define HOST_WIDE_INT long
#else
#define HOST_BITS_PER_WIDE_INT HOST_BITS_PER_INT
#define HOST_WIDE_INT int
#endif
#endif
struct directive
{
int length;
int (*func) ();
char *name;
enum node_type type;
char command_reads_line;
char traditional_comments;
char pass_thru;
};
void *xmalloc(unsigned size);
void *xrealloc(void *old, unsigned size);
void *xcalloc(unsigned number, unsigned size);
void cpp_print_containing_files(cpp_reader * pfile);
void cpp_file_line_for_message(cpp_reader * pfile,
char *filename, int line,
int column);
void cpp_message(cpp_reader * pfile, int is_error, char *msg,
char *arg1, char *arg2, char *arg3);
void cpp_pfatal_with_name(cpp_reader * pfile, char *name);
struct operation parse_number(cpp_reader * pfile, char *start, int olen);
struct operation cpp_lex(cpp_reader * pfile);
int cpp_parse_escape(cpp_reader * pfile, char **string_ptr);
HOST_WIDE_INT cpp_parse_expr(cpp_reader * pfile);
void cpp_grow_buffer(cpp_reader * pfile, long n);
void cpp_define(cpp_reader * pfile, unsigned char *str);
void init_parse_options(struct cpp_options *opts);
enum cpp_token null_underflow(cpp_reader * pfile);
int null_cleanup(cpp_buffer * pbuf, cpp_reader * pfile);
int macro_cleanup(cpp_buffer * pbuf, cpp_reader * pfile);
int file_cleanup(cpp_buffer * pbuf, cpp_reader * pfile);
void cpp_skip_hspace(cpp_reader * pfile);
void copy_rest_of_line(cpp_reader * pfile);
void skip_rest_of_line(cpp_reader * pfile);
int handle_directive(cpp_reader * pfile);
cpp_buffer *cpp_push_buffer(cpp_reader * pfile, unsigned char *buffer,
long length);
cpp_buffer *cpp_pop_buffer(cpp_reader * pfile);
void cpp_scan_buffer(cpp_reader * pfile);
void cpp_buf_line_and_col(cpp_buffer * pbuf, long *linep,
long *colp);
int hashf(const unsigned char *name, int len, int hashsize);
void cpp_hash_cleanup(cpp_reader * pfile);
int cpp_read_check(cpp_reader * pfile);
int parse_name(cpp_reader * pfile, int c);
void init_parse_file(cpp_reader * pfile);
void init_parse_options(struct cpp_options *opts);
int push_parse_file(cpp_reader * pfile, char *fname);
void cpp_finish(cpp_reader * pfile);
cpp_buffer *cpp_file_buffer(cpp_reader * pfile);
int cpp_read_check_assertion(cpp_reader * pfile);
void fancy_abort(void);
enum cpp_token cpp_get_token(cpp_reader * pfile);
enum cpp_token cpp_get_non_space_token(cpp_reader * pfile);
int cpp_handle_options(cpp_reader * pfile, int argc,
char **argv);
void cpp_print_file_and_line(cpp_reader * pfile);