- if (!parse_variables (lexer, dict, &v, &nv, PV_NO_DUPLICATE | PV_APPEND))
- goto done;
- if (!lex_match (lexer, T_EQUALS))
- {
- msg (SE, _("`=' expected after variable list."));
- goto done;
- }
- if (!parse_DATA_LIST_vars (lexer, &new_names, &nn,
- PV_APPEND | PV_NO_SCRATCH | PV_NO_DUPLICATE))
- goto done;
- if (nn != nv)
+ newnames = xmalloc (sizeof *newnames * n_oldvars);
+
+ char *prefix = NULL;
+ int first, last;
+ /* First attempt to parse v1 TO v10 format. */
+ if ((prefix = try_to_sequence (lexer, dict, &first, &last)))
+ {
+ /* These 3 tokens have already been checked in the
+ try_to_sequence function. */
+ lex_get (lexer);
+ lex_get (lexer);
+ lex_get (lexer);
+
+ /* Make sure the new names are suitable. */
+ for (int i = first; i <= last; ++i)
+ {
+ int sz = strlen (prefix) + intlog10 (last) + 1;
+ char *vn = malloc (sz);
+ snprintf (vn, sz, "%s%d", prefix, i);
+
+ if (!check_rename (dict, var_get_name (oldvars[n_newvars]), vn))
+ {
+ free (prefix);
+ goto fail;
+ }
+
+ newnames[i - first] = vn;
+ n_newvars++;
+ }
+ }
+ else
+ while (lex_token (lexer) == T_ID || lex_token (lexer) == T_STRING)
+ {
+ if (n_newvars >= n_oldvars)
+ break;
+ const char *new_name = lex_tokcstr (lexer);
+ if (!relax && ! id_is_plausible (new_name, true))
+ goto fail;
+
+ if (!check_rename (dict, var_get_name (oldvars[n_newvars]), new_name))
+ goto fail;
+ newnames[n_newvars] = strdup (new_name);
+ lex_get (lexer);
+ n_newvars++;
+ }
+ free (prefix);
+
+ if (n_newvars != n_oldvars)