summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rebuilder.py7
-rw-r--r--test/unittest_builder.py15
2 files changed, 19 insertions, 3 deletions
diff --git a/rebuilder.py b/rebuilder.py
index b7378709..f46640a2 100644
--- a/rebuilder.py
+++ b/rebuilder.py
@@ -158,7 +158,6 @@ class RebuildVisitor(ASTVisitor):
# no base classes, detect new / style old style according to
# current scope
node._newstyle = metaclass == 'type'
- node.basenames = [as_string(bnode) for bnode in node.bases]
leave_classdef = leave_class
@@ -262,8 +261,6 @@ class RebuildVisitor(ASTVisitor):
self._add_local(node, node.name)
visit_delname = visit_assname
- # # delayed methods
-
def delayed_visit_assattr(self, node):
"""visit a AssAttr node -> add name to locals, handle members
definition
@@ -277,6 +274,10 @@ class RebuildVisitor(ASTVisitor):
if infered.__class__ is nodes.Instance:
infered = infered._proxied
iattrs = infered.instance_attrs
+ elif isinstance(infered, nodes.Instance):
+ # Const, Tuple, ... we may be wrong, may be not, but
+ # anyway we don't want to pollute builtin's namespace
+ continue
else:
iattrs = infered.locals
except AttributeError:
diff --git a/test/unittest_builder.py b/test/unittest_builder.py
index 42eeb67d..deff2957 100644
--- a/test/unittest_builder.py
+++ b/test/unittest_builder.py
@@ -505,6 +505,21 @@ A.ass_type = A_ass_type
def test_dumb_module(self):
astng = self.builder.string_build("pouet")
+
+ def test_infered_dont_pollute(self):
+ code = '''
+def func(a=None):
+ a.custom_attr = 0
+def func2(a={}):
+ a.custom_attr = 0
+ '''
+ astng = self.builder.string_build(code)
+ nonetype = nodes.const_factory(None)
+ self.failIf('custom_attr' in nonetype.locals)
+ self.failIf('custom_attr' in nonetype.instance_attrs)
+ nonetype = nodes.const_factory({})
+ self.failIf('custom_attr' in nonetype.locals)
+ self.failIf('custom_attr' in nonetype.instance_attrs)
if __name__ == '__main__':
unittest_main()