From 7b306f528a48fb7f3b1d438f57d59b243b630218 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Fri, 17 Mar 2000 13:04:32 +0000 Subject: [PATCH] * reader.c (copy_at): New function. (copy_guard): Use it. (copy_action): Use it. --- ChangeLog | 6 +++++ src/reader.c | 76 +++++++++++++++++++++++++++--------------------------------- 2 files changed, 40 insertions(+), 42 deletions(-) diff --git a/ChangeLog b/ChangeLog index 022c151..a1274aa 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ 2000-03-17 Akim Demaille + * reader.c (copy_at): New function. + (copy_guard): Use it. + (copy_action): Use it. + +2000-03-17 Akim Demaille + Be kind to translators, save some useless translations. * main.c (banner): New function. diff --git a/src/reader.c b/src/reader.c index 6ec2c0d..115440d 100644 --- a/src/reader.c +++ b/src/reader.c @@ -976,6 +976,36 @@ parse_expect_decl (void) /* that's all of parsing the declaration section */ +/* FINPUT is pointing to a location (i.e., a `@'). Output to FOUTPUT + a reference to this location. STACK_OFFSET is the number of values + in the current rule so far, which says where to find `$0' with + respect to the top of the stack. */ +static inline void +copy_at (FILE *finput, FILE *foutput, int stack_offset) +{ + int c; + + c = getc (finput); + if (c == '$') + { + fprintf (foutput, "yyloc"); + yylsp_needed = 1; + } + else if (isdigit(c) || c == '-') + { + int n; + + ungetc (c, finput); + n = read_signed_integer (finput); + + fprintf (foutput, "yylsp[%d]", n - stack_offset); + yylsp_needed = 1; + } + else + warns (_("@%s is invalid"), printable_version (c)); +} + + /* Get the data type (alternative in the union) of the value for symbol n in rule rule. */ char * @@ -1130,26 +1160,7 @@ copy_guard (symbol_list *rule, int stack_offset) break; case '@': - c = getc (finput); - if (c == '$') - { - fprintf (fguard, "yyloc"); - yylsp_needed = 1; - } - else if (isdigit(c) || c == '-') - { - ungetc (c, finput); - n = read_signed_integer (finput); - c = getc (finput); - fprintf (fguard, "yylsp[%d]", n - stack_offset); - yylsp_needed = 1; - continue; - } - else - { - warns (_("@%s is invalid"), printable_version (c)); - n = 1; - } + copy_at (finput, fguard, stack_offset); break; case EOF: @@ -1167,12 +1178,12 @@ copy_guard (symbol_list *rule, int stack_offset) fprintf(fguard, ";\n break;}"); if (c == '{') - copy_action(rule, stack_offset); + copy_action (rule, stack_offset); else if (c == '=') { c = getc(finput); /* why not skip_white_space -wjh */ if (c == '{') - copy_action(rule, stack_offset); + copy_action (rule, stack_offset); } else ungetc(c, finput); @@ -1289,26 +1300,7 @@ copy_action (symbol_list *rule, int stack_offset) break; case '@': - c = getc (finput); - if (c == '$') - { - fprintf (faction, "yyloc"); - yylsp_needed = 1; - } - else if (isdigit(c) || c == '-') - { - ungetc (c, finput); - n = read_signed_integer (finput); - c = getc (finput); - fprintf (faction, "yylsp[%d]", n - stack_offset); - yylsp_needed = 1; - continue; - } - else - { - warns (_("@%s is invalid"), printable_version (c)); - n = 1; - } + copy_at (finput, faction, stack_offset); break; case EOF: -- 2.7.4