summaryrefslogtreecommitdiffstats
path: root/dimension/parse.c
diff options
context:
space:
mode:
authorTavian Barnes <tavianator@gmail.com>2010-03-19 12:48:38 -0400
committerTavian Barnes <tavianator@gmail.com>2010-03-19 12:48:38 -0400
commitc01e193e19d45e2c5b1e86928cedc11cdbdda476 (patch)
tree5233fa6d70c2a79022e19b1fffa13b2c5ce5c678 /dimension/parse.c
parent8977b20f170a23bb917a0f09b4c558ad8bbdb0ab (diff)
downloaddimension-c01e193e19d45e2c5b1e86928cedc11cdbdda476.tar.xz
Support exp().
Diffstat (limited to 'dimension/parse.c')
-rw-r--r--dimension/parse.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/dimension/parse.c b/dimension/parse.c
index da35c0d..7edf22a 100644
--- a/dimension/parse.c
+++ b/dimension/parse.c
@@ -633,6 +633,10 @@ dmnsn_eval_unary(dmnsn_astnode astnode, dmnsn_symbol_table *symtable)
dmnsn_make_ast_integer(&ret, -n);
break;
+ case DMNSN_AST_EXP:
+ dmnsn_make_ast_float(&ret, exp(n));
+ break;
+
default:
dmnsn_diagnostic(astnode.filename, astnode.line, astnode.col,
"Invalid unary operator '%s' on %s",
@@ -658,6 +662,10 @@ dmnsn_eval_unary(dmnsn_astnode astnode, dmnsn_symbol_table *symtable)
dmnsn_make_ast_float(&ret, -n);
break;
+ case DMNSN_AST_EXP:
+ dmnsn_make_ast_float(&ret, exp(n));
+ break;
+
default:
dmnsn_diagnostic(astnode.filename, astnode.line, astnode.col,
"Invalid unary operator '%s' on %s",
@@ -1061,6 +1069,7 @@ dmnsn_eval(dmnsn_astnode astnode, dmnsn_symbol_table *symtable)
case DMNSN_AST_DOT_T:
case DMNSN_AST_DOT_TRANSMIT:
case DMNSN_AST_NEGATE:
+ case DMNSN_AST_EXP:
return dmnsn_eval_unary(astnode, symtable);
case DMNSN_AST_ADD: