]> git.saurik.com Git - bison.git/commitdiff
Fail on parse error in calc++.
authorAkim Demaille <demaille@gostai.com>
Fri, 18 Jul 2008 08:20:31 +0000 (10:20 +0200)
committerAkim Demaille <demaille@gostai.com>
Mon, 3 Nov 2008 21:01:01 +0000 (22:01 +0100)
* 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
doc/bison.texinfo
examples/calc++/test

index 63d669442043de86cee501ea16e76dbc198b74b8..c8bb301693b0357d2f688dabee8aa2b7ebdc42f6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
index 71e9a16aaf2b7c0797aaba4993543434c9a66453..6570c0cd4a69d10fc86586957aad861bff340ade 100644 (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
 
index 2f8a0454f9e74021d43202d7eabdcb90e92564ca..b6f0942c722aeedca20749ba6add0edbfe61f76a 100755 (executable)
@@ -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