#NEWLINE# def visit_merge( self , merge ) : #NEWLINE# #INDENT# '\n    If both sides of a flow merge are a locally created \n    array originating on the same statement, then \n    also mark the new phi-bound variable as also being \n    that local array. \n    \n    Similarly, if both sides are the same local pointer \n    allocation, then propagate that information to the \n    new variable being created by a phi-node\n    ' #NEWLINE# for ( new_name , ( left , right ) ) in merge . iteritems ( ) : #NEWLINE# #INDENT# if ( ( left . __class__ is Var ) and ( right . __class__ is Var ) ) : #NEWLINE# #INDENT# left_name = left . name #NEWLINE# right_name = right . name #NEWLINE# if ( ( left . type . __class__ is ArrayT ) and ( left_name in self . local_arrays ) and ( right_name in self . local_arrays ) ) : #NEWLINE# #INDENT# left_stmt = self . local_arrays [ left_name ] #NEWLINE# right_stmt = self . local_arrays [ right_name ] #NEWLINE# if ( left_stmt == right_stmt ) : #NEWLINE# #INDENT# self . local_arrays [ new_name ] = left_stmt #NEWLINE# if ( left . name in self . array_to_alloc_name ) : #NEWLINE# #INDENT# self . array_to_alloc [ new_name ] = self . array_to_alloc [ left . name ] #NEWLINE# #UNINDENT# #UNINDENT# #UNINDENT# else : #NEWLINE# #INDENT# if ( ( left . type . __class__ is PtrT ) and ( left_name in self . local_allocs ) and ( right_name in self . local_allocs ) ) : #NEWLINE# #INDENT# left_stmt = self . local_allocs [ left_name ] #NEWLINE# right_stmt = self . local_allocs [ right_name ] #NEWLINE# if ( left_stmt == right_stmt ) : #NEWLINE# #INDENT# self . local_allocs [ new_name ] = left_stmt