Skip to content

Commit c03292c

Browse files
committed
Fixing some minor handling around bitfields and the like
1 parent 2bebf0e commit c03292c

File tree

5 files changed

+62
-41
lines changed

5 files changed

+62
-41
lines changed

sources/ClangSharp.PInvokeGenerator/PInvokeGenerator.VisitDecl.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1382,7 +1382,7 @@ private void VisitRecordDecl(RecordDecl recordDecl)
13821382

13831383
_uuidsToGenerate.Add(uuidName, uuid);
13841384

1385-
if (_testOutputBuilder is not null)
1385+
if ((_testOutputBuilder is not null) && (uuid != Guid.Empty))
13861386
{
13871387
var className = GetClass(uuidName);
13881388

@@ -2686,7 +2686,7 @@ void VisitBitfieldDecl(FieldDecl fieldDecl, BitfieldDesc[] bitfieldDescs, Record
26862686
code.Write(")(");
26872687
}
26882688

2689-
if ((!needsParenFirst && (bitfieldOffset != 0)) || (!needsCast && isTypeSigned))
2689+
if ((!needsParenFirst && (bitfieldOffset != 0)) || (!isUnsignedToSigned && isTypeSigned))
26902690
{
26912691
code.Write('(');
26922692
}

sources/ClangSharp.PInvokeGenerator/PInvokeGenerator.VisitStmt.cs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2746,9 +2746,20 @@ private void VisitUnaryOperator(UnaryOperator unaryOperator)
27462746
break;
27472747
}
27482748

2749+
case CX_UO_Deref:
2750+
{
2751+
if (_topLevelClassNames.Contains(outputBuilder.Name))
2752+
{
2753+
_topLevelClassIsUnsafe[outputBuilder.Name] = true;
2754+
}
2755+
2756+
outputBuilder.Write(unaryOperator.OpcodeStr);
2757+
Visit(unaryOperator.SubExpr);
2758+
break;
2759+
}
2760+
27492761
case CX_UO_PreInc:
27502762
case CX_UO_PreDec:
2751-
case CX_UO_Deref:
27522763
case CX_UO_Plus:
27532764
case CX_UO_Minus:
27542765
case CX_UO_Not:

sources/ClangSharp.PInvokeGenerator/PInvokeGenerator.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2426,7 +2426,7 @@ private CallConv GetCallingConvention(Cursor? cursor, Cursor? context, Type type
24262426

24272427
if (_config.GenerateCallConvMemberFunction)
24282428
{
2429-
if ((cursor is CXXMethodDecl cxxMethodDecl) && cxxMethodDecl.IsInstance)
2429+
if ((cursor is CXXMethodDecl cxxMethodDecl) && cxxMethodDecl.IsInstance && (context is not null))
24302430
{
24312431
return CallConv.MemberFunction;
24322432
}
@@ -4610,6 +4610,11 @@ bool IsExcludedByName(Cursor cursor, ref uint isExcludedValue)
46104610
isExcludedValue |= 0b10;
46114611
}
46124612
}
4613+
4614+
if (_config.GenerateDisableRuntimeMarshalling && functionDecl.IsVariadic)
4615+
{
4616+
isExcludedByConfigOption = true;
4617+
}
46134618
}
46144619

46154620
var dottedQualifiedName = qualifiedName.Replace("::", ".", StringComparison.Ordinal);

sources/ClangSharpPInvokeGenerator/Program.cs

Lines changed: 37 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,43 @@ namespace ClangSharp;
2222

2323
public static class Program
2424
{
25+
private static readonly string[] s_additionalOptionAliases = ["--additional", "-a"];
26+
private static readonly string[] s_configOptionAliases = ["--config", "-c"];
27+
private static readonly string[] s_defineMacroOptionAliases = ["--define-macro", "-D"];
28+
private static readonly string[] s_excludeOptionAliases = ["--exclude", "-e"];
29+
private static readonly string[] s_fileOptionAliases = ["--file", "-f"];
30+
private static readonly string[] s_fileDirectionOptionAliases = ["--file-directory", "-F"];
31+
private static readonly string[] s_headerOptionAliases = ["--headerFile", "-h"];
32+
private static readonly string[] s_includeOptionAliases = ["--include", "-i"];
33+
private static readonly string[] s_includeDirectoryOptionAliases = ["--include-directory", "-I"];
34+
private static readonly string[] s_languageOptionAliases = ["--language", "-x"];
35+
private static readonly string[] s_libraryOptionAliases = ["--libraryPath", "-l"];
36+
private static readonly string[] s_methodClassNameOptionAliases = ["--methodClassName", "-m"];
37+
private static readonly string[] s_namespaceOptionAliases = ["--namespace", "-n"];
38+
private static readonly string[] s_nativeTypeNamesStripOptionAliases = ["--nativeTypeNamesToStrip"];
39+
private static readonly string[] s_outputModeOptionAliases = ["--output-mode", "-om"];
40+
private static readonly string[] s_outputOptionAliases = ["--output", "-o"];
41+
private static readonly string[] s_prefixStripOptionAliases = ["--prefixStrip", "-p"];
42+
private static readonly string[] s_remapOptionAliases = ["--remap", "-r"];
43+
private static readonly string[] s_stdOptionAliases = ["--std", "-std"];
44+
private static readonly string[] s_testOutputOptionAliases = ["--test-output", "-to"];
45+
private static readonly string[] s_versionOptionAliases = ["--version", "-v"];
46+
private static readonly string[] s_traverseOptionAliases = ["--traverse", "-t"];
47+
private static readonly string[] s_withAccessSpecifierOptionAliases = ["--with-access-specifier", "-was"];
48+
private static readonly string[] s_withAttributeOptionAliases = ["--with-attribute", "-wa"];
49+
private static readonly string[] s_withCallConvOptionAliases = ["--with-callconv", "-wcc"];
50+
private static readonly string[] s_withClassOptionAliases = ["--with-class", "-wc"];
51+
private static readonly string[] s_withGuidOptionAliases = ["--with-guid", "-wg"];
52+
private static readonly string[] s_withLibraryPathOptionAliases = ["--with-librarypath", "-wlb"];
53+
private static readonly string[] s_withManualImportOptionAliases = ["--with-manual-import", "-wmi"];
54+
private static readonly string[] s_withNamespaceOptionAliases = ["--with-namespace", "-wn"];
55+
private static readonly string[] s_withSetLastErrorOptionAliases = ["--with-setlasterror", "-wsle"];
56+
private static readonly string[] s_withSuppressGCTransitionOptionAliases = ["--with-suppressgctransition", "-wsgct"];
57+
private static readonly string[] s_withTransparentStructOptionAliases = ["--with-transparent-struct", "-wts"];
58+
private static readonly string[] s_withTypeOptionAliases = ["--with-type", "-wt"];
59+
private static readonly string[] s_withUsingOptionAliases = ["--with-using", "-wu"];
60+
private static readonly string[] s_withPackingOptionAliases = ["--with-packing", "-wp"];
61+
2562
private static readonly Option<string[]> s_additionalOption = GetAdditionalOption();
2663
private static readonly Option<string[]> s_configOption = GetConfigOption();
2764
private static readonly Option<string[]> s_defineMacros = GetDefineMacroOption();
@@ -130,43 +167,6 @@ public static class Program
130167
new TwoColumnHelpRow("log-visited-files", "A list of the visited files should be generated. This can help identify traversal issues."),
131168
];
132169

133-
private static readonly string[] s_additionalOptionAliases = ["--additional", "-a"];
134-
private static readonly string[] s_configOptionAliases = ["--config", "-c"];
135-
private static readonly string[] s_defineMacroOptionAliases = ["--define-macro", "-D"];
136-
private static readonly string[] s_excludeOptionAliases = ["--exclude", "-e"];
137-
private static readonly string[] s_fileOptionAliases = ["--file", "-f"];
138-
private static readonly string[] s_fileDirectionOptionAliases = ["--file-directory", "-F"];
139-
private static readonly string[] s_headerOptionAliases = ["--headerFile", "-h"];
140-
private static readonly string[] s_includeOptionAliases = ["--include", "-i"];
141-
private static readonly string[] s_includeDirectoryOptionAliases = ["--include-directory", "-I"];
142-
private static readonly string[] s_languageOptionAliases = ["--language", "-x"];
143-
private static readonly string[] s_libraryOptionAliases = ["--libraryPath", "-l"];
144-
private static readonly string[] s_methodClassNameOptionAliases = ["--methodClassName", "-m"];
145-
private static readonly string[] s_namespaceOptionAliases = ["--namespace", "-n"];
146-
private static readonly string[] s_nativeTypeNamesStripOptionAliases = ["--nativeTypeNamesToStrip"];
147-
private static readonly string[] s_outputModeOptionAliases = ["--output-mode", "-om"];
148-
private static readonly string[] s_outputOptionAliases = ["--output", "-o"];
149-
private static readonly string[] s_prefixStripOptionAliases = ["--prefixStrip", "-p"];
150-
private static readonly string[] s_remapOptionAliases = ["--remap", "-r"];
151-
private static readonly string[] s_stdOptionAliases = ["--std", "-std"];
152-
private static readonly string[] s_testOutputOptionAliases = ["--test-output", "-to"];
153-
private static readonly string[] s_versionOptionAliases = ["--version", "-v"];
154-
private static readonly string[] s_traverseOptionAliases = ["--traverse", "-t"];
155-
private static readonly string[] s_withAccessSpecifierOptionAliases = ["--with-access-specifier", "-was"];
156-
private static readonly string[] s_withAttributeOptionAliases = ["--with-attribute", "-wa"];
157-
private static readonly string[] s_withCallConvOptionAliases = ["--with-callconv", "-wcc"];
158-
private static readonly string[] s_withClassOptionAliases = ["--with-class", "-wc"];
159-
private static readonly string[] s_withGuidOptionAliases = ["--with-guid", "-wg"];
160-
private static readonly string[] s_withLibraryPathOptionAliases = ["--with-librarypath", "-wlb"];
161-
private static readonly string[] s_withManualImportOptionAliases = ["--with-manual-import", "-wmi"];
162-
private static readonly string[] s_withNamespaceOptionAliases = ["--with-namespace", "-wn"];
163-
private static readonly string[] s_withSetLastErrorOptionAliases = ["--with-setlasterror", "-wsle"];
164-
private static readonly string[] s_withSuppressGCTransitionOptionAliases = ["--with-suppressgctransition", "-wsgct"];
165-
private static readonly string[] s_withTransparentStructOptionAliases = ["--with-transparent-struct", "-wts"];
166-
private static readonly string[] s_withTypeOptionAliases = ["--with-type", "-wt"];
167-
private static readonly string[] s_withUsingOptionAliases = ["--with-using", "-wu"];
168-
private static readonly string[] s_withPackingOptionAliases = ["--with-packing", "-wp"];
169-
170170
public static IEnumerable<HelpSectionDelegate> GetExtendedHelp(HelpContext context)
171171
{
172172
foreach (var sectionDelegate in HelpBuilder.Default.GetLayout())

sources/ClangSharpPInvokeGenerator/Properties/launchSettings.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,10 @@
1313
"commandName": "Project",
1414
"commandLineArgs": "\"@$(MSBuildProjectDirectory)/Properties/GenerateLLVM.rsp\" --file-directory \"$(LLVMIncludePath)\" --include-directory \"$(LLVMIncludePath)\" --libraryPath $(LibLLVMName)"
1515
},
16+
"GenerateLocal": {
17+
"commandName": "Project",
18+
"commandLineArgs": "@generate.rsp",
19+
"workingDirectory": "D:\\Users\\tagoo\\source\\repos\\terrafx.interop.windows\\generation\\Windows\\um\\sapi"
20+
}
1621
}
1722
}

0 commit comments

Comments
 (0)