1. 08 Apr, 2016 1 commit
  2. 28 Aug, 2015 1 commit
    • littledan's avatar
      Ensure hole checks take place in switch statement scopes · d6fb6de7
      littledan authored
      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
      
      Review URL: https://codereview.chromium.org/1312613003
      
      Cr-Commit-Position: refs/heads/master@{#30453}
      d6fb6de7