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.
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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();
Original file line number Diff line number Diff line change
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.

Original file line number Diff line number Diff line change
@@ -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);
Original file line number Diff line number Diff line change
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"
});
Original file line number Diff line number Diff line change
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
});
Original file line number Diff line number Diff line change
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();
Original file line number Diff line number Diff line change
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.

Original file line number Diff line number Diff line change
@@ -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);
Original file line number Diff line number Diff line change
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"
});
Original file line number Diff line number Diff line change
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
});
Original file line number Diff line number Diff line change
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();
Original file line number Diff line number Diff line change
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.

Original file line number Diff line number Diff line change
@@ -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.