Reviewers: adamk,

Message:
The test still fails on TurboFan; I'm investigating.

Description:
Ensure hole checks take place in switch statement scopes

Switch statements introduce their own scope for cases, but this scope
is not necessarily executed in order, as the following function shows:

  switch (x) {
    case 1:
      let y = 1;
    case 2:
      y = 2;
    case 3:
      print(y);
  }

If x = 2 or x = 3, the code should throw a ReferenceError. However,
FullCodeGen's hole check elimination used the simple algorithm of
assuming that if the initializer was in the same scope, then it was
reached before the use, and therefore the hole check could be
eliminated.

This patch adds an extra bit to scopes, to track if they may
nonlinearly. The parser marks the scope that switch introduces as
nonlinear. FullCodeGen does not eliminate the hole check from
a scope which is nonlinear. This patch refactors FullCodeGen to
put the hole check elimination in one place, rather than in each
backend.

BUG=v8:3926
LOG=Y
R=adamk

Please review this at https://codereview.chromium.org/1312613003/

Base URL: https://chromium.googlesource.com/v8/v8.git@master

Affected files (+235, -473 lines):
  M src/full-codegen/arm/full-codegen-arm.cc
  M src/full-codegen/arm64/full-codegen-arm64.cc
  M src/full-codegen/full-codegen.h
  M src/full-codegen/full-codegen.cc
  M src/full-codegen/ia32/full-codegen-ia32.cc
  M src/full-codegen/mips/full-codegen-mips.cc
  M src/full-codegen/mips64/full-codegen-mips64.cc
  M src/full-codegen/ppc/full-codegen-ppc.cc
  M src/full-codegen/x64/full-codegen-x64.cc
  M src/full-codegen/x87/full-codegen-x87.cc
  M src/parser.cc
  M src/scopes.h
  M src/scopes.cc
  M test/mjsunit/mjsunit.status
  A test/mjsunit/regress/regress-3926.js


--
--
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.

Reply via email to