X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gas%2Fapp.c;h=6b883a1f8a164e232658b1e8c306e45a2e0cfa5e;hb=1924ff7567abf9e1341ae135fb5097bc5f7b76f4;hp=32293360683e3208545e383e5e85b53ea7e99641;hpb=40b365969f7fd035dfa0c6ffe729fd2501b5f11d;p=deliverable%2Fbinutils-gdb.git diff --git a/gas/app.c b/gas/app.c index 3229336068..6b883a1f8a 100644 --- a/gas/app.c +++ b/gas/app.c @@ -1,7 +1,5 @@ /* This is the Assembler Pre-Processor - Copyright 1987, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, - 1999, 2000, 2001, 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 - Free Software Foundation, Inc. + Copyright (C) 1987-2016 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. @@ -160,7 +158,10 @@ do_scrub_begin (int m68k_mri ATTRIBUTE_UNUSED) for (p = line_comment_chars; *p; p++) lex[(unsigned char) *p] = LEX_IS_LINE_COMMENT_START; - for (p = line_separator_chars; *p; p++) +#ifndef tc_line_separator_chars +#define tc_line_separator_chars line_separator_chars +#endif + for (p = tc_line_separator_chars; *p; p++) lex[(unsigned char) *p] = LEX_IS_LINE_SEPARATOR; #ifdef tc_parallel_separator_chars @@ -210,11 +211,11 @@ do_scrub_begin (int m68k_mri ATTRIBUTE_UNUSED) /* Saved state of the scrubber. */ static int state; static int old_state; -static char *out_string; +static const char *out_string; static char out_buf[20]; static int add_newlines; static char *saved_input; -static int saved_input_len; +static size_t saved_input_len; static char input_buffer[32 * 1024]; static const char *mri_state; static char mri_last_ch; @@ -228,11 +229,11 @@ struct app_save { int state; int old_state; - char * out_string; + const char * out_string; char out_buf[sizeof (out_buf)]; int add_newlines; char * saved_input; - int saved_input_len; + size_t saved_input_len; #ifdef TC_M68K int scrub_m68k_mri; #endif @@ -246,9 +247,9 @@ struct app_save char * app_push (void) { - register struct app_save *saved; + struct app_save *saved; - saved = (struct app_save *) xmalloc (sizeof (*saved)); + saved = XNEW (struct app_save); saved->state = state; saved->old_state = old_state; saved->out_string = out_string; @@ -258,7 +259,7 @@ app_push (void) saved->saved_input = NULL; else { - saved->saved_input = (char *) xmalloc (saved_input_len); + saved->saved_input = XNEWVEC (char, saved_input_len); memcpy (saved->saved_input, saved_input, saved_input_len); saved->saved_input_len = saved_input_len; } @@ -275,6 +276,7 @@ app_push (void) state = 0; saved_input = NULL; + add_newlines = 0; return (char *) saved; } @@ -282,7 +284,7 @@ app_push (void) void app_pop (char *arg) { - register struct app_save *saved = (struct app_save *) arg; + struct app_save *saved = (struct app_save *) arg; /* There is no do_scrub_end (). */ state = saved->state; @@ -294,7 +296,7 @@ app_pop (char *arg) saved_input = NULL; else { - gas_assert (saved->saved_input_len <= (int) (sizeof input_buffer)); + gas_assert (saved->saved_input_len <= sizeof (input_buffer)); memcpy (input_buffer, saved->saved_input, saved->saved_input_len); saved_input = input_buffer; saved_input_len = saved->saved_input_len; @@ -350,15 +352,15 @@ process_escape (int ch) machine, and saves its state so that it may return at any point. This is the way the old code used to work. */ -int -do_scrub_chars (int (*get) (char *, int), char *tostart, int tolen) +size_t +do_scrub_chars (size_t (*get) (char *, size_t), char *tostart, size_t tolen) { char *to = tostart; char *toend = tostart + tolen; char *from; char *fromend; - int fromlen; - register int ch, ch2 = 0; + size_t fromlen; + int ch, ch2 = 0; /* Character that started the string we're working on. */ static char quotechar; @@ -547,7 +549,7 @@ do_scrub_chars (int (*get) (char *, int), char *tostart, int tolen) GET and PUT macros. */ { char *s; - int len; + ptrdiff_t len; for (s = from; s < fromend; s++) { @@ -683,7 +685,7 @@ do_scrub_chars (int (*get) (char *, int), char *tostart, int tolen) case 16: /* We have seen an 'a' at the start of a symbol, look for an 'f'. */ ch = GET (); - if (ch == 'f' || ch == 'F') + if (ch == 'f' || ch == 'F') { state = 17; PUT (ch); @@ -693,6 +695,7 @@ do_scrub_chars (int (*get) (char *, int), char *tostart, int tolen) state = 9; break; } + /* Fall through. */ case 17: /* We have seen "af" at the start of a symbol, a ' here is a part of that symbol. */ @@ -1216,9 +1219,16 @@ do_scrub_chars (int (*get) (char *, int), char *tostart, int tolen) while (ch != EOF && !IS_NEWLINE (ch)) ch = GET (); if (ch == EOF) - as_warn (_("end of file in comment; newline inserted")); + { + as_warn (_("end of file in comment; newline inserted")); + PUT ('\n'); + } + else /* IS_NEWLINE (ch) */ + { + /* To process non-zero add_newlines. */ + UNGET (ch); + } state = 0; - PUT ('\n'); break; } /* Looks like `# 123 "filename"' from cpp. */ @@ -1282,7 +1292,7 @@ do_scrub_chars (int (*get) (char *, int), char *tostart, int tolen) #ifdef WARN_COMMENTS if (!found_comment) - as_where (&found_comment_file, &found_comment); + found_comment_file = as_where (&found_comment); #endif do { @@ -1312,8 +1322,8 @@ do_scrub_chars (int (*get) (char *, int), char *tostart, int tolen) else UNGET (quot); } - /* FALL THROUGH */ #endif + /* Fall through. */ case LEX_IS_SYMBOL_COMPONENT: if (state == 10) @@ -1329,12 +1339,12 @@ do_scrub_chars (int (*get) (char *, int), char *tostart, int tolen) #ifdef TC_Z80 /* "af'" is a symbol containing '\''. */ - if (state == 3 && (ch == 'a' || ch == 'A')) + if (state == 3 && (ch == 'a' || ch == 'A')) { state = 16; PUT (ch); ch = GET (); - if (ch == 'f' || ch == 'F') + if (ch == 'f' || ch == 'F') { state = 17; PUT (ch); @@ -1343,7 +1353,7 @@ do_scrub_chars (int (*get) (char *, int), char *tostart, int tolen) else { state = 9; - if (!IS_SYMBOL_COMPONENT (ch)) + if (ch == EOF || !IS_SYMBOL_COMPONENT (ch)) { if (ch != EOF) UNGET (ch); @@ -1365,7 +1375,7 @@ do_scrub_chars (int (*get) (char *, int), char *tostart, int tolen) ) { char *s; - int len; + ptrdiff_t len; for (s = from; s < fromend; s++) {