From c866492ca663e2fc31a537be0c0b8df58a1e82ea Mon Sep 17 00:00:00 2001 From: Tanner Gooding Date: Sun, 12 Jul 2026 15:33:31 -0700 Subject: [PATCH] Collapse Desc flag boilerplate into shared helpers `FunctionOrDelegateDesc`, `StructDesc`, and `EnumDesc` each duplicated the same `(Flags & X) != 0` get and `value ? Flags | X : Flags & ~X` set logic across every single-bit flag property. Route them through per-struct `GetFlag`/`SetFlag` helpers so the accessors are one line each. Behavior-preserving; the tri-state `IsStatic` on `FunctionOrDelegateDesc` is left as-is since it spans two flags, and `ValueDesc` already used concise read-only getters. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- .../Abstractions/EnumDesc.cs | 9 +- .../Abstractions/FunctionOrDelegateDesc.cs | 88 +++++++------------ .../Abstractions/StructDesc.cs | 20 +++-- 3 files changed, 53 insertions(+), 64 deletions(-) diff --git a/sources/ClangSharp.PInvokeGenerator/Abstractions/EnumDesc.cs b/sources/ClangSharp.PInvokeGenerator/Abstractions/EnumDesc.cs index 3ed8b718..c7cc612e 100644 --- a/sources/ClangSharp.PInvokeGenerator/Abstractions/EnumDesc.cs +++ b/sources/ClangSharp.PInvokeGenerator/Abstractions/EnumDesc.cs @@ -16,14 +16,19 @@ public bool IsNested { readonly get { - return (Flags & EnumFlags.Nested) != 0; + return GetFlag(EnumFlags.Nested); } set { - Flags = value ? Flags | EnumFlags.Nested : Flags & ~EnumFlags.Nested; + SetFlag(EnumFlags.Nested, value); } } + + private readonly bool GetFlag(EnumFlags flag) => (Flags & flag) != 0; + + private void SetFlag(EnumFlags flag, bool value) => Flags = value ? Flags | flag : Flags & ~flag; + public Action WriteCustomAttrs { get; set; } public object CustomAttrGeneratorData { get; set; } } diff --git a/sources/ClangSharp.PInvokeGenerator/Abstractions/FunctionOrDelegateDesc.cs b/sources/ClangSharp.PInvokeGenerator/Abstractions/FunctionOrDelegateDesc.cs index 8a369cb9..24c8aa63 100644 --- a/sources/ClangSharp.PInvokeGenerator/Abstractions/FunctionOrDelegateDesc.cs +++ b/sources/ClangSharp.PInvokeGenerator/Abstractions/FunctionOrDelegateDesc.cs @@ -27,12 +27,12 @@ public bool IsVirtual { readonly get { - return (Flags & FunctionOrDelegateFlags.IsVirtual) != 0; + return GetFlag(FunctionOrDelegateFlags.IsVirtual); } set { - Flags = value ? Flags | FunctionOrDelegateFlags.IsVirtual : Flags & ~FunctionOrDelegateFlags.IsVirtual; + SetFlag(FunctionOrDelegateFlags.IsVirtual, value); } } @@ -40,14 +40,12 @@ public bool IsDllImport { readonly get { - return (Flags & FunctionOrDelegateFlags.IsDllImport) != 0; + return GetFlag(FunctionOrDelegateFlags.IsDllImport); } set { - Flags = value - ? Flags | FunctionOrDelegateFlags.IsDllImport - : Flags & ~FunctionOrDelegateFlags.IsDllImport; + SetFlag(FunctionOrDelegateFlags.IsDllImport, value); } } @@ -55,14 +53,12 @@ public bool IsManualImport { readonly get { - return (Flags & FunctionOrDelegateFlags.IsManualImport) != 0; + return GetFlag(FunctionOrDelegateFlags.IsManualImport); } set { - Flags = value - ? Flags | FunctionOrDelegateFlags.IsManualImport - : Flags & ~FunctionOrDelegateFlags.IsManualImport; + SetFlag(FunctionOrDelegateFlags.IsManualImport, value); } } @@ -70,14 +66,12 @@ public bool IsReadOnly { readonly get { - return (Flags & FunctionOrDelegateFlags.IsReadOnly) != 0; + return GetFlag(FunctionOrDelegateFlags.IsReadOnly); } set { - Flags = value - ? Flags | FunctionOrDelegateFlags.IsReadOnly - : Flags & ~FunctionOrDelegateFlags.IsReadOnly; + SetFlag(FunctionOrDelegateFlags.IsReadOnly, value); } } @@ -85,14 +79,12 @@ public bool HasFnPtrCodeGen { readonly get { - return (Flags & FunctionOrDelegateFlags.HasFnPtrCodeGen) != 0; + return GetFlag(FunctionOrDelegateFlags.HasFnPtrCodeGen); } set { - Flags = value - ? Flags | FunctionOrDelegateFlags.HasFnPtrCodeGen - : Flags & ~FunctionOrDelegateFlags.HasFnPtrCodeGen; + SetFlag(FunctionOrDelegateFlags.HasFnPtrCodeGen, value); } } @@ -100,14 +92,12 @@ public bool IsAggressivelyInlined { readonly get { - return (Flags & FunctionOrDelegateFlags.IsAggressivelyInlined) != 0; + return GetFlag(FunctionOrDelegateFlags.IsAggressivelyInlined); } set { - Flags = value - ? Flags | FunctionOrDelegateFlags.IsAggressivelyInlined - : Flags & ~FunctionOrDelegateFlags.IsAggressivelyInlined; + SetFlag(FunctionOrDelegateFlags.IsAggressivelyInlined, value); } } @@ -115,14 +105,12 @@ public bool SetLastError { readonly get { - return (Flags & FunctionOrDelegateFlags.SetLastError) != 0; + return GetFlag(FunctionOrDelegateFlags.SetLastError); } set { - Flags = value - ? Flags | FunctionOrDelegateFlags.SetLastError - : Flags & ~FunctionOrDelegateFlags.SetLastError; + SetFlag(FunctionOrDelegateFlags.SetLastError, value); } } @@ -130,12 +118,12 @@ public bool IsCxx { readonly get { - return (Flags & FunctionOrDelegateFlags.IsCxx) != 0; + return GetFlag(FunctionOrDelegateFlags.IsCxx); } set { - Flags = value ? Flags | FunctionOrDelegateFlags.IsCxx : Flags & ~FunctionOrDelegateFlags.IsCxx; + SetFlag(FunctionOrDelegateFlags.IsCxx, value); } } @@ -143,14 +131,12 @@ public bool NeedsNewKeyword { readonly get { - return (Flags & FunctionOrDelegateFlags.NeedsNewKeyword) != 0; + return GetFlag(FunctionOrDelegateFlags.NeedsNewKeyword); } set { - Flags = value - ? Flags | FunctionOrDelegateFlags.NeedsNewKeyword - : Flags & ~FunctionOrDelegateFlags.NeedsNewKeyword; + SetFlag(FunctionOrDelegateFlags.NeedsNewKeyword, value); } } @@ -158,12 +144,12 @@ public bool IsUnsafe { readonly get { - return (Flags & FunctionOrDelegateFlags.IsUnsafe) != 0; + return GetFlag(FunctionOrDelegateFlags.IsUnsafe); } set { - Flags = value ? Flags | FunctionOrDelegateFlags.IsUnsafe : Flags & ~FunctionOrDelegateFlags.IsUnsafe; + SetFlag(FunctionOrDelegateFlags.IsUnsafe, value); } } @@ -171,14 +157,12 @@ public bool IsCtxCxxRecord { readonly get { - return (Flags & FunctionOrDelegateFlags.IsCtxCxxRecord) != 0; + return GetFlag(FunctionOrDelegateFlags.IsCtxCxxRecord); } set { - Flags = value - ? Flags | FunctionOrDelegateFlags.IsCtxCxxRecord - : Flags & ~FunctionOrDelegateFlags.IsCtxCxxRecord; + SetFlag(FunctionOrDelegateFlags.IsCtxCxxRecord, value); } } @@ -186,14 +170,12 @@ public bool IsCxxRecordCtxUnsafe { readonly get { - return (Flags & FunctionOrDelegateFlags.IsCxxRecordCtxUnsafe) != 0; + return GetFlag(FunctionOrDelegateFlags.IsCxxRecordCtxUnsafe); } set { - Flags = value - ? Flags | FunctionOrDelegateFlags.IsCxxRecordCtxUnsafe - : Flags & ~FunctionOrDelegateFlags.IsCxxRecordCtxUnsafe; + SetFlag(FunctionOrDelegateFlags.IsCxxRecordCtxUnsafe, value); } } @@ -201,14 +183,12 @@ public bool IsMemberFunction { readonly get { - return (Flags & FunctionOrDelegateFlags.IsMemberFunction) != 0; + return GetFlag(FunctionOrDelegateFlags.IsMemberFunction); } set { - Flags = value - ? Flags | FunctionOrDelegateFlags.IsMemberFunction - : Flags & ~FunctionOrDelegateFlags.IsMemberFunction; + SetFlag(FunctionOrDelegateFlags.IsMemberFunction, value); } } @@ -236,14 +216,12 @@ public bool NeedsReturnFixup { readonly get { - return (Flags & FunctionOrDelegateFlags.NeedsReturnFixup) != 0; + return GetFlag(FunctionOrDelegateFlags.NeedsReturnFixup); } set { - Flags = value - ? Flags | FunctionOrDelegateFlags.NeedsReturnFixup - : Flags & ~FunctionOrDelegateFlags.NeedsReturnFixup; + SetFlag(FunctionOrDelegateFlags.NeedsReturnFixup, value); } } @@ -251,17 +229,19 @@ public bool IsCxxConstructor { readonly get { - return (Flags & FunctionOrDelegateFlags.IsCxxConstructor) != 0; + return GetFlag(FunctionOrDelegateFlags.IsCxxConstructor); } set { - Flags = value - ? Flags | FunctionOrDelegateFlags.IsCxxConstructor - : Flags & ~FunctionOrDelegateFlags.IsCxxConstructor; + SetFlag(FunctionOrDelegateFlags.IsCxxConstructor, value); } } + private readonly bool GetFlag(FunctionOrDelegateFlags flag) => (Flags & flag) != 0; + + private void SetFlag(FunctionOrDelegateFlags flag, bool value) => Flags = value ? Flags | flag : Flags & ~flag; + public Action WriteCustomAttrs { get; set; } public object CustomAttrGeneratorData { get; set; } } diff --git a/sources/ClangSharp.PInvokeGenerator/Abstractions/StructDesc.cs b/sources/ClangSharp.PInvokeGenerator/Abstractions/StructDesc.cs index 60357236..6bf0d22f 100644 --- a/sources/ClangSharp.PInvokeGenerator/Abstractions/StructDesc.cs +++ b/sources/ClangSharp.PInvokeGenerator/Abstractions/StructDesc.cs @@ -22,12 +22,12 @@ public bool IsNested { readonly get { - return (Flags & StructFlags.Nested) != 0; + return GetFlag(StructFlags.Nested); } set { - Flags = value ? Flags | StructFlags.Nested : Flags & ~StructFlags.Nested; + SetFlag(StructFlags.Nested, value); } } @@ -35,12 +35,12 @@ public bool IsUnsafe { readonly get { - return (Flags & StructFlags.Unsafe) != 0; + return GetFlag(StructFlags.Unsafe); } set { - Flags = value ? Flags | StructFlags.Unsafe : Flags & ~StructFlags.Unsafe; + SetFlag(StructFlags.Unsafe, value); } } @@ -48,12 +48,12 @@ public bool HasVtbl { readonly get { - return (Flags & StructFlags.Vtbl) != 0; + return GetFlag(StructFlags.Vtbl); } set { - Flags = value ? Flags | StructFlags.Vtbl : Flags & ~StructFlags.Vtbl; + SetFlag(StructFlags.Vtbl, value); } } @@ -61,15 +61,19 @@ public bool IsUnion { readonly get { - return (Flags & StructFlags.Union) != 0; + return GetFlag(StructFlags.Union); } set { - Flags = value ? Flags | StructFlags.Union : Flags & ~StructFlags.Union; + SetFlag(StructFlags.Union, value); } } + private readonly bool GetFlag(StructFlags flag) => (Flags & flag) != 0; + + private void SetFlag(StructFlags flag, bool value) => Flags = value ? Flags | flag : Flags & ~flag; + public Action WriteCustomAttrs { get; set; } public object CustomAttrGeneratorData { get; set; }