Browse Source

Fix icsharpcode/NRefactory#19: OperatorResolveResult.IsLiftedOperator is false for lifted built-in operators.

newNRvisualizers
Daniel Grunwald 14 years ago
parent
commit
a731b9371e
  1. 5
      ICSharpCode.NRefactory.CSharp/Resolver/CSharpResolver.cs
  2. 30
      ICSharpCode.NRefactory.Tests/CSharp/Resolver/BinaryOperatorTests.cs
  3. 3
      ICSharpCode.NRefactory.Tests/ICSharpCode.NRefactory.Tests.csproj

5
ICSharpCode.NRefactory.CSharp/Resolver/CSharpResolver.cs

@ -804,6 +804,11 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
} else { } else {
lhs = Convert(lhs, m.Parameters[0].Type, builtinOperatorOR.ArgumentConversions[0]); lhs = Convert(lhs, m.Parameters[0].Type, builtinOperatorOR.ArgumentConversions[0]);
rhs = Convert(rhs, m.Parameters[1].Type, builtinOperatorOR.ArgumentConversions[1]); rhs = Convert(rhs, m.Parameters[1].Type, builtinOperatorOR.ArgumentConversions[1]);
if (builtinOperatorOR.BestCandidate is OverloadResolution.ILiftedOperator) {
return new OperatorResolveResult(
resultType, BinaryOperatorExpression.GetLinqNodeType(op, this.CheckForOverflow),
null, true, new[] { lhs, rhs });
}
return BinaryOperatorResolveResult(resultType, lhs, op, rhs); return BinaryOperatorResolveResult(resultType, lhs, op, rhs);
} }
} }

30
ICSharpCode.NRefactory.Tests/CSharp/Resolver/BinaryOperatorTests.cs

@ -671,5 +671,35 @@ class Test {
Assert.IsFalse(irr.IsError); Assert.IsFalse(irr.IsError);
Assert.AreEqual(compilation.FindType(KnownTypeCode.Boolean), irr.Type); Assert.AreEqual(compilation.FindType(KnownTypeCode.Boolean), irr.Type);
} }
[Test]
public void IsLiftedProperty()
{
string program = @"
class Test {
static void Inc() {
int? a = 0, b = 0;
int? c = $a + b$;
}
}";
var irr = Resolve<OperatorResolveResult>(program);
Assert.IsFalse(irr.IsError);
Assert.IsTrue(irr.IsLiftedOperator);
}
[Test]
public void IsLiftedProperty2()
{
string program = @"
class Test {
static void Inc() {
int? a = 0, b = 0;
$b += a$;
}
}";
var irr = Resolve<OperatorResolveResult>(program);
Assert.IsFalse(irr.IsError);
Assert.IsTrue(irr.IsLiftedOperator);
}
} }
} }

3
ICSharpCode.NRefactory.Tests/ICSharpCode.NRefactory.Tests.csproj

@ -72,7 +72,8 @@
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
<Reference Include="System.Xml.Linq" /> <Reference Include="System.Xml.Linq" />
<Reference Include="nunit.framework, Version=2.6.0.0, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77"> <Reference Include="nunit.framework, Version=2.6.0.0, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77">
<Private>False</Private> <HintPath>..\..\Mono.Cecil\Test\libs\nunit-2.5.10\nunit.framework.dll</HintPath>
<Private>True</Private>
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
</Reference> </Reference>
</ItemGroup> </ItemGroup>

Loading…
Cancel
Save