# HG changeset patch # User Matti Hamalainen # Date 1368077932 -10800 # Node ID c68258fd81a177a35b65e50de7cb2410dbfea653 # Parent 181d659bba39cff1e00b86b68c71b31a24c200a4 Moar work. diff -r 181d659bba39 -r c68258fd81a1 dmeval.c --- 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: diff -r 181d659bba39 -r c68258fd81a1 dmeval.h --- 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;