From e88e39127bf1b16ffe3c915cc041eb9119063145 Mon Sep 17 00:00:00 2001 From: Sei Lisa Date: Fri, 8 Jun 2018 00:07:36 +0200 Subject: [PATCH] Save a comparison (fixes a FIXME) --- lslopt/lslfoldconst.py | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/lslopt/lslfoldconst.py b/lslopt/lslfoldconst.py index 61767f0..a8af44c 100644 --- a/lslopt/lslfoldconst.py +++ b/lslopt/lslfoldconst.py @@ -1347,27 +1347,27 @@ class foldconst(object): node.ch = [child[a]] return - #FIXME: Could remove one comparison - if nt == '&&' or nt == '||': - if nt == '||': - # Expand to its equivalent a || b -> !!(a | b) - node = nr(nt='|', t='integer', ch=[child[0], child[1]], - SEF=child[0].SEF and child[1].SEF) - node = nr(nt='!', t='integer', ch=[node], SEF=node.SEF) - node = nr(nt='!', t='integer', ch=[node], SEF=node.SEF) - parent[index] = node - else: - orchildren = [ - nr(nt='!',t='integer',ch=[child[0]],SEF=child[0].SEF), - nr(nt='!',t='integer',ch=[child[1]],SEF=child[1].SEF) - ] - node = nr(nt='|', t='integer', ch=orchildren, - SEF=child[0].SEF and child[1].SEF) - node = nr(nt='!', t='integer', ch=[node], SEF=node.SEF) - parent[index] = node + if nt == '||': + # Expand to its equivalent a || b -> !!(a | b) + node = nr(nt='|', t='integer', ch=[child[0], child[1]], + SEF=child[0].SEF and child[1].SEF) + node = nr(nt='!', t='integer', ch=[node], SEF=node.SEF) + node = nr(nt='!', t='integer', ch=[node], SEF=node.SEF) + parent[index] = node + # Make another pass with the substitution + self.FoldTree(parent, index) + elif nt == '&&': + # Expand to its equivalent a && b -> !(!a | !b) + orchildren = [ + nr(nt='!', t='integer', ch=[child[0]], SEF=child[0].SEF), + nr(nt='!', t='integer', ch=[child[1]], SEF=child[1].SEF) + ] + node = nr(nt='|', t='integer', ch=orchildren, + SEF=child[0].SEF and child[1].SEF) + node = nr(nt='!', t='integer', ch=[node], SEF=node.SEF) + parent[index] = node # Make another pass with the substitution self.FoldTree(parent, index) - return return