diff --git a/src/CLI/Generator.cs b/src/CLI/Generator.cs
index 58db9ac7..a1b584ce 100644
--- a/src/CLI/Generator.cs
+++ b/src/CLI/Generator.cs
@@ -230,11 +230,11 @@ namespace CppSharp
{
switch (kind)
{
- case GeneratorKind.CLI:
+ case var _ when ReferenceEquals(kind, GeneratorKind.CLI):
return "C++/CLI";
- case GeneratorKind.CSharp:
+ case var _ when ReferenceEquals(kind, GeneratorKind.CSharp):
return "C#";
- case GeneratorKind.NAPI:
+ case var _ when ReferenceEquals(kind, GeneratorKind.NAPI):
return "N-API";
default:
return kind.ToString();
diff --git a/src/CppParser/Bootstrap/Bootstrap.cs b/src/CppParser/Bootstrap/Bootstrap.cs
index 2e8b4d63..a19db6c5 100644
--- a/src/CppParser/Bootstrap/Bootstrap.cs
+++ b/src/CppParser/Bootstrap/Bootstrap.cs
@@ -1778,8 +1778,7 @@ namespace CppSharp
return qualifiedName;
}
- public static string GetDeclName(Declaration decl,
- GeneratorKind kind = GeneratorKind.CPlusPlus)
+ public static string GetDeclName(Declaration decl, GeneratorKind kind)
{
string name = decl.Name;
@@ -1811,6 +1810,11 @@ namespace CppSharp
return name;
}
+ public static string GetDeclName(Declaration decl)
+ {
+ return GetDeclName(decl, GeneratorKind.CPlusPlus);
+ }
+
public static AST.Type GetDeclType(AST.Type type,
TypePrinter typePrinter)
{
diff --git a/src/Generator/Driver.cs b/src/Generator/Driver.cs
index 0751fa1c..9c779add 100644
--- a/src/Generator/Driver.cs
+++ b/src/Generator/Driver.cs
@@ -36,21 +36,21 @@ namespace CppSharp
{
switch (kind)
{
- case GeneratorKind.C:
+ case var _ when ReferenceEquals(kind, GeneratorKind.C):
return new CGenerator(Context);
- case GeneratorKind.CPlusPlus:
+ case var _ when ReferenceEquals(kind, GeneratorKind.CPlusPlus):
return new CppGenerator(Context);
- case GeneratorKind.CLI:
+ case var _ when ReferenceEquals(kind, GeneratorKind.CLI):
return new CLIGenerator(Context);
- case GeneratorKind.CSharp:
+ case var _ when ReferenceEquals(kind, GeneratorKind.CSharp):
return new CSharpGenerator(Context);
- case GeneratorKind.Emscripten:
+ case var _ when ReferenceEquals(kind, GeneratorKind.Emscripten):
return new EmscriptenGenerator(Context);
- case GeneratorKind.QuickJS:
+ case var _ when ReferenceEquals(kind, GeneratorKind.QuickJS):
return new QuickJSGenerator(Context);
- case GeneratorKind.NAPI:
+ case var _ when ReferenceEquals(kind, GeneratorKind.NAPI):
return new NAPIGenerator(Context);
- case GeneratorKind.TypeScript:
+ case var _ when ReferenceEquals(kind, GeneratorKind.TypeScript):
return new TSGenerator(Context);
}
diff --git a/src/Generator/Generator.cs b/src/Generator/Generator.cs
index cf414b48..1593a855 100644
--- a/src/Generator/Generator.cs
+++ b/src/Generator/Generator.cs
@@ -5,24 +5,6 @@ using CppSharp.AST;
namespace CppSharp.Generators
{
- ///
- /// Kinds of language generators.
- ///
- public enum GeneratorKind
- {
- CLI = 1,
- CSharp = 2,
- C,
- CPlusPlus,
- Emscripten,
- ObjectiveC,
- Java,
- Swift,
- QuickJS,
- NAPI,
- TypeScript
- }
-
///
/// Output generated by each backend generator.
///
diff --git a/src/Generator/GeneratorKind.cs b/src/Generator/GeneratorKind.cs
new file mode 100644
index 00000000..e6130ebf
--- /dev/null
+++ b/src/Generator/GeneratorKind.cs
@@ -0,0 +1,102 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using CppSharp.AST;
+
+namespace CppSharp.Generators
+{
+ ///
+ /// Kinds of language generators.
+ ///
+ public class GeneratorKind : IEquatable
+ {
+ private static HashSet s_registeredIDSet = new();
+
+ public string ID { get; }
+
+ public GeneratorKind(string id)
+ {
+ if (s_registeredIDSet.Contains(id))
+ {
+ throw new Exception($"GeneratorKind has an already registered ID: {ID}");
+ }
+ ID = id;
+ s_registeredIDSet.Add(id);
+ }
+
+ public static bool operator ==(GeneratorKind obj1, GeneratorKind obj2)
+ {
+ if (ReferenceEquals(obj1, obj2))
+ {
+ return true;
+ }
+ if (obj1 is null)
+ {
+ return false;
+ }
+ if (obj2 is null)
+ {
+ return false;
+ }
+ return obj1.Equals(obj2);
+ }
+
+ public static bool operator !=(GeneratorKind obj1, GeneratorKind obj2) => !(obj1 == obj2);
+
+ public bool Equals(GeneratorKind? other)
+ {
+ if (other is null)
+ {
+ return false;
+ }
+ if (ReferenceEquals(this, other))
+ {
+ return true;
+ }
+ return ID.Equals(other.ID);
+ }
+
+ public override bool Equals(object? obj) => Equals(obj as GeneratorKind);
+
+ public override int GetHashCode()
+ {
+ unchecked
+ {
+ return ID.GetHashCode();
+ }
+ }
+
+ public const string CLI_ID = "CLI";
+ public static readonly GeneratorKind CLI = new(CLI_ID);
+
+ public const string CSharp_ID = "CSharp";
+ public static readonly GeneratorKind CSharp = new(CSharp_ID);
+
+ public const string C_ID = "C";
+ public static readonly GeneratorKind C = new(C_ID);
+
+ public const string CPlusPlus_ID = "CPlusPlus";
+ public static readonly GeneratorKind CPlusPlus = new(CPlusPlus_ID);
+
+ public const string Emscripten_ID = "Emscripten";
+ public static readonly GeneratorKind Emscripten = new(Emscripten_ID);
+
+ public const string ObjectiveC_ID = "ObjectiveC";
+ public static readonly GeneratorKind ObjectiveC = new(ObjectiveC_ID);
+
+ public const string Java_ID = "Java";
+ public static readonly GeneratorKind Java = new(Java_ID);
+
+ public const string Swift_ID = "Swift";
+ public static readonly GeneratorKind Swift = new(Swift_ID);
+
+ public const string QuickJS_ID = "QuickJS";
+ public static readonly GeneratorKind QuickJS = new(QuickJS_ID);
+
+ public const string NAPI_ID = "NAPI";
+ public static readonly GeneratorKind NAPI = new(NAPI_ID);
+
+ public const string TypeScript_ID = "TypeScript";
+ public static readonly GeneratorKind TypeScript = new(TypeScript_ID);
+ }
+}
\ No newline at end of file
diff --git a/src/Generator/Generators/ExtensionMethods.cs b/src/Generator/Generators/ExtensionMethods.cs
index eb4d621a..ee4b1054 100644
--- a/src/Generator/Generators/ExtensionMethods.cs
+++ b/src/Generator/Generators/ExtensionMethods.cs
@@ -65,9 +65,9 @@ namespace CppSharp.Generators
switch (generatorKind)
{
- case GeneratorKind.CLI:
+ case var _ when ReferenceEquals(generatorKind, GeneratorKind.CLI):
return typeMap.CLISignatureType(typePrinterContext).Desugar();
- case GeneratorKind.CSharp:
+ case var _ when ReferenceEquals(generatorKind, GeneratorKind.CSharp):
return typeMap.CSharpSignatureType(typePrinterContext).Desugar();
}
}
diff --git a/src/Generator/Passes/CheckDuplicatedNamesPass.cs b/src/Generator/Passes/CheckDuplicatedNamesPass.cs
index 0a2d7622..0a520be2 100644
--- a/src/Generator/Passes/CheckDuplicatedNamesPass.cs
+++ b/src/Generator/Passes/CheckDuplicatedNamesPass.cs
@@ -202,22 +202,22 @@ namespace CppSharp.Passes
TypePrinter typePrinter;
switch (kind)
{
- case GeneratorKind.C:
+ case var _ when ReferenceEquals(kind, GeneratorKind.C):
typePrinter = new CppTypePrinter(Context) { PrintFlavorKind = CppTypePrintFlavorKind.C };
break;
- case GeneratorKind.Emscripten:
+ case var _ when ReferenceEquals(kind, GeneratorKind.Emscripten):
typePrinter = new EmscriptenTypePrinter(Context);
break;;
- case GeneratorKind.CPlusPlus:
- case GeneratorKind.QuickJS:
- case GeneratorKind.NAPI:
- case GeneratorKind.TypeScript:
+ case var _ when ReferenceEquals(kind, GeneratorKind.CPlusPlus):
+ case var _ when ReferenceEquals(kind, GeneratorKind.QuickJS):
+ case var _ when ReferenceEquals(kind, GeneratorKind.NAPI):
+ case var _ when ReferenceEquals(kind, GeneratorKind.TypeScript):
typePrinter = new CppTypePrinter(Context);
break;
- case GeneratorKind.CLI:
+ case var _ when ReferenceEquals(kind, GeneratorKind.CLI):
typePrinter = new CLITypePrinter(Context);
break;
- case GeneratorKind.CSharp:
+ case var _ when ReferenceEquals(kind, GeneratorKind.CSharp):
typePrinter = new CSharpTypePrinter(Context);
break;
default:
diff --git a/src/Generator/Passes/ValidateOperatorsPass.cs b/src/Generator/Passes/ValidateOperatorsPass.cs
index b1f86db1..49fe8d01 100644
--- a/src/Generator/Passes/ValidateOperatorsPass.cs
+++ b/src/Generator/Passes/ValidateOperatorsPass.cs
@@ -83,11 +83,12 @@ namespace CppSharp.Passes
{
Parameter parameter = @operator.Parameters.Last();
Type type = parameter.Type.Desugar();
- switch (Options.GeneratorKind)
+ var kind = Options.GeneratorKind;
+ switch (kind)
{
- case GeneratorKind.CLI:
+ case var _ when ReferenceEquals(kind, GeneratorKind.CLI):
return type.IsPrimitiveType(PrimitiveType.Int);
- case GeneratorKind.CSharp:
+ case var _ when ReferenceEquals(kind, GeneratorKind.CSharp):
Types.TypeMap typeMap;
if (Context.TypeMaps.FindTypeMap(type, out typeMap))
{
diff --git a/src/Generator/Types/DeclMap.cs b/src/Generator/Types/DeclMap.cs
index 5028466c..d1e9b63f 100644
--- a/src/Generator/Types/DeclMap.cs
+++ b/src/Generator/Types/DeclMap.cs
@@ -35,7 +35,7 @@ namespace CppSharp.Types
{
public GeneratorKind GeneratorKind { get; set; }
- public DeclMapAttribute() : this(0)
+ public DeclMapAttribute()
{
}
diff --git a/src/Generator/Types/DeclMapDatabase.cs b/src/Generator/Types/DeclMapDatabase.cs
index 7cb891c3..2bdc7b09 100644
--- a/src/Generator/Types/DeclMapDatabase.cs
+++ b/src/Generator/Types/DeclMapDatabase.cs
@@ -41,7 +41,7 @@ namespace CppSharp.Types
var attrs = type.GetCustomAttributes(typeof(DeclMapAttribute), true);
foreach (DeclMapAttribute attr in attrs)
{
- if (attr.GeneratorKind == 0 ||
+ if (attr.GeneratorKind == null ||
attr.GeneratorKind == bindingContext.Options.GeneratorKind)
{
var declMap = (DeclMap)Activator.CreateInstance(type);
diff --git a/src/Generator/Types/Std/Stdlib.CLI.cs b/src/Generator/Types/Std/Stdlib.CLI.cs
index d067c958..8db2058f 100644
--- a/src/Generator/Types/Std/Stdlib.CLI.cs
+++ b/src/Generator/Types/Std/Stdlib.CLI.cs
@@ -9,7 +9,7 @@ using CppSharp.Generators.CSharp;
namespace CppSharp.Types.Std
{
- [TypeMap("const char*", GeneratorKind = GeneratorKind.CLI)]
+ [TypeMap("const char*", GeneratorKindID = GeneratorKind.CLI_ID)]
public partial class ConstCharPointer : TypeMap
{
public override Type CLISignatureType(TypePrinterContext ctx)
@@ -62,27 +62,27 @@ namespace CppSharp.Types.Std
}
}
- [TypeMap("const char[]", GeneratorKind = GeneratorKind.CLI)]
+ [TypeMap("const char[]", GeneratorKindID = GeneratorKind.CLI_ID)]
public partial class ConstCharArray : ConstCharPointer
{
}
- [TypeMap("const wchar_t*", GeneratorKind = GeneratorKind.CLI)]
+ [TypeMap("const wchar_t*", GeneratorKindID = GeneratorKind.CLI_ID)]
public partial class ConstWCharTPointer : ConstCharPointer
{
}
- [TypeMap("const char16_t*", GeneratorKind = GeneratorKind.CLI)]
+ [TypeMap("const char16_t*", GeneratorKindID = GeneratorKind.CLI_ID)]
public partial class ConstChar16TPointer : ConstCharPointer
{
}
- [TypeMap("const char32_t*", GeneratorKind = GeneratorKind.CLI)]
+ [TypeMap("const char32_t*", GeneratorKindID = GeneratorKind.CLI_ID)]
public partial class ConstChar32TPointer : ConstCharPointer
{
}
- [TypeMap("basic_string, allocator>", GeneratorKind = GeneratorKind.CLI)]
+ [TypeMap("basic_string, allocator>", GeneratorKindID = GeneratorKind.CLI_ID)]
public partial class String : TypeMap
{
public override Type CLISignatureType(TypePrinterContext ctx)
@@ -103,7 +103,7 @@ namespace CppSharp.Types.Std
}
}
- [TypeMap("std::wstring", GeneratorKind = GeneratorKind.CLI)]
+ [TypeMap("std::wstring", GeneratorKindID = GeneratorKind.CLI_ID)]
public partial class WString : TypeMap
{
public override Type CLISignatureType(TypePrinterContext ctx)
@@ -124,7 +124,7 @@ namespace CppSharp.Types.Std
}
}
- [TypeMap("std::vector", GeneratorKind = GeneratorKind.CLI)]
+ [TypeMap("std::vector", GeneratorKindID = GeneratorKind.CLI_ID)]
public partial class Vector : TypeMap
{
public override bool IsIgnored
@@ -258,7 +258,7 @@ namespace CppSharp.Types.Std
}
}
- [TypeMap("std::map", GeneratorKind = GeneratorKind.CLI)]
+ [TypeMap("std::map", GeneratorKindID = GeneratorKind.CLI_ID)]
public partial class Map : TypeMap
{
public override bool IsIgnored { get { return true; } }
@@ -293,19 +293,19 @@ namespace CppSharp.Types.Std
}
}
- [TypeMap("std::list", GeneratorKind = GeneratorKind.CLI)]
+ [TypeMap("std::list", GeneratorKindID = GeneratorKind.CLI_ID)]
public partial class List : TypeMap
{
public override bool IsIgnored { get { return true; } }
}
- [TypeMap("std::shared_ptr", GeneratorKind = GeneratorKind.CLI)]
+ [TypeMap("std::shared_ptr", GeneratorKindID = GeneratorKind.CLI_ID)]
public partial class SharedPtr : TypeMap
{
public override bool IsIgnored { get { return true; } }
}
- [TypeMap("basic_ostream>", GeneratorKind.CLI)]
+ [TypeMap("basic_ostream>", GeneratorKind.CLI_ID)]
public partial class OStream : TypeMap
{
public override Type CLISignatureType(TypePrinterContext ctx)
@@ -325,7 +325,7 @@ namespace CppSharp.Types.Std
}
}
- [TypeMap("std::nullptr_t", GeneratorKind = GeneratorKind.CLI)]
+ [TypeMap("std::nullptr_t", GeneratorKindID = GeneratorKind.CLI_ID)]
public partial class NullPtr : TypeMap
{
public override bool DoesMarshalling { get { return false; } }
diff --git a/src/Generator/Types/Std/Stdlib.CSharp.cs b/src/Generator/Types/Std/Stdlib.CSharp.cs
index e394c40c..a3c3d6d5 100644
--- a/src/Generator/Types/Std/Stdlib.CSharp.cs
+++ b/src/Generator/Types/Std/Stdlib.CSharp.cs
@@ -11,35 +11,35 @@ using Type = CppSharp.AST.Type;
namespace CppSharp.Types.Std
{
- [TypeMap("int", GeneratorKind = GeneratorKind.CSharp)]
+ [TypeMap("int", GeneratorKindID = GeneratorKind.CSharp_ID)]
public partial class Int : TypeMap
{
public override Type CSharpSignatureType(TypePrinterContext ctx) =>
CSharpTypePrinter.GetSignedType(Context.TargetInfo.IntWidth);
}
- [TypeMap("unsigned int", GeneratorKind = GeneratorKind.CSharp)]
+ [TypeMap("unsigned int", GeneratorKindID = GeneratorKind.CSharp_ID)]
public partial class UnsignedInt : TypeMap
{
public override Type CSharpSignatureType(TypePrinterContext ctx) =>
CSharpTypePrinter.GetUnsignedType(Context.TargetInfo.IntWidth);
}
- [TypeMap("long", GeneratorKind = GeneratorKind.CSharp)]
+ [TypeMap("long", GeneratorKindID = GeneratorKind.CSharp_ID)]
public partial class Long : TypeMap
{
public override Type CSharpSignatureType(TypePrinterContext ctx) =>
CSharpTypePrinter.GetSignedType(Context.TargetInfo.LongWidth);
}
- [TypeMap("unsigned long", GeneratorKind = GeneratorKind.CSharp)]
+ [TypeMap("unsigned long", GeneratorKindID = GeneratorKind.CSharp_ID)]
public partial class UnsignedLong : TypeMap
{
public override Type CSharpSignatureType(TypePrinterContext ctx) =>
CSharpTypePrinter.GetUnsignedType(Context.TargetInfo.LongWidth);
}
- [TypeMap("char", GeneratorKind = GeneratorKind.CSharp)]
+ [TypeMap("char", GeneratorKindID = GeneratorKind.CSharp_ID)]
public partial class Char : TypeMap
{
public override Type CSharpSignatureType(TypePrinterContext ctx)
@@ -67,7 +67,7 @@ namespace CppSharp.Types.Std
}
}
- [TypeMap("char16_t", GeneratorKind = GeneratorKind.CSharp)]
+ [TypeMap("char16_t", GeneratorKindID = GeneratorKind.CSharp_ID)]
public partial class Char16T : TypeMap
{
public override Type CSharpSignatureType(TypePrinterContext ctx)
@@ -76,7 +76,7 @@ namespace CppSharp.Types.Std
}
}
- [TypeMap("wchar_t", GeneratorKind = GeneratorKind.CSharp)]
+ [TypeMap("wchar_t", GeneratorKindID = GeneratorKind.CSharp_ID)]
public partial class WCharT : TypeMap
{
public override Type CSharpSignatureType(TypePrinterContext ctx)
@@ -85,7 +85,7 @@ namespace CppSharp.Types.Std
}
}
- [TypeMap("const char*", GeneratorKind = GeneratorKind.CSharp)]
+ [TypeMap("const char*", GeneratorKindID = GeneratorKind.CSharp_ID)]
public partial class ConstCharPointer : TypeMap
{
public override Type CSharpSignatureType(TypePrinterContext ctx)
@@ -281,27 +281,27 @@ namespace CppSharp.Types.Std
}
}
- [TypeMap("const char[]", GeneratorKind = GeneratorKind.CSharp)]
+ [TypeMap("const char[]", GeneratorKindID = GeneratorKind.CSharp_ID)]
public partial class ConstCharArray : ConstCharPointer
{
}
- [TypeMap("const wchar_t*", GeneratorKind = GeneratorKind.CSharp)]
+ [TypeMap("const wchar_t*", GeneratorKindID = GeneratorKind.CSharp_ID)]
public partial class ConstWCharTPointer : ConstCharPointer
{
}
- [TypeMap("const char16_t*", GeneratorKind = GeneratorKind.CSharp)]
+ [TypeMap("const char16_t*", GeneratorKindID = GeneratorKind.CSharp_ID)]
public partial class ConstChar16TPointer : ConstCharPointer
{
}
- [TypeMap("const char32_t*", GeneratorKind = GeneratorKind.CSharp)]
+ [TypeMap("const char32_t*", GeneratorKindID = GeneratorKind.CSharp_ID)]
public partial class ConstChar32TPointer : ConstCharPointer
{
}
- [TypeMap("basic_string, allocator>", GeneratorKind = GeneratorKind.CSharp)]
+ [TypeMap("basic_string, allocator>", GeneratorKindID = GeneratorKind.CSharp_ID)]
public partial class String : TypeMap
{
public override Type CSharpSignatureType(TypePrinterContext ctx)
@@ -420,7 +420,7 @@ namespace CppSharp.Types.Std
}
}
- [TypeMap("FILE", GeneratorKind = GeneratorKind.CSharp)]
+ [TypeMap("FILE", GeneratorKindID = GeneratorKind.CSharp_ID)]
public partial class FILE : TypeMap
{
public override Type CSharpSignatureType(TypePrinterContext ctx)
diff --git a/src/Generator/Types/TypeIgnoreChecker.cs b/src/Generator/Types/TypeIgnoreChecker.cs
index f06612c7..707a1677 100644
--- a/src/Generator/Types/TypeIgnoreChecker.cs
+++ b/src/Generator/Types/TypeIgnoreChecker.cs
@@ -13,14 +13,17 @@ namespace CppSharp
ITypeMapDatabase TypeMapDatabase { get; }
public bool IsIgnored;
- public TypeIgnoreChecker(ITypeMapDatabase database,
- GeneratorKind generatorKind = GeneratorKind.CSharp)
+ public TypeIgnoreChecker(ITypeMapDatabase database, GeneratorKind generatorKind)
{
TypeMapDatabase = database;
VisitOptions.ClearFlags(VisitFlags.ClassBases | VisitFlags.TemplateArguments);
this.generatorKind = generatorKind;
}
+ public TypeIgnoreChecker(ITypeMapDatabase database) : this(database, GeneratorKind.CSharp)
+ {
+ }
+
void Ignore()
{
IsIgnored = true;
diff --git a/src/Generator/Types/TypeMap.cs b/src/Generator/Types/TypeMap.cs
index 54d5cfa4..e7060192 100644
--- a/src/Generator/Types/TypeMap.cs
+++ b/src/Generator/Types/TypeMap.cs
@@ -15,17 +15,17 @@ namespace CppSharp.Types
public class TypeMapAttribute : Attribute
{
public string Type { get; }
- public GeneratorKind GeneratorKind { get; set; }
+ public string GeneratorKindID { get; set; }
- public TypeMapAttribute(string type) : this(type, 0)
+ public TypeMapAttribute(string type) : this(type, null)
{
Type = type;
}
- public TypeMapAttribute(string type, GeneratorKind generatorKind)
+ public TypeMapAttribute(string type, string generatorKindID)
{
Type = type;
- GeneratorKind = generatorKind;
+ GeneratorKindID = generatorKindID;
}
}
@@ -55,12 +55,12 @@ namespace CppSharp.Types
{
switch (kind)
{
- case GeneratorKind.C:
- case GeneratorKind.CPlusPlus:
+ case var _ when ReferenceEquals(kind, GeneratorKind.C):
+ case var _ when ReferenceEquals(kind, GeneratorKind.CPlusPlus):
return CppSignatureType(ctx);
- case GeneratorKind.CLI:
+ case var _ when ReferenceEquals(kind, GeneratorKind.CLI):
return CLISignatureType(ctx);
- case GeneratorKind.CSharp:
+ case var _ when ReferenceEquals(kind, GeneratorKind.CSharp):
return CSharpSignatureType(ctx);
default:
throw new System.NotImplementedException();
@@ -71,14 +71,14 @@ namespace CppSharp.Types
{
switch (kind)
{
- case GeneratorKind.C:
- case GeneratorKind.CPlusPlus:
+ case var _ when ReferenceEquals(kind, GeneratorKind.C):
+ case var _ when ReferenceEquals(kind, GeneratorKind.CPlusPlus):
CppMarshalToNative(ctx);
return;
- case GeneratorKind.CLI:
+ case var _ when ReferenceEquals(kind, GeneratorKind.CLI):
CLIMarshalToNative(ctx);
return;
- case GeneratorKind.CSharp:
+ case var _ when ReferenceEquals(kind, GeneratorKind.CSharp):
CSharpMarshalToNative(ctx as CSharpMarshalContext);
return;
default:
@@ -90,14 +90,14 @@ namespace CppSharp.Types
{
switch (kind)
{
- case GeneratorKind.C:
- case GeneratorKind.CPlusPlus:
+ case var _ when ReferenceEquals(kind, GeneratorKind.C):
+ case var _ when ReferenceEquals(kind, GeneratorKind.CPlusPlus):
CppMarshalToManaged(ctx);
return;
- case GeneratorKind.CLI:
+ case var _ when ReferenceEquals(kind, GeneratorKind.CLI):
CLIMarshalToManaged(ctx);
return;
- case GeneratorKind.CSharp:
+ case var _ when ReferenceEquals(kind, GeneratorKind.CSharp):
CSharpMarshalToManaged(ctx as CSharpMarshalContext);
return;
default:
diff --git a/src/Generator/Types/TypeMapDatabase.cs b/src/Generator/Types/TypeMapDatabase.cs
index fef279ab..96711ae6 100644
--- a/src/Generator/Types/TypeMapDatabase.cs
+++ b/src/Generator/Types/TypeMapDatabase.cs
@@ -40,8 +40,8 @@ namespace CppSharp.Types
var attrs = type.GetCustomAttributes(typeof(TypeMapAttribute), true);
foreach (TypeMapAttribute attr in attrs)
{
- if (attr.GeneratorKind == 0 ||
- attr.GeneratorKind == bindingContext.Options.GeneratorKind)
+ if (string.IsNullOrEmpty(attr.GeneratorKindID) ||
+ attr.GeneratorKindID == bindingContext.Options.GeneratorKind.ID)
{
var typeMap = (TypeMap)Activator.CreateInstance(type);
typeMap.Context = bindingContext;