DO REPEAT: Properly convert lex_syntax_mode to segmenter_mode.
[pspp-builds.git] / src / language / control / repeat.c
index ff1bbc0870915c7d843684b1483c4e934072b674..fb790a3242b0a1ba296f9111b676b014d90d2236 100644 (file)
@@ -26,6 +26,7 @@
 #include "language/lexer/segment.h"
 #include "language/lexer/token.h"
 #include "language/lexer/variable-parser.h"
+#include "libpspp/assertion.h"
 #include "libpspp/cast.h"
 #include "libpspp/hash-functions.h"
 #include "libpspp/hmap.h"
@@ -159,8 +160,8 @@ parse_specification (struct lexer *lexer, struct dictionary *dict,
         first_dv = dv;
       else if (first_dv->n_values != dv->n_values)
        {
-         msg (SE, _("Dummy variable `%s' had %d substitutions, so `%s' must "
-                     "also, but %d were specified."),
+         msg (SE, _("Dummy variable `%s' had %zu substitutions, so `%s' must "
+                     "also, but %zu were specified."),
                first_dv->name, first_dv->n_values,
                dv->name, dv->n_values);
          goto error;
@@ -189,13 +190,13 @@ count_values (struct hmap *dummies)
 }
 
 static void
-do_parse_commands (struct substring s, enum lex_syntax_mode syntax_mode,
+do_parse_commands (struct substring s, enum segmenter_mode mode,
                    struct hmap *dummies,
                    struct string *outputs, size_t n_outputs)
 {
   struct segmenter segmenter;
 
-  segmenter_init (&segmenter, syntax_mode);
+  segmenter_init (&segmenter, mode);
 
   while (!ss_is_empty (s))
     {
@@ -219,7 +220,7 @@ do_parse_commands (struct substring s, enum lex_syntax_mode syntax_mode,
               n += k;
             }
 
-          do_parse_commands (ss_head (s, n), syntax_mode, dummies,
+          do_parse_commands (ss_head (s, n), mode, dummies,
                              outputs, n_outputs);
         }
       else if (type != SEG_END)
@@ -244,6 +245,8 @@ do_parse_commands (struct substring s, enum lex_syntax_mode syntax_mode,
 static bool
 parse_commands (struct lexer *lexer, struct hmap *dummies)
 {
+  enum lex_syntax_mode syntax_mode;
+  enum segmenter_mode mode;
   struct string *outputs;
   struct string input;
   size_t input_len;
@@ -276,8 +279,16 @@ parse_commands (struct lexer *lexer, struct hmap *dummies)
   for (i = 0; i < n_values; i++)
     ds_init_empty (&outputs[i]);
 
-  do_parse_commands (ds_ss (&input), lex_get_syntax_mode (lexer),
-                     dummies, outputs, n_values);
+  syntax_mode = lex_get_syntax_mode (lexer);
+  if (syntax_mode == LEX_SYNTAX_AUTO)
+    mode = SEG_MODE_AUTO;
+  else if (syntax_mode == LEX_SYNTAX_INTERACTIVE)
+    mode = SEG_MODE_INTERACTIVE;
+  else if (syntax_mode == LEX_SYNTAX_BATCH)
+    mode = SEG_MODE_BATCH;
+  else
+    NOT_REACHED ();
+  do_parse_commands (ds_ss (&input), mode, dummies, outputs, n_values);
 
   ds_destroy (&input);
 
@@ -411,7 +422,6 @@ parse_strings (struct lexer *lexer, struct dummy_var *dv)
     {
       if (!lex_force_string (lexer))
        {
-         msg (SE, _("String expected."));
          return false;
        }