mformat.triangle = LOWER;
mformat.diagonal = DIAGONAL;
+ mformat.n_split_vars = 0;
+ mformat.split_vars = NULL;
dict = (in_input_program ()
? dataset_dict (ds)
lex_match (lexer, T_EQUALS);
- if (! parse_mixed_vars (lexer, dict, &names, &n_names, 0))
+ if (! parse_mixed_vars (lexer, dict, &names, &n_names, PV_NO_DUPLICATE))
{
int i;
for (i = 0; i < n_names; ++i)
fh_unref (fh);
free (encoding);
+ free (mformat.split_vars);
return CMD_DATA_LIST;
dict_destroy (dict);
fh_unref (fh);
free (encoding);
+ free (mformat.split_vars);
return CMD_CASCADING_FAILURE;
}
assert (names != NULL);
assert (nnames != NULL);
- assert ((pv_opts & ~PV_APPEND) == 0);
if (!(pv_opts & PV_APPEND))
{
struct variable **v;
size_t nv;
- if (!parse_variables (lexer, dict, &v, &nv, PV_NONE))
+ if (!parse_variables (lexer, dict, &v, &nv, pv_opts))
goto fail;
*names = xnrealloc (*names, *nnames + nv, sizeof **names);
for (i = 0; i < nv; i++)
free (v);
*nnames += nv;
}
- else if (!parse_DATA_LIST_vars (lexer, dict, names, nnames, PV_APPEND))
+ else if (!parse_DATA_LIST_vars (lexer, dict, names, nnames, PV_APPEND | pv_opts))
goto fail;
}
if (*nnames == 0)
])
AT_CLEANUP
+
+
+
+
+AT_SETUP([Matrix data duplicate variable])
+
+dnl Negative test to check for sane behaviour in the face of bad syntax
+AT_DATA([matrix-data.pspp], [dnl
+set decimal = dot .
+matrix data
+ variables = s1 s1 rowtype_ var01 var02 var03
+ /split=s1.
+
+begin data
+0 mean 21.4 5.0 72.9
+0 sd 6.5 1.6 22.8
+0 n 106 106 106
+0 corr 1
+0 corr .41 1
+0 corr -.16 -.22 1
+end data .
+
+list.
+])
+
+
+AT_CHECK([pspp -O format=csv matrix-data.pspp], [1], [dnl
+matrix-data.pspp:3: error: MATRIX DATA: Variable s1 appears twice in variable list.
+
+matrix-data.pspp:6: error: Stopping syntax file processing here to avoid a cascade of dependent command failures.
+])
+
+AT_CLEANUP