Browse Source

Use OperatorResolveResult for assignments.

newNRvisualizers
Daniel Grunwald 14 years ago
parent
commit
8389d7add6
  1. 31
      ICSharpCode.NRefactory.CSharp/Ast/Expressions/AssignmentExpression.cs
  2. 6
      ICSharpCode.NRefactory.CSharp/Resolver/ResolveVisitor.cs

31
ICSharpCode.NRefactory.CSharp/Ast/Expressions/AssignmentExpression.cs

@ -25,6 +25,7 @@ @@ -25,6 +25,7 @@
// THE SOFTWARE.
using System;
using System.Linq.Expressions;
namespace ICSharpCode.NRefactory.CSharp
{
@ -115,6 +116,36 @@ namespace ICSharpCode.NRefactory.CSharp @@ -115,6 +116,36 @@ namespace ICSharpCode.NRefactory.CSharp
throw new NotSupportedException("Invalid value for AssignmentOperatorType");
}
}
public static ExpressionType GetLinqNodeType(AssignmentOperatorType op, bool checkForOverflow)
{
switch (op) {
case AssignmentOperatorType.Assign:
return ExpressionType.Assign;
case AssignmentOperatorType.Add:
return checkForOverflow ? ExpressionType.AddAssignChecked : ExpressionType.AddAssign;
case AssignmentOperatorType.Subtract:
return checkForOverflow ? ExpressionType.SubtractAssignChecked : ExpressionType.SubtractAssign;
case AssignmentOperatorType.Multiply:
return checkForOverflow ? ExpressionType.MultiplyAssignChecked : ExpressionType.MultiplyAssign;
case AssignmentOperatorType.Divide:
return ExpressionType.DivideAssign;
case AssignmentOperatorType.Modulus:
return ExpressionType.ModuloAssign;
case AssignmentOperatorType.ShiftLeft:
return ExpressionType.LeftShiftAssign;
case AssignmentOperatorType.ShiftRight:
return ExpressionType.RightShiftAssign;
case AssignmentOperatorType.BitwiseAnd:
return ExpressionType.AndAssign;
case AssignmentOperatorType.BitwiseOr:
return ExpressionType.OrAssign;
case AssignmentOperatorType.ExclusiveOr:
return ExpressionType.ExclusiveOrAssign;
default:
throw new NotSupportedException("Invalid value for AssignmentOperatorType");
}
}
}
public enum AssignmentOperatorType

6
ICSharpCode.NRefactory.CSharp/Resolver/ResolveVisitor.cs

@ -1033,8 +1033,10 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -1033,8 +1033,10 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
{
if (resolverEnabled) {
ResolveResult left = Resolve(assignmentExpression.Left);
ResolveAndProcessConversion(assignmentExpression.Right, left.Type);
return new ResolveResult(left.Type);
ResolveResult right = Resolve(assignmentExpression.Right);
ProcessConversion(assignmentExpression.Right, right, left.Type);
var op = AssignmentExpression.GetLinqNodeType(assignmentExpression.Operator, resolver.CheckForOverflow);
return new OperatorResolveResult(left.Type, op, left, right);
} else {
ScanChildren(assignmentExpression);
return null;

Loading…
Cancel
Save