summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>2010-06-10 20:23:00 +0000
committerrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>2010-06-10 20:23:00 +0000
commit606cf8b8135748e961585af5572af62a9a0551f1 (patch)
tree91d59b44f33747a188102e54bc43cca44943e99a /gcc
parentac0640e5d6abc7229a7f88c18c415f4c6bcb8764 (diff)
downloadgcc-606cf8b8135748e961585af5572af62a9a0551f1.tar.gz
gcc/
* read-md.h (read_char): Increment read_md_lineno after reading '\n'. (unread_char): Decrement read_md_lineno after putting back '\n'. * read-md.c (fatal_with_file_and_line): Push back any characters that we decide not to add to the context. (read_skip_spaces): Don't increment read_md_lineno here. Avoid using fatal_expected_char in cases where '/' ends a line (for example). (read_name): Don't increment read_md_lineno here. (read_escape): Likewise. (read_quoted_string): Likewise. (read_braced_string): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@160576 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog13
-rw-r--r--gcc/read-md.c32
-rw-r--r--gcc/read-md.h9
3 files changed, 33 insertions, 21 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c40d0a168b0..aeb277f8aef 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,18 @@
2010-06-10 Richard Sandiford <rdsandiford@googlemail.com>
+ * read-md.h (read_char): Increment read_md_lineno after reading '\n'.
+ (unread_char): Decrement read_md_lineno after putting back '\n'.
+ * read-md.c (fatal_with_file_and_line): Push back any characters
+ that we decide not to add to the context.
+ (read_skip_spaces): Don't increment read_md_lineno here. Avoid using
+ fatal_expected_char in cases where '/' ends a line (for example).
+ (read_name): Don't increment read_md_lineno here.
+ (read_escape): Likewise.
+ (read_quoted_string): Likewise.
+ (read_braced_string): Likewise.
+
+2010-06-10 Richard Sandiford <rdsandiford@googlemail.com>
+
* Makefile.in (READ_MD_H): Add $(HASHTAB_H).
(build/genconstants.o): Depend on $(READ_MD_H) gensupport.h.
* genconstants.c: Include read-md.h.
diff --git a/gcc/read-md.c b/gcc/read-md.c
index 07882aa240d..140292189fb 100644
--- a/gcc/read-md.c
+++ b/gcc/read-md.c
@@ -259,7 +259,10 @@ fatal_with_file_and_line (const char *msg, ...)
if (c == EOF)
break;
if (c == '\r' || c == '\n')
- break;
+ {
+ unread_char (c);
+ break;
+ }
context[i] = c;
}
context[i] = '\0';
@@ -298,18 +301,13 @@ read_skip_spaces (void)
c = read_char ();
switch (c)
{
- case '\n':
- read_md_lineno++;
- break;
-
- case ' ': case '\t': case '\f': case '\r':
+ case ' ': case '\t': case '\f': case '\r': case '\n':
break;
case ';':
do
c = read_char ();
while (c != '\n' && c != EOF);
- read_md_lineno++;
break;
case '/':
@@ -317,14 +315,15 @@ read_skip_spaces (void)
int prevc;
c = read_char ();
if (c != '*')
- fatal_expected_char ('*', c);
+ {
+ unread_char (c);
+ fatal_with_file_and_line ("stray '/' in file");
+ }
prevc = 0;
while ((c = read_char ()) && c != EOF)
{
- if (c == '\n')
- read_md_lineno++;
- else if (prevc == '*' && c == '/')
+ if (prevc == '*' && c == '/')
break;
prevc = c;
}
@@ -370,8 +369,6 @@ read_name (struct md_name *name)
if (i == 0)
fatal_with_file_and_line ("missing name or number");
- if (c == '\n')
- read_md_lineno++;
name->buffer[i] = 0;
name->string = name->buffer;
@@ -406,7 +403,6 @@ read_escape (void)
{
/* Backslash-newline is replaced by nothing, as in C. */
case '\n':
- read_md_lineno++;
return;
/* \" \' \\ are replaced by the second character. */
@@ -458,9 +454,7 @@ read_quoted_string (void)
while (1)
{
c = read_char (); /* Read the string */
- if (c == '\n')
- read_md_lineno++;
- else if (c == '\\')
+ if (c == '\\')
{
read_escape ();
continue;
@@ -491,9 +485,7 @@ read_braced_string (void)
{
c = read_char (); /* Read the string */
- if (c == '\n')
- read_md_lineno++;
- else if (c == '{')
+ if (c == '{')
brace_depth++;
else if (c == '}')
brace_depth--;
diff --git a/gcc/read-md.h b/gcc/read-md.h
index 2edd3ce4c21..0ebebde057d 100644
--- a/gcc/read-md.h
+++ b/gcc/read-md.h
@@ -51,7 +51,12 @@ extern struct obstack string_obstack;
static inline int
read_char (void)
{
- return getc (read_md_file);
+ int ch;
+
+ ch = getc (read_md_file);
+ if (ch == '\n')
+ read_md_lineno++;
+ return ch;
}
/* Put back CH, which was the last character read from the MD file. */
@@ -59,6 +64,8 @@ read_char (void)
static inline void
unread_char (int ch)
{
+ if (ch == '\n')
+ read_md_lineno--;
ungetc (ch, read_md_file);
}