• Matthew Dempsky's avatar
    cmd/compile: cleanup closure.go · eb3c44b2
    Matthew Dempsky authored
    The main thing is we now eagerly create the ODCLFUNC node for
    closures, immediately cross-link them, and assign fields (e.g., Nbody,
    Dcl, Parents, Marks) directly on the ODCLFUNC (previously they were
    assigned on the OCLOSURE and later moved to the ODCLFUNC).
    
    This allows us to set Curfn to the ODCLFUNC instead of the OCLOSURE,
    which makes things more consistent with normal function declarations.
    (Notably, this means Cvars now hang off the ODCLFUNC instead of the
    OCLOSURE.)
    
    Assignment of xfunc symbol names also now happens before typechecking
    their body, which means debugging output now provides a more helpful
    name than "<S>".
    
    In golang.org/cl/66810, we changed "x := y" statements to avoid
    creating false closure variables for x, but we still create them for
    struct literals like "s{f: x}". Update comment in capturevars
    accordingly.
    
    More opportunity for cleanups still, but this makes some substantial
    progress, IMO.
    
    Passes toolstash-check.
    
    Change-Id: I65a4efc91886e3dcd1000561348af88297775cd7
    Reviewed-on: https://go-review.googlesource.com/100197
    Run-TryBot: Matthew Dempsky <mdempsky@google.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: 's avatarRobert Griesemer <gri@golang.org>
    eb3c44b2
inl.go 31.5 KB