Skip to content

Commit 7ead6b4

Browse files
committed
Don't print tags for nameless and typedef classes
Signed-off-by: Dimitar Dobrev <[email protected]>
1 parent 065ed82 commit 7ead6b4

File tree

7 files changed

+59
-55
lines changed

7 files changed

+59
-55
lines changed

src/AST/Class.cs

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -97,28 +97,6 @@ public class Class : DeclarationContext
9797

9898
public TagKind TagKind { get; set; }
9999

100-
public string Tag
101-
{
102-
get
103-
{
104-
switch (TagKind)
105-
{
106-
case TagKind.Struct:
107-
return "struct";
108-
case TagKind.Interface:
109-
return "__interface";
110-
case TagKind.Union:
111-
return "union";
112-
case TagKind.Class:
113-
return "class";
114-
case TagKind.Enum:
115-
return "enum";
116-
default:
117-
throw new ArgumentOutOfRangeException(nameof(TagKind));
118-
}
119-
}
120-
}
121-
122100
// True if the class is final / sealed.
123101
public bool IsFinal { get; set; }
124102

src/Generator/Generators/C/CppMarshal.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,7 @@ public void WriteClassInstance(Class @class, string instance)
269269
Context.Return.Write($"({instance} == nullptr) ? nullptr : {MemoryAllocOperator} ");
270270

271271
Context.Return.Write($"{QualifiedIdentifier(@class)}(");
272-
Context.Return.Write($"({@class.Tag} ::{@class.QualifiedOriginalName}*)");
272+
Context.Return.Write($"({typePrinter.PrintTag(@class)}::{@class.QualifiedOriginalName}*)");
273273
Context.Return.Write($"{instance})");
274274
}
275275

@@ -580,16 +580,17 @@ private void MarshalRefClass(Class @class)
580580
&& method.Conversion == MethodConversionKind.FunctionToInstanceMethod
581581
&& Context.ParameterIndex == 0)
582582
{
583-
Context.Return.Write($"({@class.Tag} ::{@class.QualifiedOriginalName}*)");
583+
Context.Return.Write($@"({typePrinter.PrintTag(@class)}::{
584+
@class.QualifiedOriginalName}*)");
584585
Context.Return.Write(Helpers.InstanceIdentifier);
585586
return;
586587
}
587588

588589
var paramType = Context.Parameter.Type.Desugar();
589590
var isPointer = paramType.SkipPointerRefs().IsPointer();
590591
var deref = isPointer ? "->" : ".";
591-
var instance = $"({@class.Tag} ::{@class.QualifiedOriginalName}*)" +
592-
$"{Context.Parameter.Name}{deref}{Helpers.InstanceIdentifier}";
592+
var instance = $"({typePrinter.PrintTag(@class)}::{@class.QualifiedOriginalName}*)" +
593+
Context.Parameter.Name + deref + Helpers.InstanceIdentifier;
593594

594595
if (isPointer)
595596
Context.Return.Write($"{Context.Parameter.Name} ? {instance} : nullptr");

src/Generator/Generators/C/CppSources.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@ public virtual void GenerateClassConstructor(Class @class, bool withOwnNativeIns
294294
{
295295
Write($"{QualifiedIdentifier(@class)}::{@class.Name}(");
296296

297-
var nativeType = $"{@class.Tag} ::{@class.QualifiedOriginalName}*";
297+
var nativeType = $"{typePrinter.PrintTag(@class)}::{@class.QualifiedOriginalName}*";
298298
//WriteLine($"{nativeType} {ClassCtorInstanceParamIdentifier})");
299299
WriteLine(!withOwnNativeInstanceParam ? $"{nativeType} {ClassCtorInstanceParamIdentifier})" :
300300
$"{nativeType} {ClassCtorInstanceParamIdentifier}, bool ownNativeInstance)");
@@ -412,7 +412,7 @@ public override bool VisitMethodDecl(Method method)
412412
PushBlock(BlockKind.ConstructorBody, @class);
413413

414414
var @params = GenerateFunctionParamsMarshal(method.Parameters, method);
415-
Write($@"{Helpers.InstanceIdentifier} = new {@class.Tag} ::{
415+
Write($@"{Helpers.InstanceIdentifier} = new {typePrinter.PrintTag(@class)}::{
416416
method.Namespace.QualifiedOriginalName}(");
417417
GenerateFunctionParams(@params);
418418
WriteLine(");");
@@ -492,7 +492,8 @@ public void GenerateFunctionCall(Function function)
492492
var field = property?.Field;
493493
if (field != null)
494494
{
495-
Write($"(({@class.Tag} ::{@class.QualifiedOriginalName}*){Helpers.InstanceIdentifier})->");
495+
Write($@"(({typePrinter.PrintTag(@class)}::{
496+
@class.QualifiedOriginalName}*){Helpers.InstanceIdentifier})->");
496497
Write($"{field.OriginalName}");
497498

498499
var isGetter = property.GetMethod == method;
@@ -510,7 +511,8 @@ public void GenerateFunctionCall(Function function)
510511
else
511512
{
512513
if (IsNativeMethod(function))
513-
Write($"(({@class.Tag} ::{@class.QualifiedOriginalName}*){Helpers.InstanceIdentifier})->");
514+
Write($@"(({typePrinter.PrintTag(@class)}::{
515+
@class.QualifiedOriginalName}*){Helpers.InstanceIdentifier})->");
514516

515517
Write($"{base.GetMethodIdentifier(function, TypePrinterContextKind.Native)}(");
516518
}

src/Generator/Generators/C/CppTypePrinter.cs

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -739,19 +739,27 @@ public override TypePrinterResult VisitVarTemplateSpecializationDecl(
739739
return VisitDeclaration(template);
740740
}
741741

742-
private string GetStringQuals(TypeQualifiers quals, bool appendSpace = true)
742+
public string PrintTag(Class @class)
743743
{
744-
var stringQuals = new List<string>();
745-
if (PrintTypeQualifiers)
744+
if (@class.Namespace.Typedefs.Any(t => t.Name == @class.Name))
746745
{
747-
if (quals.IsConst)
748-
stringQuals.Add("const");
749-
if (quals.IsVolatile)
750-
stringQuals.Add("volatile");
751-
}
752-
if (stringQuals.Count == 0)
753746
return string.Empty;
754-
return string.Join(" ", stringQuals) + (appendSpace ? " " : string.Empty);
747+
}
748+
switch (@class.TagKind)
749+
{
750+
case TagKind.Struct:
751+
return "struct ";
752+
case TagKind.Interface:
753+
return "__interface ";
754+
case TagKind.Union:
755+
return "union ";
756+
case TagKind.Class:
757+
return "class ";
758+
case TagKind.Enum:
759+
return "enum ";
760+
default:
761+
throw new ArgumentOutOfRangeException(nameof(@class.TagKind));
762+
}
755763
}
756764

757765
private static string Print(ExceptionSpecType exceptionSpecType)
@@ -769,5 +777,20 @@ private static string Print(ExceptionSpecType exceptionSpecType)
769777
return string.Empty;
770778
}
771779
}
780+
781+
private string GetStringQuals(TypeQualifiers quals, bool appendSpace = true)
782+
{
783+
var stringQuals = new List<string>();
784+
if (PrintTypeQualifiers)
785+
{
786+
if (quals.IsConst)
787+
stringQuals.Add("const");
788+
if (quals.IsVolatile)
789+
stringQuals.Add("volatile");
790+
}
791+
if (stringQuals.Count == 0)
792+
return string.Empty;
793+
return string.Join(" ", stringQuals) + (appendSpace ? " " : string.Empty);
794+
}
772795
}
773796
}

src/Generator/Generators/CLI/CLIHeaders.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ public void GenerateClass(Class @class)
261261
GenerateDeclContext(@class);
262262
Unindent();
263263

264-
string nativeType = $"{@class.Tag} ::{@class.QualifiedOriginalName}*";
264+
string nativeType = $"{typePrinter.PrintTag(@class)}::{@class.QualifiedOriginalName}*";
265265

266266
if (CLIGenerator.ShouldGenerateClassNativeField(@class))
267267
GenerateClassNativeField(nativeType);

src/Generator/Generators/CLI/CLIMarshal.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,7 @@ public override bool VisitClassDecl(Class @class)
279279
if (@class.IsRefType && needsCopy)
280280
{
281281
var name = Generator.GeneratedIdentifier(Context.ReturnVarName);
282-
Context.Before.WriteLine($"auto {name} = new {@class.Tag} ::{@class.QualifiedOriginalName}({Context.ReturnVarName});");
282+
Context.Before.WriteLine($"auto {name} = new {typePrinter.PrintTag(@class)}::{@class.QualifiedOriginalName}({Context.ReturnVarName});");
283283
instance = name;
284284

285285
ownNativeInstance = true;
@@ -304,7 +304,7 @@ public void WriteClassInstance(Class @class, string instance, bool ownNativeInst
304304
instance);
305305

306306
Context.Return.Write("::{0}(", QualifiedIdentifier(@class));
307-
Context.Return.Write($"({@class.Tag} ::{@class.QualifiedOriginalName}*)");
307+
Context.Return.Write($"({typePrinter.PrintTag(@class)}::{@class.QualifiedOriginalName}*)");
308308
Context.Return.Write("{0}{1})", instance, ownNativeInstance ? ", true" : "");
309309
}
310310

@@ -723,12 +723,12 @@ private void MarshalRefClass(Class @class)
723723
&& method.Conversion == MethodConversionKind.FunctionToInstanceMethod
724724
&& Context.ParameterIndex == 0)
725725
{
726-
Context.Return.Write($"({@class.Tag} ::{@class.QualifiedOriginalName}*)");
726+
Context.Return.Write($"({typePrinter.PrintTag(@class)}::{@class.QualifiedOriginalName}*)");
727727
Context.Return.Write("NativePtr");
728728
return;
729729
}
730730

731-
Context.Return.Write($"({@class.Tag} ::{@class.QualifiedOriginalName}*)");
731+
Context.Return.Write($"({typePrinter.PrintTag(@class)}::{@class.QualifiedOriginalName}*)");
732732
Context.Return.Write("{0}->NativePtr", Context.Parameter.Name);
733733
}
734734

src/Generator/Generators/CLI/CLISources.cs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ public void GenerateClass(Class @class)
145145
WriteLine("void {0}::{1}::set(::System::IntPtr object)",
146146
qualifiedIdentifier, Helpers.InstanceIdentifier);
147147
WriteOpenBraceAndIndent();
148-
var nativeType = $"{@class.Tag} ::{@class.QualifiedOriginalName}*";
148+
var nativeType = $"{typePrinter.PrintTag(@class)}::{@class.QualifiedOriginalName}*";
149149
WriteLine("NativePtr = ({0})object.ToPointer();", nativeType);
150150
UnindentAndWriteCloseBrace();
151151
PopBlock(NewLineKind.BeforeNextBlock);
@@ -258,7 +258,7 @@ private void GenerateClassDestructor(Class @class)
258258
WriteOpenBraceAndIndent();
259259
WriteLine("auto __nativePtr = NativePtr;");
260260
WriteLine("NativePtr = 0;");
261-
WriteLine($"delete ({@class.Tag} ::{@class.QualifiedOriginalName}*) __nativePtr;", @class.QualifiedOriginalName);
261+
WriteLine($"delete ({typePrinter.PrintTag(@class)}::{@class.QualifiedOriginalName}*) __nativePtr;", @class.QualifiedOriginalName);
262262
UnindentAndWriteCloseBrace();
263263
}
264264

@@ -396,7 +396,7 @@ private void GeneratePropertySetter<T>(T decl, Class @class, string name, Type t
396396
if (decl is Variable)
397397
variable = $"::{@class.QualifiedOriginalName}::{decl.OriginalName}";
398398
else
399-
variable = $"(({@class.Tag} ::{@class.QualifiedOriginalName}*)NativePtr)->{decl.OriginalName}";
399+
variable = $"(({typePrinter.PrintTag(@class)}::{@class.QualifiedOriginalName}*)NativePtr)->{decl.OriginalName}";
400400

401401
var ctx = new MarshalContext(Context, CurrentIndentation)
402402
{
@@ -484,7 +484,7 @@ private void GeneratePropertyGetter<T>(T decl, Class @class, string name, Type t
484484
else if (CLIGenerator.ShouldGenerateClassNativeField(@class))
485485
variable = $"NativePtr->{decl.OriginalName}";
486486
else
487-
variable = $"(({@class.Tag} ::{@class.QualifiedOriginalName}*)NativePtr)->{decl.OriginalName}";
487+
variable = $"(({typePrinter.PrintTag(@class)}::{@class.QualifiedOriginalName}*)NativePtr)->{decl.OriginalName}";
488488

489489
var ctx = new MarshalContext(Context, CurrentIndentation)
490490
{
@@ -542,7 +542,7 @@ private void GenerateEventAdd(Event @event, Class @class)
542542
WriteLine("auto _fptr = (void (*)({0}))Marshal::GetFunctionPointerForDelegate({1}Instance).ToPointer();",
543543
args, delegateName);
544544

545-
WriteLine($"(({@class.Tag} ::{@class.QualifiedOriginalName}*)NativePtr)->{@event.OriginalName}.Connect(_fptr);");
545+
WriteLine($"(({typePrinter.PrintTag(@class)}::{@class.QualifiedOriginalName}*)NativePtr)->{@event.OriginalName}.Connect(_fptr);");
546546

547547
UnindentAndWriteCloseBrace();
548548

@@ -627,7 +627,7 @@ private void GenerateClassConstructor(Class @class, bool withOwnNativeInstancePa
627627

628628
Write("{0}::{1}(", qualifiedIdentifier, @class.Name);
629629

630-
string nativeType = $"{@class.Tag} ::{@class.QualifiedOriginalName}*";
630+
string nativeType = $"{typePrinter.PrintTag(@class)}::{@class.QualifiedOriginalName}*";
631631
WriteLine(!withOwnNativeInstanceParam ? "{0} native)" : "{0} native, bool ownNativeInstance)", nativeType);
632632

633633
var hasBase = GenerateClassConstructorBase(@class, null, withOwnNativeInstanceParam);
@@ -781,7 +781,7 @@ public void GenerateMethod(Method method, Class @class)
781781
if (!@class.IsAbstract)
782782
{
783783
var @params = GenerateFunctionParamsMarshal(method.Parameters, method);
784-
Write($@"NativePtr = new {@class.Tag} ::{
784+
Write($@"NativePtr = new {typePrinter.PrintTag(@class)}::{
785785
@class.QualifiedOriginalName}(");
786786
GenerateFunctionParams(@params);
787787
WriteLine(");");
@@ -865,7 +865,7 @@ private void GenerateValueTypeConstructorCall(Method method, Class @class)
865865
names.Add(marshal.Context.Return);
866866
}
867867

868-
WriteLine($@"{@class.Tag} ::{
868+
WriteLine($@"{typePrinter.PrintTag(@class)}::{
869869
@class.QualifiedOriginalName} _native({string.Join(", ", names)});");
870870

871871
GenerateValueTypeConstructorCallProperties(@class);
@@ -957,7 +957,7 @@ public void GenerateFunctionCall(Function function, Class @class = null, Type pu
957957
var isValueType = @class != null && @class.IsValueType;
958958
if (isValueType && !IsNativeFunctionOrStaticMethod(function))
959959
{
960-
WriteLine($"auto {valueMarshalName} = {@class.Tag} ::{@class.QualifiedOriginalName}();");
960+
WriteLine($"auto {valueMarshalName} = {typePrinter.PrintTag(@class)}::{@class.QualifiedOriginalName}();");
961961

962962
var param = new Parameter { Name = "(*this)" , Namespace = function.Namespace };
963963
var ctx = new MarshalContext(Context, CurrentIndentation)
@@ -1015,7 +1015,7 @@ public void GenerateFunctionCall(Function function, Class @class = null, Type pu
10151015
if (isValueType)
10161016
Write($"{valueMarshalName}.");
10171017
else if (IsNativeMethod(function))
1018-
Write($"(({@class.Tag} ::{@class.QualifiedOriginalName}*)NativePtr)->");
1018+
Write($"(({typePrinter.PrintTag(@class)}::{@class.QualifiedOriginalName}*)NativePtr)->");
10191019
Write("{0}(", function.OriginalName);
10201020
}
10211021

0 commit comments

Comments
 (0)