From ef13ca031d654c60a2f9784e2d939dd6fe19d82a Mon Sep 17 00:00:00 2001 From: John Kerl Date: Fri, 14 Oct 2016 20:18:30 -0400 Subject: [PATCH] bind-stack-allocate CST iterate --- c/mapping/mlr_dsl_cst_func_subr.c | 9 ++++++++- c/mapping/mlr_dsl_cst_statements.c | 3 --- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/c/mapping/mlr_dsl_cst_func_subr.c b/c/mapping/mlr_dsl_cst_func_subr.c index 2f26e3fec..6920c7a57 100644 --- a/c/mapping/mlr_dsl_cst_func_subr.c +++ b/c/mapping/mlr_dsl_cst_func_subr.c @@ -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; } diff --git a/c/mapping/mlr_dsl_cst_statements.c b/c/mapping/mlr_dsl_cst_statements.c index 3ee9a1243..1a98907be 100644 --- a/c/mapping/mlr_dsl_cst_statements.c +++ b/c/mapping/mlr_dsl_cst_statements.c @@ -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);