m4-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: format and eval


From: Eric Blake
Subject: Re: format and eval
Date: Tue, 09 Jan 2007 07:21:35 -0700
User-agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.9) Gecko/20061207 Thunderbird/1.5.0.9 Mnenhy/0.7.4.666

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

According to Eric Blake on 1/6/2007 12:52 PM:
> Part 2.  Add >>> (Java's unsigned right shift, since eval is always signed
> math), ?: and , to head's eval, and forward port all improvements from the
> branch.

Part 3.  Add some documentation examples for mpeval.  Also, slightly
unrelated other than the fact that I used it in part 2 for deciding when
?: is valid, consolidate no_gnu_extensions and posixly_correct into the
same bit, since they were always the same value.

2007-01-09  Eric Blake  <address@hidden>

        * doc/m4.texinfo (Mpeval): Add tests.
        * tests/testsuite.at (AT_CHECK_GMP): New filter, factored from...
        * tests/builtins.at (gmp): ...here.  Rename test to...
        (mpeval): ...this.
        * tests/generate.awk (new_test): Filter out mpeval tests when gmp
        is not available.
        * m4/m4module.h (m4_get_no_gnu_extensions_opt): Merge
        no_gnu_extensions with posixly_correct_opt, since they were set in
        sync.
        * m4/m4private.h (struct m4): Remove no_gnu_extensions.
        * src/main.c (main): Update caller.
        * src/freeze.c (reload_frozen_state): Likewise.
        * modules/m4.c (m4wrap): Likewise.

- --
Don't work too hard, make some time for fun as well!

Eric Blake             address@hidden
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (Cygwin)
Comment: Public key at home.comcast.net/~ericblake/eblake.gpg
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFFo6Tu84KuGfSFAYARAvmoAKDDtK50Z54VXcNQmzxp/L2ngJAp9wCgs0Db
UOZvI6mFJcwJrNorRSEumqI=
=CeBJ
-----END PGP SIGNATURE-----
Index: doc/m4.texinfo
===================================================================
RCS file: /sources/m4/m4/doc/m4.texinfo,v
retrieving revision 1.90
diff -u -p -r1.90 m4.texinfo
--- doc/m4.texinfo      9 Jan 2007 05:10:19 -0000       1.90
+++ doc/m4.texinfo      9 Jan 2007 14:15:10 -0000
@@ -1266,9 +1266,9 @@ call is not triggered.  This solves the 
 specific provision.
 
 @comment FIXME - The feature of blind macros is incompatible with
address@hidden @acronym{POSIX} and @comment traditional implementations.
address@hidden Should we  suppress it with the @comment @option{--traditional}
address@hidden or @option{-G} command line option?
address@hidden @acronym{POSIX} and traditional implementations.  Should we
address@hidden suppress it with the @option{--traditional} or @option{-G}
address@hidden command line option?
 
 @example
 $ @kbd{m4}
@@ -6059,6 +6059,17 @@ of any length.
 The macro @code{mpeval} is recognized only with parameters.
 @end deffn
 
+For the most part, using @code{mpeval} is similar to using @code{eval}:
+
address@hidden options: -m mpeval
address@hidden
+$ @kbd{m4 -m mpeval}
+mpeval(`(1 << 70) + 2 ** 68 * 3', `16')
address@hidden
+`0r24:'mpeval(`0r36:zYx', `24', `5')
address@hidden:038m9
address@hidden example
+
 The ratio operator, @samp{\}, is provided with the same precedence as
 division, and rationally divides two numbers and canonicalizes the
 result, whereas the division operator @samp{/} always returns the
@@ -6077,8 +6088,22 @@ value of the argument that ended evaluat
 even in @acronym{POSIX} mode, since @code{mpeval} does not have to
 conform to the @acronym{POSIX} rules for @code{eval}.
 
address@hidden fixme - need some examples, but conditional on whether modules
address@hidden and mpeval are both supported
address@hidden options: -m mpeval
address@hidden
+$ @kbd{m4 -m mpeval}
+mpeval(`2 / 4')
address@hidden
+mpeval(`2 \ 4')
address@hidden
+mpeval(`2 || 3')
address@hidden
+mpeval(`1 && 3')
address@hidden
+mpeval(`-1 >> 1')
address@hidden
+mpeval(`-1 >>> 1')
address@hidden
address@hidden example
 
 @node Shell commands
 @chapter Macros for running shell commands
Index: m4/m4module.h
===================================================================
RCS file: /sources/m4/m4/m4/m4module.h,v
retrieving revision 1.103
diff -u -p -r1.103 m4module.h
--- m4/m4module.h       6 Jan 2007 19:56:53 -0000       1.103
+++ m4/m4module.h       9 Jan 2007 14:15:10 -0000
@@ -142,7 +142,6 @@ extern void         m4_delete       (m4 *);
        M4FIELD(m4_obstack,        trace_messages, trace_messages)      \
        M4FIELD(int,               exit_status,    exit_status)         \
        M4FIELD(int,    current_diversion,         current_diversion)   \
-       M4FIELD(bool,   no_gnu_extensions_opt,     no_gnu_extensions)   \
        M4FIELD(size_t, nesting_limit_opt,         nesting_limit)       \
        M4FIELD(int,    debug_level_opt,           debug_level)         \
        M4FIELD(size_t, max_debug_arg_length_opt,  max_debug_arg_length)\
Index: m4/m4private.h
===================================================================
RCS file: /sources/m4/m4/m4/m4private.h,v
retrieving revision 1.75
diff -u -p -r1.75 m4private.h
--- m4/m4private.h      6 Jan 2007 19:56:54 -0000       1.75
+++ m4/m4private.h      9 Jan 2007 14:15:10 -0000
@@ -64,7 +64,6 @@ struct m4 {
   int          current_diversion;      /* Current output diversion.  */
 
   /* Option flags  (set in src/main.c).  */
-  bool         no_gnu_extensions;              /* -G */
   size_t       nesting_limit;                  /* -L */
   int          debug_level;                    /* -d */
   size_t       max_debug_arg_length;           /* -l */
@@ -80,7 +79,7 @@ struct m4 {
 #define M4_OPT_DISCARD_COMMENTS_BIT    (1 << 2) /* -c */
 #define M4_OPT_INTERACTIVE_BIT         (1 << 3) /* -e */
 #define M4_OPT_SYNCOUTPUT_BIT          (1 << 4) /* -s */
-#define M4_OPT_POSIXLY_CORRECT_BIT     (1 << 5) /* POSIXLY_CORRECT */
+#define M4_OPT_POSIXLY_CORRECT_BIT     (1 << 5) /* -G/POSIXLY_CORRECT */
 #define M4_OPT_FATAL_WARN_BIT          (1 << 6) /* -E */
 #define M4_OPT_SAFER_BIT               (1 << 7) /* --safer */
 
@@ -105,8 +104,6 @@ struct m4 {
 #  define m4_set_exit_status(C, V)             ((C)->exit_status = (V))
 #  define m4_get_current_diversion(C)          ((C)->current_diversion)
 #  define m4_set_current_diversion(C, V)       ((C)->current_diversion = (V))
-#  define m4_get_no_gnu_extensions_opt(C)      ((C)->no_gnu_extensions)
-#  define m4_set_no_gnu_extensions_opt(C, V)   ((C)->no_gnu_extensions = (V))
 #  define m4_get_nesting_limit_opt(C)          ((C)->nesting_limit)
 #  define m4_set_nesting_limit_opt(C, V)       ((C)->nesting_limit = (V))
 #  define m4_get_debug_level_opt(C)            ((C)->debug_level)
Index: m4/path.c
===================================================================
RCS file: /sources/m4/m4/m4/path.c,v
retrieving revision 1.23
diff -u -p -r1.23 path.c
--- m4/path.c   9 Oct 2006 21:06:33 -0000       1.23
+++ m4/path.c   9 Jan 2007 14:15:10 -0000
@@ -1,6 +1,6 @@
 /* GNU m4 -- A simple macro processor
 
-   Copyright (C) 1989, 1990, 1991, 1992, 1993, 1998, 2004, 2006
+   Copyright (C) 1989, 1990, 1991, 1992, 1993, 1998, 2004, 2006, 2007
    Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
@@ -102,7 +102,7 @@ m4_include_env_init (m4 *context)
 {
   char *m4path;
 
-  if (m4_get_no_gnu_extensions_opt (context))
+  if (m4_get_posixly_correct_opt (context))
     return;
 
   m4path = getenv ("M4PATH");
@@ -115,7 +115,7 @@ m4_include_env_init (m4 *context)
 void
 m4_add_include_directory (m4 *context, const char *dir, bool prepend)
 {
-  if (m4_get_no_gnu_extensions_opt (context))
+  if (m4_get_posixly_correct_opt (context))
     return;
 
   search_path_add (m4__get_search_path (context), dir, prepend);
@@ -153,7 +153,7 @@ m4_path_search (m4 *context, const char 
 
   /* If file is absolute, or if we are not searching a path, a single
      lookup will do the trick.  */
-  if (IS_ABSOLUTE_FILE_NAME (file) || m4_get_no_gnu_extensions_opt (context))
+  if (IS_ABSOLUTE_FILE_NAME (file) || m4_get_posixly_correct_opt (context))
     {
       fp = fopen (file, "r");
       if (fp != NULL)
Index: modules/m4.c
===================================================================
RCS file: /sources/m4/m4/modules/m4.c,v
retrieving revision 1.100
diff -u -p -r1.100 m4.c
--- modules/m4.c        6 Jan 2007 19:56:54 -0000       1.100
+++ modules/m4.c        9 Jan 2007 14:15:10 -0000
@@ -873,7 +873,7 @@ M4BUILTIN_HANDLER (m4exit)
 M4BUILTIN_HANDLER (m4wrap)
 {
   assert (obstack_object_size (obs) == 0);
-  if (m4_get_no_gnu_extensions_opt (context))
+  if (m4_get_posixly_correct_opt (context))
     m4_shipout_string (context, obs, M4ARG (1), 0, false);
   else
     m4_dump_args (context, obs, argc, argv, " ", false);
Index: src/freeze.c
===================================================================
RCS file: /sources/m4/m4/src/freeze.c,v
retrieving revision 1.57
diff -u -p -r1.57 freeze.c
--- src/freeze.c        23 Dec 2006 00:02:21 -0000      1.57
+++ src/freeze.c        9 Jan 2007 14:15:10 -0000
@@ -1,5 +1,5 @@
 /* GNU m4 -- A simple macro processor
-   Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 2004, 2005, 2006
+   Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 2004, 2005, 2006, 2007
    Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
@@ -462,7 +462,7 @@ reload_frozen_state (m4 *context, const 
     case 1:
       {
        m4__module_open (context, "m4", NULL);
-       if (m4_get_no_gnu_extensions_opt (context))
+       if (m4_get_posixly_correct_opt (context))
          m4__module_open (context, "traditional", NULL);
        else
          m4__module_open (context, "gnu", NULL);
Index: src/main.c
===================================================================
RCS file: /sources/m4/m4/src/main.c,v
retrieving revision 1.106
diff -u -p -r1.106 main.c
--- src/main.c  6 Jan 2007 19:56:54 -0000       1.106
+++ src/main.c  9 Jan 2007 14:15:10 -0000
@@ -364,7 +364,6 @@ main (int argc, char *const *argv, char 
 
   if (getenv ("POSIXLY_CORRECT"))
     {
-      m4_set_no_gnu_extensions_opt (context, true);
       m4_set_posixly_correct_opt (context, true);
       m4_set_suppress_warnings_opt (context, true);
     }
@@ -469,7 +468,6 @@ main (int argc, char *const *argv, char 
        break;
 
       case 'G':
-       m4_set_no_gnu_extensions_opt (context, true);
        m4_set_posixly_correct_opt (context, true);
        break;
 
@@ -546,7 +544,6 @@ main (int argc, char *const *argv, char 
        break;
 
       case 'g':
-       m4_set_no_gnu_extensions_opt (context, false);
        m4_set_posixly_correct_opt (context, false);
        break;
 
@@ -622,7 +619,7 @@ main (int argc, char *const *argv, char 
   else
     {
       m4_module_load (context, "m4", 0);
-      if (m4_get_no_gnu_extensions_opt (context))
+      if (m4_get_posixly_correct_opt (context))
        m4_module_load (context, "traditional", 0);
       else
        m4_module_load (context, "gnu", 0);
Index: tests/builtins.at
===================================================================
RCS file: /sources/m4/m4/tests/builtins.at,v
retrieving revision 1.35
diff -u -p -r1.35 builtins.at
--- tests/builtins.at   16 Nov 2006 14:42:38 -0000      1.35
+++ tests/builtins.at   9 Jan 2007 14:15:10 -0000
@@ -1,5 +1,5 @@
 # Hand crafted tests for GNU M4.                               -*- Autotest -*-
-# Copyright (C) 2001, 2006 Free Software Foundation, Inc.
+# Copyright (C) 2001, 2006, 2007 Free Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -320,140 +320,6 @@ AT_CLEANUP
 
 
 
-## --- ##
-## gmp ##
-## --- ##
-
-AT_SETUP([gmp])
-AT_CHECK_DYNAMIC_MODULE
-
-# cannot perform test without --with-gmp
-AT_CHECK([test "$USE_GMP" = yes || exit 77])
-
-AT_DATA([[in]],
-[[divert(-1)
-# forloop(i, from, to, stmt)
-
-define(`forloop', `pushdef(`$1', `$2')_forloop(`$1', `$2', `$3', 
`$4')popdef(`$1')')
-define(`_forloop',
-       `$4`'ifelse($1, `$3', ,
-                        `define(`$1', incr($1))_forloop(`$1', `$2', `$3', 
`$4')')')
-divert
-forloop(`x', 1, 100, `2**x = mpeval(2**x)
-')
-]])
-
-AT_DATA([[expout]],
-[[
-2**1 = 2
-2**2 = 4
-2**3 = 8
-2**4 = 16
-2**5 = 32
-2**6 = 64
-2**7 = 128
-2**8 = 256
-2**9 = 512
-2**10 = 1024
-2**11 = 2048
-2**12 = 4096
-2**13 = 8192
-2**14 = 16384
-2**15 = 32768
-2**16 = 65536
-2**17 = 131072
-2**18 = 262144
-2**19 = 524288
-2**20 = 1048576
-2**21 = 2097152
-2**22 = 4194304
-2**23 = 8388608
-2**24 = 16777216
-2**25 = 33554432
-2**26 = 67108864
-2**27 = 134217728
-2**28 = 268435456
-2**29 = 536870912
-2**30 = 1073741824
-2**31 = 2147483648
-2**32 = 4294967296
-2**33 = 8589934592
-2**34 = 17179869184
-2**35 = 34359738368
-2**36 = 68719476736
-2**37 = 137438953472
-2**38 = 274877906944
-2**39 = 549755813888
-2**40 = 1099511627776
-2**41 = 2199023255552
-2**42 = 4398046511104
-2**43 = 8796093022208
-2**44 = 17592186044416
-2**45 = 35184372088832
-2**46 = 70368744177664
-2**47 = 140737488355328
-2**48 = 281474976710656
-2**49 = 562949953421312
-2**50 = 1125899906842624
-2**51 = 2251799813685248
-2**52 = 4503599627370496
-2**53 = 9007199254740992
-2**54 = 18014398509481984
-2**55 = 36028797018963968
-2**56 = 72057594037927936
-2**57 = 144115188075855872
-2**58 = 288230376151711744
-2**59 = 576460752303423488
-2**60 = 1152921504606846976
-2**61 = 2305843009213693952
-2**62 = 4611686018427387904
-2**63 = 9223372036854775808
-2**64 = 18446744073709551616
-2**65 = 36893488147419103232
-2**66 = 73786976294838206464
-2**67 = 147573952589676412928
-2**68 = 295147905179352825856
-2**69 = 590295810358705651712
-2**70 = 1180591620717411303424
-2**71 = 2361183241434822606848
-2**72 = 4722366482869645213696
-2**73 = 9444732965739290427392
-2**74 = 18889465931478580854784
-2**75 = 37778931862957161709568
-2**76 = 75557863725914323419136
-2**77 = 151115727451828646838272
-2**78 = 302231454903657293676544
-2**79 = 604462909807314587353088
-2**80 = 1208925819614629174706176
-2**81 = 2417851639229258349412352
-2**82 = 4835703278458516698824704
-2**83 = 9671406556917033397649408
-2**84 = 19342813113834066795298816
-2**85 = 38685626227668133590597632
-2**86 = 77371252455336267181195264
-2**87 = 154742504910672534362390528
-2**88 = 309485009821345068724781056
-2**89 = 618970019642690137449562112
-2**90 = 1237940039285380274899124224
-2**91 = 2475880078570760549798248448
-2**92 = 4951760157141521099596496896
-2**93 = 9903520314283042199192993792
-2**94 = 19807040628566084398385987584
-2**95 = 39614081257132168796771975168
-2**96 = 79228162514264337593543950336
-2**97 = 158456325028528675187087900672
-2**98 = 316912650057057350374175801344
-2**99 = 633825300114114700748351602688
-2**100 = 1267650600228229401496703205376
-
-]])
-
-AT_CHECK_M4([-m mpeval in], 0, expout)
-
-AT_CLEANUP
-
-
-
 ## ------- ##
 ## include ##
 ## ------- ##
@@ -630,6 +496,138 @@ AT_CHECK([cat stdout], [0], [expout])
 AT_CLEANUP
 
 
+## ------ ##
+## mpeval ##
+## ------ ##
+
+AT_SETUP([mpeval])
+AT_CHECK_DYNAMIC_MODULE
+AT_CHECK_GMP
+
+AT_DATA([[in]],
+[[divert(-1)
+# forloop(i, from, to, stmt)
+
+define(`forloop', `pushdef(`$1', `$2')_forloop(`$1', `$2', `$3', 
`$4')popdef(`$1')')
+define(`_forloop',
+       `$4`'ifelse($1, `$3', ,
+                        `define(`$1', incr($1))_forloop(`$1', `$2', `$3', 
`$4')')')
+divert
+forloop(`x', 1, 100, `2**x = mpeval(2**x)
+')
+]])
+
+AT_DATA([[expout]],
+[[
+2**1 = 2
+2**2 = 4
+2**3 = 8
+2**4 = 16
+2**5 = 32
+2**6 = 64
+2**7 = 128
+2**8 = 256
+2**9 = 512
+2**10 = 1024
+2**11 = 2048
+2**12 = 4096
+2**13 = 8192
+2**14 = 16384
+2**15 = 32768
+2**16 = 65536
+2**17 = 131072
+2**18 = 262144
+2**19 = 524288
+2**20 = 1048576
+2**21 = 2097152
+2**22 = 4194304
+2**23 = 8388608
+2**24 = 16777216
+2**25 = 33554432
+2**26 = 67108864
+2**27 = 134217728
+2**28 = 268435456
+2**29 = 536870912
+2**30 = 1073741824
+2**31 = 2147483648
+2**32 = 4294967296
+2**33 = 8589934592
+2**34 = 17179869184
+2**35 = 34359738368
+2**36 = 68719476736
+2**37 = 137438953472
+2**38 = 274877906944
+2**39 = 549755813888
+2**40 = 1099511627776
+2**41 = 2199023255552
+2**42 = 4398046511104
+2**43 = 8796093022208
+2**44 = 17592186044416
+2**45 = 35184372088832
+2**46 = 70368744177664
+2**47 = 140737488355328
+2**48 = 281474976710656
+2**49 = 562949953421312
+2**50 = 1125899906842624
+2**51 = 2251799813685248
+2**52 = 4503599627370496
+2**53 = 9007199254740992
+2**54 = 18014398509481984
+2**55 = 36028797018963968
+2**56 = 72057594037927936
+2**57 = 144115188075855872
+2**58 = 288230376151711744
+2**59 = 576460752303423488
+2**60 = 1152921504606846976
+2**61 = 2305843009213693952
+2**62 = 4611686018427387904
+2**63 = 9223372036854775808
+2**64 = 18446744073709551616
+2**65 = 36893488147419103232
+2**66 = 73786976294838206464
+2**67 = 147573952589676412928
+2**68 = 295147905179352825856
+2**69 = 590295810358705651712
+2**70 = 1180591620717411303424
+2**71 = 2361183241434822606848
+2**72 = 4722366482869645213696
+2**73 = 9444732965739290427392
+2**74 = 18889465931478580854784
+2**75 = 37778931862957161709568
+2**76 = 75557863725914323419136
+2**77 = 151115727451828646838272
+2**78 = 302231454903657293676544
+2**79 = 604462909807314587353088
+2**80 = 1208925819614629174706176
+2**81 = 2417851639229258349412352
+2**82 = 4835703278458516698824704
+2**83 = 9671406556917033397649408
+2**84 = 19342813113834066795298816
+2**85 = 38685626227668133590597632
+2**86 = 77371252455336267181195264
+2**87 = 154742504910672534362390528
+2**88 = 309485009821345068724781056
+2**89 = 618970019642690137449562112
+2**90 = 1237940039285380274899124224
+2**91 = 2475880078570760549798248448
+2**92 = 4951760157141521099596496896
+2**93 = 9903520314283042199192993792
+2**94 = 19807040628566084398385987584
+2**95 = 39614081257132168796771975168
+2**96 = 79228162514264337593543950336
+2**97 = 158456325028528675187087900672
+2**98 = 316912650057057350374175801344
+2**99 = 633825300114114700748351602688
+2**100 = 1267650600228229401496703205376
+
+]])
+
+AT_CHECK_M4([-m mpeval in], 0, expout)
+
+AT_CLEANUP
+
+
+
 ## ----------- ##
 ## multiquotes ##
 ## ----------- ##
Index: tests/generate.awk
===================================================================
RCS file: /sources/m4/m4/tests/generate.awk,v
retrieving revision 1.24
diff -u -p -r1.24 generate.awk
--- tests/generate.awk  8 Nov 2006 19:06:00 -0000       1.24
+++ tests/generate.awk  9 Jan 2007 14:15:10 -0000
@@ -1,7 +1,7 @@
 # Extract all examples from the manual source.            -*- AWK -*-
 
 # This file is part of GNU M4
-# Copyright (C) 1992, 2000, 2001, 2006 Free Software Foundation, Inc.
+# Copyright (C) 1992, 2000, 2001, 2006, 2007 Free Software Foundation, Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -172,6 +172,8 @@ function new_test(input, status, output,
 
   if (options ~ /-m/)
     printf ("AT_CHECK_DYNAMIC_MODULE\n");
+  if (options ~ /-m mpeval/)
+    printf ("AT_CHECK_GMP\n");
   if (xfail == 1)
     printf ("AT_XFAIL_IF([:])\n");
 
Index: tests/testsuite.at
===================================================================
RCS file: /sources/m4/m4/tests/testsuite.at,v
retrieving revision 1.26
diff -u -p -r1.26 testsuite.at
--- tests/testsuite.at  6 Oct 2006 18:24:32 -0000       1.26
+++ tests/testsuite.at  9 Jan 2007 14:15:10 -0000
@@ -1,7 +1,7 @@
 # Process with autom4te to create an -*- Autotest -*- test suite.
 
 # Test suite for GNU M4.
-# Copyright (C) 2001, 2006 Free Software Foundation, Inc.
+# Copyright (C) 2001, 2006, 2007 Free Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -117,6 +117,17 @@ AT_CHECK([if test "x$DYNAMIC_MODULES" = 
   exit 77
 fi])])
 
+# AT_CHECK_GMP
+# -----------------------
+# Add keyword `gmp' to the test, and skip the test if the use of GMP
+# was disabled at configure time.
+m4_define([AT_CHECK_GMP],
+[AT_KEYWORDS([gmp])
+AT_CHECK([if test "x$USE_GMP" = xno ; then
+  echo libgmp support not detected, skipping this test.
+  exit 77
+fi])])
+
 ## ----------- ##
 ## The suite.  ##
 ## ----------- ##

reply via email to

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