mirror of https://github.com/icsharpcode/ILSpy.git
Tree:
3ef547ca2c
christophwille/closedhierarchies
christophwille/membench
compound-assignment-operators
fix/1982-params-attribute-args
fix/2040-invalid-xml-characters
fix/2093-navigateto-reference-assembly
fix/2362-xalz-references
fix/2372-address-taken-by
fix/3282-indexer-optional-arguments
fix/3568-record-member-order
fix/4059-deconstruct-out-slots
fix/lambda-parameter-syntax
fix/scroll-children-on-expand
gh-pages
ldmembertoken
master
natural-type-lambdas-methods
null-coalescing-assignment
release/10.1
release/6.2
release/7.1
release/7.2
release/8.1
substring-optimizations
tests/829-async-method-builder-override
tests/829-collection-expressions
tests/829-compound-assignment-operators
tests/829-coverage-audit
tests/829-expression-tree-named-optional-args
tests/829-expression-variables-in-initializers
tests/829-extended-property-patterns
tests/829-extension-members
tests/829-extension-operators
tests/829-file-local-types
tests/829-improved-definite-assignment
tests/829-improved-overload-candidates
tests/829-inline-arrays
tests/829-interpolated-string-improvements
tests/829-lambda-param-modifiers
tests/829-list-patterns
tests/829-lock-object
tests/829-mixed-deconstruction
tests/829-null-coalescing-assignment
tests/829-null-conditional-assignment
tests/829-object-initializer-indexer
tests/829-overload-resolution-priority
tests/829-params-collections
tests/829-pattern-matching-improvements
tests/829-primary-constructors
tests/829-ref-unsafe-in-iterators-async
tests/829-sealed-record-tostring
tests/829-target-typed-conditional
tests/829-tuple-comparison
win-a11y-textsize
1.0-Beta
1.0-M1
1.0-M2
1.0-M3
1.0.0
2.0.0
2.1
2.2
2.3
2.3.1
3.0-Preview1
3.0-Preview2
3.0.2
v10.0
v10.0-preview1
v10.0-preview2
v10.0-preview3
v10.0.1
v10.1
v10.1.1
v11.0
v11.0-preview1
v11.0-rc
v2.3.2
v2.4
v3.0
v3.0-beta1
v3.0-beta2
v3.0-beta2a
v3.0-beta3
v3.0-beta4
v3.0.1
v3.1-beta1
v3.1-final
v3.1-rc
v3.2-beta
v3.2-rc
v3.2.0
v4.0
v4.0-alpha1
v4.0-beta1
v4.0-beta2
v4.0-beta3
v4.0-rc1
v4.0-rc2
v4.0.1
v5.0
v5.0-preview1
v5.0-preview2
v5.0-preview3
v5.0-preview4
v5.0-rc1
v5.0.1
v5.0.2
v6.0
v6.0-preview1
v6.0-preview2
v6.0-preview3
v6.0-preview4
v6.0-rc1
v6.1
v6.2
v6.2-preview1
v6.2-preview2
v6.2.1
v7.0
v7.0-preview1
v7.0-preview2
v7.0-preview3
v7.0-rc1
v7.0-rc2
v7.1
v7.2
v7.2-preview1
v7.2-preview2
v7.2-preview3
v7.2-preview4
v7.2-rc
v7.2.1
v8.0
v8.0-preview1
v8.0-preview2
v8.0-preview3
v8.0-preview4
v8.0-rc1
v8.1
v8.1.1
v8.2
v9.0
v9.0-preview1
v9.0-preview2
v9.0-preview3
v9.0-rc
v9.1
${ noResults }
2 Commits (3ef547ca2cb1bb293034c2a309b6514fa0f7124f)
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
461df88572 |
Replace automatic-event backing-field references during translation
PatternStatementTransform renamed backing-field identifiers to the event after the fact, keyed on the metadata name association alone: references belonging to an event that is not actually automatic were still renamed, binding them to a custom event that is unusable as a value (the same defect class as #3858), and the rename bypassed the resolver checks, so qualifiers were computed for the hidden field instead of the printed event. ExpressionBuilder.ConvertField now performs the substitution, keyed on the AutoEventDecompiler verdict whose memo moves into DecompileRun so that member hiding, the event declaration, and reference translation all decide from one analysis. Checking the verdict's field identity also keeps same-typed sibling events apart (#3575), and the qualifier logic running against the event drops spurious this./type qualifiers from raise sites. mcs 2.x accesses a sibling automatic event's backing field directly inside custom accessors instead of calling the accessor, so the fixture expects the resulting Delegate.Combine form there. Assisted-by: Claude:claude-fable-5:Claude Code Claude-Session: https://claude.ai/code/session_01Btdypgm8utyxqt1Etn2BDi |
2 months ago |
|
|
1b9131905d |
Fix #3858: Detect automatic events on the ILAst instead of the C# AST
The syntactic accessor-body patterns in PatternStatementTransform sit downstream of every settings-dependent transform, so each new compiler shape or settings combination silently broke recognition: with AggressiveInlining enabled, static events inline the Delegate.Combine call into CompareExchange positionally, which none of the four patterns matched, while call sites were still rewritten to the event name from metadata alone - producing uncompilable output (CS0079). Recognition now happens in DoDecompile(IEvent) by structurally matching the ILAst of the accessors, decompiled with a fixed set of settings the same way RecordDecompiler analyzes method bodies. This makes detection independent of the user-visible settings by construction. Events that are not recognized fall back to the classic path unchanged, including the existing AST patterns. mcs 2.x compiles the accessors as a compound assignment, evaluating 'this' once via IL 'dup'; the simple-combine matcher accepts that stack-slot alias. Assisted-by: Claude:claude-fable-5:Claude Code |
2 months ago |