X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=src%2Flanguage%2Fstats%2Faggregate.c;h=7c8245e00345bb6e42b1198cb4029808e08511ac;hb=eba3cf1b8a2fcfee20eabc51aa8f91b1f276f2f7;hp=491578398bf099cb6c14ea4b976f89face0df954;hpb=505d1c592469ea99da7723c2770f13f5dc965046;p=pspp diff --git a/src/language/stats/aggregate.c b/src/language/stats/aggregate.c index 491578398b..7c8245e003 100644 --- a/src/language/stats/aggregate.c +++ b/src/language/stats/aggregate.c @@ -35,9 +35,10 @@ #include #include #include +#include #include #include -#include +#include #include #include #include @@ -48,6 +49,13 @@ #include "gettext.h" #define _(msgid) gettext (msgid) +/* Argument for AGGREGATE function. */ +union agr_argument + { + double f; /* Numeric. */ + char *c; /* Short or long string. */ + }; + /* Specifies how to make an aggregate variable. */ struct agr_var { @@ -58,7 +66,7 @@ struct agr_var struct variable *dest; /* Target variable. */ int function; /* Function. */ int include_missing; /* 1=Include user-missing values. */ - union value arg[2]; /* Arguments. */ + union agr_argument arg[2]; /* Arguments. */ /* Accumulated during AGGREGATE execution. */ double dbl[3]; @@ -281,6 +289,7 @@ cmd_aggregate (void) goto error; } discard_variables (); + dict_destroy (default_dict); default_dict = agr.dict; agr.dict = NULL; proc_set_source (agr.sink->class->make_source (agr.sink)); @@ -359,7 +368,7 @@ parse_aggregate_functions (struct agr_proc *agr) const struct agr_func *function; int func_index; - union value arg[2]; + union agr_argument arg[2]; struct variable **src; size_t n_src; @@ -396,7 +405,7 @@ parse_aggregate_functions (struct agr_proc *agr) if (token == T_STRING) { ds_truncate (&tokstr, 255); - dest_label[n_dest - 1] = xstrdup (ds_c_str (&tokstr)); + dest_label[n_dest - 1] = ds_xstrdup (&tokstr); lex_get (); } } @@ -464,7 +473,7 @@ parse_aggregate_functions (struct agr_proc *agr) lex_match (','); if (token == T_STRING) { - arg[i].c = xstrdup (ds_c_str (&tokstr)); + arg[i].c = ds_xstrdup (&tokstr); type = ALPHA; } else if (lex_is_number ()) @@ -515,7 +524,7 @@ parse_aggregate_functions (struct agr_proc *agr) || (src[0]->type == ALPHA && str_compare_rpad (arg[0].c, arg[1].c) > 0))) { - union value t = arg[0]; + union agr_argument t = arg[0]; arg[0] = arg[1]; arg[1] = t; @@ -883,7 +892,7 @@ accumulate_aggregate_info (struct agr_proc *agr, caught earlier. Nothing to do. */ break; default: - assert (0); + NOT_REACHED (); } } else { switch (iter->function) @@ -895,7 +904,7 @@ accumulate_aggregate_info (struct agr_proc *agr, iter->int1++; break; default: - assert (0); + NOT_REACHED (); } } } @@ -1024,7 +1033,7 @@ dump_aggregate_info (struct agr_proc *agr, struct ccase *output) v->f = i->int1; break; default: - assert (0); + NOT_REACHED (); } } }