Mercurial > hg > dmlib
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: