mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-19 09:13:04 +00:00
bistromathic: beware of portability issues with readline
In some cases readline emits a trailing spaces after the last suggestion, which results in errors such as: ``` -( - atan cos exp ln number sin sqrt$ +( - atan cos exp ln number sin sqrt $ ``` Reported by Christopher Nielsen <mascguy@github.com>. <https://trac.macports.org/ticket/59927#comment:48> <https://trac.macports.org/attachment/ticket/59927/bison-3.7.6-test-10.13.test-suite.log> * examples/test (run): Add support for -t. * examples/c/bistromathic/bistromathic.test: Use it.
This commit is contained in:
@@ -306,10 +306,17 @@ esac
|
|||||||
sed -e 's/\\t/ /g' >input <<EOF
|
sed -e 's/\\t/ /g' >input <<EOF
|
||||||
(1+\t\t
|
(1+\t\t
|
||||||
EOF
|
EOF
|
||||||
run 0 '> (1+
|
# Nuke the possible trailing white spaces in the effective output.
|
||||||
|
# This is to cope with some readlines that pad all the suggestions
|
||||||
|
# with white spaces (for alignment), including the last one on a line.
|
||||||
|
#
|
||||||
|
# See for instance <https://trac.macports.org/ticket/59927#comment:48>
|
||||||
|
# and its test-suite.log:
|
||||||
|
# <https://trac.macports.org/attachment/ticket/59927/bison-3.7.6-test-10.13.test-suite.log>
|
||||||
|
run -t 0 '> (1+
|
||||||
( - atan cos exp ln number sin sqrt
|
( - atan cos exp ln number sin sqrt
|
||||||
> (1+
|
> (1+
|
||||||
> ''
|
>
|
||||||
err: 1.4: syntax error: expected - or ( or number or function or variable before end of file
|
err: 1.4: syntax error: expected - or ( or number or function or variable before end of file
|
||||||
err: 1 | (1+
|
err: 1 | (1+
|
||||||
err: | ^'
|
err: | ^'
|
||||||
|
|||||||
@@ -91,18 +91,21 @@ skip ()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
# run [-noerr, -n] EXPECTED-EXIT-STATUS EXPECTED-OUTPUT [PARSER-OPTIONS]
|
# run [-n, -noerr, -t] EXPECTED-EXIT-STATUS EXPECTED-OUTPUT [PARSER-OPTIONS]
|
||||||
# ----------------------------------------------------------------------
|
# --------------------------------------------------------------------------
|
||||||
|
# -n: no final end-of-line in expected-output
|
||||||
# -noerr: ignore stderr, otherwise merge it into effective output.
|
# -noerr: ignore stderr, otherwise merge it into effective output.
|
||||||
# -n: not final end-of-line in expected-output
|
# -t: nuke the possible trailing white spaces in the effective output.
|
||||||
run ()
|
run ()
|
||||||
{
|
{
|
||||||
noerr=false
|
|
||||||
echo=echo
|
echo=echo
|
||||||
|
noerr=false
|
||||||
|
rstrip=false
|
||||||
while true; do
|
while true; do
|
||||||
case $1 in
|
case $1 in
|
||||||
(-noerr) noerr=true; shift;;
|
|
||||||
(-n) echo=printf; shift;;
|
(-n) echo=printf; shift;;
|
||||||
|
(-noerr) noerr=true; shift;;
|
||||||
|
(-t) rstrip=true; shift;;
|
||||||
(*) break;;
|
(*) break;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
@@ -129,7 +132,11 @@ run ()
|
|||||||
|
|
||||||
# Combine effective output and error streams.
|
# Combine effective output and error streams.
|
||||||
{
|
{
|
||||||
cat out_eff
|
if $rstrip; then
|
||||||
|
sed -e 's/ *$//g' out_eff
|
||||||
|
else
|
||||||
|
cat out_eff
|
||||||
|
fi
|
||||||
if ! $noerr; then
|
if ! $noerr; then
|
||||||
sed -e 's/^/err: /g' \
|
sed -e 's/^/err: /g' \
|
||||||
-e 's/Reducing stack by rule .* (line .*):/Reducing stack by rule XX (line XXX):/g' \
|
-e 's/Reducing stack by rule .* (line .*):/Reducing stack by rule XX (line XXX):/g' \
|
||||||
|
|||||||
Reference in New Issue
Block a user