Hi, A small update here: On Wed 21 Mar 2012 11:32, Andy Wingo <wingo@igalia.com> writes:
I suggest that we change the users of scope chains (eval, with, and function expressions) to receive the scope chain register as a parameter. The compiler already has to handle lazy scope creation, so it's just as easy to put the scope in a temporary as it is to put it in the callframe.
This doesn't work because we need to be able to tear off block scopes on an exceptional exit. So my current strategy will be to add a flag to codeblocks that push items onto the scope chain, hasLocalScopeChain() or so. We'll reserve a register to hold the local scope chain, also stored in the codeblock.
The second issue is handling temporal dead zone errors.
I renamed assert_lazy_reg_init to ensure_local_initialized, following the existing ensure_property_exists. Errors are now printed more nicely. Block-scoped locals are only initialized via init_lazy_reg if they need the temporal dead zone. So the current status is that I'm trying to get the runtime to know what scope objects are pushed locally to an Executable*, and which are "outer". This is both for variable access and for exceptional unwinding. Hackety hack, Andy -- http://wingolog.org/