Skip to content

Commit f5bed32

Browse files
committed
Generate valid C# with explicit external specializations
Signed-off-by: Dimitar Dobrev <[email protected]>
1 parent 4649052 commit f5bed32

File tree

5 files changed

+17
-4
lines changed

5 files changed

+17
-4
lines changed

src/Generator/Generators/CSharp/CSharpTypePrinter.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -537,11 +537,11 @@ string GetName(Declaration decl)
537537
var names = new Stack<string>();
538538

539539
Declaration ctx;
540-
var specialization = decl as ClassTemplateSpecialization;
541-
if (specialization != null && ContextKind == TypePrinterContextKind.Native)
540+
if (decl is ClassTemplateSpecialization specialization)
542541
{
543542
ctx = specialization.TemplatedDecl.TemplatedClass.Namespace;
544-
if (specialization.OriginalNamespace is Class &&
543+
if (ContextKind == TypePrinterContextKind.Native &&
544+
specialization.OriginalNamespace is Class &&
545545
!(specialization.OriginalNamespace is ClassTemplateSpecialization))
546546
{
547547
names.Push(string.Format("{0}_{1}", decl.OriginalNamespace.Name, decl.Name));

tests/NamespacesBase/NamespacesBase.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ void TemplateClass<T>::setField(const T& value)
7676
}
7777

7878
template <typename T>
79-
class DLL_API TemplateWithIndependentFields
79+
class TemplateWithIndependentFields
8080
{
8181
public:
8282
void useDependentPointer(const T* t);

tests/NamespacesDerived/NamespacesDerived.Tests.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ public class NamespaceDerivedTests
1313
public void TestCodeGeneration()
1414
{
1515
using (new DerivedFromSecondaryBaseInDependency()) { }
16+
using (var der2 = new Derived2())
17+
using (der2.ExplicitExternalSpecialization) { }
1618
}
1719

1820
[Test]

tests/NamespacesDerived/NamespacesDerived.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,11 @@ TemplateClass<int> Derived2::getTemplate()
7070
return t;
7171
}
7272

73+
TemplateWithIndependentFields<int> Derived2::getExplicitExternalSpecialization()
74+
{
75+
return TemplateWithIndependentFields<int>();
76+
}
77+
7378
Abstract* Derived2::getAbstract()
7479
{
7580
return 0;

tests/NamespacesDerived/NamespacesDerived.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,11 @@ class Base3
4545

4646
template <typename T> class TemplateClass;
4747

48+
template<>
49+
class DLL_API TemplateWithIndependentFields<int>
50+
{
51+
};
52+
4853
class DLL_API Derived2 : public Base3
4954
{
5055
public:
@@ -60,6 +65,7 @@ class DLL_API Derived2 : public Base3
6065
void defaultEnumValueFromDependency(OverlappingNamespace::ColorsEnum c = OverlappingNamespace::ColorsEnum::black);
6166

6267
TemplateClass<int> getTemplate();
68+
TemplateWithIndependentFields<int> getExplicitExternalSpecialization();
6369
Abstract* getAbstract();
6470
private:
6571
TemplateClass<int> t;

0 commit comments

Comments
 (0)