2011-06-21  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Moved 'const' off the global-variable-as-local-variable crack pipe
        https://bugs.webkit.org/show_bug.cgi?id=63105
        
        This is necessary for moving the rest of the code off of same.
        
        Many problems remain in our handling of const. I have fixed none of them.

        * bytecompiler/BytecodeGenerator.h:
        (JSC::BytecodeGenerator::scopeChain): New accessor, needed to enable
        const to directly implement its unique scoping rules.

        * bytecompiler/NodesCodegen.cpp:
        (JSC::PrefixResolveNode::emitBytecode): Do specify that our resolve is
        for writing, so we don't overwrite const variables.

        (JSC::ConstDeclNode::emitCodeSingle): Don't assume that all declared const
        variables are available as local variables, since this won't be the case
        once global variables are not available as local variables. Instead, use
        put_scoped_var in the case where there is no local variable. Like a local
        variable, put_scoped_var succeeds even though const properties are
        read-only, since put_scoped_var skips read-only checks. (Yay?)


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@89392 268f45cc-cd09-0410-ab3c-d52691b4dbfc
3 files changed