tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

cptn-no-dflt-match-abrupt-empty.js (2015B)


      1 // Copyright (C) 2016 the V8 project authors. All rights reserved.
      2 // This code is governed by the BSD license found in the LICENSE file.
      3 /*---
      4 es6id: 13.12.11
      5 description: >
      6    Completion value when the matching case is exited via an empty abrupt
      7    completion
      8 info: |
      9    SwitchStatement : switch ( Expression ) CaseBlock
     10 
     11    [...]
     12    8. Let R be the result of performing CaseBlockEvaluation of CaseBlock with
     13       argument switchValue.
     14    9. Set the running execution context’s LexicalEnvironment to oldEnv.
     15    10. Return R.
     16 
     17 
     18    13.12.9 Runtime Semantics: CaseBlockEvaluation
     19 
     20    CaseBlock : { CaseClauses }
     21 
     22    1. Let V = undefined.
     23    2. Let A be the List of CaseClause items in CaseClauses, in source text
     24       order.
     25    3. Let found be false.
     26    4. Repeat for each CaseClause C in A,
     27       a. If found is false, then
     28          i. Let clauseSelector be the result of CaseSelectorEvaluation of C.
     29          ii. If clauseSelector is an abrupt completion, then
     30              1. If clauseSelector.[[value]] is empty, return
     31                 Completion{[[type]]: clauseSelector.[[type]], [[value]]:
     32                 undefined, [[target]]: clauseSelector.[[target]]}.
     33              2. Else, return Completion(clauseSelector).
     34          iii. Let found be the result of performing Strict Equality Comparison
     35               input === clauseSelector.[[value]].
     36        b. If found is true, then
     37           i. Let R be the result of evaluating C.
     38           ii. If R.[[value]] is not empty, let V = R.[[value]].
     39           iii. If R is an abrupt completion, return Completion(UpdateEmpty(R,
     40                V)).
     41 ---*/
     42 
     43 assert.sameValue(eval('1; switch ("a") { case "a": break; }'), undefined);
     44 assert.sameValue(eval('2; switch ("a") { case "a": { 3; break; } }'), 3);
     45 
     46 assert.sameValue(
     47  eval('4; do { switch ("a") { case "a": continue; } } while (false)'),
     48  undefined
     49 );
     50 assert.sameValue(
     51  eval('5; do { switch ("a") { case "a": { 6; continue; } } } while (false)'),
     52  6
     53 );
     54 
     55 reportCompare(0, 0);