[swift-evolution] Proposal: Allow @objc(name) on enum declarations
Douglas Gregor
dgregor at apple.com
Sat Dec 12 00:05:19 CST 2015
> On Dec 11, 2015, at 9:40 PM, Kevin Ballard <kevin at sb.org> wrote:
>
> On Fri, Dec 11, 2015, at 02:39 PM, Douglas Gregor wrote:
>>
>>> On Dec 11, 2015, at 1:19 PM, Kevin Ballard via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
>>>
>>> I've now submitted this proposal as a PR: https://github.com/apple/swift-evolution/pull/50 <https://github.com/apple/swift-evolution/pull/50>
>>
>> Thanks for writing this up!
>>
>> I was actually surprised that this didn’t already work; @objc is supposed to be able to rename effectively anything at this point. Given that, and that another core team member has already +1’d, we can skip the evolution process and call this a bug fix. Want to contribute a fix?
>
> I'd love to! I'll start working on one over the weekend.
>
>>> I listed one open question:
>>>
>>> Should the generated Obj-C declarations use the swift_name attribute to indicate the Swift type it came from? Proposal SE-0005 generalizes swift_name to apply to any arbitrary C or Obj-C entity, so it will be legal to put on enums.
>>>
>>> Labelling it makes it clear to the reader what the Swift equivalent is, but I'm unsure if there's any downsides to doing this.
>>
>> Yes, it makes sense to use the swift_name attribute here. If you’re implementing your proposal, check out lib/PrintAsObjC/PrintAsObjC.cpp and how we use the SWIFT_COMPILE_NAME macro for this in the generated header.
>
> Will do. My worry with using swift_name is that, at least in the clang that ships with Xcode 7.2, you can't actually put the swift_name attribute on an enum. I assume that will change with SE-0005, but I also assume this hasn't been implemented yet. And even when it is implemented, emitting it will be a backwards-compatibility hazard if the generated header needs to work with older clangs. Is there any way to suppress the error?
Hrm, that’s a good point. The generalized swift_name support is implemented in upstream Clang, but you’re right that Xcode 7.2 won’t be able to parse it. We can add a “__has_feature” entry for generalized swift_name in Clang and wrap this particular use of swift_name in
#if __has_feature(generalized_swift_name)
// ...
#endif
> I'm also not sure offhand where you actually put the attribute on an enum, since the enum definition is actually 2 declarations, one for the typedef and one for the enum itself. Would it go after the `enum` keyword, in the place where SWIFT_ENUM_EXTRA is?
Yes, that’s correct.
- Doug
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20151211/db10c02d/attachment.html>
More information about the swift-evolution
mailing list