Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
7a22728
Adjusting how the index is retrieved for call expressions
tannergooding Mar 26, 2021
7ad2a1e
Allow getting the current contents of the C# output builder
tannergooding Mar 26, 2021
643e8c9
Better handle getting the cursor qualified name when DeclContext is null
tannergooding Mar 26, 2021
7ea16f7
Handle IntegerLiteral where the kind is a named constant
tannergooding Mar 26, 2021
ae6fdbb
Ensure the checks in Type.CastAs and Type.GetAs are correct
tannergooding Mar 26, 2021
a330ab3
Fallback to ThisObjectType.AsCXXRecordDecl when CXXMethodDecl.Parent …
tannergooding Mar 26, 2021
2cfcc01
Better support generating names for template types
tannergooding Mar 26, 2021
ee8d6dd
Handle call expressions that don't have a declaration
tannergooding Mar 26, 2021
02796cc
Don't try to directly visit a virtual destructor declaration
tannergooding Mar 26, 2021
d8570dc
Correctly handle argument counts for instance CXXOperatorCallExpr
tannergooding Mar 26, 2021
cfb5360
Don't use Finalize for destructors as it is reserved
tannergooding Mar 26, 2021
85015c1
Adding basic support for CXXNewExpr
tannergooding Mar 26, 2021
2424a13
Adding basic support for CXXDefaultArgExpr
tannergooding Mar 26, 2021
9c1bfb4
Adding basic support for SubstNonTypeTemplateParmExpr
tannergooding Mar 26, 2021
682c846
Adding support for builtin and pointer init list expressions
tannergooding Mar 26, 2021
5aa3fb7
Handle FriendDecl and TemplateSpecializationType
tannergooding Mar 26, 2021
6fa20e3
Adding basic support for ExprWithCleanups
tannergooding Mar 26, 2021
121b8c3
Ensure existing expression types are handled by IsChecked and IsConstant
tannergooding Mar 26, 2021
1142862
Updating GetRemappedName to respect remappings to the same name
tannergooding Apr 3, 2021
18eacbc
Resolving analyzer diagnostics
tannergooding Apr 3, 2021
a007727
Adding basic support for handling class and function template declara…
tannergooding Apr 3, 2021
562b5bb
Don't emit NativeTypeNameAttribute when the names only differ by whit…
tannergooding Apr 3, 2021
465859c
Don't double count anonymous record decls when computing size
tannergooding Apr 3, 2021
d4b1f3c
Handle label declarations
tannergooding Apr 3, 2021
b7df747
Respect an existing type name remapping
tannergooding Apr 3, 2021
fa5bb04
Ensure we don't traverse too far up for indirect field decl context p…
tannergooding Apr 3, 2021
554b1c0
Ensure ArraySubscriptExpr differentiates LHS vs RHS
tannergooding Apr 3, 2021
49e3b2f
Ensure we still do the nativeTypeName == remappedName check in all paths
tannergooding Apr 3, 2021
0319968
Collect artifacts from the win32metadata test
tannergooding Apr 3, 2021
9850f94
Fixing an issue with the "exclude function bodies" logic
tannergooding Apr 3, 2021
53b4e2d
Don't process template decls without explicit opt-in
tannergooding Apr 3, 2021
36750c7
Ensure GetTypeSize doesn't end up with an alignment of -1
tannergooding Apr 3, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
363 changes: 219 additions & 144 deletions .editorconfig

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,8 @@ Options:
attributes.
generate-macro-bindings Bindings for macro-definitions should be generated. This currently only
works with value like macros and not function-like ones.
generate-template-bindings Bindings for template-definitions should be generated. This is currently
experimental.
generate-native-inheritance-attribute [NativeInheritance("")] attribute should be generated to document the
encountered C++ base type.
generate-vtbl-index-attribute [VtblIndex(#)] attribute should be generated to document the underlying
Expand Down
21 changes: 21 additions & 0 deletions scripts/azure-windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,27 @@ jobs:
PathtoPublish: artifacts/pkg/${{parameters.configuration}}
ArtifactName: packages
publishLocation: Container
- task: CopyFiles@2
displayName: 'Stage win32metadata bin artifacts'
condition: eq(${{parameters.testwin32metadata}}, true)
inputs:
sourceFolder: artifacts/win32metadata
contents: '**/bin/**'
targetFolder: $(Build.ArtifactStagingDirectory)
- task: CopyFiles@2
displayName: 'Stage win32metadata obj artifacts'
condition: eq(${{parameters.testwin32metadata}}, true)
inputs:
sourceFolder: artifacts/win32metadata
contents: '**/obj/**'
targetFolder: $(Build.ArtifactStagingDirectory)
- task: PublishBuildArtifacts@1
displayName: 'Publish win32metadata Artifacts'
condition: eq(${{parameters.testwin32metadata}}, true)
inputs:
PathtoPublish: $(Build.ArtifactStagingDirectory)
ArtifactName: win32metadata
publishLocation: Container
variables:
EXCLUDE_BUILDNUMBER_FROM_PACKAGE: ${{parameters.EXCLUDE_BUILDNUMBER_FROM_PACKAGE}}
OVERRIDE_RUNTIME_IDENTIFIER: ${{parameters.OVERRIDE_RUNTIME_IDENTIFIER}}
Original file line number Diff line number Diff line change
Expand Up @@ -18,98 +18,181 @@ internal struct FunctionOrDelegateDesc<TCustomAttrGeneratorData>

public bool IsVirtual
{
get => (Flags & FunctionOrDelegateFlags.IsVirtual) != 0;
set => Flags =
value ? Flags | FunctionOrDelegateFlags.IsVirtual : Flags & ~FunctionOrDelegateFlags.IsVirtual;
get
{
return (Flags & FunctionOrDelegateFlags.IsVirtual) != 0;
}

set
{
Flags = value ? Flags | FunctionOrDelegateFlags.IsVirtual : Flags & ~FunctionOrDelegateFlags.IsVirtual;
}
}

public bool IsDllImport
{
get => (Flags & FunctionOrDelegateFlags.IsDllImport) != 0;
set => Flags = value
? Flags | FunctionOrDelegateFlags.IsDllImport
: Flags & ~FunctionOrDelegateFlags.IsDllImport;
get
{
return (Flags & FunctionOrDelegateFlags.IsDllImport) != 0;
}

set
{
Flags = value
? Flags | FunctionOrDelegateFlags.IsDllImport
: Flags & ~FunctionOrDelegateFlags.IsDllImport;
}
}

public bool HasFnPtrCodeGen
{
get => (Flags & FunctionOrDelegateFlags.HasFnPtrCodeGen) != 0;
set => Flags = value
? Flags | FunctionOrDelegateFlags.HasFnPtrCodeGen
: Flags & ~FunctionOrDelegateFlags.HasFnPtrCodeGen;
get
{
return (Flags & FunctionOrDelegateFlags.HasFnPtrCodeGen) != 0;
}

set
{
Flags = value
? Flags | FunctionOrDelegateFlags.HasFnPtrCodeGen
: Flags & ~FunctionOrDelegateFlags.HasFnPtrCodeGen;
}
}

public bool IsAggressivelyInlined
{
get => (Flags & FunctionOrDelegateFlags.IsAggressivelyInlined) != 0;
set => Flags = value
? Flags | FunctionOrDelegateFlags.IsAggressivelyInlined
: Flags & ~FunctionOrDelegateFlags.IsAggressivelyInlined;
get
{
return (Flags & FunctionOrDelegateFlags.IsAggressivelyInlined) != 0;
}

set
{
Flags = value
? Flags | FunctionOrDelegateFlags.IsAggressivelyInlined
: Flags & ~FunctionOrDelegateFlags.IsAggressivelyInlined;
}
}

public bool SetLastError
{
get => (Flags & FunctionOrDelegateFlags.SetLastError) != 0;
set => Flags = value
? Flags | FunctionOrDelegateFlags.SetLastError
: Flags & ~FunctionOrDelegateFlags.SetLastError;
get
{
return (Flags & FunctionOrDelegateFlags.SetLastError) != 0;
}

set
{
Flags = value
? Flags | FunctionOrDelegateFlags.SetLastError
: Flags & ~FunctionOrDelegateFlags.SetLastError;
}
}

public bool IsCxx
{
get => (Flags & FunctionOrDelegateFlags.IsCxx) != 0;
set => Flags = value ? Flags | FunctionOrDelegateFlags.IsCxx : Flags & ~FunctionOrDelegateFlags.IsCxx;
get
{
return (Flags & FunctionOrDelegateFlags.IsCxx) != 0;
}

set
{
Flags = value ? Flags | FunctionOrDelegateFlags.IsCxx : Flags & ~FunctionOrDelegateFlags.IsCxx;
}
}

public bool NeedsNewKeyword
{
get => (Flags & FunctionOrDelegateFlags.NeedsNewKeyword) != 0;
set => Flags = value
? Flags | FunctionOrDelegateFlags.NeedsNewKeyword
: Flags & ~FunctionOrDelegateFlags.NeedsNewKeyword;
get
{
return (Flags & FunctionOrDelegateFlags.NeedsNewKeyword) != 0;
}

set
{
Flags = value
? Flags | FunctionOrDelegateFlags.NeedsNewKeyword
: Flags & ~FunctionOrDelegateFlags.NeedsNewKeyword;
}
}

public bool IsUnsafe
{
get => (Flags & FunctionOrDelegateFlags.IsUnsafe) != 0;
set => Flags = value ? Flags | FunctionOrDelegateFlags.IsUnsafe : Flags & ~FunctionOrDelegateFlags.IsUnsafe;
get
{
return (Flags & FunctionOrDelegateFlags.IsUnsafe) != 0;
}

set
{
Flags = value ? Flags | FunctionOrDelegateFlags.IsUnsafe : Flags & ~FunctionOrDelegateFlags.IsUnsafe;
}
}

public bool IsCtxCxxRecord
{
get => (Flags & FunctionOrDelegateFlags.IsCtxCxxRecord) != 0;
set => Flags = value
? Flags | FunctionOrDelegateFlags.IsCtxCxxRecord
: Flags & ~FunctionOrDelegateFlags.IsCtxCxxRecord;
get
{
return (Flags & FunctionOrDelegateFlags.IsCtxCxxRecord) != 0;
}

set
{
Flags = value
? Flags | FunctionOrDelegateFlags.IsCtxCxxRecord
: Flags & ~FunctionOrDelegateFlags.IsCtxCxxRecord;
}
}

public bool IsCxxRecordCtxUnsafe
{
get => (Flags & FunctionOrDelegateFlags.IsCxxRecordCtxUnsafe) != 0;
set => Flags = value
? Flags | FunctionOrDelegateFlags.IsCxxRecordCtxUnsafe
: Flags & ~FunctionOrDelegateFlags.IsCxxRecordCtxUnsafe;
get
{
return (Flags & FunctionOrDelegateFlags.IsCxxRecordCtxUnsafe) != 0;
}

set
{
Flags = value
? Flags | FunctionOrDelegateFlags.IsCxxRecordCtxUnsafe
: Flags & ~FunctionOrDelegateFlags.IsCxxRecordCtxUnsafe;
}
}

public bool IsMemberFunction
{
get => (Flags & FunctionOrDelegateFlags.IsMemberFunction) != 0;
set => Flags = value
? Flags | FunctionOrDelegateFlags.IsMemberFunction
: Flags & ~FunctionOrDelegateFlags.IsMemberFunction;
get
{
return (Flags & FunctionOrDelegateFlags.IsMemberFunction) != 0;
}

set
{
Flags = value
? Flags | FunctionOrDelegateFlags.IsMemberFunction
: Flags & ~FunctionOrDelegateFlags.IsMemberFunction;
}
}

public bool? IsStatic
{
get => (Flags & FunctionOrDelegateFlags.IsStatic) != 0 ? true :
(Flags & FunctionOrDelegateFlags.IsNotStatic) != 0 ? false : null;
set => Flags = value switch
{
// true - static, false - not static, null - infer
true => Flags | FunctionOrDelegateFlags.IsStatic & ~FunctionOrDelegateFlags.IsNotStatic,
false => Flags & ~FunctionOrDelegateFlags.IsStatic | FunctionOrDelegateFlags.IsNotStatic,
null => Flags & ~FunctionOrDelegateFlags.IsStatic & ~FunctionOrDelegateFlags.IsNotStatic
};
get
{
return (Flags & FunctionOrDelegateFlags.IsStatic) != 0
? true
: (Flags & FunctionOrDelegateFlags.IsNotStatic) != 0 ? false : null;
}

set
{
Flags = value switch {
// true - static, false - not static, null - infer
true => Flags | (FunctionOrDelegateFlags.IsStatic & ~FunctionOrDelegateFlags.IsNotStatic),
false => (Flags & ~FunctionOrDelegateFlags.IsStatic) | FunctionOrDelegateFlags.IsNotStatic,
null => Flags & ~FunctionOrDelegateFlags.IsStatic & ~FunctionOrDelegateFlags.IsNotStatic
};
}
}

public Action<TCustomAttrGeneratorData> WriteCustomAttrs { get; set; }
Expand Down
22 changes: 18 additions & 4 deletions sources/ClangSharp.PInvokeGenerator/Abstractions/StructDesc.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,28 @@ internal struct StructDesc<TCustomAttrGeneratorData>

public bool IsUnsafe
{
get => (Flags & StructFlags.IsUnsafe) != 0;
set => Flags = value ? Flags | StructFlags.IsUnsafe : Flags & ~StructFlags.IsUnsafe;
get
{
return (Flags & StructFlags.IsUnsafe) != 0;
}

set
{
Flags = value ? Flags | StructFlags.IsUnsafe : Flags & ~StructFlags.IsUnsafe;
}
}

public bool HasVtbl
{
get => (Flags & StructFlags.HasVtbl) != 0;
set => Flags = value ? Flags | StructFlags.HasVtbl : Flags & ~StructFlags.HasVtbl;
get
{
return (Flags & StructFlags.HasVtbl) != 0;
}

set
{
Flags = value ? Flags | StructFlags.HasVtbl : Flags & ~StructFlags.HasVtbl;
}
}

public Action<TCustomAttrGeneratorData> WriteCustomAttrs { get; set; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,7 @@ public void WriteDivider(bool force = false)
}
}

public void SuppressDivider()
{
NeedsNewline = false;
}
public void SuppressDivider() => NeedsNewline = false;

public void WriteIid(string iidName, string iidValue)
{
Expand Down
Loading