Optimization: Don't transform plain 'break' in 'switch' to a state machine. (issue 7865048)

1 view
Skip to first unread message

usrb...@yahoo.com

unread,
Mar 23, 2013, 5:57:54 PM3/23/13
to a...@chromium.org, sligh...@google.com, pete...@google.com, traceur-comp...@googlegroups.com, re...@codereview-hr.appspotmail.com
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;


a...@chromium.org

unread,
Mar 24, 2013, 11:38:38 AM3/24/13
to usrb...@yahoo.com, sligh...@google.com, pete...@google.com, traceur-comp...@googlegroups.com, re...@codereview-hr.appspotmail.com
LGTM

Committed as 0d4c5edb5b9388f60db3a31ea2bf471b58990afa

https://codereview.appspot.com/7865048/
Reply all
Reply to author
Forward
0 new messages