# HG changeset patch # User Sylvain Thenault <sylvain.thenault@logilab.fr> # Date 1223482137 -7200 # Wed Oct 08 18:08:57 2008 +0200 # Node ID 34c8e9feb357f80774590665e5059cc5f411d2e8 # Parent 53e9cd50975e3d705c9fe26e0666f8e90c8fc187 add traverse_scope argument to neged as well diff --git a/nodes.py b/nodes.py --- a/nodes.py +++ b/nodes.py @@ -215,8 +215,8 @@ def ored(self, traverse_scope=False, _fromnode=None): return self.parent.ored(traverse_scope, _fromnode or self) - def neged(self, _fromnode=None): - return self.parent.neged(_fromnode or self) + def neged(self, traverse_scope=False, _fromnode=None): + return self.parent.neged(traverse_scope, _fromnode or self) class Or(BinaryNode): @@ -233,8 +233,8 @@ def ored(self, traverse_scope=False, _fromnode=None): return self - def neged(self, _fromnode=None): - return self.parent.neged(_fromnode or self) + def neged(self, traverse_scope=False, _fromnode=None): + return self.parent.neged(traverse_scope, _fromnode or self) class Not(Node): @@ -257,7 +257,7 @@ # XXX consider traverse_scope ? return self.parent.ored(traverse_scope, _fromnode or self) - def neged(self, _fromnode=None, strict=False): + def neged(self, traverse_scope=False, _fromnode=None, strict=False): return self def parent_scope_property(attr): @@ -320,12 +320,14 @@ return self.parent.ored(traverse_scope, self) return self.parent.ored(traverse_scope, _fromnode) - def neged(self, _fromnode=None, strict=False): - if _fromnode is not None: # stop here - return False - if strict: + def neged(self, traverse_scope=False, _fromnode=None, strict=False): + if not traverse_scope: + if _fromnode is not None: # stop here + return False + return self.parent.neged(self) + elif strict: return isinstance(self.parent, Not) - return self.parent.neged(self) + return self.parent.neged(traverse_scope, _fromnode) class Relation(Node): @@ -389,10 +391,10 @@ def ored(self, traverse_scope=False, _fromnode=None): return self.parent.ored(traverse_scope, _fromnode or self) - def neged(self, _fromnode=None, strict=False): + def neged(self, traverse_scope=False, _fromnode=None, strict=False): if strict: return isinstance(self.parent, Not) - return self.parent.neged(_fromnode or self) + return self.parent.neged(traverse_scope, _fromnode or self) def is_types_restriction(self): if self.r_type not in ('is', 'is_instance_of'): diff --git a/stmts.py b/stmts.py --- a/stmts.py +++ b/stmts.py @@ -163,7 +163,7 @@ def ored(self, traverse_scope=False, _fromnode=None): return None - def neged(self, _fromnode=None, strict=False): + def neged(self, traverse_scope=False, _fromnode=None, strict=False): return None