Block scoped const variables.
authorkeuchel@chromium.org <keuchel@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Tue, 25 Oct 2011 08:33:08 +0000 (08:33 +0000)
committerkeuchel@chromium.org <keuchel@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Tue, 25 Oct 2011 08:33:08 +0000 (08:33 +0000)
commite8bccc2cb0d781e9396cfefc980736c8aedac29c
treebe11e1162bd10a2c3da40b752728e7233b50632f
parent86337d3de7f7f407131d6aba4999fbb0e1edb859
Block scoped const variables.

This implements block scoped 'const' declared variables in harmony mode. They
have a temporal dead zone semantics similar to 'let' bindings, i.e. accessing
uninitialized 'const' bindings in throws a ReferenceError.

As for 'let' bindings, the semantics of 'const' bindings in global scope is not
correctly implemented yet. Furthermore assignments to 'const's are silently
ignored. Another CL will introduce treatment of those assignments as early
errors.

Review URL: http://codereview.chromium.org/7992005

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@9764 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
25 files changed:
src/arm/full-codegen-arm.cc
src/ast.h
src/contexts.cc
src/contexts.h
src/full-codegen.cc
src/hydrogen.cc
src/ia32/full-codegen-ia32.cc
src/messages.js
src/objects.h
src/parser.cc
src/parser.h
src/preparser.cc
src/runtime.cc
src/scopeinfo.cc
src/scopes.cc
src/scopes.h
src/token.h
src/v8globals.h
src/variables.cc
src/variables.h
src/x64/full-codegen-x64.cc
test/mjsunit/harmony/block-conflicts.js
test/mjsunit/harmony/block-let-declaration.js
test/mjsunit/harmony/block-let-semantics.js
test/mjsunit/harmony/block-scoping.js