diff --git a/nodes.py b/nodes.py index 53e9cd50975e3d705c9fe26e0666f8e90c8fc187_bm9kZXMucHk=..34c8e9feb357f80774590665e5059cc5f411d2e8_bm9kZXMucHk= 100644 --- 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,8 +320,10 @@ 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) @@ -327,5 +329,5 @@ return isinstance(self.parent, Not) - return self.parent.neged(self) + return self.parent.neged(traverse_scope, _fromnode) class Relation(Node): @@ -389,6 +391,6 @@ 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) @@ -393,6 +395,6 @@ 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 index 53e9cd50975e3d705c9fe26e0666f8e90c8fc187_c3RtdHMucHk=..34c8e9feb357f80774590665e5059cc5f411d2e8_c3RtdHMucHk= 100644 --- 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