@@@ tvec error return
[mLib] / test / tvec.h
index f6cbcc8..2309edf 100644 (file)
@@ -183,6 +183,7 @@ struct tvec_state {
 #define TVSF_SKIP 1u                   /*   skip this test group */
 #define TVSF_OPEN 2u                   /*   test is open */
 #define TVSF_ACTIVE 4u                 /*   test is active */
+#define TVSF_ERROR 8u                  /*   an error occurred */
 #define TVSF_OUTMASK 0xf0              /*   test outcome */
 #define TVSF_OUTSHIFT 4
   unsigned nrout, nreg;                       /* number of output/total registers */
@@ -202,7 +203,7 @@ struct tvec_state {
 
 /*----- Test descriptions -------------------------------------------------*/
 
-typedef void tvec_hookfn(struct tvec_state */*tv*/);
+typedef int tvec_hookfn(struct tvec_state */*tv*/);
 typedef void tvec_testfn(const struct tvec_reg */*in*/,
                         struct tvec_reg */*out*/,
                         void */*ctx*/);
@@ -221,14 +222,14 @@ extern void PRINTF_LIKE(2, 3)
 extern void tvec_check_v(struct tvec_state */*tv*/,
                         const char */*detail*/, va_list */*ap*/);
 
-extern void tvec_runtest(struct tvec_state */*tv*/);
+extern int tvec_runtest(struct tvec_state */*tv*/);
 
 /*----- Input utilities ---------------------------------------------------*/
 
 extern void tvec_skipspc(struct tvec_state */*tv*/);
 
 #define TVFF_ALLOWANY 1u
-extern void tvec_flushtoeol(struct tvec_state */*tv*/, unsigned /*f*/);
+extern int tvec_flushtoeol(struct tvec_state */*tv*/, unsigned /*f*/);
 
 extern int PRINTF_LIKE(4, 5)
   tvec_readword(struct tvec_state */*tv*/, dstr */*d*/,
@@ -252,9 +253,8 @@ extern void tvec_begin(struct tvec_state */*tv_out*/,
                       struct tvec_output */*o*/);
 extern int tvec_end(struct tvec_state */*tv*/);
 
-extern void tvec_read(struct tvec_state */*tv*/,
-                     const char */*infile*/, FILE */*fp*/);
-
+extern int tvec_read(struct tvec_state */*tv*/,
+                    const char */*infile*/, FILE */*fp*/);
 
 /*----- Benchmarking ------------------------------------------------------*/
 
@@ -273,7 +273,7 @@ extern struct bench_state *tvec_benchstate;
 
 extern int tvec_ensurebench(struct tvec_state */*tv*/,
                            struct bench_state **/*b_out*/);
-extern void tvec_bench(struct tvec_state */*tv*/);
+extern int tvec_bench(struct tvec_state */*tv*/);
 
 /*----- Ad-hoc testing ----------------------------------------------------*/
 
@@ -331,14 +331,14 @@ extern void tvec_parseargs(int /*argc*/, char */*argv*/[],
                           int */*argpos_out*/,
                           const struct tvec_info */*info*/);
 
-extern void tvec_readstdin(struct tvec_state */*tv*/);
-extern void tvec_readfile(struct tvec_state */*tv*/, const char */*file*/);
-extern void tvec_readdflt(struct tvec_state */*tv*/, const char */*file*/);
-extern void tvec_readarg(struct tvec_state */*tv*/, const char */*arg*/);
+extern int tvec_readstdin(struct tvec_state */*tv*/);
+extern int tvec_readfile(struct tvec_state */*tv*/, const char */*file*/);
+extern int tvec_readdflt(struct tvec_state */*tv*/, const char */*file*/);
+extern int tvec_readarg(struct tvec_state */*tv*/, const char */*arg*/);
 
-extern void tvec_readargs(int /*argc*/, char */*argv*/[],
-                         struct tvec_state */*tv*/,
-                         int */*argpos_inout*/, const char */*dflt*/);
+extern int tvec_readargs(int /*argc*/, char */*argv*/[],
+                        struct tvec_state */*tv*/,
+                        int */*argpos_inout*/, const char */*dflt*/);
 
 extern int tvec_main(int /*argc*/, char */*argv*/[],
                     const struct tvec_info */*info*/,
@@ -383,21 +383,21 @@ struct tvec_outops {
   void (*destroy)(struct tvec_output */*o*/);
 };
 
-extern void PRINTF_LIKE(2, 3) NORETURN
+extern int PRINTF_LIKE(2, 3)
   tvec_error(struct tvec_state */*tv*/, const char */*msg*/, ...);
-extern void NORETURN tvec_error_v(struct tvec_state */*tv*/,
-                                 const char */*msg*/, va_list */*ap*/);
+extern int tvec_error_v(struct tvec_state */*tv*/,
+                       const char */*msg*/, va_list */*ap*/);
 
 extern void PRINTF_LIKE(2, 3)
   tvec_notice(struct tvec_state */*tv*/, const char */*msg*/, ...);
 extern void tvec_notice_v(struct tvec_state */*tv*/,
                          const char */*msg*/, va_list */*ap*/);
 
-extern void PRINTF_LIKE(3, 4) NORETURN
+extern int PRINTF_LIKE(3, 4)
   tvec_syntax(struct tvec_state */*tv*/, int /*ch*/,
              const char */*expect*/, ...);
-extern void NORETURN tvec_syntax_v(struct tvec_state */*tv*/, int /*ch*/,
-                                  const char */*expect*/, va_list */*ap*/);
+extern int tvec_syntax_v(struct tvec_state */*tv*/, int /*ch*/,
+                        const char */*expect*/, va_list */*ap*/);
 
 extern void PRINTF_LIKE(2, 3)
   tvec_skipgroup(struct tvec_state */*tv*/, const char */*note*/, ...);
@@ -440,8 +440,8 @@ struct tvec_regty {
               const struct tvec_regdef */*rd*/);
   int (*frombuf)(buf */*b*/, union tvec_regval */*rv*/,
                 const struct tvec_regdef */*rd*/);
-  void (*parse)(union tvec_regval */*rv*/, const struct tvec_regdef */*rd*/,
-               struct tvec_state */*tv*/);
+  int (*parse)(union tvec_regval */*rv*/, const struct tvec_regdef */*rd*/,
+              struct tvec_state */*tv*/);
   void (*dump)(const union tvec_regval */*rv*/,
               const struct tvec_regdef */*rd*/,
               struct tvec_state */*tv*/, unsigned /*style*/);