bison-patches
[Top][All Lists]
Advanced

[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





reply via email to

[Prev in Thread] Current Thread [Next in Thread]