+
+ if(assign.oper->token[0]!='=')
+ return visit(assign, true);
+ else if(assign.left->type!=assign.right->type)
+ {
+ BasicTypeDeclaration *basic_left = dynamic_cast<BasicTypeDeclaration *>(assign.left->type);
+ BasicTypeDeclaration *basic_right = dynamic_cast<BasicTypeDeclaration *>(assign.right->type);
+ if(!basic_left || !basic_right)
+ return;
+
+ Compatibility compat = get_compatibility(*basic_left, *basic_right);
+ if(compat==RIGHT_CONVERTIBLE)
+ convert_to(assign.right, *basic_left);
+ else if(compat!=SAME_TYPE)
+ return;
+ }
+
+ resolve(assign, assign.left->type, true);