X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fdata-io%2Fmatrix-data.c;h=f510ec25162d194273de45aa9572077a8a718af3;hb=8e36488dd7866df169de48322bdfb4f8b853f8e0;hp=c0f5979bcd268e215b2930b7e30a60bbfceff332;hpb=4f69eb6fd58cbcd46e1f9700e9e4239e6afaf541;p=pspp diff --git a/src/language/data-io/matrix-data.c b/src/language/data-io/matrix-data.c index c0f5979bcd..f510ec2516 100644 --- a/src/language/data-io/matrix-data.c +++ b/src/language/data-io/matrix-data.c @@ -39,6 +39,7 @@ #include "language/lexer/variable-parser.h" #include "libpspp/assertion.h" #include "libpspp/i18n.h" +#include "libpspp/intern.h" #include "libpspp/message.h" #include "libpspp/str.h" @@ -252,12 +253,13 @@ parse_msg (struct dfm_reader *reader, const struct substring *token, int line_number = dfm_get_line_number (reader); struct msg_location *location = xmalloc (sizeof *location); + int last_column = (first_column && token->length + ? first_column + token->length - 1 + : 0); *location = (struct msg_location) { - .file_name = xstrdup (dfm_get_file_name (reader)), - .first_line = line_number, - .last_line = line_number + 1, - .first_column = first_column, - .last_column = first_column ? first_column + token->length : 0, + .file_name = intern_new (dfm_get_file_name (reader)), + .start = { .line = line_number, .column = first_column }, + .end = { .line = line_number, .column = last_column }, }; struct msg *m = xmalloc (sizeof *m); *m = (struct msg) { @@ -909,7 +911,7 @@ cmd_matrix_data (struct lexer *lexer, struct dataset *ds) if (!dict) return CMD_FAILURE; - size_t n_input_vars = dict_get_var_cnt (dict); + size_t n_input_vars = dict_get_n_vars (dict); struct variable **input_vars = xnmalloc (n_input_vars, sizeof *input_vars); for (size_t i = 0; i < n_input_vars; i++) input_vars[i] = dict_get_var (dict, i); @@ -940,7 +942,7 @@ cmd_matrix_data (struct lexer *lexer, struct dataset *ds) .cells = -1, }; - bool *taken_vars = xzalloc (n_input_vars); + bool *taken_vars = XCALLOC (n_input_vars, bool); if (input_rowtype) taken_vars[var_get_dict_index (rowtype)] = true; @@ -1142,7 +1144,7 @@ cmd_matrix_data (struct lexer *lexer, struct dataset *ds) goto error; } - struct variable **order = xnmalloc (dict_get_var_cnt (dict), sizeof *order); + struct variable **order = xnmalloc (dict_get_n_vars (dict), sizeof *order); size_t n_order = 0; for (size_t i = 0; i < mf.n_svars; i++) order[n_order++] = mf.svars[i]; @@ -1152,7 +1154,7 @@ cmd_matrix_data (struct lexer *lexer, struct dataset *ds) order[n_order++] = mf.varname; for (size_t i = 0; i < mf.n_cvars; i++) order[n_order++] = mf.cvars[i]; - assert (n_order == dict_get_var_cnt (dict)); + assert (n_order == dict_get_n_vars (dict)); dict_reorder_vars (dict, order, n_order); free (order);