Skip to content

Commit

Permalink
Ensure static private method init run before static property (#12918)
Browse files Browse the repository at this point in the history
  • Loading branch information
JLHwung committed Mar 3, 2021
1 parent bdb207c commit ac758f7
Show file tree
Hide file tree
Showing 21 changed files with 163 additions and 143 deletions.
Expand Up @@ -806,7 +806,7 @@ export function buildFieldsInitNodes(
break;
case isStatic && isPrivate && isMethod && !privateFieldsAsProperties:
needsClassRef = true;
staticNodes.push(
staticNodes.unshift(
buildPrivateStaticFieldInitSpec(prop, privateNamesMap),
);
staticNodes.unshift(
Expand All @@ -819,7 +819,7 @@ export function buildFieldsInitNodes(
break;
case isStatic && isPrivate && isMethod && privateFieldsAsProperties:
needsClassRef = true;
staticNodes.push(
staticNodes.unshift(
buildPrivateStaticMethodInitLoose(
t.cloneNode(ref),
prop,
Expand Down
Expand Up @@ -24,14 +24,15 @@ var _getB2 = function _getB2() {
return this.b;
};

Object.defineProperty(B, _getB, {
value: _getB2
});

var _getA2 = function _getA2() {
return A.a;
};

Object.defineProperty(B, _getA, {
value: _getA2
});
Object.defineProperty(B, _getB, {
value: _getB2
});
var [getA, getB] = B.extract();
Expand Up @@ -24,14 +24,15 @@ var _getB2 = function _getB2() {
return this.b;
};

Object.defineProperty(B, _getB, {
value: _getB2
});

var _getA2 = function _getA2() {
return babelHelpers.get(babelHelpers.getPrototypeOf(B), "a", this);
};

Object.defineProperty(B, _getA, {
value: _getA2
});
Object.defineProperty(B, _getB, {
value: _getB2
});
const [getA, getB] = B.extract();

This file was deleted.

@@ -0,0 +1,35 @@
expect((() => {
let r;
class C {
static #_ = new C;
static get #p() { return 0 };
constructor() {
r = C.#p;
}
}
return r;
})()).toBe(0);

expect((() => {
let r;
class C {
static #_ = new C;
static set #p(v) { r = v; };
constructor() {
C.#p = 0;
}
}
return r;
})()).toBe(0);

expect((() => {
let r;
class C {
static #_ = new C;
static set #p(v) { r = v; };
constructor() {
for (C.#p of [0]);
}
}
return r;
})()).toBe(0);
Expand Up @@ -21,11 +21,11 @@ var _get_privateStaticFieldValue = function () {
return babelHelpers.classPrivateFieldLooseBase(Cl, _PRIVATE_STATIC_FIELD)[_PRIVATE_STATIC_FIELD];
};

Object.defineProperty(Cl, _PRIVATE_STATIC_FIELD, {
writable: true,
value: "top secret string"
});
Object.defineProperty(Cl, _privateStaticFieldValue, {
get: _get_privateStaticFieldValue,
set: _set_privateStaticFieldValue
});
Object.defineProperty(Cl, _PRIVATE_STATIC_FIELD, {
writable: true,
value: "top secret string"
});
Expand Up @@ -13,11 +13,11 @@ var _set_privateStaticFieldValue = function (newValue) {
babelHelpers.classPrivateFieldLooseBase(Cl, _PRIVATE_STATIC_FIELD)[_PRIVATE_STATIC_FIELD] = newValue;
};

Object.defineProperty(Cl, _PRIVATE_STATIC_FIELD, {
writable: true,
value: 0
});
Object.defineProperty(Cl, _privateStaticFieldValue, {
get: void 0,
set: _set_privateStaticFieldValue
});
Object.defineProperty(Cl, _PRIVATE_STATIC_FIELD, {
writable: true,
value: 0
});
Expand Up @@ -14,12 +14,12 @@ var _get_privateFieldValue = function () {
return babelHelpers.classPrivateFieldLooseBase(this, _privateField)[_privateField];
};

Object.defineProperty(Cl, _privateField, {
writable: true,
value: 0
});
Object.defineProperty(Cl, _privateFieldValue, {
get: _get_privateFieldValue,
set: void 0
});
Object.defineProperty(Cl, _privateField, {
writable: true,
value: 0
});
var cl = new Cl();
Expand Up @@ -42,12 +42,12 @@ var _get_privateFieldValue = function () {
return babelHelpers.classPrivateFieldLooseBase(Cl, _privateField)[_privateField];
};

Object.defineProperty(Cl, _privateFieldValue, {
get: _get_privateFieldValue,
set: _set_privateFieldValue
});
Object.defineProperty(Cl, _privateField, {
writable: true,
value: "top secret string"
});
Cl.publicField = "not secret string";
Object.defineProperty(Cl, _privateFieldValue, {
get: _get_privateFieldValue,
set: _set_privateFieldValue
});

This file was deleted.

@@ -0,0 +1,35 @@
expect((() => {
let r;
class C {
static #_ = new C;
static get #p() { return 0 };
constructor() {
r = C.#p;
}
}
return r;
})()).toBe(0);

expect((() => {
let r;
class C {
static #_ = new C;
static set #p(v) { r = v; };
constructor() {
C.#p = 0;
}
}
return r;
})()).toBe(0);

expect((() => {
let r;
class C {
static #_ = new C;
static set #p(v) { r = v; };
constructor() {
for (C.#p of [0]);
}
}
return r;
})()).toBe(0);
Expand Up @@ -21,11 +21,11 @@ var _get_privateStaticFieldValue = function () {
return babelHelpers.classPrivateFieldLooseBase(Cl, _PRIVATE_STATIC_FIELD)[_PRIVATE_STATIC_FIELD];
};

Object.defineProperty(Cl, _PRIVATE_STATIC_FIELD, {
writable: true,
value: "top secret string"
});
Object.defineProperty(Cl, _privateStaticFieldValue, {
get: _get_privateStaticFieldValue,
set: _set_privateStaticFieldValue
});
Object.defineProperty(Cl, _PRIVATE_STATIC_FIELD, {
writable: true,
value: "top secret string"
});
Expand Up @@ -13,11 +13,11 @@ var _set_privateStaticFieldValue = function (newValue) {
babelHelpers.classPrivateFieldLooseBase(Cl, _PRIVATE_STATIC_FIELD)[_PRIVATE_STATIC_FIELD] = newValue;
};

Object.defineProperty(Cl, _PRIVATE_STATIC_FIELD, {
writable: true,
value: 0
});
Object.defineProperty(Cl, _privateStaticFieldValue, {
get: void 0,
set: _set_privateStaticFieldValue
});
Object.defineProperty(Cl, _PRIVATE_STATIC_FIELD, {
writable: true,
value: 0
});
Expand Up @@ -14,12 +14,12 @@ var _get_privateFieldValue = function () {
return babelHelpers.classPrivateFieldLooseBase(this, _privateField)[_privateField];
};

Object.defineProperty(Cl, _privateField, {
writable: true,
value: 0
});
Object.defineProperty(Cl, _privateFieldValue, {
get: _get_privateFieldValue,
set: void 0
});
Object.defineProperty(Cl, _privateField, {
writable: true,
value: 0
});
const cl = new Cl();
Expand Up @@ -42,12 +42,12 @@ var _get_privateFieldValue = function () {
return babelHelpers.classPrivateFieldLooseBase(Cl, _privateField)[_privateField];
};

Object.defineProperty(Cl, _privateFieldValue, {
get: _get_privateFieldValue,
set: _set_privateFieldValue
});
Object.defineProperty(Cl, _privateField, {
writable: true,
value: "top secret string"
});
babelHelpers.defineProperty(Cl, "publicField", "not secret string");
Object.defineProperty(Cl, _privateFieldValue, {
get: _get_privateFieldValue,
set: _set_privateFieldValue
});

This file was deleted.

@@ -0,0 +1,35 @@
expect((() => {
let r;
class C {
static #_ = new C;
static get #p() { return 0 };
constructor() {
r = C.#p;
}
}
return r;
})()).toBe(0);

expect((() => {
let r;
class C {
static #_ = new C;
static set #p(v) { r = v; };
constructor() {
C.#p = 0;
}
}
return r;
})()).toBe(0);

expect((() => {
let r;
class C {
static #_ = new C;
static set #p(v) { r = v; };
constructor() {
for (C.#p of [0]);
}
}
return r;
})()).toBe(0);

0 comments on commit ac758f7

Please sign in to comment.