#NEWLINE# def visit_Assign( self , stmt ) : #NEWLINE# #INDENT# lhs = stmt . lhs #NEWLINE# rhs = stmt . rhs #NEWLINE# if ( lhs . __class__ is Var ) : #NEWLINE# #INDENT# lhs_name = stmt . lhs . name #NEWLINE# rhs_class = rhs . __class__ #NEWLINE# if ( self is Var ) : #NEWLINE# #INDENT# linked_set = self . linked_arrays . get ( lhs_name , set ( [ lhs_name ] ) ) #NEWLINE# rhs_name = stmt . rhs . name #NEWLINE# linked_set . add ( rhs_name ) #NEWLINE# self . linked_arrays [ lhs_name ] = linked_set #NEWLINE# self . linked_arrays [ rhs_name ] = linked_set #NEWLINE# if ( lhs_name in self . array_values ) : #NEWLINE# #INDENT# self . array_values [ rhs_name ] = self . array_values [ lhs_name ] #NEWLINE# #UNINDENT# #UNINDENT# else : #NEWLINE# #INDENT# if ( rhs_class is Range ) : #NEWLINE# #INDENT# self . array_values [ lhs_name ] = RangeArray ( rhs . start , rhs . step , rhs . type . elt_type ) #NEWLINE# #UNINDENT# else : #NEWLINE# #INDENT# if ( rhs_class in ( ConstArray , ConstArrayLike ) ) : #NEWLINE# #INDENT# self . array_values [ lhs_name ] = ConstValue ( value = rhs . value , type = rhs . type ) #NEWLINE# #UNINDENT# else : #NEWLINE# #INDENT# if ( rhs_class is IndexMap ) : #NEWLINE# #INDENT# self . array_values [ lhs_name ] = IndexMapResult ( fn = rhs . fn ) #NEWLINE# #UNINDENT# #UNINDENT# #UNINDENT# #UNINDENT# #UNINDENT# else : #NEWLINE# #INDENT# for tainted_lhs_name in collect_var_names ( lhs ) : #NEWLINE# #INDENT# for linked_name in self . linked_arrays . get ( tainted_lhs_name , set ( [ tainted_lhs_name ] ) ) : #NEWLINE# #INDENT# self . array_values [ linked_name ] = unknown