mirror of https://github.com/icsharpcode/ILSpy.git
Tree:
fb9ff796da
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 }
4 Commits (fb9ff796da30156c693f76a49f2b34f7f44aa108)
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
d730ec0a20 |
Handle unresolved value-type call targets
A missing value-type definition makes ILReader insert a Ref-to-Unknown conversion before instance calls. Preserve the managed-reference receiver so C# output does not fall back to invalid ref casts or unsafe pointers. Assisted-by: Codex:gpt-5.6-sol:Codex |
2 weeks ago |
|
|
4bc51e6083 |
Drop isReferenceType when erasing unknown types
Whether an unresolvable type is a reference type is not a property of the type but of the metadata that mentioned it: a signature spelling it `valuetype T` yields false, a bare TypeRef yields null. UnknownType.Equals compares the flag, so the two spellings of one missing type compared unequal and EquivalentTypes reported false - the decompiler then emitted a cast between a type and itself. Erasing the flag in NormalizeTypeVisitor keeps the relaxation inside the comparisons that ask for erasure, next to the nullability, modopt and tuple erasure that are use-site spellings of the same kind. Dropping the term from UnknownType.Equals instead was measured and rejected: Equals also keys CSharpConversions' implicit-conversion cache, where merging the two spellings lets whichever conversion is computed first answer for both, adding 398 boxing casts across two real-world assemblies. Assisted-by: Claude:claude-opus-5[1m]:Claude Code |
3 weeks ago |
|
|
ac8a8ff64d |
Add an ILPretty test for #3729
Structs whose assembly is missing decompile through the unresolved-type path, which is not covered anywhere: the fixture pins the constructor shapes that path has to recognize, and the reference-type cases that must keep falling through to a plain call. Assisted-by: Claude:claude-opus-5:Claude Code |
1 month ago |