]> de.git.xonotic.org Git - xonotic/gmqcc.git/commitdiff
It was much easier in the AST, really.
authorDale Weiler <killfieldengine@gmail.com>
Sat, 28 Sep 2013 10:33:15 +0000 (06:33 -0400)
committerDale Weiler <killfieldengine@gmail.com>
Sat, 28 Sep 2013 10:33:15 +0000 (06:33 -0400)
ast.c

diff --git a/ast.c b/ast.c
index 9f33e22fc21cffe2e50a3569e0497a2a45fb5c15..3fb27d30f917d687bbe2e43738f107e0bef976b5 100644 (file)
--- a/ast.c
+++ b/ast.c
@@ -518,6 +518,16 @@ ast_unary* ast_unary_new(lex_ctx_t ctx, int op,
     self->op = op;
     self->operand = expr;
 
+    if (ast_istype(expr, ast_unary)) {
+        ast_expression *prev = (ast_expression*)((ast_unary*)expr)->operand;
+        if (ast_istype(prev, ast_unary)) {
+            ast_expression_delete((ast_expression*)self);
+            mem_d(self);
+            ++opts_optimizationcount[OPTIM_PEEPHOLE];
+            return (ast_unary*)prev;
+        }
+    }
+
     ast_propagate_effects(self, expr);
 
     if (op >= INSTR_NOT_F && op <= INSTR_NOT_FNC) {