From 498297ce6b53e548b932ad762f166c86bb6b2b4c Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Sat, 20 Jun 2015 21:48:42 +0100 Subject: [PATCH] check for invalid binding identifiers when generating inferred method names - fixes #1794 --- src/babel/transformation/helpers/name-method.js | 5 ++--- src/babel/types/converters.js | 11 +++++++++++ .../transformation/spec.function-name/eval/actual.js | 5 +++++ .../spec.function-name/eval/expected.js | 7 +++++++ 4 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 test/core/fixtures/transformation/spec.function-name/eval/actual.js create mode 100644 test/core/fixtures/transformation/spec.function-name/eval/expected.js diff --git a/src/babel/transformation/helpers/name-method.js b/src/babel/transformation/helpers/name-method.js index 680fd26fd7..78174301c0 100644 --- a/src/babel/transformation/helpers/name-method.js +++ b/src/babel/transformation/helpers/name-method.js @@ -111,8 +111,7 @@ export function property(node, file, scope) { var key = t.toComputedKey(node, node.key); if (!t.isLiteral(key)) return; // we can't set a function id with this - var name = t.toIdentifier(key.value); - if (name === "eval" || name === "arguments") name = "_" + name; + var name = t.toBindingIdentifierName(key.value); var id = t.identifier(name); var method = node.value; @@ -153,7 +152,7 @@ export function bare(node, parent, scope) { return; } - name = t.toIdentifier(name); + name = t.toBindingIdentifierName(name); id = t.identifier(name); var state = visit(node, name, scope); diff --git a/src/babel/types/converters.js b/src/babel/types/converters.js index 2932e49158..1130c9078d 100644 --- a/src/babel/types/converters.js +++ b/src/babel/types/converters.js @@ -154,6 +154,17 @@ export function toIdentifier(name: string): string { return name || "_"; } +/* + * Description + */ + +export function toBindingIdentifierName(name) { + name = toIdentifier(name); + if (name === "eval" || name === "arguments") name = "_" + name; + return name; +} + + /** * Description * diff --git a/test/core/fixtures/transformation/spec.function-name/eval/actual.js b/test/core/fixtures/transformation/spec.function-name/eval/actual.js new file mode 100644 index 0000000000..81c171ff4b --- /dev/null +++ b/test/core/fixtures/transformation/spec.function-name/eval/actual.js @@ -0,0 +1,5 @@ +var a = { + eval(){ + return eval; + } +}; diff --git a/test/core/fixtures/transformation/spec.function-name/eval/expected.js b/test/core/fixtures/transformation/spec.function-name/eval/expected.js new file mode 100644 index 0000000000..20d5311d9b --- /dev/null +++ b/test/core/fixtures/transformation/spec.function-name/eval/expected.js @@ -0,0 +1,7 @@ +"use strict"; + +var a = { + eval: function _eval() { + return eval; + } +};