summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane2024-10-14 19:41:42 +0000
committerTom Lane2024-10-14 19:42:02 +0000
commit9812138593f3e56735d93715a6dc2ed2d392611e (patch)
treee515db3455b43ac2303e140211e7e2380b81f092
parentf244a2bb4c5520fc0271e638598abcbe7c9bc8cf (diff)
ecpg: avoid breaking the IDENT precedence level in two.
Careless string hacking caused parse.pl to transform gram.y's declaration %nonassoc IDENT PARTITION RANGE ROWS ... into %nonassoc IDENT %nonassoc CSTRING PARTITION RANGE ROWS ... It turns out that this has no semantic impact, because the generated preproc.c is exactly the same either way (if you inject a blank line to keep line numbers the same). Nonetheless, given the great emphasis that the commentary in gram.y places on keeping those other keywords at the same precedence level as IDENT, this seems like foolishly risking ecpg behaving differently from the core parser. Adjust the code so that CSTRING is added to the precedence line without breaking it into two lines. Discussion: https://postgr.es/m/[email protected]
-rw-r--r--src/interfaces/ecpg/preproc/parse.pl5
1 files changed, 2 insertions, 3 deletions
diff --git a/src/interfaces/ecpg/preproc/parse.pl b/src/interfaces/ecpg/preproc/parse.pl
index 9ebe4bd7930..d5798e58ee7 100644
--- a/src/interfaces/ecpg/preproc/parse.pl
+++ b/src/interfaces/ecpg/preproc/parse.pl
@@ -289,11 +289,10 @@ sub main
# Accumulate the line in $str.
$str = $str . ' ' . $a;
- # HACK: insert our own %nonassoc line after IDENT.
- # XXX: this seems pretty wrong, IDENT is not last on its line!
+ # Give our token CSTRING the same precedence as IDENT.
if ($a eq 'IDENT' && $arr[0] eq '%nonassoc')
{
- $str = $str . "\n%nonassoc CSTRING";
+ $str = $str . " CSTRING";
}
}
# Save the lightly-processed line in orig_tokens.