From 925b6448e0771eeb8b36cf096265f9f2be9a4025 Mon Sep 17 00:00:00 2001 From: Sasha Aickin Date: Wed, 26 Apr 2017 19:59:39 -0700 Subject: [PATCH] Fix operator processing in object super. --- packages/babel-helper-replace-supers/src/index.js | 4 ++-- .../object-super/super-exponentiation/actual.js | 5 +++++ .../object-super/super-exponentiation/expected.js | 13 +++++++++++++ .../object-super/super-exponentiation/options.json | 3 +++ 4 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 packages/babel-plugin-transform-es2015-object-super/test/fixtures/object-super/super-exponentiation/actual.js create mode 100644 packages/babel-plugin-transform-es2015-object-super/test/fixtures/object-super/super-exponentiation/expected.js create mode 100644 packages/babel-plugin-transform-es2015-object-super/test/fixtures/object-super/super-exponentiation/options.json diff --git a/packages/babel-helper-replace-supers/src/index.js b/packages/babel-helper-replace-supers/src/index.js index 2a88d5e29690..47c47522d843 100644 --- a/packages/babel-helper-replace-supers/src/index.js +++ b/packages/babel-helper-replace-supers/src/index.js @@ -227,7 +227,7 @@ export default class ReplaceSupers { t.variableDeclarator(ref, node.left), ]), t.expressionStatement(t.assignmentExpression("=", node.left, - t.binaryExpression(node.operator[0], ref, node.right))), + t.binaryExpression(node.operator.slice(0, -1), ref, node.right))), ]; } } @@ -263,7 +263,7 @@ export default class ReplaceSupers { property = node.property; computed = node.computed; } else if (t.isUpdateExpression(node) && isMemberExpressionSuper(node.argument)) { - const binary = t.binaryExpression(node.operator[0], node.argument, t.numericLiteral(1)); + const binary = t.assignmentExpression(node.operator[0] + "=", node.argument, t.numericLiteral(1)); if (node.prefix) { // ++super.foo; // to diff --git a/packages/babel-plugin-transform-es2015-object-super/test/fixtures/object-super/super-exponentiation/actual.js b/packages/babel-plugin-transform-es2015-object-super/test/fixtures/object-super/super-exponentiation/actual.js new file mode 100644 index 000000000000..d65ece85897c --- /dev/null +++ b/packages/babel-plugin-transform-es2015-object-super/test/fixtures/object-super/super-exponentiation/actual.js @@ -0,0 +1,5 @@ +foo = { + bar() { + return super.baz **= 12; + } +} diff --git a/packages/babel-plugin-transform-es2015-object-super/test/fixtures/object-super/super-exponentiation/expected.js b/packages/babel-plugin-transform-es2015-object-super/test/fixtures/object-super/super-exponentiation/expected.js new file mode 100644 index 000000000000..4511a17d1c7d --- /dev/null +++ b/packages/babel-plugin-transform-es2015-object-super/test/fixtures/object-super/super-exponentiation/expected.js @@ -0,0 +1,13 @@ +var _obj; + +var _set = function set(object, property, value, receiver) { var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent !== null) { set(parent, property, value, receiver); } } else if ("value" in desc && desc.writable) { desc.value = value; } else { var setter = desc.set; if (setter !== undefined) { setter.call(receiver, value); } } return value; }; + +var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; + +foo = _obj = { + bar: function () { + var _ref; + + return _ref = _get(_obj.__proto__ || Object.getPrototypeOf(_obj), "baz", this), _set(_obj.__proto__ || Object.getPrototypeOf(_obj), "baz", _ref ** 12, this); + } +}; \ No newline at end of file diff --git a/packages/babel-plugin-transform-es2015-object-super/test/fixtures/object-super/super-exponentiation/options.json b/packages/babel-plugin-transform-es2015-object-super/test/fixtures/object-super/super-exponentiation/options.json new file mode 100644 index 000000000000..4441be11e3f9 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-object-super/test/fixtures/object-super/super-exponentiation/options.json @@ -0,0 +1,3 @@ +{ + "plugins": ["transform-es2015-object-super"] +}