Mercurial > hg > dmlib
diff dmeval.h @ 670:0d37fe455b86
More work on evaluator.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Tue, 16 Apr 2013 11:30:52 +0300 |
parents | 57fc2ec4efdc |
children | a25d30714cfe |
line wrap: on
line diff
--- a/dmeval.h Tue Apr 16 09:46:25 2013 +0300 +++ b/dmeval.h Tue Apr 16 11:30:52 2013 +0300 @@ -5,8 +5,8 @@ typedef double DMValue; -#define DMCONVTYPE (int) - +#define DMCONVTYPE (int) +#define DM_MAX_ARGS 8 enum { @@ -36,7 +36,8 @@ enum { ID_FUNC, - ID_VAR + ID_VAR, + ID_CVAR, } DMEvalIdType; @@ -44,9 +45,9 @@ { char *name; int type; - int args; - DMValue (*func)(DMValue *); - DMValue *var; + int nargs; + DMValue (*func)(DMValue arg[DM_MAX_ARGS]); + DMValue *var, cvalue; } DMEvalId; @@ -56,6 +57,7 @@ DMValue val; DMEvalId *id; + struct DMEvalNode *args[DM_MAX_ARGS]; struct DMEvalNode *subexpr, *next, *prev; } DMEvalNode; @@ -74,7 +76,8 @@ DMEvalId *dm_eval_find_id(DMEvalContext *ev, const char *name); DMEvalId *dm_eval_add_var(DMEvalContext *ev, const char *name, DMValue *var); -DMEvalId *dm_eval_add_func(DMEvalContext *ev, const char *name, DMValue (*func)(DMValue *)); +DMEvalId *dm_eval_add_const(DMEvalContext *ev, const char *name, DMValue value); +DMEvalId *dm_eval_add_func(DMEvalContext *ev, const char *name, DMValue (*func)(DMValue *), int nargs); DMEvalContext *dm_eval_new(void); void dm_eval_close(DMEvalContext *ev);