X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Flexer%2Fvariable-parser.c;h=904ebe755f43104b92c9267fd49a13ac7c6395a6;hb=255b128bd64df42632d2a509bd9436f0163539d6;hp=7f25d8eb685f0be26818df389bb2fef07182db38;hpb=618a58ebb4c59dff83374278e44b7375b3865935;p=pspp-builds.git diff --git a/src/language/lexer/variable-parser.c b/src/language/lexer/variable-parser.c index 7f25d8eb..904ebe75 100644 --- a/src/language/lexer/variable-parser.c +++ b/src/language/lexer/variable-parser.c @@ -164,20 +164,16 @@ add_variable (struct variable ***v, size_t *nv, size_t *mv, (*v)[0]->name, add->name, add->name); else if ((pv_opts & PV_NO_DUPLICATE) && included[idx]) msg (SE, _("Variable %s appears twice in variable list."), add->name); - else + else if ((pv_opts & PV_DUPLICATE) || !included[idx]) { if (*nv >= *mv) { *mv = 2 * (*nv + 1); *v = xnrealloc (*v, *mv, sizeof **v); } - - if ((pv_opts & PV_DUPLICATE) || !included[idx]) - { - (*v)[(*nv)++] = add; - if (!(pv_opts & PV_DUPLICATE)) - included[idx] = 1; - } + (*v)[(*nv)++] = add; + if (included != NULL) + included[idx] = 1; } } @@ -243,16 +239,16 @@ parse_var_set_vars (const struct var_set *vs, else included = NULL; - if (lex_match (T_ALL)) - add_variables (v, nv, &mv, included, pv_opts, - vs, 0, var_set_get_cnt (vs) - 1, DC_ORDINARY); - else + do { - do + if (lex_match (T_ALL)) + add_variables (v, nv, &mv, included, pv_opts, + vs, 0, var_set_get_cnt (vs) - 1, DC_ORDINARY); + else { enum dict_class class; size_t first_idx; - + if (!parse_var_idx_class (vs, &first_idx, &class)) goto fail; @@ -293,13 +289,15 @@ parse_var_set_vars (const struct var_set *vs, add_variables (v, nv, &mv, included, pv_opts, vs, first_idx, last_idx, class); - } - if (pv_opts & PV_SINGLE) - break; - lex_match (','); + } } - while (token == T_ID && var_set_lookup_var (vs, tokid) != NULL); + + if (pv_opts & PV_SINGLE) + break; + lex_match (','); } + while (token == T_ALL + || (token == T_ID && var_set_lookup_var (vs, tokid) != NULL)); if (*nv == 0) goto fail;