Up: Procedural Temporaries [Index]
Define an integral to be set by the temporaries tracking mechanism when temporaries need be disposed off:
int dispose;
Make a record of the defined flag:
struct x1f4_e2line_type e2line;
e2line.bits = X1f4_E2LIST_FLATLINE;
e2line.e2list.flatline_set.class = &dispose;
The record merely registers the dispose
existence. Both the
dispose
flag and the e2line
record need exist for as long as
tracking temporaries applies.
Declare a routine freeing resources reserved by temporaries:
int (*dispose_temporaries)(void **);
and a context in which it operates:
void *disposal_context;
Create the temporaries tracker:
struct x1f4_e4less_type e4line;
void *e4less;
e4line.misslink_set.data = e2line_data;
x1f4_type_e2list(&e4line.misslink_set);
See x1f4_type_e2list.
status = x1f4_init_e4ll(&e4less, X1f4_E4LL_MISSLINK, &e4line); if (status) { /* * no luck, the temporaries disposal mechanism was not created for * there was no memory available */ } else { x1f4_deck_e4ll(e4less, &disposal_context, &dispose_temporaries); }
See x1f4_init_e4ll.
See x1f4_deck_e4ll.
The libaime text library needs a temporaries allocator. If using it, link the temporaries allocator/tracker/disposer into the library generation context.
See Text Library.
struct x1f4_lxtext_type lxnone;
struct x1f4_trans_type trans;
x1f4_line_e4ll(e4less, &trans);
See x1f4_line_e4ll.
lxnone.autolink_set.free = trans.free; lxnone.autolink_set.link = trans.link; lxnone.autolink_set.mode = trans.mode;
lxnone.autolink_set.data = trans.context;
Create the text library:
status = x1f4_init_lxtext(..., ..., &lxnone);
See x1f4_init_lxtext.
Enroll the temporaries tracker into the function call observing schema:
status = x1f4_pipe_e4ll(e4less, program); if (status) { /* * no luck, the temporaries disposal mechanism was not recorded with * the function call observing schema */ }
See x1f4_pipe_e4ll.
program
is the executable representation of the procedural program, the
one created by x1f4_init_shuffle
or one of its peers.
See x1f4_init_shuffle.
Execute the program instructions, one by one, disposing temporaries as needed:
See Procedural Language Interpreter Usage Outline.
context is the program execution context, an application pointer not interpreted by libaime code.
x1f4_head_shuffle(subtext); while (!x1f4_tail_shuffle(subtext)) { status = x1f4_slip_shuffle(subtext); if (dispose) { int excess; dispose = 0; excess = dispose_temporaries(&disposal_context); if (excess) { if (status) { } else { status = excess; } } } if (status) { break; } }
Dispose of the temporaries disposer when done:
status = x1f4_fini_e4ll(&e4less);
Up: Procedural Temporaries [Index]