#NEWLINE# def leaking( self , z , module , name , node , context , * data ) : #NEWLINE# #INDENT# '\n        an expression leaking ...\n\n        assignment nodes into the nearest block list of nodes\n        c++ guys, stay calm\n        ' #NEWLINE# args = ( ( [ node . receiver ] + node . args ) if ( node . type == 'standard_method_call' ) else node . args ) #NEWLINE# z = z ( module , name , args ) #NEWLINE# if ( context == 'expression' ) : #NEWLINE# #INDENT# if isinstance ( z , NormalLeakingNode ) : #NEWLINE# #INDENT# ( leaked_nodes , exp ) = z . as_expression ( ) #NEWLINE# #UNINDENT# else : #NEWLINE# #INDENT# ( leaked_nodes , exp ) = z . as_expression ( ) #NEWLINE# zz = local ( z . temp_name ( getattr ( context , 'default' , '' ) ) , node . pseudo_type ) #NEWLINE# leaked_nodes = z . as_assignment ( zz ) #NEWLINE# exp = local ( zz , node . pseudo_type ) #NEWLINE# #UNINDENT# if ( ( exp is None ) or ( exp . pseudo_type == 'Void' ) ) : #NEWLINE# #INDENT# raise PseudoTypeError ( ( "pseudo can't handle values with void type in expression: %s?%s" % ( module , name ) ) ) #NEWLINE# #UNINDENT# self . leaked_nodes += leaked_nodes #NEWLINE# return exp #NEWLINE# #UNINDENT# else : #NEWLINE# #INDENT# if ( context == 'assignment' ) : #NEWLINE# #INDENT# if isinstance ( z , NormalLeakingNode ) : #NEWLINE# #INDENT# ( leaked_nodes , exp ) = z . as_expression ( ) #NEWLINE# if ( ( exp is None ) or ( exp . pseudo_type == 'Void' ) ) : #NEWLINE# #INDENT# raise PseudoTypeError ( ( "pseudo can't handle values with void type in expression: %s?%s" % ( module , name ) ) ) #NEWLINE# #UNINDENT# self . leaked_nodes += leaked_nodes #NEWLINE# return assignment ( data [ 0 ] , exp ) #NEWLINE# #UNINDENT# else : #NEWLINE# #INDENT# self . leaked_nodes += z . as_assignment ( data [ 0 ] ) #NEWLINE# return None #NEWLINE# #UNINDENT# #UNINDENT# else : #NEWLINE# #INDENT# if ( context == 'block' ) : #NEWLINE# #INDENT# ( leaked_nodes , exp ) = z . as_expression ( ) #NEWLINE# self . leaked_nodes += leaked_nodes #NEWLINE# return exp