lexer: New function lex_force_int_range().
[pspp] / src / language / control / repeat.c
index 316ac8fc06db6f5bd85080b2402c7b13da11e4e5..7341f0760bcf48960a01ca3f378cc18f666c9abe 100644 (file)
@@ -210,7 +210,7 @@ do_parse_commands (struct substring s, enum segmenter_mode mode,
       enum segment_type type;
       int n;
 
-      n = segmenter_push (&segmenter, s.string, s.length, &type);
+      n = segmenter_push (&segmenter, s.string, s.length, true, &type);
       assert (n >= 0);
 
       if (type == SEG_DO_REPEAT_COMMAND)
@@ -220,7 +220,7 @@ do_parse_commands (struct substring s, enum segmenter_mode mode,
               int k;
 
               k = segmenter_push (&segmenter, s.string + n, s.length - n,
-                                  &type);
+                                  true, &type);
               if (type != SEG_NEWLINE && type != SEG_DO_REPEAT_COMMAND)
                 break;
 
@@ -275,9 +275,6 @@ parse_commands (struct lexer *lexer, struct hmap *dummies)
       ds_put_byte (&input, '\n');
       lex_get (lexer);
     }
-  if (ds_is_empty (&input))
-    ds_put_byte (&input, '\n');
-  ds_put_byte (&input, '\0');
 
   n_values = count_values (dummies);
   outputs = xmalloc (n_values * sizeof *outputs);
@@ -374,23 +371,20 @@ parse_numbers (struct lexer *lexer, struct dummy_var *dv)
 
       if (lex_next_token (lexer, 1) == T_TO)
         {
-          long int a, b;
-          long int i;
-
           if (!lex_is_integer (lexer))
            {
              msg (SE, _("Ranges may only have integer bounds."));
              return false;
            }
 
-          a = lex_integer (lexer);
+          long a = lex_integer (lexer);
           lex_get (lexer);
           lex_get (lexer);
 
-          if (!lex_force_int (lexer))
+          if (!lex_force_int_range (lexer, NULL, a, LONG_MAX))
             return false;
 
-         b = lex_integer (lexer);
+         long b = lex_integer (lexer);
           if (b < a)
             {
               msg (SE, _("%ld TO %ld is an invalid range."), a, b);
@@ -398,7 +392,7 @@ parse_numbers (struct lexer *lexer, struct dummy_var *dv)
             }
          lex_get (lexer);
 
-          for (i = a; i <= b; i++)
+          for (long i = a; i <= b; i++)
             add_replacement (dv, xasprintf ("%ld", i), &allocated);
         }
       else