Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2015 the V8 project authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 // Flags: --strong-mode | |
| 6 | |
| 7 "use strict"; | |
| 8 | |
| 9 function CheckSwitch(code) { | |
| 10 let successContexts = [ | |
|
rossberg
2015/04/15 19:56:34
There are some cases missing, most importantly:
conradw
2015/04/16 10:59:57
Done.
| |
| 11 ["switch(1) { case 1: ", "};"], | |
| 12 ["switch(1) { default: ", "};"], | |
| 13 ["switch(1) { case 1: case 2: ", "default: };"], | |
| 14 ["switch(1) { case 1: break; case 2: ", "default: };"], | |
| 15 ["switch(1) { case 1: case 2: break; case 3: ", "case 4: default: };"], | |
| 16 ["switch(1) {case 1: if(1) break; else {", "} default: break;};"] | |
|
rossberg
2015/04/15 19:56:34
Nit: consistent spacing (here and below)
conradw
2015/04/16 10:59:57
Done.
| |
| 17 ] | |
| 18 | |
| 19 let strongThrowContexts = [ | |
|
rossberg
2015/04/15 19:56:34
Add some cases here as well, e.g. loops as last st
conradw
2015/04/16 10:59:57
Done.
| |
| 20 ["switch(1) {case 1: 1+1; case 2: ", "};"], | |
| 21 ["switch(1) {case 1: foo: break foo; case 2: ", "};"], | |
| 22 ["switch(1) {case 1: ", " case 2: foo: break foo; };"], | |
| 23 ["switch(1) {case 1: foo:", "};"], | |
| 24 ["switch(1) {case 1: foo:{ ", "}};"], | |
| 25 ["switch(1) {case 1: foo:{ ", "} default: break;};"], | |
| 26 ["switch(1) {case 1: { foo:{ { ", "} } } default: break;};"], | |
| 27 ["switch(1) {case 1: if(1) {", "} default: break;};"], | |
| 28 ["switch(1) {case 1: foo:if(1) break; else {", "} default: break;};"] | |
| 29 ] | |
| 30 | |
| 31 for (let context of successContexts) { | |
| 32 assertDoesNotThrow("function f() { 'use strong'; for(;;) {" + context[0] + | |
| 33 code + context[1] + "}}"); | |
| 34 } | |
| 35 for (let context of successContexts) { | |
| 36 assertDoesNotThrow("function f() { 'use strong'; for(;;) {" + context[0] + | |
| 37 "{ 1+1; " + code + "}" + context[1] + "}}"); | |
| 38 } | |
| 39 for (let context of successContexts) { | |
| 40 assertDoesNotThrow("function f() { 'use strong'; for(;;) {" + context[0] + | |
| 41 "{ 1+1; { 1+1; " + code + "}}" + context[1] + "}}"); | |
| 42 } | |
| 43 for (let context of successContexts) { | |
| 44 assertDoesNotThrow("function f() { " + context[0] + | |
| 45 "(function g() { for(;;) { " + code + " }});" + | |
| 46 context[1] + "}"); | |
| 47 } | |
| 48 for (let context of successContexts) { | |
| 49 assertThrows("function f() { 'use strong'; " + context[0] + | |
| 50 "(function g() { for(;;) { " + code + " }});" + | |
| 51 context[1] + "}", SyntaxError); | |
| 52 } | |
| 53 for (let context of strongThrowContexts) { | |
| 54 assertDoesNotThrow("function f() { for(;;) {" + context[0] + code + | |
| 55 context[1] + "}}"); | |
| 56 } | |
| 57 for (let context of strongThrowContexts) { | |
| 58 assertThrows("function f() { 'use strong'; for(;;) {" + context[0] + | |
| 59 code + context[1] + "}}", SyntaxError); | |
| 60 } | |
| 61 } | |
| 62 | |
| 63 CheckSwitch("break; "); | |
|
rossberg
2015/04/15 19:56:35
Nit: Make these an outer loop inside the test func
conradw
2015/04/16 10:59:57
Done.
| |
| 64 CheckSwitch("continue; "); | |
| 65 CheckSwitch("return; "); | |
| 66 CheckSwitch("throw new TypeError(); "); | |
| 67 CheckSwitch("if (1) break; else continue; "); | |
| 68 CheckSwitch("if (1) {1+1; {break;}} else continue; "); | |
| 69 | |
| 70 assertDoesNotThrow("'use strong'; switch(1) {};"); | |
| 71 assertDoesNotThrow("'use strong'; switch(1) {case 1:};"); | |
| 72 assertDoesNotThrow("'use strong'; switch(1) {case 1: case 2: default: };"); | |
| 73 assertDoesNotThrow("'use strong'; foo: switch(1) {case 1: break foo;};"); | |
| 74 assertThrows("'use strong'; switch(1) {case 1: case 2: default: {} };", | |
| 75 SyntaxError); | |
| 76 assertThrows("'use strong'; \ | |
| 77 switch(1) {case 1: case 2: (function(){return}); default: };", SyntaxError); | |
| OLD | NEW |