changeset 765:c68258fd81a1

Moar work.
author Matti Hamalainen <ccr@tnsp.org>
date Thu, 09 May 2013 08:38:52 +0300
parents 181d659bba39
children 11fba703014f
files dmeval.c dmeval.h
diffstat 2 files changed, 20 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/dmeval.c	Thu May 09 08:28:39 2013 +0300
+++ b/dmeval.c	Thu May 09 08:38:52 2013 +0300
@@ -68,12 +68,13 @@
  */
 static const DMEvalSymbol dmEvalBasicFuncs[] =
 {
-    { "sin",  SYM_FUNC, 1, func_sin, NULL, 0 },
-    { "cos",  SYM_FUNC, 1, func_cos, NULL, 0 },
-    { "clip", SYM_FUNC, 1, func_int_clip, NULL, 0 },
-    { "pow",  SYM_FUNC, 2, func_pow, NULL, 0 },
+    { "sin",  SYM_FUNC , 1, func_sin, NULL, 0 },
+    { "cos",  SYM_FUNC , 1, func_cos, NULL, 0 },
+    { "clip", SYM_FUNC , 1, func_int_clip, NULL, 0 },
+    { "pow",  SYM_FUNC , 2, func_pow, NULL, 0 },
 
-    { "pi",   SYM_CVAR, 0, NULL, NULL, DM_PI },
+    { "pi",   SYM_CONST, 0, NULL, NULL, DM_PI },
+    { "e",    SYM_CONST, 0, NULL, NULL, DM_E },
 };
 
 static const int ndmEvalBasicFuncs = sizeof(dmEvalBasicFuncs) / sizeof(dmEvalBasicFuncs[0]);
@@ -167,7 +168,7 @@
 
 DMEvalSymbol *dmEvalContextAddConst(DMEvalContext *ev, const char *name, DMValue value)
 {
-    DMEvalSymbol *symbol = dmEvalContextAddSymbol(ev, name, SYM_CVAR);
+    DMEvalSymbol *symbol = dmEvalContextAddSymbol(ev, name, SYM_CONST);
     if (symbol == NULL)
         return NULL;
     
@@ -351,7 +352,7 @@
 }
 
 
-static int dmEvalTokenizeExpr(DMEvalContext *ev, DMEvalNode **list, char **str, int depth)
+static BOOL dmEvalTokenizeExpr(DMEvalContext *ev, DMEvalNode **list, char **str, int depth)
 {
     char *c = *str;
     char tmpStr[DM_MAX_BUF + 2], *tmp;
@@ -644,7 +645,7 @@
 
     *str = c;
 
-    return (ev->mode == PARSE_ERROR) ? -1 : 0;
+    return (ev->mode == PARSE_ERROR);
 }
 
 
@@ -653,7 +654,7 @@
     int ret;
 
     if (ev == NULL || result == NULL)
-        return -1;
+        return DMERR_NULLPTR;
 
     ev->prev = PARSE_START;
     ret = dmEvalTokenizeExpr(ev, result, &expr, 0);
@@ -673,11 +674,20 @@
 
     switch (node->op)
     {
+        case OP_VAR:
+            switch (node->symbol->type)
+            {
+                case SYM_CONST: *presult = node->symbol->cvalue; return TRUE;
+                case SYM_VAR  : *presult = *(node->symbol->var); return TRUE;
+            }
+            return FALSE;
+
         case OP_VALUE:
             *presult = node->val;
             return TRUE;
         
         case OP_FUNC:
+            
             return TRUE;
         
         case OP_SUBEXPR:
--- a/dmeval.h	Thu May 09 08:28:39 2013 +0300
+++ b/dmeval.h	Thu May 09 08:38:52 2013 +0300
@@ -67,7 +67,7 @@
 {
     SYM_FUNC,
     SYM_VAR,
-    SYM_CVAR,
+    SYM_CONST,
 } DMEvalSymbolType;