add iterators
This commit is contained in:
3
lib/6to5/templates/for-of.js
Normal file
3
lib/6to5/templates/for-of.js
Normal file
@@ -0,0 +1,3 @@
|
||||
for (var ITERATOR_KEY = OBJECT[Symbol.iterator](), STEP_KEY; !(STEP_KEY = ITERATOR_KEY.next()).done; ) {
|
||||
var KEY = STEP_KEY.value;
|
||||
}
|
||||
@@ -30,6 +30,8 @@ var transform = module.exports = function (code, opts) {
|
||||
}
|
||||
});
|
||||
|
||||
var generateUid = util.buildUidGenerator();
|
||||
|
||||
_.each(transform.transformers, function (transformer, name) {
|
||||
var blacklist = opts.blacklist;
|
||||
if (blacklist.length && _.contains(blacklist, name)) return;
|
||||
@@ -37,7 +39,7 @@ var transform = module.exports = function (code, opts) {
|
||||
var whitelist = opts.whitelist;
|
||||
if (whitelist.length && !_.contains(whitelist, name)) return;
|
||||
|
||||
transform._runTransformer(transformer, tree, opts);
|
||||
transform._runTransformer(transformer, tree, opts, generateUid);
|
||||
});
|
||||
|
||||
var genOpts = {
|
||||
@@ -64,14 +66,14 @@ var transform = module.exports = function (code, opts) {
|
||||
}
|
||||
};
|
||||
|
||||
transform._runTransformer = function (transformer, tree, opts) {
|
||||
transform._runTransformer = function (transformer, tree, opts, generateUid) {
|
||||
if (transformer.Program) transformer.Program(tree, opts);
|
||||
|
||||
traverse.replace(tree, function (node, parent) {
|
||||
var fn = transformer[node.type] || transformer.all;
|
||||
if (!fn) return;
|
||||
|
||||
return fn(node, parent, opts);
|
||||
return fn(node, parent, opts, generateUid);
|
||||
});
|
||||
};
|
||||
|
||||
@@ -109,5 +111,6 @@ transform.transformers = {
|
||||
generators: require("./transformers/generators"),
|
||||
blockBinding: require("./transformers/block-binding"),
|
||||
modules: require("./transformers/modules"),
|
||||
restParameters: require("./transformers/rest-parameters")
|
||||
restParameters: require("./transformers/rest-parameters"),
|
||||
iterators: require("./transformers/iterators")
|
||||
};
|
||||
|
||||
@@ -3,6 +3,8 @@ var util = require("../util");
|
||||
|
||||
exports.ArrowFunctionExpression = function (node) {
|
||||
var body = node.body;
|
||||
|
||||
// expression body
|
||||
if (body.type !== "BlockStatement") {
|
||||
body = {
|
||||
type: "BlockStatement",
|
||||
|
||||
@@ -35,6 +35,7 @@ exports.BlockStatement = function (node, parent) {
|
||||
node.body = buildNode(node.body);
|
||||
};
|
||||
|
||||
exports.ForOfStatement =
|
||||
exports.ForInStatement = function (node) {
|
||||
if (isLet(node.left)) return buildNode(node);
|
||||
};
|
||||
|
||||
@@ -5,6 +5,7 @@ var _ = require("lodash");
|
||||
exports.Program =
|
||||
exports.BlockStatement =
|
||||
exports.ForInStatement =
|
||||
exports.ForOfStatement =
|
||||
exports.ForStatement = function (node) {
|
||||
var constants = [];
|
||||
|
||||
|
||||
20
lib/6to5/transformers/iterators.js
Normal file
20
lib/6to5/transformers/iterators.js
Normal file
@@ -0,0 +1,20 @@
|
||||
var util = require("../util");
|
||||
|
||||
exports.ForOfStatement = function (node, parent, opts, generateUid) {
|
||||
var node2 = util.template("for-of", {
|
||||
ITERATOR_KEY: generateUid("iterator"),
|
||||
STEP_KEY: generateUid("step"),
|
||||
|
||||
KEY: node.left.declarations[0].id,
|
||||
OBJECT: node.right
|
||||
});
|
||||
|
||||
var block = node2.body;
|
||||
|
||||
var declar = block.body[0];
|
||||
declar.kind = node.left.kind;
|
||||
|
||||
block.body = block.body.concat(node.body.body);
|
||||
|
||||
return node2;
|
||||
};
|
||||
@@ -47,6 +47,19 @@ exports.canCompile = function (filename) {
|
||||
return path.extname(filename) === ".js";
|
||||
};
|
||||
|
||||
exports.buildUidGenerator = function () {
|
||||
var ids = {};
|
||||
|
||||
return function (name) {
|
||||
var i = ids[name] || 0;
|
||||
|
||||
var id = "_" + name;
|
||||
if (i > 0) id += i;
|
||||
ids[name] = i + 1;
|
||||
return id;
|
||||
};
|
||||
};
|
||||
|
||||
exports.sourceMapToComment = function (map) {
|
||||
var json = JSON.stringify(map);
|
||||
var base64 = new Buffer(json).toString("base64");
|
||||
|
||||
Reference in New Issue
Block a user