diff options
author | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-09-10 21:00:16 +0000 |
---|---|---|
committer | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-09-10 21:00:16 +0000 |
commit | 143982494fade70bb8224d730a0a63ff0b143fa3 (patch) | |
tree | 0a4cf5182cb679c9ccd5f1d2036ebed7b102e59a /gcc/c-parse.in | |
parent | 08dc4b85c7b0de804dc8edce346f0df9032093ac (diff) | |
download | gcc-143982494fade70bb8224d730a0a63ff0b143fa3.tar.gz |
* 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
Diffstat (limited to 'gcc/c-parse.in')
-rw-r--r-- | gcc/c-parse.in | 27 |
1 files changed, 20 insertions, 7 deletions
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] == '@') { |