Skip to content

Commit

Permalink
Support foreigen untyped records
Browse files Browse the repository at this point in the history
  • Loading branch information
badcel committed Mar 13, 2024
1 parent d4e3a6c commit 3fc765b
Show file tree
Hide file tree
Showing 27 changed files with 258 additions and 24 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
using Generator.Model;

namespace Generator.Generator.Internal;

internal class ForeignUntypedRecordHandle : Generator<GirModel.Record>
{
private readonly Publisher _publisher;

public ForeignUntypedRecordHandle(Publisher publisher)
{
_publisher = publisher;
}

public void Generate(GirModel.Record obj)
{
if (!Record.IsForeignUntyped(obj))
return;

var source = Renderer.Internal.ForeignUntypedRecordHandle.Render(obj);
var codeUnit = new CodeUnit(
Project: Namespace.GetCanonicalName(obj.Namespace),
Name: Model.ForeignTypedRecord.GetInternalHandle(obj),
Source: source,
IsInternal: true
);

_publisher.Publish(codeUnit);
}
}
29 changes: 29 additions & 0 deletions src/Generation/Generator/Generator/Public/ForeignUntypedRecord.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
using Generator.Model;

namespace Generator.Generator.Public;

internal class ForeignUntypedRecord : Generator<GirModel.Record>
{
private readonly Publisher _publisher;

public ForeignUntypedRecord(Publisher publisher)
{
_publisher = publisher;
}

public void Generate(GirModel.Record record)
{
if (!Record.IsForeignUntyped(record))
return;

var source = Renderer.Public.ForeignUntypedRecord.Render(record);
var codeUnit = new CodeUnit(
Project: Namespace.GetCanonicalName(record.Namespace),
Name: Record.GetPublicClassName(record),
Source: source,
IsInternal: false
);

_publisher.Publish(codeUnit);
}
}
34 changes: 34 additions & 0 deletions src/Generation/Generator/Model/ForeignUntypedRecord.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
namespace Generator.Model;

internal static class ForeignUntypedRecord
{
public static string GetPublicClassName(GirModel.Record record)
=> record.Name;

public static string GetFullyQualifiedPublicClassName(GirModel.Record record)
=> Namespace.GetPublicName(record.Namespace) + "." + GetPublicClassName(record);

public static string GetFullyQualifiedInternalClassName(GirModel.Record record)
=> Namespace.GetInternalName(record.Namespace) + "." + record.Name;

public static string GetInternalHandle(GirModel.Record record)
=> $"{Type.GetName(record)}Handle";

public static string GetInternalOwnedHandle(GirModel.Record record)
=> $"{Type.GetName(record)}OwnedHandle";

public static string GetInternalUnownedHandle(GirModel.Record record)
=> $"{Type.GetName(record)}UnownedHandle";

public static string GetFullyQuallifiedInternalHandle(GirModel.Record record)
=> $"{Namespace.GetInternalName(record.Namespace)}.{GetInternalHandle(record)}";

public static string GetFullyQuallifiedOwnedHandle(GirModel.Record record)
=> $"{Namespace.GetInternalName(record.Namespace)}.{GetInternalOwnedHandle(record)}";

public static string GetFullyQuallifiedUnownedHandle(GirModel.Record record)
=> $"{Namespace.GetInternalName(record.Namespace)}.{GetInternalUnownedHandle(record)}";

public static string GetFullyQuallifiedNullHandle(GirModel.Record record)
=> $"{Namespace.GetInternalName(record.Namespace)}.{GetInternalUnownedHandle(record)}.NullHandle";
}
7 changes: 6 additions & 1 deletion src/Generation/Generator/Model/Record.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,18 @@ internal static partial class Record
{
public static bool IsStandard(GirModel.Record record)
{
return !IsForeignTyped(record) && !IsOpaqueTyped(record) && !IsOpaqueUntyped(record) && !IsTyped(record) && !IsUntyped(record);
return !IsForeignTyped(record) && !IsForeignUntyped(record) && !IsOpaqueTyped(record) && !IsOpaqueUntyped(record) && !IsTyped(record) && !IsUntyped(record);
}

public static bool IsForeignTyped(GirModel.Record record)
{
return record is { Foreign: true, TypeFunction.CIdentifier: not null };
}

public static bool IsForeignUntyped(GirModel.Record record)
{
return record is { Foreign: true, TypeFunction: null or { CIdentifier: "intern" } };
}

public static bool IsOpaqueTyped(GirModel.Record record)
{
Expand Down
14 changes: 9 additions & 5 deletions src/Generation/Generator/Records.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,29 +17,33 @@ public static void Generate(IEnumerable<GirModel.Record> records, string path)
new Generator.Internal.UntypedRecordData(publisher),
new Generator.Internal.UntypedRecordHandle(publisher),
new Generator.Public.UntypedRecord(publisher),


//Foreign untyped records
new Generator.Internal.ForeignUntypedRecordHandle(publisher),
new Generator.Public.ForeignUntypedRecord(publisher),

//Foreign typed records
new Generator.Internal.ForeignTypedRecord(publisher),
new Generator.Internal.ForeignTypedRecordHandle(publisher),
new Generator.Public.ForeignTypedRecord(publisher),

//Opaque typed records
new Generator.Internal.OpaqueTypedRecord(publisher),
new Generator.Internal.OpaqueTypedRecordHandle(publisher),
new Generator.Public.OpaqueTypedRecord(publisher),

//Opaque untyped records
new Generator.Internal.OpaqueUntypedRecord(publisher),
new Generator.Internal.OpaqueUntypedRecordHandle(publisher),
new Generator.Public.OpaqueUntypedRecord(publisher),

//Typed records
new Generator.Internal.TypedRecord(publisher),
new Generator.Internal.TypedRecordDelegates(publisher),
new Generator.Internal.TypedRecordHandle(publisher),
new Generator.Internal.TypedRecordData(publisher),
new Generator.Public.TypedRecord(publisher),

//Regular records
new Generator.Internal.RecordDelegates(publisher),
new Generator.Internal.RecordHandle(publisher),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ public class {unownedHandleTypeName} : {typeName}
internal {unownedHandleTypeName}() : base(false) {{ }}
/// <summary>
/// Creates a new instance of {ownedHandleTypeName}. Assumes that the given pointer is unowned by the runtime.
/// Creates a new instance of {unownedHandleTypeName}. Assumes that the given pointer is unowned by the runtime.
/// </summary>
public {unownedHandleTypeName}(IntPtr ptr) : base(false)
{{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
using Generator.Model;

namespace Generator.Renderer.Internal;

internal static class ForeignUntypedRecordHandle
{
public static string Render(GirModel.Record record)
{
var typeName = Model.ForeignUntypedRecord.GetInternalHandle(record);
var unownedHandleTypeName = Model.ForeignUntypedRecord.GetInternalUnownedHandle(record);
var ownedHandleTypeName = Model.ForeignUntypedRecord.GetInternalOwnedHandle(record);

return $@"using System;
using GObject;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
#nullable enable
namespace {Namespace.GetInternalName(record.Namespace)};
// AUTOGENERATED FILE - DO NOT MODIFY
{PlatformSupportAttribute.Render(record as GirModel.PlatformDependent)}
public abstract class {typeName} : SafeHandle
{{
public sealed override bool IsInvalid => handle == IntPtr.Zero;
protected {typeName}(bool ownsHandle) : base(IntPtr.Zero, ownsHandle) {{ }}
}}
public class {unownedHandleTypeName} : {typeName}
{{
private static {unownedHandleTypeName}? nullHandle;
public static {unownedHandleTypeName} NullHandle => nullHandle ??= new {unownedHandleTypeName}();
/// <summary>
/// Creates a new instance of {unownedHandleTypeName}. Used automatically by PInvoke.
/// </summary>
internal {unownedHandleTypeName}() : base(false) {{ }}
/// <summary>
/// Creates a new instance of {unownedHandleTypeName}. Assumes that the given pointer is unowned by the runtime.
/// </summary>
public {unownedHandleTypeName}(IntPtr ptr) : base(false)
{{
SetHandle(ptr);
}}
protected override bool ReleaseHandle()
{{
throw new System.Exception(""UnownedHandle must not be freed"");
}}
}}
public partial class {ownedHandleTypeName} : {typeName}
{{
/// <summary>
/// Creates a new instance of {ownedHandleTypeName}. Used automatically by PInvoke.
/// </summary>
internal {ownedHandleTypeName}() : base(true) {{ }}
/// <summary>
/// Creates a new instance of {ownedHandleTypeName}. Assumes that the given pointer is owned by the runtime.
/// </summary>
public {ownedHandleTypeName}(IntPtr ptr) : base(true)
{{
SetHandle(ptr);
}}
protected override partial bool ReleaseHandle();
}}";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ internal static class InstanceParameters
{
new InstanceParameter.Class(),
new InstanceParameter.ForeignTypedRecord(),
new InstanceParameter.ForeignUntypedRecord(),

Check failure on line 12 in src/Generation/Generator/Renderer/Internal/InstanceParameter/InstanceParameters.cs

View workflow job for this annotation

GitHub Actions / Build (Linux)

The type or namespace name 'ForeignUntypedRecord' does not exist in the namespace 'Generator.Renderer.Internal.InstanceParameter' (are you missing an assembly reference?)

Check failure on line 12 in src/Generation/Generator/Renderer/Internal/InstanceParameter/InstanceParameters.cs

View workflow job for this annotation

GitHub Actions / Build (MacOS)

The type or namespace name 'ForeignUntypedRecord' does not exist in the namespace 'Generator.Renderer.Internal.InstanceParameter' (are you missing an assembly reference?)

Check failure on line 12 in src/Generation/Generator/Renderer/Internal/InstanceParameter/InstanceParameters.cs

View workflow job for this annotation

GitHub Actions / Build (Windows)

The type or namespace name 'ForeignUntypedRecord' does not exist in the namespace 'Generator.Renderer.Internal.InstanceParameter' (are you missing an assembly reference?)
new InstanceParameter.Interface(),
new InstanceParameter.OpaqueTypedRecord(),
new InstanceParameter.OpaqueUntypedRecord(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ internal static class ReturnTypeRenderer
new ReturnType.ClassArray(),
new ReturnType.Enumeration(),
new ReturnType.ForeignTypedRecord(),
new ReturnType.ForeignUntypedRecord(),

Check failure on line 14 in src/Generation/Generator/Renderer/Internal/ReturnType/ReturnTypeRenderer.cs

View workflow job for this annotation

GitHub Actions / Build (Linux)

The type or namespace name 'ForeignUntypedRecord' does not exist in the namespace 'Generator.Renderer.Internal.ReturnType' (are you missing an assembly reference?)

Check failure on line 14 in src/Generation/Generator/Renderer/Internal/ReturnType/ReturnTypeRenderer.cs

View workflow job for this annotation

GitHub Actions / Build (MacOS)

The type or namespace name 'ForeignUntypedRecord' does not exist in the namespace 'Generator.Renderer.Internal.ReturnType' (are you missing an assembly reference?)

Check failure on line 14 in src/Generation/Generator/Renderer/Internal/ReturnType/ReturnTypeRenderer.cs

View workflow job for this annotation

GitHub Actions / Build (Windows)

The type or namespace name 'ForeignUntypedRecord' does not exist in the namespace 'Generator.Renderer.Internal.ReturnType' (are you missing an assembly reference?)
new ReturnType.Interface(),
new ReturnType.InterfaceGLibPtrArray(),
new ReturnType.OpaqueTypedRecord(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ public string GetString(GirModel.ReturnType returnType, string fromVariableName)
{ Transfer: GirModel.Transfer.None, Nullable: false } => $"{fromVariableName}.Handle.DangerousGetHandle()",
{ Transfer: GirModel.Transfer.Full, Nullable: true } => $"{fromVariableName}?.Handle.UnownedCopy().DangerousGetHandle() ?? IntPtr.Zero",
{ Transfer: GirModel.Transfer.Full, Nullable: false } => $"{fromVariableName}.Handle.UnownedCopy().DangerousGetHandle()",
_ => throw new Exception($"Unknown transfer type for opaque record return type which should be converted to native.")
_ => throw new Exception($"Unknown transfer type for foreigen typed record return type which should be converted to native.")
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ internal static class ReturnTypeToNativeExpression
new ReturnTypeToNativeExpressions.Class(),
new ReturnTypeToNativeExpressions.Enumeration(),
new ReturnTypeToNativeExpressions.ForeignTypedRecord(),
new ReturnTypeToNativeExpressions.ForeignUntypedRecord(),

Check failure on line 13 in src/Generation/Generator/Renderer/Internal/ReturnTypeToNativeExpression/ReturnTypeToNativeExpression.cs

View workflow job for this annotation

GitHub Actions / Build (Linux)

The type or namespace name 'ForeignUntypedRecord' does not exist in the namespace 'Generator.Renderer.Internal.ReturnTypeToNativeExpressions' (are you missing an assembly reference?)

Check failure on line 13 in src/Generation/Generator/Renderer/Internal/ReturnTypeToNativeExpression/ReturnTypeToNativeExpression.cs

View workflow job for this annotation

GitHub Actions / Build (MacOS)

The type or namespace name 'ForeignUntypedRecord' does not exist in the namespace 'Generator.Renderer.Internal.ReturnTypeToNativeExpressions' (are you missing an assembly reference?)

Check failure on line 13 in src/Generation/Generator/Renderer/Internal/ReturnTypeToNativeExpression/ReturnTypeToNativeExpression.cs

View workflow job for this annotation

GitHub Actions / Build (Windows)

The type or namespace name 'ForeignUntypedRecord' does not exist in the namespace 'Generator.Renderer.Internal.ReturnTypeToNativeExpressions' (are you missing an assembly reference?)
new ReturnTypeToNativeExpressions.Interface(),
new ReturnTypeToNativeExpressions.OpaqueTypedRecord(),
new ReturnTypeToNativeExpressions.OpaqueUntypedRecord(),
Expand Down
37 changes: 37 additions & 0 deletions src/Generation/Generator/Renderer/Public/ForeignUntypedRecord.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
using System;
using System.Linq;
using Generator.Model;

namespace Generator.Renderer.Public;

internal static class ForeignUntypedRecord
{
public static string Render(GirModel.Record record)
{
var name = Model.ForeignUntypedRecord.GetPublicClassName(record);
var internalHandleName = Model.ForeignUntypedRecord.GetFullyQuallifiedOwnedHandle(record);

return $@"
using System;
using System.Linq;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
#nullable enable
namespace {Namespace.GetPublicName(record.Namespace)};
// AUTOGENERATED FILE - DO NOT MODIFY
{PlatformSupportAttribute.Render(record as GirModel.PlatformDependent)}
public partial class {name}
{{
public {internalHandleName} Handle {{ get; }}
public {name}({internalHandleName} handle)
{{
Handle = handle;
}}
}}";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,6 @@ private static string GetNullableTypeName(GirModel.Parameter parameter)
private static string GetDirection(GirModel.Parameter parameter) => parameter switch
{
{ Direction: GirModel.Direction.In } => ParameterDirection.In(),
_ => throw new Exception("Opaque records with direction != in not yet supported")
_ => throw new Exception("Foreign typed records with direction != in not yet supported")
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ internal static class ParameterRenderer
new Parameter.Enumeration(),
new Parameter.ForeignTypedRecord(),
new Parameter.ForeignTypedRecordArray(),
new Parameter.ForeignUntypedRecord(),

Check failure on line 16 in src/Generation/Generator/Renderer/Public/Parameter/ParameterRenderer.cs

View workflow job for this annotation

GitHub Actions / Build (Linux)

The type or namespace name 'ForeignUntypedRecord' does not exist in the namespace 'Generator.Renderer.Public.Parameter' (are you missing an assembly reference?)

Check failure on line 16 in src/Generation/Generator/Renderer/Public/Parameter/ParameterRenderer.cs

View workflow job for this annotation

GitHub Actions / Build (MacOS)

The type or namespace name 'ForeignUntypedRecord' does not exist in the namespace 'Generator.Renderer.Public.Parameter' (are you missing an assembly reference?)

Check failure on line 16 in src/Generation/Generator/Renderer/Public/Parameter/ParameterRenderer.cs

View workflow job for this annotation

GitHub Actions / Build (Windows)

The type or namespace name 'ForeignUntypedRecord' does not exist in the namespace 'Generator.Renderer.Public.Parameter' (are you missing an assembly reference?)
new Parameter.Interface(),
new Parameter.InterfaceArray(),
new Parameter.OpaqueTypedRecord(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public void Initialize(ParameterToNativeData parameter, IEnumerable<ParameterToN
{ Nullable: false, Transfer: GirModel.Transfer.None } => $"{signatureName}.Handle",
{ Nullable: true, Transfer: GirModel.Transfer.Full } => $"{signatureName}?.Handle.UnownedCopy() ?? {nullHandle}",
{ Nullable: false, Transfer: GirModel.Transfer.Full } => $"{signatureName}.Handle.UnownedCopy()",
_ => throw new Exception($"Can't detect call name for parameter opaque parameter {parameter.Parameter.Name}")
_ => throw new Exception($"Can't detect call name for foreign typed parameter {parameter.Parameter.Name}")
};

parameter.SetSignatureName(() => signatureName);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ internal static class ParameterToNativeExpression
new ParameterToNativeExpressions.Enumeration(),
new ParameterToNativeExpressions.ForeignTypedRecord(),
new ParameterToNativeExpressions.ForeignTypedRecordArray(),
new ParameterToNativeExpressions.ForeignUntypedRecord(),

Check failure on line 18 in src/Generation/Generator/Renderer/Public/ParameterToNativeExpression/ParameterToNativeExpression.cs

View workflow job for this annotation

GitHub Actions / Build (Linux)

The type or namespace name 'ForeignUntypedRecord' does not exist in the namespace 'Generator.Renderer.Public.ParameterToNativeExpressions' (are you missing an assembly reference?)

Check failure on line 18 in src/Generation/Generator/Renderer/Public/ParameterToNativeExpression/ParameterToNativeExpression.cs

View workflow job for this annotation

GitHub Actions / Build (MacOS)

The type or namespace name 'ForeignUntypedRecord' does not exist in the namespace 'Generator.Renderer.Public.ParameterToNativeExpressions' (are you missing an assembly reference?)

Check failure on line 18 in src/Generation/Generator/Renderer/Public/ParameterToNativeExpression/ParameterToNativeExpression.cs

View workflow job for this annotation

GitHub Actions / Build (Windows)

The type or namespace name 'ForeignUntypedRecord' does not exist in the namespace 'Generator.Renderer.Public.ParameterToNativeExpressions' (are you missing an assembly reference?)
new ParameterToNativeExpressions.Interface(),
new ParameterToNativeExpressions.InterfaceArray(),
new ParameterToNativeExpressions.OpaqueTypedRecord(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ internal static class ReturnTypeRenderer
new ReturnType.Class(),
new ReturnType.Enumeration(),
new ReturnType.ForeignTypedRecord(),
new ReturnType.ForeignUntypedRecord(),

Check failure on line 14 in src/Generation/Generator/Renderer/Public/ReturnType/ReturnTypeRenderer.cs

View workflow job for this annotation

GitHub Actions / Build (Linux)

The type or namespace name 'ForeignUntypedRecord' does not exist in the namespace 'Generator.Renderer.Public.ReturnType' (are you missing an assembly reference?)

Check failure on line 14 in src/Generation/Generator/Renderer/Public/ReturnType/ReturnTypeRenderer.cs

View workflow job for this annotation

GitHub Actions / Build (MacOS)

The type or namespace name 'ForeignUntypedRecord' does not exist in the namespace 'Generator.Renderer.Public.ReturnType' (are you missing an assembly reference?)

Check failure on line 14 in src/Generation/Generator/Renderer/Public/ReturnType/ReturnTypeRenderer.cs

View workflow job for this annotation

GitHub Actions / Build (Windows)

The type or namespace name 'ForeignUntypedRecord' does not exist in the namespace 'Generator.Renderer.Public.ReturnType' (are you missing an assembly reference?)
new ReturnType.Interface(),
new ReturnType.OpaqueTypedRecord(),
new ReturnType.OpaqueUntypedRecord(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ internal static class ReturnTypeRendererCallback
new ReturnType.Class(),
new ReturnType.Enumeration(),
new ReturnType.ForeignTypedRecord(),
new ReturnType.ForeignUntypedRecord(),

Check failure on line 13 in src/Generation/Generator/Renderer/Public/ReturnType/ReturnTypeRendererCallback.cs

View workflow job for this annotation

GitHub Actions / Build (Linux)

The type or namespace name 'ForeignUntypedRecord' does not exist in the namespace 'Generator.Renderer.Public.ReturnType' (are you missing an assembly reference?)

Check failure on line 13 in src/Generation/Generator/Renderer/Public/ReturnType/ReturnTypeRendererCallback.cs

View workflow job for this annotation

GitHub Actions / Build (MacOS)

The type or namespace name 'ForeignUntypedRecord' does not exist in the namespace 'Generator.Renderer.Public.ReturnType' (are you missing an assembly reference?)

Check failure on line 13 in src/Generation/Generator/Renderer/Public/ReturnType/ReturnTypeRendererCallback.cs

View workflow job for this annotation

GitHub Actions / Build (Windows)

The type or namespace name 'ForeignUntypedRecord' does not exist in the namespace 'Generator.Renderer.Public.ReturnType' (are you missing an assembly reference?)
new ReturnType.Interface(),
new ReturnType.OpaqueTypedRecord(),
new ReturnType.OpaqueUntypedRecord(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ internal static class ReturnTypeToManagedExpression
new ReturnTypeToManagedExpressions.Class(),
new ReturnTypeToManagedExpressions.Enumeration(),
new ReturnTypeToManagedExpressions.ForeignTypedRecord(),
new ReturnTypeToManagedExpressions.ForeignUntypedRecord(),

Check failure on line 13 in src/Generation/Generator/Renderer/Public/ReturnTypeToManagedExpression/ReturnTypeToManagedExpression.cs

View workflow job for this annotation

GitHub Actions / Build (Linux)

The type or namespace name 'ForeignUntypedRecord' does not exist in the namespace 'Generator.Renderer.Public.ReturnTypeToManagedExpressions' (are you missing an assembly reference?)

Check failure on line 13 in src/Generation/Generator/Renderer/Public/ReturnTypeToManagedExpression/ReturnTypeToManagedExpression.cs

View workflow job for this annotation

GitHub Actions / Build (MacOS)

The type or namespace name 'ForeignUntypedRecord' does not exist in the namespace 'Generator.Renderer.Public.ReturnTypeToManagedExpressions' (are you missing an assembly reference?)

Check failure on line 13 in src/Generation/Generator/Renderer/Public/ReturnTypeToManagedExpression/ReturnTypeToManagedExpression.cs

View workflow job for this annotation

GitHub Actions / Build (Windows)

The type or namespace name 'ForeignUntypedRecord' does not exist in the namespace 'Generator.Renderer.Public.ReturnTypeToManagedExpressions' (are you missing an assembly reference?)
new ReturnTypeToManagedExpressions.Interface(),
new ReturnTypeToManagedExpressions.OpaqueTypedRecord(),
new ReturnTypeToManagedExpressions.OpaqueUntypedRecord(),
Expand Down
3 changes: 1 addition & 2 deletions src/Libs/cairo-1.0/Internal/Matrix.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using System;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices;

namespace Cairo.Internal;

Expand Down
Loading

0 comments on commit 3fc765b

Please sign in to comment.