> On Feb 22, 2017, at 1:01 PM, David Hart <david.w.h...@me.com> wrote:
> 
> 
>> On 22 Feb 2017, at 21:59, Slava Pestov via swift-users 
>> <swift-users@swift.org <mailto:swift-users@swift.org>> wrote:
>> 
>> When a class conforms to a protocol and a requirement is fulfilled by a 
>> method in an extension, the class does not get a vtable entry for the 
>> extension method. So it cannot be overridden in a subclass — there’s nothing 
>> to dynamically dispatch here. We plan on addressing this as part of ABI 
>> stability.
> 
> What do you mean by “address” this? Force the vtable entry?

Yeah. Instead of having the witness table for the conformance point directly to 
the extension method, if the conforming type is a class, we will generate a 
small thunk that calls a vtable entry, and store the extension method in that 
vtable entry.

Of course this will only work if the conformance is defined in the same 
translation unit as the class; if you define the extension in a different 
module, you’ll get the same behavior you observe below.

Slava

> 
>> Slava
>> 
>> 
>>> On Feb 22, 2017, at 9:39 AM, David Hart via swift-users 
>>> <swift-users@swift.org <mailto:swift-users@swift.org>> wrote:
>>> 
>>> In the following piece of code, can somebody explain the last result? Why 
>>> the break in consistency? Is this a bug?
>>> 
>>> protocol P {
>>>     func foo() -> String
>>> }
>>> 
>>> extension P {
>>>     func foo() -> String { return "P" }
>>> }
>>> 
>>> class A : P {
>>>     func foo() -> String { return "A" }
>>> }
>>> 
>>> class B : P {}
>>> class C : B {
>>>     func foo() -> String { return "C" }
>>> }
>>> 
>>> A().foo()          // A
>>> (A() as P).foo()   // A
>>> B().foo()          // P
>>> (B() as P).foo()   // P
>>> C().foo()          // C
>>> (C() as P).foo()   // P
>>> _______________________________________________
>>> swift-users mailing list
>>> swift-users@swift.org <mailto:swift-users@swift.org>
>>> https://lists.swift.org/mailman/listinfo/swift-users 
>>> <https://lists.swift.org/mailman/listinfo/swift-users>
>> 
>> _______________________________________________
>> swift-users mailing list
>> swift-users@swift.org <mailto:swift-users@swift.org>
>> https://lists.swift.org/mailman/listinfo/swift-users
> 

_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to