fix & tweak labels
This commit is contained in:
parent
efc17b6880
commit
19d8b1d441
|
|
@ -345,6 +345,10 @@ function createStatements(n, recurmax, canThrow, canBreak, canContinue, cannotRe
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function enableLoopControl(flag) {
|
||||||
|
return Array.isArray(flag) && flag.indexOf("") < 0 ? flag.concat("") : flag;
|
||||||
|
}
|
||||||
|
|
||||||
function createLabel(canBreak, canContinue) {
|
function createLabel(canBreak, canContinue) {
|
||||||
var label;
|
var label;
|
||||||
if (rng(10) < 3) {
|
if (rng(10) < 3) {
|
||||||
|
|
@ -361,6 +365,9 @@ function createLabel(canBreak, canContinue) {
|
||||||
canContinue = canContinue ? [ "" ] : [];
|
canContinue = canContinue ? [ "" ] : [];
|
||||||
}
|
}
|
||||||
canContinue.push(label);
|
canContinue.push(label);
|
||||||
|
} else {
|
||||||
|
canBreak = enableLoopControl(canBreak);
|
||||||
|
canContinue = enableLoopControl(canContinue);
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
break: canBreak,
|
break: canBreak,
|
||||||
|
|
@ -490,20 +497,22 @@ function createStatement(recurmax, canThrow, canBreak, canContinue, cannotReturn
|
||||||
function createSwitchParts(recurmax, n, canThrow, canBreak, canContinue, cannotReturn, stmtDepth) {
|
function createSwitchParts(recurmax, n, canThrow, canBreak, canContinue, cannotReturn, stmtDepth) {
|
||||||
var hadDefault = false;
|
var hadDefault = false;
|
||||||
var s = '';
|
var s = '';
|
||||||
|
canBreak = enableLoopControl(canBreak);
|
||||||
|
if (!canBreak) canBreak = CAN_BREAK;
|
||||||
while (n-- > 0) {
|
while (n-- > 0) {
|
||||||
//hadDefault = n > 0; // disables weird `default` clause positioning (use when handling destabilizes)
|
//hadDefault = n > 0; // disables weird `default` clause positioning (use when handling destabilizes)
|
||||||
if (hadDefault || rng(5) > 0) {
|
if (hadDefault || rng(5) > 0) {
|
||||||
s += '' +
|
s += '' +
|
||||||
'case ' + createExpression(recurmax, NO_COMMA, stmtDepth, canThrow) + ':\n' +
|
'case ' + createExpression(recurmax, NO_COMMA, stmtDepth, canThrow) + ':\n' +
|
||||||
createStatements(rng(3) + 1, recurmax, canThrow, canBreak || CAN_BREAK, canContinue, cannotReturn, stmtDepth) +
|
createStatements(rng(3) + 1, recurmax, canThrow, canBreak, canContinue, cannotReturn, stmtDepth) +
|
||||||
'\n' +
|
'\n' +
|
||||||
(rng(10) > 0 ? ' break;' : '/* fall-through */') +
|
(rng(10) > 0 ? ' break' + getLabel(canBreak) + ';' : '/* fall-through */') +
|
||||||
'\n';
|
'\n';
|
||||||
} else {
|
} else {
|
||||||
hadDefault = true;
|
hadDefault = true;
|
||||||
s += '' +
|
s += '' +
|
||||||
'default:\n' +
|
'default:\n' +
|
||||||
createStatements(rng(3) + 1, recurmax, canThrow, canBreak || CAN_BREAK, canContinue, cannotReturn, stmtDepth) +
|
createStatements(rng(3) + 1, recurmax, canThrow, canBreak, canContinue, cannotReturn, stmtDepth) +
|
||||||
'\n';
|
'\n';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user