• Robert Griesemer's avatar
    go/types: delay type-checking of function literals · ff6d7c2b
    Robert Griesemer authored
    R=go1.11
    
    Functions (at the package level) were collected and their bodies
    type-checked after all other package-level objects were checked.
    But function literals where type-checked right away when they were
    encountered so that they could see the correct, partially populated
    surrounding scope, and also to mark variables of the surrounding
    function as used.
    
    This approach, while simple, breaks down in esoteric cases where
    a function literal appears inside the declaration of an object
    that its body depends on: If the body is type-checked before the
    object is completely set up, the literal may use incomplete data
    structures, possibly leading to spurious errors.
    
    This change postpones type-checking of function literals to later;
    after the current expression or statement, but before any changes
    to the enclosing scope (so that the delayed type-checking sees the
    correct scope contents).
    
    The new mechanism is general and now is also used for other
    (non-function) delayed checks.
    
    Fixes #22992.
    
    Change-Id: Ic95f709560858b4bdf8c645be70abe4449f6184d
    Reviewed-on: https://go-review.googlesource.com/83397Reviewed-by: 's avatarAlan Donovan <adonovan@google.com>
    ff6d7c2b
Name
Last commit
Last update
.github Loading commit data...
api Loading commit data...
doc Loading commit data...
lib/time Loading commit data...
misc Loading commit data...
src Loading commit data...
test Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
AUTHORS Loading commit data...
CONTRIBUTING.md Loading commit data...
CONTRIBUTORS Loading commit data...
LICENSE Loading commit data...
PATENTS Loading commit data...
README.md Loading commit data...
VERSION Loading commit data...
favicon.ico Loading commit data...
robots.txt Loading commit data...