• littledan's avatar
    Use a different map to distinguish eval contexts · 53fdf9d1
    littledan authored
    eval() may introduce a scope which needs to be represented as a context at
    runtime, e.g.,
    
      eval('var x; let y; ()=>y')
    
    introduces a variable y which needs to have a context allocated for it. However,
    when traversing upwards to find the declaration context for a variable which leaks,
    as the declaration of x does above, this context has to be understood to not be
    a declaration context in sloppy mode.
    
    This patch makes that distinction by introducing a different map for eval-introduced
    contexts. A dynamic search for the appropriate context will continue past an eval
    context to find the appropriate context. Marking contexts as eval contexts rather
    than function contexts required updates in each compiler backend.
    
    BUG=v8:5295, chromium:648719
    
    Review-Url: https://codereview.chromium.org/2435023002
    Cr-Commit-Position: refs/heads/master@{#41869}
    53fdf9d1