Fail on parse error in calc++.

* doc/bison.texinfo (calc++.cc): Propagate failures to the exit
	status.
	* examples/calc++/test ($me, $number, $exit, run): New.
	Use them to propagate errors to the exit status.
This commit is contained in:
Akim Demaille
2008-07-18 10:20:31 +02:00
parent 8a5783fd0c
commit 414c76a461
3 changed files with 45 additions and 4 deletions

View File

@@ -1,3 +1,11 @@
2008-11-03 Akim Demaille <demaille@gostai.com>
Fail on parse error in calc++.
* doc/bison.texinfo (calc++.cc): Propagate failures to the exit
status.
* examples/calc++/test ($me, $number, $exit, run): New.
Use them to propagate errors to the exit status.
2008-11-03 Akim Demaille <demaille@gostai.com>
Don't specify the skeleton twice in the example.

View File

@@ -8713,6 +8713,7 @@ The top level file, @file{calc++.cc}, poses no problem.
int
main (int argc, char *argv[])
@{
int res = 0;
calcxx_driver driver;
for (++argv; argv[0]; ++argv)
if (*argv == std::string ("-p"))
@@ -8721,6 +8722,9 @@ main (int argc, char *argv[])
driver.trace_scanning = true;
else if (!driver.parse (*argv))
std::cout << driver.result << std::endl;
else
res = 1;
return res;
@}
@end example

View File

@@ -5,6 +5,33 @@ test -z "$VERBOSE" && {
set -x
}
me=`basename $0`
# Number of the current test.
number=1
# Exit status of this script.
exit=true
# run EXPECTED-EXIT-STATUS [PARSER-OPTIONS]
# -----------------------------------------
run ()
{
# Effective and expected exit status.
local sta_exp=$1
shift
./calc++ "$@" input
local sta_eff=$?
if test $sta_eff -eq $sta_exp; then
printf "$me: PASS: %2d\n" $number
else
printf "$me: FAIL: %2d (expected status: %d, effective: %d\n" \
$number $sta_exp $sta_eff
exit=false
fi
number=`expr $number + 1`
}
cat >input <<EOF
a := 1
b := 2
@@ -12,20 +39,22 @@ c := 3
d := a + b * c
d
EOF
run 0
run 0 -p
./calc++ input
./calc++ -p input
cat >input <<EOF
a := 1
d := a + b * c
EOF
./calc++ input
run 1 input
cat >input <<EOF
toto := 1
toto
EOF
./calc++ -s input
run 0 -s
rm input
$exit