From 06c3c4eb72323fe79138574c4eaa2770da4f4310 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Mon, 31 Oct 2022 19:40:55 +0100 Subject: [PATCH] Do not mark `in` and `instanceof` as constant --- .../test/fixtures/regression/15098/exec.js | 7 +++++++ .../test/fixtures/regression/15098/input.js | 4 ++++ .../test/fixtures/regression/15098/options.json | 3 +++ .../test/fixtures/regression/15098/output.js | 9 +++++++++ packages/babel-traverse/src/path/introspection.ts | 3 +++ 5 files changed, 26 insertions(+) create mode 100644 packages/babel-plugin-proposal-class-properties/test/fixtures/regression/15098/exec.js create mode 100644 packages/babel-plugin-proposal-class-properties/test/fixtures/regression/15098/input.js create mode 100644 packages/babel-plugin-proposal-class-properties/test/fixtures/regression/15098/options.json create mode 100644 packages/babel-plugin-proposal-class-properties/test/fixtures/regression/15098/output.js diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/regression/15098/exec.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/regression/15098/exec.js new file mode 100644 index 000000000000..1c84161a55af --- /dev/null +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/regression/15098/exec.js @@ -0,0 +1,7 @@ +expect(() => { + class X { [0 in 0]; } +}).toThrow(); + +expect(() => { + class X { [0 instanceof 0]; } +}).toThrow(); diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/regression/15098/input.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/regression/15098/input.js new file mode 100644 index 000000000000..33d98a95318d --- /dev/null +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/regression/15098/input.js @@ -0,0 +1,4 @@ +class X { + [ 0 in 0 ]; + [ 0 instanceof 0 ]; +} \ No newline at end of file diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/regression/15098/options.json b/packages/babel-plugin-proposal-class-properties/test/fixtures/regression/15098/options.json new file mode 100644 index 000000000000..19ed5174f545 --- /dev/null +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/regression/15098/options.json @@ -0,0 +1,3 @@ +{ + "plugins": ["proposal-class-properties"] +} diff --git a/packages/babel-plugin-proposal-class-properties/test/fixtures/regression/15098/output.js b/packages/babel-plugin-proposal-class-properties/test/fixtures/regression/15098/output.js new file mode 100644 index 000000000000..e6a60648b3fe --- /dev/null +++ b/packages/babel-plugin-proposal-class-properties/test/fixtures/regression/15098/output.js @@ -0,0 +1,9 @@ +let _ref, _ref2; +_ref = 0 in 0; +_ref2 = 0 instanceof 0; +class X { + constructor() { + babelHelpers.defineProperty(this, _ref, void 0); + babelHelpers.defineProperty(this, _ref2, void 0); + } +} diff --git a/packages/babel-traverse/src/path/introspection.ts b/packages/babel-traverse/src/path/introspection.ts index f4c8e2db9153..97b65d935741 100644 --- a/packages/babel-traverse/src/path/introspection.ts +++ b/packages/babel-traverse/src/path/introspection.ts @@ -634,7 +634,10 @@ export function isConstantExpression(this: NodePath): boolean { } if (this.isBinaryExpression()) { + const { operator } = this.node; return ( + operator !== "in" && + operator !== "instanceof" && this.get("left").isConstantExpression() && this.get("right").isConstantExpression() );