Sema: Fudge backward compatibility for init
special declname
#17227
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
In Swift 4, constructors had the same name as properties,
methods and enum cases named
init
. This meant that youcould use constructor syntax to call such a member, which
caused some confusing behavior.
Recently I added a special declname for
init
so thatconstructors have unique names distinct from any name you
can spell, and "foo.init" syntax would look for a member
with the special name rather than one named
init
.Unfortunately people actually had code where they defined
members named
init
and then use them via normal memberlookup syntax, like this:
So to maintain backward compatibility, hack member lookup
to also find members named
init
when looking up the specialdeclname for constructors.
The workaround is only enabled in Swift 4 and 4.2 mode;
in Swift 5 mode you are expected to write foo.
init
to accessnon-constructor members named
init
.Fixes rdar://problem/38682258.