X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=src%2Flanguage%2Fcontrol%2Frepeat.c;h=8876c8fb9e2efeb9bbe9a90a5b284616e83d801c;hb=86e6b87d7ad411378c3204fe87504c7e6749be78;hp=c73d02827149290d9af9dd05dbf5992000e2600b;hpb=e0f9210e814d03bc43b6a9b30a402e403d5666b9;p=pspp diff --git a/src/language/control/repeat.c b/src/language/control/repeat.c index c73d028271..8876c8fb9e 100644 --- a/src/language/control/repeat.c +++ b/src/language/control/repeat.c @@ -201,10 +201,7 @@ 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, mode); - + struct segmenter segmenter = segmenter_init (mode, false); while (!ss_is_empty (s)) { enum segment_type type; @@ -252,13 +249,10 @@ do_parse_commands (struct substring s, enum segmenter_mode 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 n_values; char *file_name; - int line_number; bool ok; size_t i; @@ -266,7 +260,7 @@ parse_commands (struct lexer *lexer, struct hmap *dummies) file_name = xstrdup (lex_get_file_name (lexer)); else file_name = NULL; - line_number = lex_get_first_line_number (lexer, 0); + int line_number = lex_ofs_start_point (lexer, lex_ofs (lexer)).line; ds_init_empty (&input); while (lex_is_string (lexer)) @@ -281,16 +275,8 @@ parse_commands (struct lexer *lexer, struct hmap *dummies) for (i = 0; i < n_values; i++) ds_init_empty (&outputs[i]); - 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); + do_parse_commands (ds_ss (&input), lex_get_syntax_mode (lexer), + dummies, outputs, n_values); ds_destroy (&input); @@ -371,23 +357,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); @@ -395,7 +378,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