aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2000-09-10 21:00:16 +0000
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2000-09-10 21:00:16 +0000
commit143982494fade70bb8224d730a0a63ff0b143fa3 (patch)
tree0a4cf5182cb679c9ccd5f1d2036ebed7b102e59a
parent08dc4b85c7b0de804dc8edce346f0df9032093ac (diff)
* c-parse.in: Revert last change.
(init_reswords): Do not enter disabled keywords into the ridpointers table, modulo objc weirdness. (_yylex): Return the canonical spelling for a keyword. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@36303 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/c-parse.in27
2 files changed, 27 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1cbc3173e61..65a02e32b1b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2000-09-10 Richard Henderson <rth@cygnus.com>
+
+ * c-parse.in: Revert last change.
+ (init_reswords): Do not enter disabled keywords into the ridpointers
+ table, modulo objc weirdness.
+ (_yylex): Return the canonical spelling for a keyword.
+
2000-09-10 Philip Blundell <philb@gnu.org>
* config/arm/arm.h (CPP_ISA_SPEC): Don't define `arm' or `thumb'.
diff --git a/gcc/c-parse.in b/gcc/c-parse.in
index 416256df282..5825da4c7da 100644
--- a/gcc/c-parse.in
+++ b/gcc/c-parse.in
@@ -1901,14 +1901,14 @@ stmt:
{ stmt_count++;
emit_line_note ($<filename>-1, $<lineno>0);
c_expand_asm_operands ($4, $6, NULL_TREE, NULL_TREE,
- $2 && C_RID_CODE ($2) == RID_VOLATILE,
+ $2 == ridpointers[(int)RID_VOLATILE],
input_filename, lineno); }
/* This is the case with input operands as well. */
| ASM_KEYWORD maybe_type_qual '(' expr ':' asm_operands ':' asm_operands ')' ';'
{ stmt_count++;
emit_line_note ($<filename>-1, $<lineno>0);
c_expand_asm_operands ($4, $6, $8, NULL_TREE,
- $2 && C_RID_CODE ($2) == RID_VOLATILE,
+ $2 == ridpointers[(int)RID_VOLATILE],
input_filename, lineno); }
/* This is the case with clobbered registers as well. */
| ASM_KEYWORD maybe_type_qual '(' expr ':' asm_operands ':'
@@ -1916,7 +1916,7 @@ stmt:
{ stmt_count++;
emit_line_note ($<filename>-1, $<lineno>0);
c_expand_asm_operands ($4, $6, $8, $10,
- $2 && C_RID_CODE ($2) == RID_VOLATILE,
+ $2 == ridpointers[(int)RID_VOLATILE],
input_filename, lineno); }
| GOTO identifier ';'
{ tree decl;
@@ -3061,8 +3061,7 @@ init_reswords ()
{
unsigned int i;
tree id;
- int mask = (D_YES
- | (doing_objc_thang ? 0 : D_OBJC)
+ int mask = ((doing_objc_thang ? 0 : D_OBJC)
| (flag_isoc99 ? 0 : D_C89)
| (flag_traditional ? D_TRAD : 0)
| (flag_no_asm ? (flag_isoc99 ? D_EXT : D_EXT|D_EXT89) : 0));
@@ -3073,10 +3072,19 @@ init_reswords ()
ridpointers = (tree *) xcalloc ((int) RID_MAX, sizeof (tree));
for (i = 0; i < N_reswords; i++)
{
+ /* If a keyword is disabled, do not enter it into the table
+ and so create a canonical spelling that isn't a keyword. */
+ if (reswords[i].disable & mask)
+ continue;
+
id = get_identifier (reswords[i].word);
C_RID_CODE (id) = reswords[i].rid;
ridpointers [(int) reswords[i].rid] = id;
- if (! (reswords[i].disable & mask))
+
+ /* Objective C does tricky things with enabling and disabling
+ keywords. So these we must not elide in the test above, but
+ wait and not mark them reserved now. */
+ if (! (reswords[i].disable & D_YES))
C_IS_RESERVED_WORD (id) = 1;
}
}
@@ -3219,7 +3227,12 @@ _yylex ()
case CPP_NAME:
if (C_IS_RESERVED_WORD (yylval.ttype))
- return rid_to_yy[C_RID_CODE (yylval.ttype)];
+ {
+ enum rid rid_code = C_RID_CODE (yylval.ttype);
+ /* Return the canonical spelling for this keyword. */
+ yylval.ttype = ridpointers[(int) rid_code];
+ return rid_to_yy[(int) rid_code];
+ }
if (IDENTIFIER_POINTER (yylval.ttype)[0] == '@')
{