Browse Source

Don't print tags for nameless and typedef classes

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/1626/head
Dimitar Dobrev 4 years ago
parent
commit
7ead6b4574
  1. 22
      src/AST/Class.cs
  2. 9
      src/Generator/Generators/C/CppMarshal.cs
  3. 10
      src/Generator/Generators/C/CppSources.cs
  4. 43
      src/Generator/Generators/C/CppTypePrinter.cs
  5. 2
      src/Generator/Generators/CLI/CLIHeaders.cs
  6. 8
      src/Generator/Generators/CLI/CLIMarshal.cs
  7. 20
      src/Generator/Generators/CLI/CLISources.cs

22
src/AST/Class.cs

@ -97,28 +97,6 @@ namespace CppSharp.AST
public TagKind TagKind { get; set; } public TagKind TagKind { get; set; }
public string Tag
{
get
{
switch (TagKind)
{
case TagKind.Struct:
return "struct";
case TagKind.Interface:
return "__interface";
case TagKind.Union:
return "union";
case TagKind.Class:
return "class";
case TagKind.Enum:
return "enum";
default:
throw new ArgumentOutOfRangeException(nameof(TagKind));
}
}
}
// True if the class is final / sealed. // True if the class is final / sealed.
public bool IsFinal { get; set; } public bool IsFinal { get; set; }

9
src/Generator/Generators/C/CppMarshal.cs

@ -269,7 +269,7 @@ namespace CppSharp.Generators.Cpp
Context.Return.Write($"({instance} == nullptr) ? nullptr : {MemoryAllocOperator} "); Context.Return.Write($"({instance} == nullptr) ? nullptr : {MemoryAllocOperator} ");
Context.Return.Write($"{QualifiedIdentifier(@class)}("); Context.Return.Write($"{QualifiedIdentifier(@class)}(");
Context.Return.Write($"({@class.Tag} ::{@class.QualifiedOriginalName}*)"); Context.Return.Write($"({typePrinter.PrintTag(@class)}::{@class.QualifiedOriginalName}*)");
Context.Return.Write($"{instance})"); Context.Return.Write($"{instance})");
} }
@ -580,7 +580,8 @@ namespace CppSharp.Generators.Cpp
&& method.Conversion == MethodConversionKind.FunctionToInstanceMethod && method.Conversion == MethodConversionKind.FunctionToInstanceMethod
&& Context.ParameterIndex == 0) && Context.ParameterIndex == 0)
{ {
Context.Return.Write($"({@class.Tag} ::{@class.QualifiedOriginalName}*)"); Context.Return.Write($@"({typePrinter.PrintTag(@class)}::{
@class.QualifiedOriginalName}*)");
Context.Return.Write(Helpers.InstanceIdentifier); Context.Return.Write(Helpers.InstanceIdentifier);
return; return;
} }
@ -588,8 +589,8 @@ namespace CppSharp.Generators.Cpp
var paramType = Context.Parameter.Type.Desugar(); var paramType = Context.Parameter.Type.Desugar();
var isPointer = paramType.SkipPointerRefs().IsPointer(); var isPointer = paramType.SkipPointerRefs().IsPointer();
var deref = isPointer ? "->" : "."; var deref = isPointer ? "->" : ".";
var instance = $"({@class.Tag} ::{@class.QualifiedOriginalName}*)" + var instance = $"({typePrinter.PrintTag(@class)}::{@class.QualifiedOriginalName}*)" +
$"{Context.Parameter.Name}{deref}{Helpers.InstanceIdentifier}"; Context.Parameter.Name + deref + Helpers.InstanceIdentifier;
if (isPointer) if (isPointer)
Context.Return.Write($"{Context.Parameter.Name} ? {instance} : nullptr"); Context.Return.Write($"{Context.Parameter.Name} ? {instance} : nullptr");

10
src/Generator/Generators/C/CppSources.cs

@ -294,7 +294,7 @@ namespace CppSharp.Generators.Cpp
{ {
Write($"{QualifiedIdentifier(@class)}::{@class.Name}("); Write($"{QualifiedIdentifier(@class)}::{@class.Name}(");
var nativeType = $"{@class.Tag} ::{@class.QualifiedOriginalName}*"; var nativeType = $"{typePrinter.PrintTag(@class)}::{@class.QualifiedOriginalName}*";
//WriteLine($"{nativeType} {ClassCtorInstanceParamIdentifier})"); //WriteLine($"{nativeType} {ClassCtorInstanceParamIdentifier})");
WriteLine(!withOwnNativeInstanceParam ? $"{nativeType} {ClassCtorInstanceParamIdentifier})" : WriteLine(!withOwnNativeInstanceParam ? $"{nativeType} {ClassCtorInstanceParamIdentifier})" :
$"{nativeType} {ClassCtorInstanceParamIdentifier}, bool ownNativeInstance)"); $"{nativeType} {ClassCtorInstanceParamIdentifier}, bool ownNativeInstance)");
@ -412,7 +412,7 @@ namespace CppSharp.Generators.Cpp
PushBlock(BlockKind.ConstructorBody, @class); PushBlock(BlockKind.ConstructorBody, @class);
var @params = GenerateFunctionParamsMarshal(method.Parameters, method); var @params = GenerateFunctionParamsMarshal(method.Parameters, method);
Write($@"{Helpers.InstanceIdentifier} = new {@class.Tag} ::{ Write($@"{Helpers.InstanceIdentifier} = new {typePrinter.PrintTag(@class)}::{
method.Namespace.QualifiedOriginalName}("); method.Namespace.QualifiedOriginalName}(");
GenerateFunctionParams(@params); GenerateFunctionParams(@params);
WriteLine(");"); WriteLine(");");
@ -492,7 +492,8 @@ namespace CppSharp.Generators.Cpp
var field = property?.Field; var field = property?.Field;
if (field != null) if (field != null)
{ {
Write($"(({@class.Tag} ::{@class.QualifiedOriginalName}*){Helpers.InstanceIdentifier})->"); Write($@"(({typePrinter.PrintTag(@class)}::{
@class.QualifiedOriginalName}*){Helpers.InstanceIdentifier})->");
Write($"{field.OriginalName}"); Write($"{field.OriginalName}");
var isGetter = property.GetMethod == method; var isGetter = property.GetMethod == method;
@ -510,7 +511,8 @@ namespace CppSharp.Generators.Cpp
else else
{ {
if (IsNativeMethod(function)) if (IsNativeMethod(function))
Write($"(({@class.Tag} ::{@class.QualifiedOriginalName}*){Helpers.InstanceIdentifier})->"); Write($@"(({typePrinter.PrintTag(@class)}::{
@class.QualifiedOriginalName}*){Helpers.InstanceIdentifier})->");
Write($"{base.GetMethodIdentifier(function, TypePrinterContextKind.Native)}("); Write($"{base.GetMethodIdentifier(function, TypePrinterContextKind.Native)}(");
} }

43
src/Generator/Generators/C/CppTypePrinter.cs

@ -739,19 +739,27 @@ namespace CppSharp.Generators.C
return VisitDeclaration(template); return VisitDeclaration(template);
} }
private string GetStringQuals(TypeQualifiers quals, bool appendSpace = true) public string PrintTag(Class @class)
{ {
var stringQuals = new List<string>(); if (@class.Namespace.Typedefs.Any(t => t.Name == @class.Name))
if (PrintTypeQualifiers)
{ {
if (quals.IsConst)
stringQuals.Add("const");
if (quals.IsVolatile)
stringQuals.Add("volatile");
}
if (stringQuals.Count == 0)
return string.Empty; return string.Empty;
return string.Join(" ", stringQuals) + (appendSpace ? " " : string.Empty); }
switch (@class.TagKind)
{
case TagKind.Struct:
return "struct ";
case TagKind.Interface:
return "__interface ";
case TagKind.Union:
return "union ";
case TagKind.Class:
return "class ";
case TagKind.Enum:
return "enum ";
default:
throw new ArgumentOutOfRangeException(nameof(@class.TagKind));
}
} }
private static string Print(ExceptionSpecType exceptionSpecType) private static string Print(ExceptionSpecType exceptionSpecType)
@ -769,5 +777,20 @@ namespace CppSharp.Generators.C
return string.Empty; return string.Empty;
} }
} }
private string GetStringQuals(TypeQualifiers quals, bool appendSpace = true)
{
var stringQuals = new List<string>();
if (PrintTypeQualifiers)
{
if (quals.IsConst)
stringQuals.Add("const");
if (quals.IsVolatile)
stringQuals.Add("volatile");
}
if (stringQuals.Count == 0)
return string.Empty;
return string.Join(" ", stringQuals) + (appendSpace ? " " : string.Empty);
}
} }
} }

2
src/Generator/Generators/CLI/CLIHeaders.cs

@ -261,7 +261,7 @@ namespace CppSharp.Generators.CLI
GenerateDeclContext(@class); GenerateDeclContext(@class);
Unindent(); Unindent();
string nativeType = $"{@class.Tag} ::{@class.QualifiedOriginalName}*"; string nativeType = $"{typePrinter.PrintTag(@class)}::{@class.QualifiedOriginalName}*";
if (CLIGenerator.ShouldGenerateClassNativeField(@class)) if (CLIGenerator.ShouldGenerateClassNativeField(@class))
GenerateClassNativeField(nativeType); GenerateClassNativeField(nativeType);

8
src/Generator/Generators/CLI/CLIMarshal.cs

@ -279,7 +279,7 @@ namespace CppSharp.Generators.CLI
if (@class.IsRefType && needsCopy) if (@class.IsRefType && needsCopy)
{ {
var name = Generator.GeneratedIdentifier(Context.ReturnVarName); var name = Generator.GeneratedIdentifier(Context.ReturnVarName);
Context.Before.WriteLine($"auto {name} = new {@class.Tag} ::{@class.QualifiedOriginalName}({Context.ReturnVarName});"); Context.Before.WriteLine($"auto {name} = new {typePrinter.PrintTag(@class)}::{@class.QualifiedOriginalName}({Context.ReturnVarName});");
instance = name; instance = name;
ownNativeInstance = true; ownNativeInstance = true;
@ -304,7 +304,7 @@ namespace CppSharp.Generators.CLI
instance); instance);
Context.Return.Write("::{0}(", QualifiedIdentifier(@class)); Context.Return.Write("::{0}(", QualifiedIdentifier(@class));
Context.Return.Write($"({@class.Tag} ::{@class.QualifiedOriginalName}*)"); Context.Return.Write($"({typePrinter.PrintTag(@class)}::{@class.QualifiedOriginalName}*)");
Context.Return.Write("{0}{1})", instance, ownNativeInstance ? ", true" : ""); Context.Return.Write("{0}{1})", instance, ownNativeInstance ? ", true" : "");
} }
@ -723,12 +723,12 @@ namespace CppSharp.Generators.CLI
&& method.Conversion == MethodConversionKind.FunctionToInstanceMethod && method.Conversion == MethodConversionKind.FunctionToInstanceMethod
&& Context.ParameterIndex == 0) && Context.ParameterIndex == 0)
{ {
Context.Return.Write($"({@class.Tag} ::{@class.QualifiedOriginalName}*)"); Context.Return.Write($"({typePrinter.PrintTag(@class)}::{@class.QualifiedOriginalName}*)");
Context.Return.Write("NativePtr"); Context.Return.Write("NativePtr");
return; return;
} }
Context.Return.Write($"({@class.Tag} ::{@class.QualifiedOriginalName}*)"); Context.Return.Write($"({typePrinter.PrintTag(@class)}::{@class.QualifiedOriginalName}*)");
Context.Return.Write("{0}->NativePtr", Context.Parameter.Name); Context.Return.Write("{0}->NativePtr", Context.Parameter.Name);
} }

20
src/Generator/Generators/CLI/CLISources.cs

@ -145,7 +145,7 @@ namespace CppSharp.Generators.CLI
WriteLine("void {0}::{1}::set(::System::IntPtr object)", WriteLine("void {0}::{1}::set(::System::IntPtr object)",
qualifiedIdentifier, Helpers.InstanceIdentifier); qualifiedIdentifier, Helpers.InstanceIdentifier);
WriteOpenBraceAndIndent(); WriteOpenBraceAndIndent();
var nativeType = $"{@class.Tag} ::{@class.QualifiedOriginalName}*"; var nativeType = $"{typePrinter.PrintTag(@class)}::{@class.QualifiedOriginalName}*";
WriteLine("NativePtr = ({0})object.ToPointer();", nativeType); WriteLine("NativePtr = ({0})object.ToPointer();", nativeType);
UnindentAndWriteCloseBrace(); UnindentAndWriteCloseBrace();
PopBlock(NewLineKind.BeforeNextBlock); PopBlock(NewLineKind.BeforeNextBlock);
@ -258,7 +258,7 @@ namespace CppSharp.Generators.CLI
WriteOpenBraceAndIndent(); WriteOpenBraceAndIndent();
WriteLine("auto __nativePtr = NativePtr;"); WriteLine("auto __nativePtr = NativePtr;");
WriteLine("NativePtr = 0;"); WriteLine("NativePtr = 0;");
WriteLine($"delete ({@class.Tag} ::{@class.QualifiedOriginalName}*) __nativePtr;", @class.QualifiedOriginalName); WriteLine($"delete ({typePrinter.PrintTag(@class)}::{@class.QualifiedOriginalName}*) __nativePtr;", @class.QualifiedOriginalName);
UnindentAndWriteCloseBrace(); UnindentAndWriteCloseBrace();
} }
@ -396,7 +396,7 @@ namespace CppSharp.Generators.CLI
if (decl is Variable) if (decl is Variable)
variable = $"::{@class.QualifiedOriginalName}::{decl.OriginalName}"; variable = $"::{@class.QualifiedOriginalName}::{decl.OriginalName}";
else else
variable = $"(({@class.Tag} ::{@class.QualifiedOriginalName}*)NativePtr)->{decl.OriginalName}"; variable = $"(({typePrinter.PrintTag(@class)}::{@class.QualifiedOriginalName}*)NativePtr)->{decl.OriginalName}";
var ctx = new MarshalContext(Context, CurrentIndentation) var ctx = new MarshalContext(Context, CurrentIndentation)
{ {
@ -484,7 +484,7 @@ namespace CppSharp.Generators.CLI
else if (CLIGenerator.ShouldGenerateClassNativeField(@class)) else if (CLIGenerator.ShouldGenerateClassNativeField(@class))
variable = $"NativePtr->{decl.OriginalName}"; variable = $"NativePtr->{decl.OriginalName}";
else else
variable = $"(({@class.Tag} ::{@class.QualifiedOriginalName}*)NativePtr)->{decl.OriginalName}"; variable = $"(({typePrinter.PrintTag(@class)}::{@class.QualifiedOriginalName}*)NativePtr)->{decl.OriginalName}";
var ctx = new MarshalContext(Context, CurrentIndentation) var ctx = new MarshalContext(Context, CurrentIndentation)
{ {
@ -542,7 +542,7 @@ namespace CppSharp.Generators.CLI
WriteLine("auto _fptr = (void (*)({0}))Marshal::GetFunctionPointerForDelegate({1}Instance).ToPointer();", WriteLine("auto _fptr = (void (*)({0}))Marshal::GetFunctionPointerForDelegate({1}Instance).ToPointer();",
args, delegateName); args, delegateName);
WriteLine($"(({@class.Tag} ::{@class.QualifiedOriginalName}*)NativePtr)->{@event.OriginalName}.Connect(_fptr);"); WriteLine($"(({typePrinter.PrintTag(@class)}::{@class.QualifiedOriginalName}*)NativePtr)->{@event.OriginalName}.Connect(_fptr);");
UnindentAndWriteCloseBrace(); UnindentAndWriteCloseBrace();
@ -627,7 +627,7 @@ namespace CppSharp.Generators.CLI
Write("{0}::{1}(", qualifiedIdentifier, @class.Name); Write("{0}::{1}(", qualifiedIdentifier, @class.Name);
string nativeType = $"{@class.Tag} ::{@class.QualifiedOriginalName}*"; string nativeType = $"{typePrinter.PrintTag(@class)}::{@class.QualifiedOriginalName}*";
WriteLine(!withOwnNativeInstanceParam ? "{0} native)" : "{0} native, bool ownNativeInstance)", nativeType); WriteLine(!withOwnNativeInstanceParam ? "{0} native)" : "{0} native, bool ownNativeInstance)", nativeType);
var hasBase = GenerateClassConstructorBase(@class, null, withOwnNativeInstanceParam); var hasBase = GenerateClassConstructorBase(@class, null, withOwnNativeInstanceParam);
@ -781,7 +781,7 @@ namespace CppSharp.Generators.CLI
if (!@class.IsAbstract) if (!@class.IsAbstract)
{ {
var @params = GenerateFunctionParamsMarshal(method.Parameters, method); var @params = GenerateFunctionParamsMarshal(method.Parameters, method);
Write($@"NativePtr = new {@class.Tag} ::{ Write($@"NativePtr = new {typePrinter.PrintTag(@class)}::{
@class.QualifiedOriginalName}("); @class.QualifiedOriginalName}(");
GenerateFunctionParams(@params); GenerateFunctionParams(@params);
WriteLine(");"); WriteLine(");");
@ -865,7 +865,7 @@ namespace CppSharp.Generators.CLI
names.Add(marshal.Context.Return); names.Add(marshal.Context.Return);
} }
WriteLine($@"{@class.Tag} ::{ WriteLine($@"{typePrinter.PrintTag(@class)}::{
@class.QualifiedOriginalName} _native({string.Join(", ", names)});"); @class.QualifiedOriginalName} _native({string.Join(", ", names)});");
GenerateValueTypeConstructorCallProperties(@class); GenerateValueTypeConstructorCallProperties(@class);
@ -957,7 +957,7 @@ namespace CppSharp.Generators.CLI
var isValueType = @class != null && @class.IsValueType; var isValueType = @class != null && @class.IsValueType;
if (isValueType && !IsNativeFunctionOrStaticMethod(function)) if (isValueType && !IsNativeFunctionOrStaticMethod(function))
{ {
WriteLine($"auto {valueMarshalName} = {@class.Tag} ::{@class.QualifiedOriginalName}();"); WriteLine($"auto {valueMarshalName} = {typePrinter.PrintTag(@class)}::{@class.QualifiedOriginalName}();");
var param = new Parameter { Name = "(*this)" , Namespace = function.Namespace }; var param = new Parameter { Name = "(*this)" , Namespace = function.Namespace };
var ctx = new MarshalContext(Context, CurrentIndentation) var ctx = new MarshalContext(Context, CurrentIndentation)
@ -1015,7 +1015,7 @@ namespace CppSharp.Generators.CLI
if (isValueType) if (isValueType)
Write($"{valueMarshalName}."); Write($"{valueMarshalName}.");
else if (IsNativeMethod(function)) else if (IsNativeMethod(function))
Write($"(({@class.Tag} ::{@class.QualifiedOriginalName}*)NativePtr)->"); Write($"(({typePrinter.PrintTag(@class)}::{@class.QualifiedOriginalName}*)NativePtr)->");
Write("{0}(", function.OriginalName); Write("{0}(", function.OriginalName);
} }

Loading…
Cancel
Save