> On Feb 7, 2017, at 9:30 PM, Jacob Bandes-Storch <jtban...@gmail.com> wrote:
> 
> Thanks to the magic of git blame:
> 
>   
> https://github.com/apple/swift/commit/f3ed7e93e142b802171bfe0dd08b88aa0d8b320b
>  
> <https://github.com/apple/swift/commit/f3ed7e93e142b802171bfe0dd08b88aa0d8b320b>
> 
> 
> > Unless you think there’s something to be gained, I’m not sure it’s worth it…
> 
> I was going for idiot-proof-ness of the AST types. I'd never heard of 
> CaptureListExpr before and would've just assumed it was part of ClosureExpr. 
> But it looks like the change was pretty intentional. (Maybe someone can share 
> what rdar://19146761 was?)

"This crashes the compiler, we’re not setting up declcontext’s right:

func f(a : () -> ()) {}

class C {
  var i = 42

  func g() {
    f({ [myI = {i}] in () })
  }
}"

> 
> On Tue, Feb 7, 2017 at 9:27 PM, John McCall <rjmcc...@apple.com 
> <mailto:rjmcc...@apple.com>> wrote:
>> On Feb 8, 2017, at 12:18 AM, Jacob Bandes-Storch via swift-dev 
>> <swift-dev@swift.org <mailto:swift-dev@swift.org>> wrote:
>> I don't think it would be a very big parser change to invert the 
>> relationship. Maybe I'll try it out and put up another PR.
>> 
>> On the other hand, noticed the header comment says:
>> 
>> /// ...Because the capture list is evaluated outside of the closure, this
>> /// CaptureList wraps the ClosureExpr.  The dynamic semantics are that 
>> evaluates
>> /// the variable bindings from the capture list, then evaluates the
>> /// subexpression (the closure itself) and returns the result.
> 
> I think the original representation just made the captures part of the 
> ClosureExpr, and IIRC Chris changed it to this intentionally.  I don't 
> remember why; maybe it was causing problems for some tooling that wanted to 
> walk the expression tree and find uses of the variable?  It's certainly 
> kindof weird for IRGen.
> 
> John.
> 
>> 
>> 🤷‍
>> 
>> On Tue, Feb 7, 2017 at 9:10 PM, Slava Pestov <spes...@apple.com 
>> <mailto:spes...@apple.com>> wrote:
>> 
>>> On Feb 7, 2017, at 9:09 PM, Jacob Bandes-Storch <jtban...@gmail.com 
>>> <mailto:jtban...@gmail.com>> wrote:
>>> 
>>> PR'd:  https://github.com/apple/swift/pull/7326 
>>> <https://github.com/apple/swift/pull/7326>
>>> 
>>> Although I would also ask: why is CaptureListExpr a parent of ClosureExpr 
>>> and not a child?
>> 
>> I think it’s kind of arbitrary. You could also argue that they should be one 
>> and the same AST node. I think right now it’s just a property of how the 
>> parser works, the capture list comes first, before the closure body?
>> 
>> Slava
>> 
>>> 
>>> Jacob
>>> 
>>> On Tue, Feb 7, 2017 at 7:56 PM, Slava Pestov <spes...@apple.com 
>>> <mailto:spes...@apple.com>> wrote:
>>> 
>>>> On Feb 7, 2017, at 7:30 PM, Jacob Bandes-Storch via swift-dev 
>>>> <swift-dev@swift.org <mailto:swift-dev@swift.org>> wrote:
>>>> 
>>>> I just learned about CaptureListExpr when working on some diagnostics. Is 
>>>> there a particular reason that its member "closureBody" is an Expr* and 
>>>> not a ClosureExpr*? There seems to be only one place it's built 
>>>> <https://github.com/apple/swift/blob/1e46f13184d7256c991b2ba9424af9efe3cd860f/lib/Parse/ParseExpr.cpp#L2425>,
>>>>  and the body is always a ClosureExpr.
>>>> 
>>>> I can see one minor place 
>>>> <https://github.com/apple/swift/blob/1e46f13184d7256c991b2ba9424af9efe3cd860f/lib/AST/ASTWalker.cpp#L663-L665>
>>>>  where it might be less convenient to have a ClosureExpr, but otherwise 
>>>> there doesn't seem to be much of a reason to keep it generalized to Expr*.
>>> 
>>> Since autoclosures cannot have capture lists, I think the change you’re 
>>> suggesting makes sense.
>>> 
>>> Slava
>>> 
>>>> 
>>>> Jacob
>>>> _______________________________________________
>>>> swift-dev mailing list
>>>> swift-dev@swift.org <mailto:swift-dev@swift.org>
>>>> https://lists.swift.org/mailman/listinfo/swift-dev 
>>>> <https://lists.swift.org/mailman/listinfo/swift-dev>
>>> 
>>> 
>> 
>> 
>> _______________________________________________
>> swift-dev mailing list
>> swift-dev@swift.org <mailto:swift-dev@swift.org>
>> https://lists.swift.org/mailman/listinfo/swift-dev 
>> <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