On 2015/06/03 08:03:04, rossberg wrote:
On 2015/06/03 07:54:53, Michael Starzinger wrote:
> On 2015/06/03 06:28:44, rossberg wrote:
> > Does this also work correctly if the (direct, sloppy) eval contains a
'var'
> > declaration?
> >
> > () => eval("var x = 666"), x
> >
> > should return 666. Wouldn't the x still go to the wrong context, or
am I
> > misunderstanding the CL?
>
> Just to clarify, did you mean the following arrow?
>
> () => (eval("var x = 666"), x)
Right.
> This one work correctly after my fix.
Then I'm obviously confused. :) Why does this work?
Since the arrow function is marked as calling a sloppy eval, it will
allocate a
context in the prologue (because the scope's heap count is set to
MIN_CONTEXT_SLOTS instead of 0). The eval will then install an extension
object
on said context containing the dynamic declaration of "x". Any optimistic
binding to a local "x" surrounding the arrow will not hit, because said
context
contains an extension object.
Before my fix, the arrow function wouldn't allocate a context (because the
scope's heap count of MIN_CONTEXT_SLOTS was still interpreted as "don't
need a
context"). I guess (didn't verify) that the extension object would have been
placed on the wrong context.
Can we have a test for that?
I added this to the regression test.
https://codereview.chromium.org/1146063006/
--
--
v8-dev mailing list
v8-dev@googlegroups.com
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to v8-dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.