public override void Visit(AssignmentStatement node) { // The type of right hand side must match the left hand side // and left hand side needs to be an lvalue. if (node.LeftHandSide is ILValueExpression) { var lhsType = node.LeftHandSide.Type; var rhsType = node.RightHandSide.Type; if (!(rhsType.IsAssignableTo(lhsType))) { // ErrorType should be assignable both ways. Debug.Assert(!(lhsType is ErrorType || rhsType is ErrorType)); ReportError( ErrorTypes.TypeError, String.Format("Incompatible types (expected {0}, found {1}).", lhsType.Name, rhsType.Name), node); } } else if (node.LeftHandSide != ErrorType.GetInstance()) { ReportError( ErrorTypes.LvalueReference, "Assignment receiver expression is not assignable (an lvalue required).", node); } }
public override void Visit(AssignmentStatement node) { if (_pass == 0) { (node.LeftHandSide as ILValueExpression).UsedAsAddress = true; } }
public override void Visit(AssignmentStatement node) { HandleExpressionOrStatementNode(node); }