[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] Fail on parse error in calc++.
From: |
Akim Demaille |
Subject: |
[PATCH] Fail on parse error in calc++. |
Date: |
Mon, 03 Nov 2008 21:01:09 -0000 |
* 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.
---
ChangeLog | 8 ++++++++
doc/bison.texinfo | 4 ++++
examples/calc++/test | 37 +++++++++++++++++++++++++++++++++----
3 files changed, 45 insertions(+), 4 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 63d6694..c8bb301 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
2008-11-03 Akim Demaille <address@hidden>
+ 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 <address@hidden>
+
Don't specify the skeleton twice in the example.
* examples/calc++/Makefile.am: Don't pass -S to Bison, the grammar
file does what is needed.
diff --git a/doc/bison.texinfo b/doc/bison.texinfo
index 71e9a16..6570c0c 100644
--- a/doc/bison.texinfo
+++ b/doc/bison.texinfo
@@ -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
diff --git a/examples/calc++/test b/examples/calc++/test
index 2f8a045..b6f0942 100755
--- a/examples/calc++/test
+++ b/examples/calc++/test
@@ -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
--
1.6.0.2.588.g3102
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [PATCH] Fail on parse error in calc++.,
Akim Demaille <=