Skip to content

Commit

Permalink
Mark WeakMaps of private fields as pure
Browse files Browse the repository at this point in the history
  • Loading branch information
nicolo-ribaudo committed Apr 22, 2021
1 parent f63d73c commit 5c6fb6b
Show file tree
Hide file tree
Showing 224 changed files with 347 additions and 341 deletions.
Expand Up @@ -18,6 +18,7 @@
"babel-plugin"
],
"dependencies": {
"@babel/helper-annotate-as-pure": "workspace:^7.12.13",
"@babel/helper-function-name": "workspace:^7.12.13",
"@babel/helper-member-expression-to-functions": "workspace:^7.13.0",
"@babel/helper-optimise-call-expression": "workspace:^7.12.13",
Expand Down
28 changes: 16 additions & 12 deletions packages/babel-helper-create-class-features-plugin/src/fields.js
Expand Up @@ -4,6 +4,7 @@ import ReplaceSupers, {
} from "@babel/helper-replace-supers";
import memberExpressionToFunctions from "@babel/helper-member-expression-to-functions";
import optimiseCall from "@babel/helper-optimise-call-expression";
import annotateAsPure from "@babel/helper-annotate-as-pure";

import * as ts from "./typescript";

Expand Down Expand Up @@ -53,20 +54,23 @@ export function buildPrivateNamesNodes(
const { static: isStatic, method: isMethod, getId, setId } = value;
const isAccessor = getId || setId;
const id = t.cloneNode(value.id);

let init;

if (privateFieldsAsProperties) {
initNodes.push(
template.statement.ast`
var ${id} = ${state.addHelper("classPrivateFieldLooseKey")}("${name}")
`,
);
} else if (isMethod && !isStatic) {
if (isAccessor) {
initNodes.push(template.statement.ast`var ${id} = new WeakMap();`);
} else {
initNodes.push(template.statement.ast`var ${id} = new WeakSet();`);
}
init = t.callExpression(state.addHelper("classPrivateFieldLooseKey"), [
t.stringLiteral(name),
]);
} else if (!isStatic) {
initNodes.push(template.statement.ast`var ${id} = new WeakMap();`);
init = t.newExpression(
t.identifier(!isMethod || isAccessor ? "WeakMap" : "WeakSet"),
[],
);
}

if (init) {
annotateAsPure(init);
initNodes.push(template.statement.ast`var ${id} = ${init}`);
}
}

Expand Down
@@ -1,4 +1,4 @@
var _privateMethod = new WeakSet();
var _privateMethod = /*#__PURE__*/new WeakSet();

class X {
constructor() {
Expand Down
@@ -1,4 +1,4 @@
var _privateMethod = babelHelpers.classPrivateFieldLooseKey("privateMethod");
var _privateMethod = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("privateMethod");

class X {
constructor() {
Expand Down
@@ -1,4 +1,4 @@
var _foo = new WeakSet();
var _foo = /*#__PURE__*/new WeakSet();

class A extends B {
constructor(...args) {
Expand Down
@@ -1,4 +1,4 @@
var _m = new WeakMap();
var _m = /*#__PURE__*/new WeakMap();

class C {
constructor() {
Expand Down
@@ -1,4 +1,4 @@
var _m = new WeakMap();
var _m = /*#__PURE__*/new WeakMap();

class C {
constructor() {
Expand Down
@@ -1,4 +1,4 @@
var _g = new WeakSet();
var _g = /*#__PURE__*/new WeakSet();

class C {
constructor() {
Expand Down
@@ -1,4 +1,4 @@
var _foo = babelHelpers.classPrivateFieldLooseKey("foo");
var _foo = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("foo");

var Foo = /*#__PURE__*/function () {
"use strict";
Expand Down
@@ -1,4 +1,4 @@
var _foo = babelHelpers.classPrivateFieldLooseKey("foo");
var _foo = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("foo");

var Foo = /*#__PURE__*/function () {
"use strict";
Expand Down
@@ -1,6 +1,6 @@
var _x = babelHelpers.classPrivateFieldLooseKey("x");
var _x = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("x");

var _y = babelHelpers.classPrivateFieldLooseKey("y");
var _y = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("y");

var Point = /*#__PURE__*/function () {
"use strict";
Expand Down
@@ -1,6 +1,6 @@
var foo = "bar";

var _bar = babelHelpers.classPrivateFieldLooseKey("bar");
var _bar = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("bar");

var Foo = function Foo() {
"use strict";
Expand Down
@@ -1,4 +1,4 @@
var _x = babelHelpers.classPrivateFieldLooseKey("x");
var _x = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("x");

var C = function C() {
"use strict";
Expand Down
@@ -1,4 +1,4 @@
var _bar = babelHelpers.classPrivateFieldLooseKey("bar");
var _bar = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("bar");

var Foo = /*#__PURE__*/function (_Bar) {
"use strict";
Expand Down
@@ -1,4 +1,4 @@
var _prop = babelHelpers.classPrivateFieldLooseKey("prop");
var _prop = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("prop");

var Foo = function Foo() {
"use strict";
Expand All @@ -10,7 +10,7 @@ var Foo = function Foo() {
});
};

var _prop2 = babelHelpers.classPrivateFieldLooseKey("prop");
var _prop2 = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("prop");

var Bar = /*#__PURE__*/function (_Foo) {
"use strict";
Expand Down
@@ -1,4 +1,4 @@
var _client = babelHelpers.classPrivateFieldLooseKey("client");
var _client = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("client");

var Foo = function Foo(props) {
"use strict";
Expand Down
@@ -1,4 +1,4 @@
var _client = babelHelpers.classPrivateFieldLooseKey("client");
var _client = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("client");

var Foo = function Foo(props) {
"use strict";
Expand Down
@@ -1,4 +1,4 @@
var _client = babelHelpers.classPrivateFieldLooseKey("client");
var _client = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("client");

var Foo = function Foo(props) {
"use strict";
Expand Down
@@ -1,4 +1,4 @@
var _client = babelHelpers.classPrivateFieldLooseKey("client");
var _client = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("client");

var Foo = function Foo(props) {
"use strict";
Expand Down
@@ -1,4 +1,4 @@
var _client = babelHelpers.classPrivateFieldLooseKey("client");
var _client = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("client");

var Foo = function Foo(props) {
"use strict";
Expand Down
@@ -1,4 +1,4 @@
var _client = babelHelpers.classPrivateFieldLooseKey("client");
var _client = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("client");

var Foo = function Foo(props) {
"use strict";
Expand Down
@@ -1,4 +1,4 @@
var _client = babelHelpers.classPrivateFieldLooseKey("client");
var _client = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("client");

var Foo = function Foo(props) {
"use strict";
Expand Down
@@ -1,4 +1,4 @@
var _client = babelHelpers.classPrivateFieldLooseKey("client");
var _client = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("client");

var Foo = function Foo(props) {
"use strict";
Expand Down
@@ -1,4 +1,4 @@
var _client = babelHelpers.classPrivateFieldLooseKey("client");
var _client = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("client");

var Foo = function Foo(props) {
"use strict";
Expand Down
@@ -1,4 +1,4 @@
var _client = babelHelpers.classPrivateFieldLooseKey("client");
var _client = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("client");

var Foo = function Foo(props) {
"use strict";
Expand Down
@@ -1,8 +1,8 @@
var foo = "bar";

var _bar = babelHelpers.classPrivateFieldLooseKey("bar");
var _bar = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("bar");

var _baz = babelHelpers.classPrivateFieldLooseKey("baz");
var _baz = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("baz");

var Foo = function Foo(_foo) {
"use strict";
Expand Down
@@ -1,4 +1,4 @@
var _scopedFunctionWithThis = babelHelpers.classPrivateFieldLooseKey("scopedFunctionWithThis");
var _scopedFunctionWithThis = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("scopedFunctionWithThis");

var Child = /*#__PURE__*/function (_Parent) {
"use strict";
Expand Down
@@ -1,4 +1,4 @@
var _bar = babelHelpers.classPrivateFieldLooseKey("bar");
var _bar = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("bar");

var Foo = function Foo() {
"use strict";
Expand Down
@@ -1,4 +1,4 @@
var _bar = babelHelpers.classPrivateFieldLooseKey("bar");
var _bar = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("bar");

var Foo = function Foo() {
"use strict";
Expand Down
@@ -1,8 +1,8 @@
var _nullish = babelHelpers.classPrivateFieldLooseKey("nullish");
var _nullish = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("nullish");

var _and = babelHelpers.classPrivateFieldLooseKey("and");
var _and = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("and");

var _or = babelHelpers.classPrivateFieldLooseKey("or");
var _or = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("or");

class Foo {
constructor() {
Expand Down
@@ -1,6 +1,6 @@
var _x = babelHelpers.classPrivateFieldLooseKey("x");
var _x = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("x");

var _y = babelHelpers.classPrivateFieldLooseKey("y");
var _y = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("y");

var Foo = function Foo() {
"use strict";
Expand Down
@@ -1,6 +1,6 @@
var _foo = babelHelpers.classPrivateFieldLooseKey("foo");
var _foo = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("foo");

var _bar = babelHelpers.classPrivateFieldLooseKey("bar");
var _bar = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("bar");

class Foo {
constructor() {
Expand Down
@@ -1,4 +1,4 @@
var _foo = babelHelpers.classPrivateFieldLooseKey("foo");
var _foo = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("foo");

var Foo = /*#__PURE__*/function () {
"use strict";
Expand All @@ -16,7 +16,7 @@ var Foo = /*#__PURE__*/function () {
value: function test() {
var _babelHelpers$classPr;

var _foo2 = babelHelpers.classPrivateFieldLooseKey("foo");
var _foo2 = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("foo");

_babelHelpers$classPr = babelHelpers.classPrivateFieldLooseBase(this, _foo2)[_foo2];

Expand Down
@@ -1,4 +1,4 @@
var _foo = babelHelpers.classPrivateFieldLooseKey("foo");
var _foo = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("foo");

var Foo = /*#__PURE__*/function () {
"use strict";
Expand Down
@@ -1,4 +1,4 @@
var _foo = babelHelpers.classPrivateFieldLooseKey("foo");
var _foo = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("foo");

var Foo = /*#__PURE__*/function () {
"use strict";
Expand All @@ -18,7 +18,7 @@ var Foo = /*#__PURE__*/function () {

var _babelHelpers$classPr;

var _foo2 = babelHelpers.classPrivateFieldLooseKey("foo");
var _foo2 = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("foo");

var Nested = /*#__PURE__*/function (_ref) {
babelHelpers.inherits(Nested, _ref);
Expand All @@ -38,7 +38,7 @@ var Foo = /*#__PURE__*/function () {
}

return Nested;
}((_foo3 = babelHelpers.classPrivateFieldLooseKey("foo"), _babelHelpers$classPr = babelHelpers.classPrivateFieldLooseBase(this, _foo3)[_foo3], /*#__PURE__*/function () {
}((_foo3 = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("foo"), _babelHelpers$classPr = babelHelpers.classPrivateFieldLooseBase(this, _foo3)[_foo3], /*#__PURE__*/function () {
function _class2() {
babelHelpers.classCallCheck(this, _class2);
Object.defineProperty(this, _foo3, {
Expand Down
@@ -1,4 +1,4 @@
var _foo = babelHelpers.classPrivateFieldLooseKey("foo");
var _foo = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("foo");

var Foo = /*#__PURE__*/function () {
"use strict";
Expand All @@ -16,7 +16,7 @@ var Foo = /*#__PURE__*/function () {
value: function test() {
var _babelHelpers$classPr;

var _foo2 = babelHelpers.classPrivateFieldLooseKey("foo");
var _foo2 = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("foo");

var Nested = /*#__PURE__*/function (_ref) {
babelHelpers.inherits(Nested, _ref);
Expand Down
@@ -1,6 +1,6 @@
var _foo = babelHelpers.classPrivateFieldLooseKey("foo");
var _foo = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("foo");

var _bar = babelHelpers.classPrivateFieldLooseKey("bar");
var _bar = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("bar");

var Foo = /*#__PURE__*/function () {
"use strict";
Expand All @@ -20,7 +20,7 @@ var Foo = /*#__PURE__*/function () {
babelHelpers.createClass(Foo, [{
key: "test",
value: function test() {
var _bar2 = babelHelpers.classPrivateFieldLooseKey("bar");
var _bar2 = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("bar");

var Nested = /*#__PURE__*/function () {
function Nested() {
Expand Down
@@ -1,4 +1,4 @@
var _foo = babelHelpers.classPrivateFieldLooseKey("foo");
var _foo = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("foo");

var Foo = /*#__PURE__*/function () {
"use strict";
Expand All @@ -14,7 +14,7 @@ var Foo = /*#__PURE__*/function () {
babelHelpers.createClass(Foo, [{
key: "test",
value: function test() {
var _foo2 = babelHelpers.classPrivateFieldLooseKey("foo");
var _foo2 = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("foo");

var Nested = /*#__PURE__*/function () {
function Nested() {
Expand Down
@@ -1,4 +1,4 @@
var _foo = babelHelpers.classPrivateFieldLooseKey("foo");
var _foo = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("foo");

var Foo = /*#__PURE__*/function () {
"use strict";
Expand Down
@@ -1,7 +1,7 @@
export default (param => {
var _class, _props, _temp;

return _temp = (_props = babelHelpers.classPrivateFieldLooseKey("props"), _class = class App {
return _temp = (_props = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("props"), _class = class App {
getParam() {
return param;
}
Expand Down
@@ -1,8 +1,8 @@
var _x = babelHelpers.classPrivateFieldLooseKey("x");
var _x = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("x");

var _m = babelHelpers.classPrivateFieldLooseKey("m");
var _m = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("m");

var _self = babelHelpers.classPrivateFieldLooseKey("self");
var _self = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("self");

class Foo {
static getSelf() {
Expand Down
@@ -1,8 +1,8 @@
var _x = babelHelpers.classPrivateFieldLooseKey("x");
var _x = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("x");

var _m = babelHelpers.classPrivateFieldLooseKey("m");
var _m = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("m");

var _self = babelHelpers.classPrivateFieldLooseKey("self");
var _self = /*#__PURE__*/babelHelpers.classPrivateFieldLooseKey("self");

class Foo {
static getSelf() {
Expand Down

0 comments on commit 5c6fb6b

Please sign in to comment.