Browse Source

The unique name set by the CleanInvalidDeclNames pass will now truly be unique across translation units.

pull/229/head
Elias Holzer 11 years ago
parent
commit
d1a3141f5b
  1. 15
      src/Generator.Tests/Passes/TestPasses.cs
  2. 22
      src/Generator/Passes/CleanInvalidDeclNamesPass.cs
  3. 9
      tests/Native/Enums.h
  4. 8
      tests/Native/Passes.h

15
src/Generator.Tests/Passes/TestPasses.cs

@ -1,4 +1,5 @@ @@ -1,4 +1,5 @@
using System.Linq;
using CppSharp;
using CppSharp.Passes;
using NUnit.Framework;
@ -115,6 +116,20 @@ namespace CppSharp.Generator.Tests.Passes @@ -115,6 +116,20 @@ namespace CppSharp.Generator.Tests.Passes
Assert.AreEqual(4, unnamedEnum2.Items[1].Value);
}
[Test]
public void TestUniqueNamesAcrossTranslationUnits()
{
passBuilder.AddPass(new CleanInvalidDeclNamesPass());
passBuilder.RunPasses(pass => pass.VisitLibrary(AstContext));
var unnamedEnum1 = AstContext.GetEnumWithMatchingItem("UnnamedEnumA1");
var unnamedEnum2 = AstContext.GetEnumWithMatchingItem("UnnamedEnumB1");
Assert.IsNotNull(unnamedEnum1);
Assert.IsNotNull(unnamedEnum2);
Assert.AreNotEqual(unnamedEnum1.Name, unnamedEnum2.Name);
}
[Test]
public void TestStructInheritance()
{

22
src/Generator/Passes/CleanInvalidDeclNamesPass.cs

@ -68,23 +68,30 @@ namespace CppSharp.Passes @@ -68,23 +68,30 @@ namespace CppSharp.Passes
}
}
return base.VisitClassDecl(@class);
var currentUniqueName = this.uniqueName;
this.uniqueName = 0;
var ret = base.VisitClassDecl(@class);
this.uniqueName = currentUniqueName;
return ret;
}
public override bool VisitFunctionDecl(Function function)
{
uniqueName = 0;
var currentUniqueName = this.uniqueName;
this.uniqueName = 0;
var ret = base.VisitFunctionDecl(function);
uniqueName = 0;
this.uniqueName = currentUniqueName;
return ret;
}
public override bool VisitEvent(Event @event)
{
uniqueName = 0;
var currentUniqueName = this.uniqueName;
this.uniqueName = 0;
var ret = base.VisitEvent(@event);
uniqueName = 0;
this.uniqueName = currentUniqueName;
return ret;
}
@ -92,9 +99,10 @@ namespace CppSharp.Passes @@ -92,9 +99,10 @@ namespace CppSharp.Passes
public override bool VisitFunctionType(FunctionType type,
TypeQualifiers quals)
{
uniqueName = 0;
var currentUniqueName = this.uniqueName;
this.uniqueName = 0;
var ret = base.VisitFunctionType(type, quals);
uniqueName = 0;
this.uniqueName = currentUniqueName;
return ret;
}

9
tests/Native/Enums.h

@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
enum
{
UnnamedEnumA1,
EnumUnnamedA2
};
// This line will make sure that a visitor won't enumerate all enums across
// different translation units at once.
struct TestUniqueNames {};

8
tests/Native/Passes.h

@ -37,3 +37,11 @@ struct S2 : S1 { int F3; }; @@ -37,3 +37,11 @@ struct S2 : S1 { int F3; };
// Tests unnamed enums
enum { Unnamed_Enum_1_A = 1, Unnamed_Enum_1_B = 2 };
enum { Unnamed_Enum_2_A = 3, Unnamed_Enum_2_B = 4 };
// Tests unique name for unnamed enums across translation units
#include "Enums.h"
enum
{
UnnamedEnumB1,
EnumUnnamedB2
};
Loading…
Cancel
Save