aboutsummaryrefslogtreecommitdiff
path: root/Source/Parser/wp_parser_y.c
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Parser/wp_parser_y.c')
-rw-r--r--Source/Parser/wp_parser_y.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/Source/Parser/wp_parser_y.c b/Source/Parser/wp_parser_y.c
index c4815a2a9..21b6cc96e 100644
--- a/Source/Parser/wp_parser_y.c
+++ b/Source/Parser/wp_parser_y.c
@@ -443,7 +443,8 @@ wp_ast_optimize (struct wp_node* node)
if (node->l->type == WP_NUMBER &&
node->r->type == WP_NUMBER)
{
- double v = wp_ast_eval(node);
+ double v = ((struct wp_number*)(node->l))->value
+ + ((struct wp_number*)(node->r))->value;
((struct wp_number*)node)->type = WP_NUMBER;
((struct wp_number*)node)->value = v;
}
@@ -505,7 +506,8 @@ wp_ast_optimize (struct wp_node* node)
if (node->l->type == WP_NUMBER &&
node->r->type == WP_NUMBER)
{
- double v = wp_ast_eval(node);
+ double v = ((struct wp_number*)(node->l))->value
+ - ((struct wp_number*)(node->r))->value;
((struct wp_number*)node)->type = WP_NUMBER;
((struct wp_number*)node)->value = v;
}
@@ -567,7 +569,8 @@ wp_ast_optimize (struct wp_node* node)
if (node->l->type == WP_NUMBER &&
node->r->type == WP_NUMBER)
{
- double v = wp_ast_eval(node);
+ double v = ((struct wp_number*)(node->l))->value
+ * ((struct wp_number*)(node->r))->value;
((struct wp_number*)node)->type = WP_NUMBER;
((struct wp_number*)node)->value = v;
}
@@ -629,7 +632,8 @@ wp_ast_optimize (struct wp_node* node)
if (node->l->type == WP_NUMBER &&
node->r->type == WP_NUMBER)
{
- double v = wp_ast_eval(node);
+ double v = ((struct wp_number*)(node->l))->value
+ / ((struct wp_number*)(node->r))->value;
((struct wp_number*)node)->type = WP_NUMBER;
((struct wp_number*)node)->value = v;
}
@@ -688,7 +692,7 @@ wp_ast_optimize (struct wp_node* node)
wp_ast_optimize(node->l);
if (node->l->type == WP_NUMBER)
{
- double v = wp_ast_eval(node);
+ double v = -((struct wp_number*)(node->l))->value;
((struct wp_number*)node)->type = WP_NUMBER;
((struct wp_number*)node)->value = v;
}