Compare commits

...

4 Commits

Author SHA1 Message Date
Sebastian McKenzie
21dcb6037a v3.0.5 2015-01-28 15:21:38 +11:00
Sebastian McKenzie
d10d96d19a fix unused iife declaration 2015-01-28 15:19:50 +11:00
Sebastian McKenzie
64766eea44 add more reliable iife detection for default parameter independent scope 2015-01-28 15:18:50 +11:00
Sebastian McKenzie
a9e682836b 3.0.4 2015-01-28 14:52:05 +11:00
4 changed files with 28 additions and 10 deletions

View File

@@ -11,6 +11,11 @@
_Note: Gaps between patch versions are faulty/broken releases._
## 3.0.5
* **Internal**
* More reliable default parameter scope.
## 3.0.4
* **Bug Fix**

View File

@@ -1,7 +1,8 @@
"use strict";
var util = require("../../../util");
var t = require("../../../types");
var traverse = require("../../../traverse");
var util = require("../../../util");
var t = require("../../../types");
var hasDefaults = function (node) {
for (var i = 0; i < node.params.length; i++) {
@@ -10,12 +11,20 @@ var hasDefaults = function (node) {
return false;
};
var iifeVisitor = {
enter: function (node, parent, scope, context, state) {
if (t.isReferencedIdentifier(node, parent) && scope.hasOwn(node.name)) {
state.iife = true;
context.stop();
}
}
};
exports.Function = function (node, parent, scope) {
if (!hasDefaults(node)) return;
t.ensureBlock(node);
var iife = false;
var body = [];
var argsIdentifier = t.identifier("arguments");
@@ -23,6 +32,8 @@ exports.Function = function (node, parent, scope) {
var lastNonDefaultParam = 0;
var state = { iife: false, scope: scope };
for (var i = 0; i < node.params.length; i++) {
var param = node.params[i];
@@ -36,10 +47,12 @@ exports.Function = function (node, parent, scope) {
node.params[i] = scope.generateUidIdentifier("x");
// we're accessing a variable that's already defined within this function
var localDeclar = scope.get(left.name, true);
if (localDeclar !== left) {
iife = true;
if (!state.iife) {
if (t.isIdentifier(right) && scope.hasOwn(right.name)) {
state.iife = true;
} else {
traverse(right, iifeVisitor, scope, state);
}
}
var defNode = util.template("default-parameter", {
@@ -55,7 +68,7 @@ exports.Function = function (node, parent, scope) {
// we need to cut off all trailing default parameters
node.params = node.params.slice(0, lastNonDefaultParam);
if (iife) {
if (state.iife) {
var container = t.functionExpression(null, [], node.body, node.generator);
container._aliasFunction = true;

View File

@@ -1,7 +1,7 @@
{
"name": "6to5",
"description": "Turn ES6 code into readable vanilla ES5 with source maps",
"version": "3.0.4",
"version": "3.0.5",
"author": "Sebastian McKenzie <sebmck@gmail.com>",
"homepage": "https://6to5.org/",
"repository": "6to5/6to5",

View File

@@ -1,6 +1,6 @@
{
"name": "6to5-runtime",
"description": "6to5 selfContained runtime",
"version": "3.0.3",
"version": "3.0.4",
"author": "Sebastian McKenzie <sebmck@gmail.com>"
}