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);