projects
/
pspp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
* variable.h: (struct variable) Rename `reinit' member as `leave' and
[pspp]
/
src
/
procedure.c
diff --git
a/src/procedure.c
b/src/procedure.c
index 7fd577507ac751f82978969c24f63b409e78783f..7dcd37ba6d8c4374c79ff00745a4c0c08519cab1 100644
(file)
--- a/
src/procedure.c
+++ b/
src/procedure.c
@@
-85,6
+85,10
@@
static struct dict_compactor *compactor;
/* Time at which vfm was last invoked. */
static time_t last_vfm_invocation;
/* Time at which vfm was last invoked. */
static time_t last_vfm_invocation;
+/* Whether we're inside a procedure.
+ For debugging purposes only. */
+static bool in_procedure;
+
/* Lag queue. */
int n_lag; /* Number of cases to lag. */
static int lag_count; /* Number of cases in lag_queue so far. */
/* Lag queue. */
int n_lag; /* Number of cases to lag. */
static int lag_count; /* Number of cases in lag_queue so far. */
@@
-178,12
+182,9
@@
procedure (bool (*proc_func) (struct ccase *, void *), void *aux)
static bool
internal_procedure (bool (*proc_func) (struct ccase *, void *), void *aux)
{
static bool
internal_procedure (bool (*proc_func) (struct ccase *, void *), void *aux)
{
- static int recursive_call;
struct write_case_data wc_data;
bool ok;
struct write_case_data wc_data;
bool ok;
- assert (++recursive_call == 1);
-
wc_data.proc_func = proc_func;
wc_data.aux = aux;
create_trns_case (&wc_data.trns_case, default_dict);
wc_data.proc_func = proc_func;
wc_data.aux = aux;
create_trns_case (&wc_data.trns_case, default_dict);
@@
-200,8
+201,6
@@
internal_procedure (bool (*proc_func) (struct ccase *, void *), void *aux)
case_destroy (&wc_data.sink_case);
case_destroy (&wc_data.trns_case);
case_destroy (&wc_data.sink_case);
case_destroy (&wc_data.trns_case);
- assert (--recursive_call == 0);
-
return ok;
}
return ok;
}
@@
-228,7
+227,7
@@
create_trns_case (struct ccase *trns_case, struct dictionary *dict)
union value *value = case_data_rw (trns_case, v->fv);
if (v->type == NUMERIC)
union value *value = case_data_rw (trns_case, v->fv);
if (v->type == NUMERIC)
- value->f = v->
reinit
? 0.0 : SYSMIS;
+ value->f = v->
leave
? 0.0 : SYSMIS;
else
memset (value->s, ' ', v->width);
}
else
memset (value->s, ' ', v->width);
}
@@
-239,6
+238,9
@@
create_trns_case (struct ccase *trns_case, struct dictionary *dict)
static void
open_active_file (void)
{
static void
open_active_file (void)
{
+ assert (!in_procedure);
+ in_procedure = true;
+
/* Make temp_dict refer to the dictionary right before data
reaches the sink */
if (!temporary)
/* Make temp_dict refer to the dictionary right before data
reaches the sink */
if (!temporary)
@@
-426,7
+428,7
@@
clear_case (struct ccase *c)
for (i = 0; i < var_cnt; i++)
{
struct variable *v = dict_get_var (default_dict, i);
for (i = 0; i < var_cnt; i++)
{
struct variable *v = dict_get_var (default_dict, i);
- if (
v->reinit
)
+ if (
!v->leave
)
{
if (v->type == NUMERIC)
case_data_rw (c, v->fv)->f = SYSMIS;
{
if (v->type == NUMERIC)
case_data_rw (c, v->fv)->f = SYSMIS;
@@
-483,6
+485,10
@@
close_active_file (void)
process_if_expr = NULL;
dict_set_case_limit (default_dict, 0);
dict_clear_vectors (default_dict);
process_if_expr = NULL;
dict_set_case_limit (default_dict, 0);
dict_clear_vectors (default_dict);
+
+ assert (in_procedure);
+ in_procedure = false;
+
return cancel_transformations ();
}
\f
return cancel_transformations ();
}
\f
@@
-511,6
+517,9
@@
void
add_transformation (trns_proc_func *proc, trns_free_func *free, void *private)
{
struct transformation *trns;
add_transformation (trns_proc_func *proc, trns_free_func *free, void *private)
{
struct transformation *trns;
+
+ assert (!in_procedure);
+
if (n_trns >= m_trns)
t_trns = x2nrealloc (t_trns, &m_trns, sizeof *t_trns);
trns = &t_trns[n_trns++];
if (n_trns >= m_trns)
t_trns = x2nrealloc (t_trns, &m_trns, sizeof *t_trns);
trns = &t_trns[n_trns++];