mirror of
https://github.com/johnkerl/miller.git
synced 2026-07-22 23:48:30 +00:00
bind-stack-allocate CST iterate
This commit is contained in:
parent
23edecaab5
commit
ef13ca031d
2 changed files with 8 additions and 4 deletions
|
|
@ -128,6 +128,7 @@ void mlr_dsl_cst_free_udf(cst_udf_state_t* pstate) {
|
|||
|
||||
static mv_t cst_udf_process_callback(void* pvstate, int arity, mv_t* args, variables_t* pvars) {
|
||||
cst_udf_state_t* pstate = pvstate;
|
||||
cst_top_level_statement_block_t* ptop_level_block = pstate->ptop_level_block;
|
||||
mv_t retval = mv_absent();
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
|
@ -138,12 +139,15 @@ static mv_t cst_udf_process_callback(void* pvstate, int arity, mv_t* args, varia
|
|||
}
|
||||
|
||||
// xxx local-stack enter
|
||||
// xxx alloc new if in_use ...
|
||||
local_stack_enter(ptop_level_block->pstack);
|
||||
//local_stack_frame_enter(ptop_level_block->pstack, ptop_level_block->pstatement_block->frame_var_count);
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
// Compute the function value
|
||||
cst_outputs_t* pcst_outputs = NULL; // Functions only produce output via their return values
|
||||
|
||||
for (sllve_t* pe = pstate->ptop_level_block->pstatement_block->pstatements->phead; pe != NULL; pe = pe->pnext) {
|
||||
for (sllve_t* pe = ptop_level_block->pstatement_block->pstatements->phead; pe != NULL; pe = pe->pnext) {
|
||||
mlr_dsl_cst_statement_t* pstatement = pe->pvvalue;
|
||||
pstatement->pnode_handler(pstatement, pvars, pcst_outputs);
|
||||
if (loop_stack_get(pvars->ploop_stack) != 0) {
|
||||
|
|
@ -160,6 +164,9 @@ static mv_t cst_udf_process_callback(void* pvstate, int arity, mv_t* args, varia
|
|||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
bind_stack_frame_exit(bind_stack_pop(pvars->pbind_stack));
|
||||
|
||||
//local_stack_frame_exit(ptop_level_block->pstack, ptop_level_block->pstatement_block->frame_var_count);
|
||||
local_stack_exit(ptop_level_block->pstack);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -977,7 +977,6 @@ static mlr_dsl_cst_statement_t* alloc_do_while(mlr_dsl_cst_t* pcst, mlr_dsl_ast_
|
|||
mlr_dsl_ast_node_t* pleft = pnode->pchildren->phead->pvvalue;
|
||||
mlr_dsl_ast_node_t* pright = pnode->pchildren->phead->pnext->pvvalue;
|
||||
|
||||
// xxx funcify: mlr_assert
|
||||
MLR_INTERNAL_CODING_ERROR_IF(pleft->frame_var_count == MD_UNUSED_INDEX);
|
||||
pstatement->pstatement_block = cst_statement_block_alloc(pleft->frame_var_count);
|
||||
|
||||
|
|
@ -1128,7 +1127,6 @@ static mlr_dsl_cst_statement_t* alloc_for_oosvar(mlr_dsl_cst_t* pcst, mlr_dsl_as
|
|||
pstatement->poosvar_lhs_keylist_evaluators = allocate_keylist_evaluators_from_oosvar_node(
|
||||
pcst, pmiddle, type_inferencing, context_flags);
|
||||
|
||||
// xxx funcify: mlr_assert
|
||||
MLR_INTERNAL_CODING_ERROR_IF(pnode->frame_var_count == MD_UNUSED_INDEX);
|
||||
pstatement->pstatement_block = cst_statement_block_alloc(pnode->frame_var_count);
|
||||
|
||||
|
|
@ -1377,7 +1375,6 @@ static mlr_dsl_cst_statement_t* alloc_if_item(mlr_dsl_cst_t* pcst, mlr_dsl_ast_n
|
|||
{
|
||||
mlr_dsl_cst_statement_t* pstatement = alloc_blank();
|
||||
|
||||
// xxx funcify: mlr_assert
|
||||
MLR_INTERNAL_CODING_ERROR_IF(plistnode->frame_var_count == MD_UNUSED_INDEX);
|
||||
pstatement->pstatement_block = cst_statement_block_alloc(plistnode->frame_var_count);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue