This commit is contained in:
John Kerl 2017-02-07 17:31:29 -05:00
parent ffc684948c
commit d137a976e9
2 changed files with 13 additions and 3 deletions

View file

@ -704,7 +704,7 @@ rval_evaluator_t* fmgr_alloc_provisional_from_operator_or_function_call(fmgr_t*
// Remember this callsite to a function which may or may not have been defined yet.
// Then later we can resolve them to point to UDF bodies which have been defined.
sllv_append(pfmgr->pfunc_callsite_evaluators_to_resolve, pev);
fmgr_mark_callsite_to_resolve(pfmgr, pev);
return pev;
}
@ -740,11 +740,20 @@ rxval_evaluator_t* fmgr_xalloc_provisional_from_operator_or_function_call(fmgr_t
// Remember this callsite to a function which may or may not have been defined yet.
// Then later we can resolve them to point to UDF bodies which have been defined.
sllv_append(pfmgr->pfunc_callsite_xevaluators_to_resolve, pxev);
fmgr_mark_xcallsite_to_resolve(pfmgr, pxev);
return pxev;
}
// ----------------------------------------------------------------
void fmgr_mark_callsite_to_resolve(fmgr_t* pfmgr, rval_evaluator_t* pev) {
sllv_append(pfmgr->pfunc_callsite_evaluators_to_resolve, pev);
}
void fmgr_mark_xcallsite_to_resolve(fmgr_t* pfmgr, rxval_evaluator_t* pxev) {
sllv_append(pfmgr->pfunc_callsite_xevaluators_to_resolve, pxev);
}
// ----------------------------------------------------------------
// Resolving a callsite involves treewalking the AST which may find more callsites to
// resolve. E.g. in '$y = f(g($x))', f is initially unresolved (f and/or g perhaps as yet

View file

@ -54,7 +54,8 @@ rval_evaluator_t* fmgr_alloc_provisional_from_operator_or_function_call(fmgr_t*
rxval_evaluator_t* fmgr_xalloc_provisional_from_operator_or_function_call(fmgr_t* pfmgr, mlr_dsl_ast_node_t* pnode,
int type_inferencing, int context_flags);
// xxx make a mark-callsite-for-resolve method
void fmgr_mark_callsite_to_resolve(fmgr_t* pfmgr, rval_evaluator_t* pev);
void fmgr_mark_xcallsite_to_resolve(fmgr_t* pfmgr, rxval_evaluator_t* pxev);
// Update all function callsites to point to UDF bodies, once all the latter have been defined.
void fmgr_resolve_func_callsites(fmgr_t* pfmgr);