Reviewers: arv-chromium, slightlylate, peterhal,
Message:
Simple fix (famous last words). Hope I didn't break anything.
#--cut--
dl_check() {
local f=$(basename $1)
test -e $f || curl -sO $1
openssl sha1 < $f | grep -q "= $2" && return 0
echo sha1 mismatch!
return 1
}
git checkout f37adaa5ad9edef9 # last merge with branch master
git checkout -b issue7865048-break-continue-transformer-fix
cat > gen-switch.js <<"END"
function* G(n) {
var a = yield n;
switch (a) {
case 42:
break;
default:
a *= 2;
// fall through
case 21:
a *= 100;
break;
case 11:
throw new Error('went to ' + a);
}
yield a;
}
END
## before
./traceur --out gen-switch.out1.js -- gen-switch.js
dl_check
https://codereview.appspot.com/download/issue7865048_1.diff \
ba9e8a31c86d3f35 && git apply issue7865048_1.diff && make test
## after
./traceur --out gen-switch.out2.js -- gen-switch.js
## the switch statement remains untransformed.
diff -u gen-switch.out1.js gen-switch.out2.js
#--cut--
Description:
Optimization: Don't transform plain 'break' in 'switch' to a state
machine.
BUG=None
TEST=None
Please review this at
https://codereview.appspot.com/7865048/
Affected files:
M src/codegeneration/generator/BreakContinueTransformer.js
Index: src/codegeneration/generator/BreakContinueTransformer.js
diff --git a/src/codegeneration/generator/BreakContinueTransformer.js
b/src/codegeneration/generator/BreakContinueTransformer.js
index
d313f120d920e9dca96503487f13953dbc6574a9..53ddfe38df84bee61a8e774017ad54d549b6f503
100644
--- a/src/codegeneration/generator/BreakContinueTransformer.js
+++ b/src/codegeneration/generator/BreakContinueTransformer.js
@@ -67,7 +67,7 @@ export class BreakContinueTransformer extends
ParseTreeTransformer {
* @return {ParseTree}
*/
transformBreakStatement(tree) {
- return this.transformBreaks_ ?
+ return this.transformBreaks_ ||
tree.name ?
this.stateToStateMachine_(
new BreakState(this.allocateState_(), safeGetLabel(tree))) :
tree;
@@ -136,7 +136,7 @@ export class BreakContinueTransformer extends
ParseTreeTransformer {
*/
transformSwitchStatement(tree) {
var oldState = this.transformBreaks_;
- this.transformBreaks = false;
+ this.transformBreaks_ = false;
var result = super.transformSwitchStatement(tree);
this.transformBreaks_ = oldState;
return result;