mirror of
https://github.com/johnkerl/miller.git
synced 2026-07-25 00:48:56 +00:00
neaten
This commit is contained in:
parent
656f84381f
commit
2abbe6dc5f
4 changed files with 30 additions and 14 deletions
|
|
@ -94,7 +94,8 @@ mlr_dsl_cst_t* mlr_dsl_cst_alloc(mlr_dsl_ast_t* past, int print_ast, int trace_s
|
|||
printf("FUNCTION DEFINITION:\n");
|
||||
mlr_dsl_ast_node_print(pnode);
|
||||
}
|
||||
udf_defsite_state_t* pudf_defsite_state = mlr_dsl_cst_alloc_udf(pcst, pnode, type_inferencing, context_flags);
|
||||
udf_defsite_state_t* pudf_defsite_state = mlr_dsl_cst_alloc_udf(pcst, pnode,
|
||||
type_inferencing, context_flags);
|
||||
fmgr_install_udf(pcst->pfmgr, pudf_defsite_state);
|
||||
}
|
||||
|
||||
|
|
@ -117,7 +118,6 @@ mlr_dsl_cst_t* mlr_dsl_cst_alloc(mlr_dsl_ast_t* past, int print_ast, int trace_s
|
|||
pcst->pbegin_blocks = sllv_alloc();
|
||||
for (sllve_t* pe = pcst->paast->pbegin_blocks->phead; pe != NULL; pe = pe->pnext) {
|
||||
mlr_dsl_ast_node_t* pnode = pe->pvvalue;
|
||||
// xxx assert non-uninit max var depth x all callsites
|
||||
if (print_ast) {
|
||||
printf("\n");
|
||||
printf("BEGIN-BLOCK:\n");
|
||||
|
|
@ -125,7 +125,8 @@ mlr_dsl_cst_t* mlr_dsl_cst_alloc(mlr_dsl_ast_t* past, int print_ast, int trace_s
|
|||
}
|
||||
MLR_INTERNAL_CODING_ERROR_IF(pnode->max_var_depth == MD_UNUSED_INDEX);
|
||||
MLR_INTERNAL_CODING_ERROR_IF(pnode->frame_var_count == MD_UNUSED_INDEX);
|
||||
cst_top_level_statement_block_t* pblock = cst_top_level_statement_block_alloc(pnode->max_var_depth, pnode->frame_var_count);
|
||||
cst_top_level_statement_block_t* pblock = cst_top_level_statement_block_alloc(pnode->max_var_depth,
|
||||
pnode->frame_var_count);
|
||||
for (sllve_t* pf = pnode->pchildren->phead; pf != NULL; pf = pf->pnext) {
|
||||
mlr_dsl_ast_node_t* plistnode = get_list_for_block(pnode);
|
||||
for (sllve_t* pg = plistnode->pchildren->phead; pg != NULL; pg = pg->pnext) {
|
||||
|
|
@ -146,10 +147,10 @@ mlr_dsl_cst_t* mlr_dsl_cst_alloc(mlr_dsl_ast_t* past, int print_ast, int trace_s
|
|||
printf("END-BLOCK:\n");
|
||||
mlr_dsl_ast_node_print(pnode);
|
||||
}
|
||||
// xxx funcify x all
|
||||
MLR_INTERNAL_CODING_ERROR_IF(pnode->max_var_depth == MD_UNUSED_INDEX);
|
||||
MLR_INTERNAL_CODING_ERROR_IF(pnode->frame_var_count == MD_UNUSED_INDEX);
|
||||
cst_top_level_statement_block_t* pblock = cst_top_level_statement_block_alloc(pnode->max_var_depth, pnode->frame_var_count);
|
||||
cst_top_level_statement_block_t* pblock = cst_top_level_statement_block_alloc(pnode->max_var_depth,
|
||||
pnode->frame_var_count);
|
||||
for (sllve_t* pf = pnode->pchildren->phead; pf != NULL; pf = pf->pnext) {
|
||||
mlr_dsl_ast_node_t* plistnode = get_list_for_block(pnode);
|
||||
for (sllve_t* pg = plistnode->pchildren->phead; pg != NULL; pg = pg->pnext) {
|
||||
|
|
|
|||
|
|
@ -128,6 +128,8 @@ typedef void mlr_dsl_cst_statement_block_handler_t(
|
|||
// Difference between keylist and namelist: in emit @a[$b]["c"], "d", @e, the keylist is ["a", $b, "c"]
|
||||
// and the namelist is ["d", @e].
|
||||
|
||||
// xxx make this a union ... ?
|
||||
|
||||
typedef struct _mlr_dsl_cst_statement_t {
|
||||
|
||||
// Function-pointer for the handler of the given statement type, e.g. srec-assignment, while-loop, etc.
|
||||
|
|
|
|||
|
|
@ -247,8 +247,8 @@ void cst_statement_block_free(cst_statement_block_t* pblock) {
|
|||
cst_top_level_statement_block_t* cst_top_level_statement_block_alloc(int max_var_depth, int frame_var_count) {
|
||||
cst_top_level_statement_block_t* pblock = mlr_malloc_or_die(sizeof(cst_top_level_statement_block_t));
|
||||
|
||||
pblock->max_var_depth = max_var_depth;
|
||||
pblock->pstack = local_stack_alloc(max_var_depth);
|
||||
pblock->max_var_depth = max_var_depth;
|
||||
pblock->pstack = local_stack_alloc(max_var_depth);
|
||||
pblock->pstatement_block = cst_statement_block_alloc(frame_var_count);
|
||||
|
||||
return pblock;
|
||||
|
|
@ -1200,21 +1200,28 @@ static mlr_dsl_cst_statement_t* alloc_triple_for(mlr_dsl_cst_t* pcst, mlr_dsl_as
|
|||
if (pcontinuation_statements_node->pchildren->length == 0) {
|
||||
pstatement->ptriple_for_continuation_evaluator = rval_evaluator_alloc_from_boolean(TRUE);
|
||||
} else {
|
||||
for (sllve_t* pe = pcontinuation_statements_node->pchildren->phead; pe != NULL && pe->pnext != NULL; pe = pe->pnext) {
|
||||
for (
|
||||
sllve_t* pe = pcontinuation_statements_node->pchildren->phead;
|
||||
pe != NULL && pe->pnext != NULL;
|
||||
pe = pe->pnext
|
||||
)
|
||||
{
|
||||
mlr_dsl_ast_node_t* pbody_ast_node = pe->pvvalue;
|
||||
sllv_append(pstatement->ptriple_for_pre_continuation_statements,
|
||||
mlr_dsl_cst_alloc_statement(pcst, pbody_ast_node,
|
||||
type_inferencing, context_flags & ~IN_BREAKABLE));
|
||||
}
|
||||
mlr_dsl_ast_node_t* pfinal_continuation_statement_node = pcontinuation_statements_node->pchildren->ptail->pvvalue;
|
||||
mlr_dsl_ast_node_t* pfinal_continuation_statement_node =
|
||||
pcontinuation_statements_node->pchildren->ptail->pvvalue;
|
||||
if (mlr_dsl_ast_node_cannot_be_bare_boolean(pfinal_continuation_statement_node)) {
|
||||
fprintf(stderr,
|
||||
"%s: the final triple-for continutation statement must be a bare boolean.\n",
|
||||
MLR_GLOBALS.bargv0);
|
||||
exit(1);
|
||||
}
|
||||
pstatement->ptriple_for_continuation_evaluator = rval_evaluator_alloc_from_ast(pfinal_continuation_statement_node,
|
||||
pcst->pfmgr, type_inferencing, (context_flags & ~IN_BREAKABLE) | IN_TRIPLE_FOR_CONTINUE);
|
||||
pstatement->ptriple_for_continuation_evaluator = rval_evaluator_alloc_from_ast(
|
||||
pfinal_continuation_statement_node, pcst->pfmgr,
|
||||
type_inferencing, (context_flags & ~IN_BREAKABLE) | IN_TRIPLE_FOR_CONTINUE);
|
||||
}
|
||||
|
||||
pstatement->ptriple_for_update_statements = sllv_alloc();
|
||||
|
|
@ -1982,13 +1989,15 @@ void mlr_dsl_cst_handle_top_level_statement_blocks(
|
|||
}
|
||||
}
|
||||
|
||||
// XXX split alloc & handle files ... too big.
|
||||
|
||||
void mlr_dsl_cst_handle_top_level_statement_block(
|
||||
cst_top_level_statement_block_t* ptop_level_block,
|
||||
variables_t* pvars,
|
||||
cst_outputs_t* pcst_outputs)
|
||||
{
|
||||
// xxx cmt re in-use
|
||||
local_stack_t* pstack = local_stack_enter(ptop_level_block->pstack);
|
||||
// XXX cmt re in-use
|
||||
local_stack_t* pstack = local_stack_enter(ptop_level_block->pstack); // XXX sllv_push pvars->pstack ?
|
||||
|
||||
// xxx adapt callee to also handle local stack
|
||||
mlr_dsl_cst_handle_statement_block(ptop_level_block->pstatement_block, pvars, pcst_outputs);
|
||||
|
|
@ -2423,7 +2432,9 @@ static void handle_conditional_block(
|
|||
variables_t* pvars,
|
||||
cst_outputs_t* pcst_outputs)
|
||||
{
|
||||
// xxx local entry, here & all bind.stack.push
|
||||
// XXX need pvars->pstacks ...
|
||||
// local_stack_t* pstack = pvars->pstacks->phead->pvvalue;
|
||||
// XXX local_stack_frame_enter(pstack, pstatement->pstatement_block->frame_var_count);
|
||||
bind_stack_push(pvars->pbind_stack, bind_stack_frame_enter(pstatement->pframe));
|
||||
rval_evaluator_t* prhs_evaluator = pstatement->prhs_evaluator;
|
||||
|
||||
|
|
@ -2435,6 +2446,7 @@ static void handle_conditional_block(
|
|||
}
|
||||
}
|
||||
bind_stack_frame_exit(bind_stack_pop(pvars->pbind_stack));
|
||||
// XXX local_stack_frame_exit(pstack, pstatement->pstatement_block->frame_var_count);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -50,6 +50,7 @@ typedef struct _variables_t {
|
|||
mlhmmv_t* poosvars;
|
||||
string_array_t** ppregex_captures;
|
||||
context_t* pctx;
|
||||
// XXX pstacks (sllv_t*)
|
||||
bind_stack_t* pbind_stack;
|
||||
loop_stack_t* ploop_stack;
|
||||
return_state_t return_state;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue