add better support for labels in the block scoping transformer and add more let scoping tests - fixes #644 and closes #608

This commit is contained in:
Sebastian McKenzie
2015-01-30 20:51:20 +11:00
parent 503a3f2e3a
commit 3f3cd2bb3a
16 changed files with 115 additions and 35 deletions

View File

@@ -0,0 +1,15 @@
var heh = [];
var nums = [1, 2, 3];
loop1:
for (let i in nums) {
let num = nums[i];
heh.push(x => x * num);
if (num >= 2) {
break loop1;
}
}
assert.equal(heh.length, 2);
assert.equal(heh[0](2), 2);
assert.equal(heh[1](4), 8);

View File

@@ -0,0 +1,4 @@
for (let i = 0, x = 2; i < 5; i++);
assert.ok(typeof i === "undefined");
assert.ok(typeof x === "undefined");

View File

@@ -0,0 +1,22 @@
(function () {
var stack = [];
loop1:
for (let j = 0; j < 10; j++) {
for (let i = 0; i < 10; i++) {
stack.push(() => [i, j]);
break;
}
}
assert.deepEqual(stack[0](), [0, 0]);
assert.deepEqual(stack[1](), [0, 1]);
assert.deepEqual(stack[2](), [0, 2]);
assert.deepEqual(stack[3](), [0, 3]);
assert.deepEqual(stack[4](), [0, 4]);
assert.deepEqual(stack[5](), [0, 5]);
assert.deepEqual(stack[6](), [0, 6]);
assert.deepEqual(stack[7](), [0, 7]);
assert.deepEqual(stack[8](), [0, 8]);
assert.deepEqual(stack[9](), [0, 9]);
})();

View File

@@ -0,0 +1,22 @@
(function () {
var stack = [];
loop1:
for (let j = 0; j < 10; j++) {
for (let i = 0; i < 10; i++) {
stack.push(() => [i, j]);
continue loop1;
}
}
assert.deepEqual(stack[0](), [0, 0]);
assert.deepEqual(stack[1](), [0, 1]);
assert.deepEqual(stack[2](), [0, 2]);
assert.deepEqual(stack[3](), [0, 3]);
assert.deepEqual(stack[4](), [0, 4]);
assert.deepEqual(stack[5](), [0, 5]);
assert.deepEqual(stack[6](), [0, 6]);
assert.deepEqual(stack[7](), [0, 7]);
assert.deepEqual(stack[8](), [0, 8]);
assert.deepEqual(stack[9](), [0, 9]);
})();

View File

@@ -1,7 +1,7 @@
"use strict";
(function () {
_loop: for (var i in nums) {
for (var i in nums) {
var _ret = (function (i) {
fns.push(function () {
return i;
@@ -18,10 +18,10 @@
})(i);
switch (_ret) {
case "break":
break _loop;
case "continue":
continue _loop;
continue;
case "break":
break;
default:
if (typeof _ret === "object") return _ret.v;
}

View File

@@ -1,6 +1,6 @@
"use strict";
_loop: for (var i in nums) {
for (var i in nums) {
var _ret = (function (i) {
fns.push(function () {
return i;
@@ -8,5 +8,5 @@ _loop: for (var i in nums) {
return "break";
})(i);
if (_ret === "break") break _loop;
if (_ret === "break") break;
}

View File

@@ -1,6 +1,6 @@
"use strict";
_loop: for (var i in nums) {
for (var i in nums) {
var _ret = (function (i) {
fns.push(function () {
return i;
@@ -8,5 +8,5 @@ _loop: for (var i in nums) {
return "continue";
})(i);
if (_ret === "continue") continue _loop;
if (_ret === "continue") continue;
}