bind-stack-allocate CST iterate

This commit is contained in:
John Kerl 2016-10-14 20:18:30 -04:00
parent 23edecaab5
commit ef13ca031d
2 changed files with 8 additions and 4 deletions

View file

@ -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;
}

View file

@ -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);