From a33dc8540f4efc63ad7d39e7a544b10778815573 Mon Sep 17 00:00:00 2001 From: Sei Lisa Date: Sat, 2 Jun 2018 16:47:07 +0200 Subject: [PATCH] Implement ~-~-~-expr -> expr + -3 Gets rid of a TODO --- lslopt/lslfoldconst.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/lslopt/lslfoldconst.py b/lslopt/lslfoldconst.py index a4046ef..6b755ef 100644 --- a/lslopt/lslfoldconst.py +++ b/lslopt/lslfoldconst.py @@ -688,7 +688,20 @@ class foldconst(object): subexpr = child[0] node.SEF = subexpr.SEF - # TODO: ~-~-~-expr -> expr + -3 (see NEG for similar exp + 3) + if child[0].nt == 'NEG': + track = child[0].ch[0] + const = -1 + while track.nt == '~' and track.ch[0].nt == 'NEG': + const -= 1 + track = track.ch[0].ch[0] + if const < -2: + # ~-~-~-expr -> expr + (-3) + node = nr(nt='CONST', t='integer', SEF=True, value=const) + node = nr(nt='+', t='integer', ch=[node, track], + SEF=track.SEF) + parent[index] = node + self.FoldTree(parent, index) + return if subexpr.nt == '~': # Double negation: ~~expr