Hi Mohammed,

The ‘automatic enum value’ code path is used if you have code like this, where 
you declare a raw type but don’t assign raw values:

enum E : Int {
  case a
  case b
  case c
}

This only makes sense for a raw type of integer, and not string — or a tuple. 
Even if you have (Int, Int) as your raw type, it’s not clear how to 
automatically increment such a value, so I think you shouldn’t be hitting this 
code path at all if you have a tuple raw type.

Slava

> On Nov 18, 2017, at 1:07 PM, Mohammed Ennabah via swift-dev 
> <swift-dev@swift.org> wrote:
> 
> I have been digging into the Swift library to solve the case where enum could 
> have a RawValue of tuples of literals. So far, I found that in 
> lib/Sema/TypeCheckDecl.cpp::3020 we do check the enum RawValue if it conforms 
> to a knownProtocolKind, and if true, we switch over to check whether it’s 
> ExpressibleByXXLiteral (XX could be String, Integer, etc..).
> Now, my questions are:
> I need to extend this condition to have a tuple of types that conforms to the 
> knownProtocolKind, and I’m not quite sure where to start. (Note: It’s better 
> to make the tuple conforms to a protocol type that is knownProtocolKind, so 
> the enum can be tuple of tuples.., let me know your thoughts please).
> We increment the RawValue if it’s of type Integer. What if the tuple of type 
> (Int, String), will we need to increment the Int part as well? I think yes, 
> but I’m asking to listen to your thoughts, too.
> 
> 
> - Mohammed
> _______________________________________________
> swift-dev mailing list
> swift-dev@swift.org
> https://lists.swift.org/mailman/listinfo/swift-dev

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

Reply via email to