Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
320 commits
Select commit Hold shift + click to select a range
fbd76e5
Port ABI Methods static class bodies for Out parameters
Sergio0694 May 2, 2026
9bb4991
Allow blittable struct arrays in ABI Methods PassArray (e.g. ReadOnly…
Sergio0694 May 2, 2026
92e897b
Wire IDictionary CopyTo to use both IDictionary and IEnumerable<KVP> …
Sergio0694 May 2, 2026
3650d45
Port ReferenceImpl get_Value for non-blittable runtime classes and de…
Sergio0694 May 2, 2026
78815fd
Port Ref (in T) blittable param support in ABI Methods static class
Sergio0694 May 2, 2026
0b94ea8
Use fixed(T*) blocks for in T params and pass pinned pointer to vtable
Sergio0694 May 2, 2026
e7b209f
Port static class events to dispatch through ABI Methods event helpers
Sergio0694 May 2, 2026
6f159ba
Port ABI Methods bodies for HResult/Exception return type
Sergio0694 May 2, 2026
1cd3830
Allow blittable struct ReceiveArray return in ABI Methods static class
Sergio0694 May 2, 2026
13bf641
Emit DelegateName Impl and ReferenceImpl classes for delegate CCW vtable
Sergio0694 May 2, 2026
340cfbd
Emit full body for delegate ComWrappersMarshallerAttribute and ComWra…
Sergio0694 May 2, 2026
4ba27b5
Emit get_Value body for non-blittable struct ReferenceImpl
Sergio0694 May 2, 2026
b157748
Support almost-blittable structs in ABI Methods bodies and marshaller…
Sergio0694 May 2, 2026
fbe2b8b
Treat byref-wrapped array params as ReceiveArray
Sergio0694 May 2, 2026
853c5fc
Support ReceiveArray params (out T[]) in ABI Methods bodies
Sergio0694 May 2, 2026
4d66d4b
Treat FillArray (Span<T> in/out) params identically to PassArray in A…
Sergio0694 May 2, 2026
2d9e64d
Support array params in factory ctor callback Invoke
Sergio0694 May 2, 2026
3fa6915
Support return values in delegate Impl Invoke (CCW dispatch)
Sergio0694 May 2, 2026
b60da95
Support ReceiveArray returns of strings/runtime classes/objects
Sergio0694 May 2, 2026
170dd72
Emit per-field marshalling for complex structs with string fields
Sergio0694 May 2, 2026
737c22e
Support generic instance params in delegate Impl Invoke
Sergio0694 May 2, 2026
f3bca1f
Support return values in NativeDelegate Invoke extension method
Sergio0694 May 2, 2026
dbe0db2
Support complex struct returns in ABI Methods bodies
Sergio0694 May 2, 2026
2bc5a18
Simplify if-else for IDE0045 in Release build
Sergio0694 May 2, 2026
3a47d83
Support PassArray of strings/runtime classes/objects in ABI Methods b…
Sergio0694 May 2, 2026
f8cca34
Support PassArray of strings in ABI Methods bodies (HStringArrayMarsh…
Sergio0694 May 2, 2026
72381ec
Support Nullable<T> fields in complex struct marshalling
Sergio0694 May 2, 2026
ba2900b
Support PassArray of blittable elements in delegate Impl Invoke (CCW)
Sergio0694 May 2, 2026
5a92640
Support PassArray of blittable elements in NativeDelegate Invoke ext …
Sergio0694 May 2, 2026
722cbd3
Use projected struct type for almost-blittable struct ABI signatures
Sergio0694 May 2, 2026
ad44fd1
Support Out string/runtime class/object params in Do_Abi (CCW dispatch)
Sergio0694 May 2, 2026
474f4c2
Support HResult/Exception return type in Do_Abi (CCW dispatch)
Sergio0694 May 2, 2026
87671f2
Support HResult/Exception input param in ABI Methods bodies
Sergio0694 May 2, 2026
6c03aef
Support PassArray of strings/runtime classes/objects in factory ctor …
Sergio0694 May 2, 2026
75c81c4
Support PassArray of strings/runtime classes/objects in Do_Abi (CCW d…
Sergio0694 May 2, 2026
1c78f95
Fix nullability warning for Nullable<T> marshaller name in Release build
Sergio0694 May 2, 2026
e49019d
Match truth visibility for ABI Methods static class
Sergio0694 May 2, 2026
65b7b27
Skip empty ABI Methods classes when interface has no methods/props/ev…
Sergio0694 May 2, 2026
e3c813a
Skip non-default/non-overridable exclusive interface emission
Sergio0694 May 2, 2026
2bb48cb
Skip events on exclusive interfaces in ABI Methods (mirrors C++ skip_…
Sergio0694 May 2, 2026
ca6a4f9
Fix nullability warning in IsDefaultOrOverridableInterfaceTypedef helper
Sergio0694 May 2, 2026
162ec42
Emit IsOverridableInterface override on runtime classes
Sergio0694 May 2, 2026
84ad3e2
Skip event member emission in ABI Methods for exclusive interfaces
Sergio0694 May 2, 2026
3279876
Emit static members on instance runtime classes (e.g. GetForCurrentView)
Sergio0694 May 2, 2026
6ae90c6
Use explicit interface impl for ICollection<KVP>.Remove on dictionaries
Sergio0694 May 2, 2026
1506163
Use projected enum type in ABI signatures (matches truth)
Sergio0694 May 2, 2026
2433192
Remove unused EmitProjectedTypeName helper
Sergio0694 May 2, 2026
b746da9
Match truth marshaller for unsealed runtime classes
Sergio0694 May 2, 2026
9e45c04
Match truth EventHandlerEventSource interop type encoding
Sergio0694 May 2, 2026
d7485d1
Emit protected base-chaining ctors and real composable bodies
Sergio0694 May 2, 2026
f79ac5c
Emit base class for unsealed runtime classes inheriting from another …
Sergio0694 May 2, 2026
50cdd7c
Use 'Remove' (not 'RemovePair') for ICollection<KVP>.Remove accessor
Sergio0694 May 2, 2026
8d5c8a8
Use 'bool'/'char' (not 'byte'/'ushort') for Boolean/Char ABI
Sergio0694 May 2, 2026
bc28fa3
Format enum I4/U4 values as hex (matches C++ write_constant)
Sergio0694 May 2, 2026
3aa5bc8
Emit IDIC explicit interface event impls with Subscribe/Unsubscribe b…
Sergio0694 May 2, 2026
06c1270
Use lazy default-interface objref + ctor init for unsealed runtime cl…
Sergio0694 May 2, 2026
f0490ee
Add IID property to *ReferenceImpl classes (matches C++ write_referen…
Sergio0694 May 2, 2026
7d318ac
Emit WindowsRuntimeReferenceType attribute on enum projections
Sergio0694 May 2, 2026
d786d2a
Match interop generator's array marshaller name encoding
Sergio0694 May 2, 2026
078f2b6
Restore typeNamespace prefix in array marshaller path
Sergio0694 May 2, 2026
866fd80
Use 'System' namespace for fundamentals in array marshaller path
Sergio0694 May 2, 2026
8b759e1
Use metadata return param name in Do_Abi method signatures and bodies
Sergio0694 May 2, 2026
ca08b48
Use short type names (no namespace) in mapped collection helper ident…
Sergio0694 May 2, 2026
ed95226
Use 'Guid' (not 'global::System.Guid') in projected/ABI signatures
Sergio0694 May 2, 2026
125a501
Use short EventSource name (no namespace prefix) inside ABI Methods c…
Sergio0694 May 2, 2026
68f8266
Strip System.Collections.Generic prefix in mapped collection stubs
Sergio0694 May 2, 2026
d8db5b1
Use 'override' modifier for class methods named 'ToString' returning …
Sergio0694 May 2, 2026
ceacd1f
Use ABI marshallers for mapped value types (DateTime, TimeSpan)
Sergio0694 May 2, 2026
9d10f7a
Remove unused GetMappedProjectedTypeName helper
Sergio0694 May 2, 2026
a997450
Caller-side ABI marshalling for mapped value types in static ABI methods
Sergio0694 May 2, 2026
6b5981f
Emit ABI struct + per-field marshalling for structs with mapped value…
Sergio0694 May 2, 2026
1e3c4c8
Match truth's qualified KeyValuePair form in mapped collection stubs
Sergio0694 May 2, 2026
02d0336
Use unqualified KeyValuePair as param type, qualified inside generic …
Sergio0694 May 2, 2026
f6dea1b
Walk inherited interfaces when emitting IDIC explicit interface impls
Sergio0694 May 2, 2026
7e7ce50
Emit UnsafeAccessor for generic interface IIDs in objref + ComWrapper…
Sergio0694 May 2, 2026
5e5dbd2
Add [MethodImpl(NoInlining)] + HString fast-path in static abi methods
Sergio0694 May 3, 2026
be32482
Reorder finally-block frees to match reference (retval last)
Sergio0694 May 3, 2026
02f8973
Remove unconditional 'partial' modifier from class emissions
Sergio0694 May 3, 2026
27ff592
Match reference type qualifiers + body styles for properties/interfac…
Sergio0694 May 3, 2026
61daf04
Fix enum const formatting (0 vs 0x0) and remove unused CS0672 pragma
Sergio0694 May 3, 2026
fc6ead8
Fix qualifiers: event types use forceWriteNamespace=false, static pro…
Sergio0694 May 3, 2026
c607fd0
Use namespace-aware qualification in inheritance lists
Sergio0694 May 3, 2026
a5d4ee8
Drop class-level 'unsafe' on IXxxMethods + add #nullable enable/disab…
Sergio0694 May 3, 2026
5485cb1
Match C++ is_type_blittable: bool/char fields don't make a struct non…
Sergio0694 May 3, 2026
55e95bc
Use namespace-aware qualifier for runtime class base class
Sergio0694 May 3, 2026
2449303
Combine multiple input string params into a single fixed block
Sergio0694 May 3, 2026
52f08ec
Implement static abi method bodies for mapped value types (DateTime/T…
Sergio0694 May 3, 2026
605a377
Implement Do_Abi server-side bodies for mapped value type returns/params
Sergio0694 May 3, 2026
461882f
Implement static abi method bodies for complex struct input parameters
Sergio0694 May 3, 2026
82efe9f
Implement static abi method bodies for mapped value type PassArray pa…
Sergio0694 May 3, 2026
7f7b77d
XAML projection support: composable factories, overridable interface …
Sergio0694 May 3, 2026
9f1fbb0
XAML projection: handle mapped structs, ICommand event, SR addition e…
Sergio0694 May 3, 2026
071cb42
Authoring projection: fix default/exclusive-to interfaces, file heade…
Sergio0694 May 3, 2026
bc1a732
Authoring projection: fix factory class inheritance, members, and glo…
Sergio0694 May 3, 2026
1c73ea3
Authoring projection: emit interface method [Overload] attributes; so…
Sergio0694 May 3, 2026
ae1a9ea
Authoring projection: emit component-mode class marshaller and metada…
Sergio0694 May 3, 2026
03ba49c
Authoring projection: emit metadata wrapper for delegates/enums; cond…
Sergio0694 May 3, 2026
c6789f6
Authoring projection: emit delegate ABI helpers in C++ tool's order
Sergio0694 May 3, 2026
3e37c7c
Authoring projection: emit non-blittable struct ABI definition in com…
Sergio0694 May 3, 2026
234589e
Server-side ABI methods: emit unsafe modifier and __return_value__ na…
Sergio0694 May 3, 2026
290469a
Struct marshallers: unqualified ABI names, object initializer, correc…
Sergio0694 May 3, 2026
df5953f
Authoring projection: dispatch CCW to authored class type for exclusi…
Sergio0694 May 3, 2026
2efee77
Authoring projection: nested struct fields and enum ComWrappers attri…
Sergio0694 May 3, 2026
1210e92
Authoring projection: struct get_Value uses marshaller; same-namespac…
Sergio0694 May 3, 2026
d782b1b
Server-side Do_Abi: split local declaration from assignment to match …
Sergio0694 May 3, 2026
8ae5436
NativeDelegate Invoke: cache typed function pointer in 'abiInvoke' local
Sergio0694 May 3, 2026
350c95a
NativeDelegate function pointer call: emit each argument on its own line
Sergio0694 May 3, 2026
f31fc35
Emit UnsafeAccessor IID accessors in component class marshallers
Sergio0694 May 3, 2026
7601bb0
M1: Use WinMD MethodDef ordinal for vtable slot indices
Sergio0694 May 3, 2026
c880307
M3: Fix component default-interface attribute namespacing
Sergio0694 May 3, 2026
85fee5c
M4: Fix parameterized IReference<T> IIDs for compound structs
Sergio0694 May 3, 2026
12c7e10
M5: Test runner uses per-contract WinMD folder for SDK/XAML scenarios
Sergio0694 May 3, 2026
7125716
M-U1: Replace Nullable<T>Marshaller indirection with <T>Marshaller.Bo…
Sergio0694 May 3, 2026
7b8a726
M2 (part 1): Implement System.Type marshalling for client-side method…
Sergio0694 May 3, 2026
7cc4f0e
M6: Skip *Methods/IID emission for exclusive-to interfaces of exclude…
Sergio0694 May 3, 2026
39c3992
M8: Match member ordering for class _objRef_ field emission
Sergio0694 May 3, 2026
33481ec
M7: Match activation-factory switch case ordering (WinMD declaration …
Sergio0694 May 3, 2026
4cdb4c0
Fix Release/AOT build warnings introduced by M2/M4
Sergio0694 May 3, 2026
b13aef7
M2 (part 2): Server-side Do_Abi_* for ReceiveArray of ref-type elements
Sergio0694 May 3, 2026
918a47f
M2 (part 3): Server-side Do_Abi_* for System.Type input/output
Sergio0694 May 3, 2026
5ce0a16
M2 (part 4): Server-side Do_Abi_* for complex (non-blittable) struct …
Sergio0694 May 3, 2026
f5e0fb5
M2 (part 5): Client-side complex struct out param marshalling
Sergio0694 May 3, 2026
32dded1
M2 (part 6): ReceiveArray param marshalling for Do_Abi callbacks (out…
Sergio0694 May 3, 2026
ff05974
M2 (part 7): Server-side Do_Abi for non-blittable struct array return
Sergio0694 May 3, 2026
0cb9a43
M2 (part 8): Delegate Invoke return-type marshalling for generic inst…
Sergio0694 May 3, 2026
7c047b2
M2 (part 9): Delegate Invoke marshalling for complex (non-blittable) …
Sergio0694 May 3, 2026
43485eb
M2 (part 10): Client-side complex struct array return marshalling
Sergio0694 May 3, 2026
a41d793
M2 (part 11): Allow PassArray of complex (non-blittable) struct elements
Sergio0694 May 3, 2026
f66f343
M-P2: Resolve TypeRef -> TypeDef in IWindowsRuntimeInterface<>.GetInt…
Sergio0694 May 3, 2026
8ef406a
Port the file-header banner version logic from C++ cswinrt.exe
Sergio0694 May 3, 2026
f887eec
M1: Eliminate the 5 remaining 'throw null!' stubs in generated output
Sergio0694 May 3, 2026
8a28696
M2: Add system-collection forwarders to DIC file interface shims
Sergio0694 May 3, 2026
93b6522
M3: Emit delegating thunks for inherited WinRT-interface members in D…
Sergio0694 May 3, 2026
3f9683e
M4: Exclude IIDs and ABI types for manually-projected manifest classes
Sergio0694 May 3, 2026
ef746e7
M5: Composable factory callback name uses total ABI param count
Sergio0694 May 3, 2026
2f68999
M7: Wrap delegate ConvertToManaged in inner #nullable enable/disable
Sergio0694 May 3, 2026
f81c67d
M8: Match C++ qualification policy for marshaller calls and ABI struc…
Sergio0694 May 3, 2026
7a114d0
M9: Match C++ class member emission order (GetInterface impls before …
Sergio0694 May 3, 2026
f0c33e2
M10: Emit get/set property accessors as a multi-line block
Sergio0694 May 3, 2026
8ac4acf
M11: Emit ABI vtable invocation arguments one per line
Sergio0694 May 3, 2026
fe85b7c
M12: Hoist [UnsafeAccessor] declarations to top of Do_Abi method body
Sergio0694 May 3, 2026
1207ef0
V3-M3: Read [MarshalingBehaviorAttribute] on parameterless ctor
Sergio0694 May 3, 2026
b1f6ea7
V3-M1: Static/factory CCW dispatch uses ABI.Impl.IFooStatic, not user…
Sergio0694 May 3, 2026
b92883e
V3-M6: Instance event tables key by the dispatch target type, not ABI…
Sergio0694 May 3, 2026
c8a836f
V3-M2: Fix authored value-type array marshalling (token, pointer, sto…
Sergio0694 May 3, 2026
c81cbb2
V3-M7: Skip hoisted UnsafeAccessor for Nullable<T> returns
Sergio0694 May 3, 2026
f63995f
V3-M4 + V3-M5: Emit IUri/IPropertyChangedEventArgs ABI; suppress INot…
Sergio0694 May 3, 2026
55380c4
V3-M8: Sort class properties alphabetically (SortedDictionary)
Sergio0694 May 3, 2026
64c6e40
V3-M9: Move HasUnwrappableNativeObjectReference / IsOverridableInterf…
Sergio0694 May 3, 2026
cea9d1a
V3-M10: Sort GeneratedInterfaceIIDs.cs by namespace hierarchy
Sergio0694 May 3, 2026
57034f3
V3-M11 (part 1): Drop ABI namespace qualifier on same-namespace marsh…
Sergio0694 May 3, 2026
1e5dabd
V3-M12: Multi-line wrapping for Do_Abi managed-method dispatch arguments
Sergio0694 May 3, 2026
0193a59
V3R3-M2: Emit IEnumerator<T>.Reset/Dispose as throw/no-op, not Unsafe…
Sergio0694 May 4, 2026
b31d003
V3R3-M4: Fix Guid[] array marshaller assembly token (mscorlib -> #cor…
Sergio0694 May 4, 2026
5c05b03
V3R3-M1: Treat System.Guid as blittable in struct field analysis
Sergio0694 May 4, 2026
7103f9d
V3R3-M6: Emit override hooks before public members in runtime classes
Sergio0694 May 4, 2026
f1004ec
V3R3-M9: Match C++ "__xxxSize" naming for ABI input array length params
Sergio0694 May 4, 2026
ef1599b
V3R3-M11: Multi-line wrap Invoke() in sealed factory callbacks
Sergio0694 May 4, 2026
ac4a4c0
V3R3-M13: Hoist [UnsafeAccessor] decls for ReceiveArray ConvertToUnma…
Sergio0694 May 4, 2026
d6a70d3
V3R3-M14: Combine fixed() blocks to single void* fixed with multiple …
Sergio0694 May 4, 2026
93b8c26
V3R3-M15: Insert blank line between consecutive [UnsafeAccessor] decls
Sergio0694 May 4, 2026
50ac0dd
V3R3-M7: Order CCW Do_Abi bodies as methods, then properties, then ev…
Sergio0694 May 4, 2026
2ef2086
V3R3-M8: Use void* for SzArray input data pointers in vtable signatures
Sergio0694 May 4, 2026
b0b37f6
V3R4-M2: Add (T*) cast for void* array data in CCW Do_Abi CopyToManag…
Sergio0694 May 4, 2026
bc04332
V3R4-M1: Marshal non-blittable struct out params through Marshaller.C…
Sergio0694 May 4, 2026
2c3232d
V3R4-M3: Wrap System.Type RCW return in try/finally + TypeMarshaller.…
Sergio0694 May 4, 2026
f7bbeef
V3R4-M4: Emit IDisposable.Dispose() forwarder for IClosable-derived D…
Sergio0694 May 4, 2026
b7ad457
V3R4-M5: Emit IDictionary/IList/event forwarders for IObservable* DIC…
Sergio0694 May 4, 2026
f02ea2a
V3R4-M6: Native delegate Invoke uses HStringReference fast path
Sergio0694 May 4, 2026
0e3f145
V3R4-M12: Combine fixed blocks for activation factory ctor pinnable i…
Sergio0694 May 4, 2026
7539a96
V3R4-M14: Multi-line wrap delegate Do_Abi_Invoke managed-method dispa…
Sergio0694 May 4, 2026
30914ed
V3R4-M16: Multi-line format IDictionary indexer in projected types
Sergio0694 May 4, 2026
7904131
V3R4-M8: Emit IList/IDictionary public members in WinRT IDL order
Sergio0694 May 4, 2026
5fd7782
V3R4-M10: Inline IWindowsRuntimeInterface<T>.GetInterface() per inter…
Sergio0694 May 4, 2026
2452710
Fix R5-M1/M2/M4: substitute generic args in IWindowsRuntimeInterface<…
Sergio0694 May 4, 2026
cf05232
Fix R5-M3: emit GC.AddMemoryPressure(N) in public activation factory …
Sergio0694 May 4, 2026
a4f8ddf
Fix R5-M5: emit ReadOnlySpan<T> for ABI property setter parameters
Sergio0694 May 4, 2026
f8bc593
Fix R5-M6: emit positional ctor for struct ConvertToManaged in non-co…
Sergio0694 May 4, 2026
92dfc20
Fix IsTypeBlittable: honor mapped struct's RequiresMarshaling flag
Sergio0694 May 4, 2026
931b0be
Fix R6-M1: honor [NoExceptionAttribute] in ABI method/property emission
Sergio0694 May 4, 2026
9eb8ead
Add --ref flag to TestRunner for reference-projection mode validation
Sergio0694 May 4, 2026
decba59
Fix R1-M1: emit ref-projection mode member bodies as throw null stubs
Sergio0694 May 4, 2026
2939885
Emit per-member [SupportedOSPlatform] in reference projection mode
Sergio0694 May 4, 2026
0632b3d
Fix R3 findings: GetDefaultInterface, AddPair naming, hiding properties
Sergio0694 May 5, 2026
d527e3e
Add WinRT.Projection.Ref.Generator project
Sergio0694 May 5, 2026
00f4afa
Update generator project settings and metadata
Sergio0694 May 5, 2026
8bf7b4c
Implement WinRT.Projection.Ref.Generator (cswinrtprojectionrefgen.exe)
Sergio0694 May 5, 2026
6420e5c
Add RunCsWinRTProjectionRefGenerator MSBuild task
Sergio0694 May 5, 2026
7efebec
Wire up CsWinRTGenerateProjection to use the new C# generator
Sergio0694 May 5, 2026
d4d8dd1
Wire up cswinrtprojectionrefgen build infrastructure
Sergio0694 May 5, 2026
1b0a618
Move WindowsMetadataExpander into WinRT.Projection.Generator.Writer
Sergio0694 May 5, 2026
e1d35b1
Convert s_sdkVersionRegex to a generated regex with a partial property
Sergio0694 May 5, 2026
94276cf
Add missing Component property to RunCsWinRTProjectionRefGenerator task
Sergio0694 May 5, 2026
8c5949c
Dedupe types by full name in MetadataCache to match C++ behavior
Sergio0694 May 5, 2026
b55578f
Always emit 'global::' qualifier on typeof() args in custom attributes
Sergio0694 May 5, 2026
74b2bf0
Emit synthetic getter for setter-only properties in explicit interfac…
Sergio0694 May 5, 2026
44665b4
Resolve cross-assembly struct refs when emitting ABI struct fields
Sergio0694 May 5, 2026
4dc71ee
Marshal complex-struct 'in' (Ref) params via marshaller, not 'fixed(.…
Sergio0694 May 5, 2026
263d29f
Use 'void***' for ABI ReceiveArray of reference-element types
Sergio0694 May 5, 2026
c620675
Forward in/out modifiers on EventState lambda for delegate Invoke
Sergio0694 May 5, 2026
9e97e66
Emit IBindableIterator -> IEnumerator stubs as public members
Sergio0694 May 5, 2026
8124439
Resolve cross-assembly struct refs in struct marshaller emission
Sergio0694 May 5, 2026
f913250
Always emit body for delegate ComWrappersCallback.CreateObject
Sergio0694 May 5, 2026
922b7e4
Reuse interface CCW body emitter for delegate Impl.Invoke
Sergio0694 May 5, 2026
487c774
Reuse interface caller body emitter for NativeDelegate.Invoke
Sergio0694 May 5, 2026
c0b83eb
Allow string/runtime-class/object element types in ReceiveArray params
Sergio0694 May 5, 2026
4188115
Support Out generic instance params in projection caller body emitter
Sergio0694 May 5, 2026
cc6a33e
Support Out generic instance params in interface CCW body emitter
Sergio0694 May 5, 2026
ed2d159
Allow MappedAbiValueType element in PassArray/FillArray for CCW dispatch
Sergio0694 May 5, 2026
b0b3754
Use static method delegations for IBindableIterator/IBindableIterable…
Sergio0694 May 5, 2026
0d1da23
Use static method delegations for INotifyDataErrorInfo and SyncRoot s…
Sergio0694 May 5, 2026
f56dde8
Support HResultException and MappedAbiValueType element in receive/pa…
Sergio0694 May 5, 2026
c573362
Match C++ class member ordering and ':base' spacing
Sergio0694 May 5, 2026
d1ed266
Format AttributeTargets enum values and use verbatim strings in attri…
Sergio0694 May 5, 2026
458c0c5
Match C++ ':base(' (no space) for activation factory and composable c…
Sergio0694 May 5, 2026
df0a707
Emit override/new modifier for Equals/GetHashCode/ToString matching S…
Sergio0694 May 5, 2026
a17fd7d
Skip HString header/pinned-handle setup for FillArray of strings
Sergio0694 May 5, 2026
54393ad
Use block syntax for static properties with both getter and setter
Sergio0694 May 5, 2026
20b40ba
Mirror C++ source-level escape unescape for verbatim string args in a…
Sergio0694 May 5, 2026
e8bf0c7
Resolve cross-assembly struct refs in struct marshaller field marshal…
Sergio0694 May 5, 2026
0d0122b
Don't emit MethodImpl(NoInlining) on delegate NativeDelegate Invoke
Sergio0694 May 5, 2026
42b1911
Use void** for ReceiveArray of strings/runtime classes/objects in fun…
Sergio0694 May 5, 2026
621fd21
Skip pre-call HString conversion for FillArray of strings; add post-c…
Sergio0694 May 5, 2026
7d538b7
Use ExceptionMarshaller for HResult struct fields and skip Dispose fo…
Sergio0694 May 5, 2026
51bb855
Use ABI.System.Exception ArrayPool for HResultException PassArray cle…
Sergio0694 May 5, 2026
7193103
Delete CanEmitAbiMethodBody dead-code gating function
Sergio0694 May 5, 2026
354a26c
Skip Dispose for nested mapped value type fields (DateTime/TimeSpan)
Sergio0694 May 5, 2026
6891695
Drop emitComplexBodies fallback; always emit struct marshaller bodies
Sergio0694 May 5, 2026
57eba7e
Remove dead generic-delegate ComWrappersCallback throw null fallbacks
Sergio0694 May 5, 2026
388f600
Replace WriteReferenceImpl throw null! fallback with InvalidOperation…
Sergio0694 May 5, 2026
9e3567b
Resolve unresolved cross-assembly TypeRefs as runtime class/interface
Sergio0694 May 5, 2026
ee71f3e
Allow HResultException params in activator factory Invoke body
Sergio0694 May 5, 2026
54c5aa7
Centralize ref-mode stub emission helpers (Bucket A audit cleanup)
Sergio0694 May 5, 2026
b1074fa
Remove last two throw null! safety nets (full Bucket B elimination)
Sergio0694 May 5, 2026
984ec63
Use System-ObjectModel marker for ComponentModel/Specialized/WindowsI…
Sergio0694 May 5, 2026
c3135c9
Fix stray % placeholder in mapped Windows namespace interop assembly …
Sergio0694 May 5, 2026
5e8d830
Treat 'in T' (Ref) params as read-only inputs in CCW Do_Abi bodies
Sergio0694 May 5, 2026
92158e3
Add CopyToUnmanaged writeback for non-blittable FillArray params in C…
Sergio0694 May 5, 2026
88a5d4b
Caller-side: skip pre-call CopyToUnmanaged for FillArray; add post-ca…
Sergio0694 May 5, 2026
cce7855
CCW Do_Abi: skip pre-call CopyToManaged for FillArray non-blittable p…
Sergio0694 May 5, 2026
53b71bc
Remove SuppressExclusiveInterfaces flag — emit BCL-mapped event-arg ABI
Sergio0694 May 6, 2026
3d9e0db
Apply MappedTypes lookup in GetProjectedEnumName
Sergio0694 May 6, 2026
ee6aa4c
Implement FastAbi merging for class members and Methods classes
Sergio0694 May 7, 2026
2059bb3
FastAbi: route non-default exclusive events through Methods class
May 7, 2026
b916dc5
Wire WinRT.Projection.Ref.Generator via slnx BuildDependency (matches…
May 7, 2026
514f084
Remove generated WinRT string sources
Sergio0694 May 7, 2026
70cc7df
Remove legacy strings generation code
Sergio0694 May 7, 2026
24ad18f
Remove dead WindowsRuntimeObject base-type check in WriteTypeInheritance
Sergio0694 May 8, 2026
78e91d6
Remove 4 dead methods from CodeWriters.cs
Sergio0694 May 8, 2026
a924066
Simplify GetVisibility to a concrete index-1 list pattern
Sergio0694 May 8, 2026
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
1 change: 1 addition & 0 deletions nuget/Microsoft.Windows.CsWinRT.CsWinRTGen.targets
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ Copyright (C) Microsoft Corporation. All rights reserved.
<CsWinRTInteropGenEffectiveToolsDirectory Condition="'$(CsWinRTInteropGenEffectiveToolsDirectory)' == ''">$(_CsWinRTToolsDirectory)</CsWinRTInteropGenEffectiveToolsDirectory>
<CsWinRTImplEffectiveToolsDirectory Condition="'$(CsWinRTImplEffectiveToolsDirectory)' == ''">$(_CsWinRTToolsDirectory)</CsWinRTImplEffectiveToolsDirectory>
<CsWinRTMergedProjectionEffectiveToolsDirectory Condition="'$(CsWinRTMergedProjectionEffectiveToolsDirectory)' == ''">$(_CsWinRTToolsDirectory)</CsWinRTMergedProjectionEffectiveToolsDirectory>
<CsWinRTRefGenEffectiveToolsDirectory Condition="'$(CsWinRTRefGenEffectiveToolsDirectory)' == ''">$(_CsWinRTToolsDirectory)</CsWinRTRefGenEffectiveToolsDirectory>

<!-- Temporarily setting this due to .NET SDK targets check it. -->
<CsWinRTToolsDirectory>$(CsWinRTInteropGenEffectiveToolsDirectory)</CsWinRTToolsDirectory>
Expand Down
2 changes: 2 additions & 0 deletions nuget/Microsoft.Windows.CsWinRT.nuspec
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,8 @@
<file src="$cswinrtimplgen_arm64$" target ="tools\win-arm64"/>
<file src="$cswinrtprojectiongen_x64$" target ="tools\win-x64"/>
<file src="$cswinrtprojectiongen_arm64$" target ="tools\win-arm64"/>
<file src="$cswinrtprojectionrefgen_x64$" target ="tools\win-x64"/>
<file src="$cswinrtprojectionrefgen_arm64$" target ="tools\win-arm64"/>
<file src="$run_cswinrt_generator_task$" target ="tools\"/>

<file src="sources\StubExe.c" target="build\sources"/>
Expand Down
110 changes: 100 additions & 10 deletions nuget/Microsoft.Windows.CsWinRT.targets
Original file line number Diff line number Diff line change
Expand Up @@ -215,10 +215,17 @@ Copyright (C) Microsoft Corporation. All rights reserved.
<Delete Files="$(CsWinRTGeneratedFilesDir)cswinrt_internal.rsp" />
</Target>

<!--
Register the new C# 'cswinrtprojectionrefgen' MSBuild task. CsWinRTGenTasksAssembly is set in
the imported CsWinRTGen.targets file (see line 11 of that file); since UsingTask resolves
AssemblyFile lazily at task-usage time, the import order at the bottom of this file is fine.
-->
<UsingTask TaskName="RunCsWinRTProjectionRefGenerator" AssemblyFile="$(CsWinRTGenTasksAssembly)" />

<Target Name="CsWinRTGenerateProjection"
DependsOnTargets="CsWinRTPrepareProjection;CsWinRTRemoveWinMDReferences;CsWinRTResolveWindowsMetadata"
DependsOnTargets="CsWinRTPrepareProjection;CsWinRTRemoveWinMDReferences;CsWinRTResolveWindowsMetadata;_ResolveCsWinRToolsDirectory"
Condition="'$(CsWinRTGenerateProjection)' == 'true'"
Inputs="$(MSBuildAllProjects);@(CsWinRTInputs);$(CsWinRTExe)"
Inputs="$(MSBuildAllProjects);@(CsWinRTInputs);$(CsWinRTGenTasksAssembly)"
Outputs="$(CsWinRTGeneratedFilesDir)cswinrt.rsp">

<PropertyGroup>
Expand Down Expand Up @@ -333,19 +340,102 @@ $(CsWinRTInternalProjection)
<MakeDir Directories="$(CsWinRTGeneratedFilesDir)" />
<WriteLinesToFile File="$(CsWinRTResponseFile)" Lines="$(CsWinRTParams)" Overwrite="true" />
<WriteLinesToFile File="$(CsWinRTResponseFilePrivateProjection)" Lines="$(CsWinRTPrivateParams)" Overwrite="true" />
<Message Text="$(CsWinRTCommand)" Importance="$(CsWinRTMessageImportance)" />
<Exec Command="$(CsWinRTCommand)" ContinueOnError="$(CsWinRTContinueOnError)">
<Output TaskParameter="ExitCode" PropertyName="CsWinRTProjectionExitCode" />
</Exec>

<Message Text="$(CsWinRTCommandPrivateProjection)" Importance="$(CsWinRTMessageImportance)" />
<Exec Command="$(CsWinRTCommandPrivateProjection)" ContinueOnError="$(CsWinRTContinueOnError)" Condition="'$(CsWinRTPrivateProjection)' == 'true'">
<!--
Reconstruct the include/exclude/input lists for the new C# generator from the historical
CsWinRTFilters/CsWinRTPrivateFilters multi-line strings. Some projects (e.g. the in-repo
Windows.csproj/Windows.UI.Xaml.csproj/WinAppSDK.csproj) set CsWinRTFilters directly with raw
cswinrt.exe-style '-include X' / '-exclude Y' directives; others rely on the default item-based
computation via CsWinRTIncludeItems/CsWinRTExcludeItems. Parsing the final filter strings back
into items handles both cases uniformly.
-->
<ItemGroup>
<_CsWinRTRefFilterLines Include="$([System.Text.RegularExpressions.Regex]::Split('$(CsWinRTFilters)', '[\r\n]+'))" />
<_CsWinRTRefPrivateFilterLines Include="$([System.Text.RegularExpressions.Regex]::Split('$(CsWinRTPrivateFilters)', '[\r\n]+'))" />

<_CsWinRTRefIncludes Include="$([System.String]::Copy('%(_CsWinRTRefFilterLines.Identity)').Trim().Substring(9))"
Condition="$([System.String]::Copy('%(_CsWinRTRefFilterLines.Identity)').Trim().StartsWith('-include '))" />
<_CsWinRTRefExcludes Include="$([System.String]::Copy('%(_CsWinRTRefFilterLines.Identity)').Trim().Substring(9))"
Condition="$([System.String]::Copy('%(_CsWinRTRefFilterLines.Identity)').Trim().StartsWith('-exclude '))" />

<_CsWinRTRefPrivateIncludes Include="$([System.String]::Copy('%(_CsWinRTRefPrivateFilterLines.Identity)').Trim().Substring(9))"
Condition="$([System.String]::Copy('%(_CsWinRTRefPrivateFilterLines.Identity)').Trim().StartsWith('-include '))" />
<_CsWinRTRefPrivateExcludes Include="$([System.String]::Copy('%(_CsWinRTRefPrivateFilterLines.Identity)').Trim().Substring(9))"
Condition="$([System.String]::Copy('%(_CsWinRTRefPrivateFilterLines.Identity)').Trim().StartsWith('-exclude '))" />
</ItemGroup>

<!--
Auto-include WindowsRuntime.Internal (and the matching interop metadata WinMD) when the user
requested the Windows namespace, mirroring the OLD CsWinRTIncludeWinRTInterop /
CsWinRTPrivateIncludeWinRTInterop behavior.
-->
<ItemGroup>
<_CsWinRTRefHasWindows Include="@(_CsWinRTRefIncludes)" Condition="'%(Identity)' == 'Windows'" />
<_CsWinRTRefPrivateHasWindows Include="@(_CsWinRTRefPrivateIncludes)" Condition="'%(Identity)' == 'Windows'" />
</ItemGroup>
<ItemGroup Condition="'@(_CsWinRTRefHasWindows)' != ''">
<_CsWinRTRefIncludes Include="WindowsRuntime.Internal" />
<_CsWinRTRefInteropInputs Include="$(CsWinRTInteropMetadata)" />
</ItemGroup>
<ItemGroup Condition="'@(_CsWinRTRefPrivateHasWindows)' != ''">
<_CsWinRTRefPrivateIncludes Include="WindowsRuntime.Internal" />
<_CsWinRTRefPrivateInteropInputs Include="$(CsWinRTInteropMetadata)" />
</ItemGroup>

<!--
Build the final input-paths list for each pass: user-provided WinMD inputs + Windows SDK
metadata token (if any) + the auto-added interop metadata path (if any).
-->
<ItemGroup>
<_CsWinRTRefInputs Include="@(CsWinRTInputs->'%(FullPath)')" />
<_CsWinRTRefInputs Include="$(CsWinRTWindowsMetadata)" Condition="'$(CsWinRTWindowsMetadata)' != ''" />
<_CsWinRTRefInputs Include="@(_CsWinRTRefInteropInputs)" />

<_CsWinRTRefPrivateInputs Include="@(CsWinRTInputs->'%(FullPath)')" />
<_CsWinRTRefPrivateInputs Include="$(CsWinRTWindowsMetadata)" Condition="'$(CsWinRTWindowsMetadata)' != ''" />
<_CsWinRTRefPrivateInputs Include="@(_CsWinRTRefPrivateInteropInputs)" />
</ItemGroup>

<Message Text="cswinrtprojectionrefgen (public projection): @(_CsWinRTRefInputs->Count()) input(s), @(_CsWinRTRefIncludes->Count()) include(s), @(_CsWinRTRefExcludes->Count()) exclude(s)" Importance="$(CsWinRTMessageImportance)" />
<RunCsWinRTProjectionRefGenerator
InputWinMDPaths="@(_CsWinRTRefInputs)"
OutputDirectory="$(CsWinRTGeneratedFilesDir.TrimEnd('\'))"
TargetFramework="$(CsWinRTExeTFM)"
IncludeNamespaces="@(_CsWinRTRefIncludes)"
ExcludeNamespaces="@(_CsWinRTRefExcludes)"
Verbose="$(CsWinRTMessageImportance.Equals('high'))"
Component="$(CsWinRTComponent)"
Embedded="$(CsWinRTEmbedded)"
PublicEnums="$(CsWinRTEmbeddedPublicEnums)"
PublicExclusiveTo="$(CsWinRTPublicExclusiveToInterfaces)"
IdicExclusiveTo="$(CsWinRTDynamicallyInterfaceCastableExclusiveTo)"
ReferenceProjection="$(CsWinRTGenerateReferenceProjection)"
CsWinRTToolsDirectory="$(CsWinRTRefGenEffectiveToolsDirectory)"
CsWinRTToolsArchitecture="$(CsWinRTToolsArchitecture)"
ContinueOnError="$(CsWinRTContinueOnError)">
<Output TaskParameter="ExitCode" PropertyName="CsWinRTProjectionExitCode" />
</RunCsWinRTProjectionRefGenerator>

<Message Text="cswinrtprojectionrefgen (private projection): @(_CsWinRTRefPrivateInputs->Count()) input(s), @(_CsWinRTRefPrivateIncludes->Count()) include(s), @(_CsWinRTRefPrivateExcludes->Count()) exclude(s)" Importance="$(CsWinRTMessageImportance)" Condition="'$(CsWinRTPrivateProjection)' == 'true'" />
<RunCsWinRTProjectionRefGenerator
InputWinMDPaths="@(_CsWinRTRefPrivateInputs)"
OutputDirectory="$(CsWinRTGeneratedFilesDir.TrimEnd('\'))"
TargetFramework="$(CsWinRTExeTFM)"
IncludeNamespaces="@(_CsWinRTRefPrivateIncludes)"
ExcludeNamespaces="@(_CsWinRTRefPrivateExcludes)"
Verbose="$(CsWinRTMessageImportance.Equals('high'))"
Component="$(CsWinRTComponent)"
InternalProjection="true"
CsWinRTToolsDirectory="$(CsWinRTRefGenEffectiveToolsDirectory)"
CsWinRTToolsArchitecture="$(CsWinRTToolsArchitecture)"
ContinueOnError="$(CsWinRTContinueOnError)"
Condition="'$(CsWinRTPrivateProjection)' == 'true'">
<Output TaskParameter="ExitCode" PropertyName="CsWinRTPrivateProjectionExitCode" />
</Exec>
</RunCsWinRTProjectionRefGenerator>

<ItemGroup Condition="'$(CsWinRTComponent)' != 'true' and Exists('$(CsWinRTResponseFile)')">
<UpToDateCheckInput Include="@(CsWinRTInputs)" Set="WinMDs" />
<UpToDateCheckInput Include="$(CsWinRTExe)" Set="WinMDs" />
<UpToDateCheckInput Include="$(CsWinRTGenTasksAssembly)" Set="WinMDs" />
<UpToDateCheckBuilt Include="$(CsWinRTResponseFile)" Set="WinMDs" />
</ItemGroup>

Expand Down
1 change: 1 addition & 0 deletions src/Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
<CsWinRTInteropGenEffectiveToolsDirectory>$(MSBuildThisFileDirectory)WinRT.Interop.Generator\bin\$(Configuration)\net10.0\$(_CsWinRTToolsArchFolder)</CsWinRTInteropGenEffectiveToolsDirectory>
<CsWinRTImplEffectiveToolsDirectory>$(MSBuildThisFileDirectory)WinRT.Impl.Generator\bin\$(Configuration)\net10.0\$(_CsWinRTToolsArchFolder)</CsWinRTImplEffectiveToolsDirectory>
<CsWinRTMergedProjectionEffectiveToolsDirectory>$(MSBuildThisFileDirectory)WinRT.Projection.Generator\bin\$(Configuration)\net10.0\$(_CsWinRTToolsArchFolder)</CsWinRTMergedProjectionEffectiveToolsDirectory>
<CsWinRTRefGenEffectiveToolsDirectory>$(MSBuildThisFileDirectory)WinRT.Projection.Ref.Generator\bin\$(Configuration)\net10.0\$(_CsWinRTToolsArchFolder)</CsWinRTRefGenEffectiveToolsDirectory>
<CsWinRTWinMDGenEffectiveToolsDirectory>$(MSBuildThisFileDirectory)WinRT.WinMD.Generator\bin\$(Configuration)\net10.0\$(_CsWinRTToolsArchFolder)</CsWinRTWinMDGenEffectiveToolsDirectory>
<CsWinRTToolsArchitecture>AnyCPU</CsWinRTToolsArchitecture>
</PropertyGroup>
Expand Down
5 changes: 0 additions & 5 deletions src/Projections/Directory.Build.targets

This file was deleted.

Loading
Loading