Browse Source

Fixed the pass for ambiguity to correctly mark ambiguous functions.

Signed-off-by: Dimitar Dobrev <dpldobrev@yahoo.com>
pull/444/head
Dimitar Dobrev 10 years ago
parent
commit
1cb4b22788
  1. 8
      src/Generator.Tests/AST/TestAST.cs
  2. 20
      src/Generator/Passes/CheckAmbiguousFunctions.cs
  3. 7
      tests/Native/AST.h

8
src/Generator.Tests/AST/TestAST.cs

@ -256,5 +256,13 @@ namespace CppSharp.Generator.Tests.AST @@ -256,5 +256,13 @@ namespace CppSharp.Generator.Tests.AST
//Assert.AreEqual("const int& testConstRefSignature()", AstContext.FindClass("HasConstFunction").Single().FindMethod("testConstRefSignature").Signature);
//Assert.AreEqual("const int& testStaticConstRefSignature()", AstContext.FindClass("HasConstFunction").Single().FindMethod("testStaticConstRefSignature").Signature);
}
[Test]
public void TestAmbiguity()
{
new CheckAmbiguousFunctions { Driver = new Driver(new DriverOptions(), new TextDiagnosticPrinter()) }
.VisitLibrary(AstContext);
Assert.IsTrue(AstContext.FindClass("HasAmbiguousFunctions").Single().FindMethod("ambiguous").IsAmbiguous);
}
}
}

20
src/Generator/Passes/CheckAmbiguousFunctions.cs

@ -45,15 +45,13 @@ namespace CppSharp.Passes @@ -45,15 +45,13 @@ namespace CppSharp.Passes
if (!overload.IsGenerated) continue;
if (!CheckConstness(function, overload))
continue;
if (!CheckDefaultParameters(function, overload))
continue;
if (CheckConstnessForAmbiguity(function, overload) ||
CheckDefaultParametersForAmbiguity(function, overload))
{
function.IsAmbiguous = true;
overload.IsAmbiguous = true;
}
}
if (function.IsAmbiguous)
Driver.Diagnostics.Debug("Found ambiguous overload: {0}",
@ -62,7 +60,7 @@ namespace CppSharp.Passes @@ -62,7 +60,7 @@ namespace CppSharp.Passes
return true;
}
static bool CheckDefaultParameters(Function function, Function overload)
private static bool CheckDefaultParametersForAmbiguity(Function function, Function overload)
{
var commonParameters = Math.Min(function.Parameters.Count, overload.Parameters.Count);
@ -98,7 +96,7 @@ namespace CppSharp.Passes @@ -98,7 +96,7 @@ namespace CppSharp.Passes
return true;
}
static bool CheckConstness(Function function, Function overload)
private static bool CheckConstnessForAmbiguity(Function function, Function overload)
{
if (function is Method && overload is Method)
{
@ -110,17 +108,17 @@ namespace CppSharp.Passes @@ -110,17 +108,17 @@ namespace CppSharp.Passes
if (method1.IsConst && !method2.IsConst && sameParams)
{
method1.ExplicitlyIgnore();
return false;
return true;
}
if (method2.IsConst && !method1.IsConst && sameParams)
{
method2.ExplicitlyIgnore();
return false;
return true;
}
}
return true;
return false;
}
}
}

7
tests/Native/AST.h

@ -84,3 +84,10 @@ inline const TestTemplateClass2 operator+(const TestTemplateClass2& f1, const Te @@ -84,3 +84,10 @@ inline const TestTemplateClass2 operator+(const TestTemplateClass2& f1, const Te
{
return TestTemplateClass2();
}
class HasAmbiguousFunctions
{
public:
void ambiguous();
void ambiguous() const;
};

Loading…
Cancel
Save