{
struct msg_location *location;
struct expression *condition; /* Test expression; NULL for ELSE clause. */
- struct transformation *xforms;
- size_t n_xforms;
+ struct trns_chain xforms;
};
/* DO IF transformation. */
size_t n_clauses; /* Number of clauses. */
};
-static trns_proc_func do_if_trns_proc;
-static trns_free_func do_if_trns_free;
+static const struct trns_class do_if_trns_class;
static void
start_clause (struct lexer *lexer, struct dataset *ds,
sizeof *do_if->clauses);
struct clause *clause = &do_if->clauses[do_if->n_clauses++];
- *clause = (struct clause) { .n_xforms = 0 };
+ *clause = (struct clause) { .location = NULL };
if (condition)
{
clause->condition = expr_parse_bool (lexer, ds);
finish_clause (struct dataset *ds, struct do_if_trns *do_if)
{
struct clause *clause = &do_if->clauses[do_if->n_clauses - 1];
- proc_pop_transformations (ds, &clause->xforms, &clause->n_xforms);
+ proc_pop_transformations (ds, &clause->xforms);
}
/* Parse DO IF. */
}
finish_clause (ds, do_if);
- add_transformation (ds, do_if_trns_proc, do_if_trns_free, do_if);
+ add_transformation (ds, &do_if_trns_class, do_if);
return ok ? CMD_SUCCESS : CMD_CASCADING_FAILURE;
}
return TRNS_CONTINUE;
}
- return transformations_execute (clause->xforms, clause->n_xforms,
- c, case_num);
+ return trns_chain_execute (&clause->xforms, case_num, c);
}
return TRNS_CONTINUE;
}
msg_location_destroy (clause->location);
expr_free (clause->condition);
- transformations_destroy (clause->xforms, clause->n_xforms);
+ trns_chain_uninit (&clause->xforms);
}
free (do_if->clauses);
free (do_if);
return true;
}
+
+static const struct trns_class do_if_trns_class = {
+ .name = "DO IF",
+ .execute = do_if_trns_proc,
+ .destroy = do_if_trns_free,
+};