diff --git a/c/dsl/function_manager.c b/c/dsl/function_manager.c index 4e3a8226f..8a5cdb3f9 100644 --- a/c/dsl/function_manager.c +++ b/c/dsl/function_manager.c @@ -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 diff --git a/c/dsl/function_manager.h b/c/dsl/function_manager.h index cc86407e7..25cecc948 100644 --- a/c/dsl/function_manager.h +++ b/c/dsl/function_manager.h @@ -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);