xvfuncs iterate

This commit is contained in:
John Kerl 2016-12-04 21:02:39 -05:00
parent 9f29118f24
commit 409e41ac2b
5 changed files with 1355 additions and 28 deletions

View file

@ -12,24 +12,19 @@
#include "../containers/mlhmmv.h"
// ----------------------------------------------------------------
typedef mlhmmv_xvalue_t mv_variadic_func_t(
typedef mlhmmv_xvalue_t xv_variadic_func_t(
mlhmmv_xvalue_t* pxvals,
int nxvals);
typedef mlhmmv_xvalue_t mv_zary_func_t();
typedef mlhmmv_xvalue_t xv_zary_func_t();
typedef mlhmmv_xvalue_t mv_unary_func_t(
typedef mlhmmv_xvalue_t xv_unary_func_t(
mlhmmv_xvalue_t* pxval1);
typedef mlhmmv_xvalue_t mv_binary_func_t(
typedef mlhmmv_xvalue_t xv_binary_func_t(
mlhmmv_xvalue_t* pxval1,
mlhmmv_xvalue_t* pxval2);
typedef mlhmmv_xvalue_t mv_ternary_func_t(
mlhmmv_xvalue_t* pxval1,
mlhmmv_xvalue_t* pxval2,
mlhmmv_xvalue_t* pxval3);
// ----------------------------------------------------------------
static inline mlhmmv_xvalue_t b_x_ispresent_xfunc(mlhmmv_xvalue_t* pxval1) {
return mlhmmv_xvalue_wrap_terminal(

View file

@ -1,34 +1,35 @@
noinst_LTLIBRARIES= libdsl.la
libdsl_la_SOURCES= \
context_flags.h \
function_manager.h \
function_manager.c \
rval_evaluator.h \
rval_evaluators.h \
rval_expr_evaluators.c \
rxval_expr_evaluators.c \
rval_func_evaluators.c \
rval_list_evaluators.c \
function_manager.h \
mlr_dsl_ast.c \
mlr_dsl_ast.h \
mlr_dsl_blocked_ast.c \
mlr_dsl_blocked_ast.h \
mlr_dsl_cst.c \
mlr_dsl_cst.h \
mlr_dsl_cst_condish_statements.c \
mlr_dsl_cst_for_map_statements.c \
mlr_dsl_cst_for_srec_statements.c \
mlr_dsl_cst_func_subr.c \
mlr_dsl_cst_keywords.c \
mlr_dsl_cst_statements.c \
mlr_dsl_cst_scalar_assignment_statements.c \
mlr_dsl_cst_map_assignment_statements.c \
mlr_dsl_cst_unset_statements.c \
mlr_dsl_cst_condish_statements.c \
mlr_dsl_cst_for_srec_statements.c \
mlr_dsl_cst_for_map_statements.c \
mlr_dsl_cst_triple_for_statements.c \
mlr_dsl_cst_loop_control_statements.c \
mlr_dsl_cst_return_statements.c \
mlr_dsl_cst_map_assignment_statements.c \
mlr_dsl_cst_output_statements.c \
mlr_dsl_cst_return_statements.c \
mlr_dsl_cst_scalar_assignment_statements.c \
mlr_dsl_cst_statements.c \
mlr_dsl_cst_triple_for_statements.c \
mlr_dsl_cst_unset_statements.c \
mlr_dsl_stack_allocate.c \
rval_evaluator.h \
rval_evaluators.h \
rval_expr_evaluators.c \
rval_func_evaluators.c \
rval_list_evaluators.c \
rxval_expr_evaluators.c \
rxval_func_evaluators.c \
type_inference.h
libdsl_la_LIBADD= ../lib/libmlr.la ../cli/libcli.la ../input/libinput.la

View file

@ -2,6 +2,8 @@
#define RVAL_EVALUATORS_H
#include <stdio.h>
#include "containers/mvfuncs.h"
#include "containers/xvfuncs.h"
#include "dsl/mlr_dsl_ast.h"
#include "dsl/rval_evaluator.h"
#include "dsl/function_manager.h"
@ -81,7 +83,7 @@ rval_evaluator_t* rval_evaluator_alloc_from_mlrval(mv_t* pval);
// rval_func_evaluators.c
// ================================================================
// These have some shared code that would otherwise be duplicated per-function in containers/mlrval.c.
// These have some shared code that would otherwise be duplicated per-function in containers/mvfuncs.c.
rval_evaluator_t* rval_evaluator_alloc_from_variadic_func(mv_variadic_func_t* pfunc, rval_evaluator_t** pargs, int nargs);
rval_evaluator_t* rval_evaluator_alloc_from_b_b_func(mv_unary_func_t* pfunc, rval_evaluator_t* parg1);
rval_evaluator_t* rval_evaluator_alloc_from_b_bb_and_func(rval_evaluator_t* parg1, rval_evaluator_t* parg2);
@ -185,4 +187,10 @@ rxval_evaluator_t* rxval_evaluator_alloc_from_full_srec(
rxval_evaluator_t* rxval_evaluator_alloc_wrapping_rval(
mlr_dsl_ast_node_t* past, fmgr_t* pfmgr, int type_inferencing, int context_flags);
// ================================================================
// rxval_func_evaluators.c
rxval_evaluator_t* rxval_evaluator_alloc_from_variadic_func(xv_variadic_func_t* pfunc, rxval_evaluator_t** pargs, int nargs);
rxval_evaluator_t* rxval_evaluator_alloc_from_b_m_func(xv_unary_func_t* pfunc, rxval_evaluator_t* parg1);
#endif // LREC_FEVALUATORS_H

File diff suppressed because it is too large Load diff

View file

@ -42,8 +42,8 @@ MAPVAR CHECKLIST:
* apply mapvar contexts to some built-ins: length, typeof, ... ?
- calltree:
! separate mlrval.[ch] per se from mv_funcs.[ch]; new xv_funcs.[ch]
> mv_unary_func_t xv_unary_func_t
k separate mlrval.[ch] per se from mv_funcs.[ch]; new xv_funcs.[ch]
k mv_unary_func_t xv_unary_func_t
> rval_evaluator_alloc_from_b_b_func rxval_evaluator_alloc_from_m_b_func
> fmgr_alloc_evaluator_from_unary_func_name fmgr_alloc_xevaluator_from_unary_func_name
> construct_builtin_function_callsite_evaluator construct_builtin_function_callsite_xevaluator