Skip to content

Commit 8a79c21

Browse files
committed
fix support for patterns in for in/of statements
add test case
1 parent 48b4124 commit 8a79c21

3 files changed

Lines changed: 22 additions & 6 deletions

File tree

lib/Parser.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -908,30 +908,30 @@ class Parser extends Tapable {
908908

909909
prewalkForInStatement(statement) {
910910
if(statement.left.type === "VariableDeclaration")
911-
this.prewalkStatement(statement.left);
911+
this.prewalkVariableDeclaration(statement.left);
912912
this.prewalkStatement(statement.body);
913913
}
914914

915915
walkForInStatement(statement) {
916916
if(statement.left.type === "VariableDeclaration")
917-
this.walkStatement(statement.left);
917+
this.walkVariableDeclaration(statement.left);
918918
else
919-
this.walkExpression(statement.left);
919+
this.walkPattern(statement.left);
920920
this.walkExpression(statement.right);
921921
this.walkStatement(statement.body);
922922
}
923923

924924
prewalkForOfStatement(statement) {
925925
if(statement.left.type === "VariableDeclaration")
926-
this.prewalkStatement(statement.left);
926+
this.prewalkVariableDeclaration(statement.left);
927927
this.prewalkStatement(statement.body);
928928
}
929929

930930
walkForOfStatement(statement) {
931931
if(statement.left.type === "VariableDeclaration")
932-
this.walkStatement(statement.left);
932+
this.walkVariableDeclaration(statement.left);
933933
else
934-
this.walkExpression(statement.left);
934+
this.walkPattern(statement.left);
935935
this.walkExpression(statement.right);
936936
this.walkStatement(statement.body);
937937
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
it("should parse patterns in for in/of statements", () => {
2+
var message;
3+
for({ message = require("./module")} of [{}]) {
4+
message.should.be.eql("ok");
5+
}
6+
for({ message = require("./module") } in { "string": "value" }) {
7+
message.should.be.eql("ok");
8+
}
9+
for(var { value = require("./module")} of [{}]) {
10+
value.should.be.eql("ok");
11+
}
12+
for(var { value = require("./module") } in { "string": "value" }) {
13+
value.should.be.eql("ok");
14+
}
15+
});
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = "ok";

0 commit comments

Comments
 (0)