From 8c7a81d31702c2aaf3dcd64c9f57c0359b6ab3b7 Mon Sep 17 00:00:00 2001 From: Nook Scheel Date: Sun, 29 Nov 2015 21:25:09 +0300 Subject: [PATCH 1/3] Optimizations for asyncToGenerator Never use a bind! Never use arguments as an array! --- packages/babel-helpers/src/helpers.js | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/packages/babel-helpers/src/helpers.js b/packages/babel-helpers/src/helpers.js index 3774425b70..d62c7e215d 100644 --- a/packages/babel-helpers/src/helpers.js +++ b/packages/babel-helpers/src/helpers.js @@ -58,12 +58,12 @@ helpers.jsx = template(` helpers.asyncToGenerator = template(` (function (fn) { return function () { - var gen = fn.apply(this, arguments); - + var args = new Array(arguments.length); + for(var i = 0; i < args.length; ++i) { + args[i] = arguments[i]; + } + var gen = fn.apply(this, args); return new Promise(function (resolve, reject) { - var callNext = step.bind(null, "next"); - var callThrow = step.bind(null, "throw"); - function step(key, arg) { try { var info = gen[key](arg); @@ -76,11 +76,15 @@ helpers.asyncToGenerator = template(` if (info.done) { resolve(value); } else { - Promise.resolve(value).then(callNext, callThrow); + Promise.resolve(value).then(function (value) { + step.call(null, "next", value); + }, function (err) { + step.call(null, "throw", err); + }); } } - callNext(); + step.call(null, "next"); }); }; }) From b2ff128e9424d729edb96c484599e3cfd6f84b2d Mon Sep 17 00:00:00 2001 From: Nook Scheel Date: Sun, 29 Nov 2015 21:28:14 +0300 Subject: [PATCH 2/3] Unnecessary #call --- packages/babel-helpers/src/helpers.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/babel-helpers/src/helpers.js b/packages/babel-helpers/src/helpers.js index d62c7e215d..9a2b1e9f18 100644 --- a/packages/babel-helpers/src/helpers.js +++ b/packages/babel-helpers/src/helpers.js @@ -77,14 +77,14 @@ helpers.asyncToGenerator = template(` resolve(value); } else { Promise.resolve(value).then(function (value) { - step.call(null, "next", value); + step("next", value); }, function (err) { - step.call(null, "throw", err); + step("throw", err); }); } } - step.call(null, "next"); + step("next"); }); }; }) From a81e11c4aeaf2850f8035af2753a3a6f11daa3ec Mon Sep 17 00:00:00 2001 From: Nook Scheel Date: Sun, 29 Nov 2015 21:47:04 +0300 Subject: [PATCH 3/3] Use arguments with #apply --- packages/babel-helpers/src/helpers.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/packages/babel-helpers/src/helpers.js b/packages/babel-helpers/src/helpers.js index 9a2b1e9f18..5031b1eb0f 100644 --- a/packages/babel-helpers/src/helpers.js +++ b/packages/babel-helpers/src/helpers.js @@ -58,11 +58,7 @@ helpers.jsx = template(` helpers.asyncToGenerator = template(` (function (fn) { return function () { - var args = new Array(arguments.length); - for(var i = 0; i < args.length; ++i) { - args[i] = arguments[i]; - } - var gen = fn.apply(this, args); + var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try {