@@ -122,6 +122,14 @@ def _infer_metaclass(node):
122122 elif isinstance (node , Attribute ):
123123 return node .attr
124124
125+ def _create_yield_node (node , parent , rebuilder , factory ):
126+ newnode = factory ()
127+ _lineno_parent (node , newnode , parent )
128+ if node .value is not None :
129+ newnode .value = rebuilder .visit (node .value , newnode )
130+ newnode .set_line_info (newnode .last_child ())
131+ return newnode
132+
125133
126134class TreeRebuilder (object ):
127135 """Rebuilds the _ast tree to become an Astroid tree"""
@@ -134,25 +142,7 @@ def __init__(self, manager):
134142 self ._from_nodes = []
135143 self ._delayed_assattr = []
136144 self ._visit_meths = {}
137-
138- def _transform (self , node ):
139- try :
140- transforms = self ._manager .transforms [type (node )]
141- except KeyError :
142- return node # no transform registered for this class of node
143- orig_node = node # copy the reference
144- for transform_func , predicate in transforms :
145- if predicate is None or predicate (node ):
146- ret = transform_func (node )
147- # if the transformation function returns something, it's
148- # expected to be a replacement for the node
149- if ret is not None :
150- if node is not orig_node :
151- # node has already be modified by some previous
152- # transformation, warn about it
153- warn ('node %s substitued multiple times' % node )
154- node = ret
155- return node
145+ self ._transform = manager .transform
156146
157147 def visit_module (self , node , modname , package ):
158148 """visit a Module node by returning a fresh instance of it"""
@@ -837,13 +827,7 @@ def visit_with(self, node, parent):
837827
838828 def visit_yield (self , node , parent ):
839829 """visit a Yield node by returning a fresh instance of it"""
840- newnode = new .Yield ()
841- _lineno_parent (node , newnode , parent )
842- if node .value is not None :
843- newnode .value = self .visit (node .value , newnode )
844- newnode .set_line_info (newnode .last_child ())
845- return newnode
846-
830+ return _create_yield_node (node , parent , self , new .Yield )
847831
848832class TreeRebuilder3k (TreeRebuilder ):
849833 """extend and overwrite TreeRebuilder for python3k"""
@@ -954,7 +938,7 @@ def visit_child(child):
954938 return newnode
955939
956940 def visit_yieldfrom (self , node , parent ):
957- return self . visit_yield (node , parent )
941+ return _create_yield_node (node , parent , self , new . YieldFrom )
958942
959943 def visit_class (self , node , parent ):
960944 newnode = super (TreeRebuilder3k , self ).visit_class (node , parent )
0 commit comments