/* PSPP - a program for statistical analysis.
- Copyright (C) 1997-9, 2000, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
+ Copyright (C) 1997-9, 2000, 2009, 2010, 2011, 2012, 2020 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
/* Parses a set of variables from dictionary D given options
OPTS. Resulting list of variables stored in *VAR and the
number of variables into *CNT. Returns true only if
- successful. */
+ successful. The dictionary D must contain at least one
+ variable. */
bool
parse_variables (struct lexer *lexer, const struct dictionary *d,
struct variable ***var,
assert (cnt != NULL);
vs = var_set_create_from_dict (d);
+ if (var_set_get_cnt (vs) == 0)
+ {
+ *cnt = 0;
+ var_set_destroy (vs);
+ return false;
+ }
success = parse_var_set_vars (lexer, vs, var, cnt, opts);
var_set_destroy (vs);
return success;
struct stringi_set set;
char *name1 = NULL;
+ char *name2 = NULL;
bool ok = false;
int root_len1, root_len2;
unsigned long int number;
- char *name2 = parse_DATA_LIST_var (lexer, dict);
+ name2 = parse_DATA_LIST_var (lexer, dict);
+ if (!name2)
+ goto exit;
root_len1 = extract_numeric_suffix (name1, &num1, &n_digits1);
if (root_len1 == 0)
free (name1);
name1 = NULL;
free (name2);
+ name2 = NULL;
}
else
{
*n_varsp = 0;
free (name1);
+ free (name2);
}
return ok;
}
*var = parse_variable_const (lexer, dict);
- if ( *var == NULL)
+ if (*var == NULL)
return false;
return true;
}
assert (v);
- if ( *iact == NULL)
+ if (*iact == NULL)
*iact = interaction_create (v);
else
interaction_add_variable (*iact, v);
- if ( lex_match (lexer, T_ASTERISK) || lex_match (lexer, T_BY))
+ if (lex_match (lexer, T_ASTERISK) || lex_match (lexer, T_BY))
{
return parse_internal_interaction (lexer, dict, iact, iact);
}