From 7c25af973cfd743d9e24384a8cbe084208fc5d97 Mon Sep 17 00:00:00 2001 From: Dale Weiler Date: Sat, 28 Sep 2013 06:33:15 -0400 Subject: [PATCH] It was much easier in the AST, really. --- ast.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/ast.c b/ast.c index 9f33e22..3fb27d3 100644 --- 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) { -- 2.39.2