Reviewers: Jakob,
Message:
PTAL.
Description:
Reapply r9870 "Remove some initialization checks based on source
positions.".
This reverts r9896 "Revert r9870 due to browser-test failures." See below
for
the diff from the previous version for the ia32 platform. The code for other
platforms has been changed accordingly.
TEST=mjsunit/compiler/lazy-const-lookup.js
diff --git a/src/ia32/full-codegen-ia32.cc b/src/ia32/full-codegen-ia32.cc
index 2cbf518..1990f2f 100644
--- a/src/ia32/full-codegen-ia32.cc
+++ b/src/ia32/full-codegen-ia32.cc
@@ -1258,13 +1258,17 @@ void
FullCodeGenerator::EmitVariableLoad(VariableProxy*
proxy) {
// binding is initialized:
// function() { f(); let x = 1; function f() { x = 2; } }
//
- // Check that we always have valid source position.
- ASSERT(var->initializer_position() != RelocInfo::kNoPosition);
- ASSERT(proxy->position() != RelocInfo::kNoPosition);
- bool skip_init_check =
- var->mode() != CONST &&
- var->scope()->DeclarationScope() ==
scope()->DeclarationScope() &&
- var->initializer_position() < proxy->position();
+ bool skip_init_check;
+ if (var->scope()->DeclarationScope() !=
scope()->DeclarationScope()) {
+ skip_init_check = false;
+ } else {
+ // Check that we always have valid source position.
+ ASSERT(var->initializer_position() != RelocInfo::kNoPosition);
+ ASSERT(proxy->position() != RelocInfo::kNoPosition);
+ skip_init_check = var->mode() != CONST &&
+ var->initializer_position() < proxy->position();
+ }
+
if (!skip_init_check) {
// Let and const need a read barrier.
Label done;
Please review this at http://codereview.chromium.org/8479034/
SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge
Affected files:
M src/arm/full-codegen-arm.cc
M src/ia32/full-codegen-ia32.cc
M src/mips/full-codegen-mips.cc
M src/parser.cc
M src/variables.h
M src/variables.cc
M src/x64/full-codegen-x64.cc
A test/mjsunit/compiler/lazy-const-lookup.js
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev