Ensure static private method init run before static property (#12918)
This commit is contained in:
parent
bdb207cb75
commit
ac758f7d70
@ -806,7 +806,7 @@ export function buildFieldsInitNodes(
|
|||||||
break;
|
break;
|
||||||
case isStatic && isPrivate && isMethod && !privateFieldsAsProperties:
|
case isStatic && isPrivate && isMethod && !privateFieldsAsProperties:
|
||||||
needsClassRef = true;
|
needsClassRef = true;
|
||||||
staticNodes.push(
|
staticNodes.unshift(
|
||||||
buildPrivateStaticFieldInitSpec(prop, privateNamesMap),
|
buildPrivateStaticFieldInitSpec(prop, privateNamesMap),
|
||||||
);
|
);
|
||||||
staticNodes.unshift(
|
staticNodes.unshift(
|
||||||
@ -819,7 +819,7 @@ export function buildFieldsInitNodes(
|
|||||||
break;
|
break;
|
||||||
case isStatic && isPrivate && isMethod && privateFieldsAsProperties:
|
case isStatic && isPrivate && isMethod && privateFieldsAsProperties:
|
||||||
needsClassRef = true;
|
needsClassRef = true;
|
||||||
staticNodes.push(
|
staticNodes.unshift(
|
||||||
buildPrivateStaticMethodInitLoose(
|
buildPrivateStaticMethodInitLoose(
|
||||||
t.cloneNode(ref),
|
t.cloneNode(ref),
|
||||||
prop,
|
prop,
|
||||||
|
|||||||
@ -24,6 +24,10 @@ var _getB2 = function _getB2() {
|
|||||||
return this.b;
|
return this.b;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Object.defineProperty(B, _getB, {
|
||||||
|
value: _getB2
|
||||||
|
});
|
||||||
|
|
||||||
var _getA2 = function _getA2() {
|
var _getA2 = function _getA2() {
|
||||||
return A.a;
|
return A.a;
|
||||||
};
|
};
|
||||||
@ -31,7 +35,4 @@ var _getA2 = function _getA2() {
|
|||||||
Object.defineProperty(B, _getA, {
|
Object.defineProperty(B, _getA, {
|
||||||
value: _getA2
|
value: _getA2
|
||||||
});
|
});
|
||||||
Object.defineProperty(B, _getB, {
|
|
||||||
value: _getB2
|
|
||||||
});
|
|
||||||
var [getA, getB] = B.extract();
|
var [getA, getB] = B.extract();
|
||||||
|
|||||||
@ -24,6 +24,10 @@ var _getB2 = function _getB2() {
|
|||||||
return this.b;
|
return this.b;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Object.defineProperty(B, _getB, {
|
||||||
|
value: _getB2
|
||||||
|
});
|
||||||
|
|
||||||
var _getA2 = function _getA2() {
|
var _getA2 = function _getA2() {
|
||||||
return babelHelpers.get(babelHelpers.getPrototypeOf(B), "a", this);
|
return babelHelpers.get(babelHelpers.getPrototypeOf(B), "a", this);
|
||||||
};
|
};
|
||||||
@ -31,7 +35,4 @@ var _getA2 = function _getA2() {
|
|||||||
Object.defineProperty(B, _getA, {
|
Object.defineProperty(B, _getA, {
|
||||||
value: _getA2
|
value: _getA2
|
||||||
});
|
});
|
||||||
Object.defineProperty(B, _getB, {
|
|
||||||
value: _getB2
|
|
||||||
});
|
|
||||||
const [getA, getB] = B.extract();
|
const [getA, getB] = B.extract();
|
||||||
|
|||||||
@ -1,29 +0,0 @@
|
|||||||
expect(() => {
|
|
||||||
class C {
|
|
||||||
static #_ = new C;
|
|
||||||
static get #p() { return C };
|
|
||||||
constructor() {
|
|
||||||
C.#p;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}).toThrow(/attempted to use private field on non-instance/);
|
|
||||||
|
|
||||||
expect(() => {
|
|
||||||
class C {
|
|
||||||
static #_ = new C;
|
|
||||||
static set #p(v) {};
|
|
||||||
constructor() {
|
|
||||||
C.#p = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}).toThrow(/attempted to use private field on non-instance/);
|
|
||||||
|
|
||||||
expect(() => {
|
|
||||||
class C {
|
|
||||||
static #_ = new C;
|
|
||||||
static set #p(v) {};
|
|
||||||
constructor() {
|
|
||||||
for (C.#p of [0]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}).toThrow(/attempted to use private field on non-instance/);
|
|
||||||
@ -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);
|
||||||
@ -21,11 +21,11 @@ var _get_privateStaticFieldValue = function () {
|
|||||||
return babelHelpers.classPrivateFieldLooseBase(Cl, _PRIVATE_STATIC_FIELD)[_PRIVATE_STATIC_FIELD];
|
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, {
|
Object.defineProperty(Cl, _privateStaticFieldValue, {
|
||||||
get: _get_privateStaticFieldValue,
|
get: _get_privateStaticFieldValue,
|
||||||
set: _set_privateStaticFieldValue
|
set: _set_privateStaticFieldValue
|
||||||
});
|
});
|
||||||
|
Object.defineProperty(Cl, _PRIVATE_STATIC_FIELD, {
|
||||||
|
writable: true,
|
||||||
|
value: "top secret string"
|
||||||
|
});
|
||||||
|
|||||||
@ -13,11 +13,11 @@ var _set_privateStaticFieldValue = function (newValue) {
|
|||||||
babelHelpers.classPrivateFieldLooseBase(Cl, _PRIVATE_STATIC_FIELD)[_PRIVATE_STATIC_FIELD] = 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, {
|
Object.defineProperty(Cl, _privateStaticFieldValue, {
|
||||||
get: void 0,
|
get: void 0,
|
||||||
set: _set_privateStaticFieldValue
|
set: _set_privateStaticFieldValue
|
||||||
});
|
});
|
||||||
|
Object.defineProperty(Cl, _PRIVATE_STATIC_FIELD, {
|
||||||
|
writable: true,
|
||||||
|
value: 0
|
||||||
|
});
|
||||||
|
|||||||
@ -14,12 +14,12 @@ var _get_privateFieldValue = function () {
|
|||||||
return babelHelpers.classPrivateFieldLooseBase(this, _privateField)[_privateField];
|
return babelHelpers.classPrivateFieldLooseBase(this, _privateField)[_privateField];
|
||||||
};
|
};
|
||||||
|
|
||||||
Object.defineProperty(Cl, _privateField, {
|
|
||||||
writable: true,
|
|
||||||
value: 0
|
|
||||||
});
|
|
||||||
Object.defineProperty(Cl, _privateFieldValue, {
|
Object.defineProperty(Cl, _privateFieldValue, {
|
||||||
get: _get_privateFieldValue,
|
get: _get_privateFieldValue,
|
||||||
set: void 0
|
set: void 0
|
||||||
});
|
});
|
||||||
|
Object.defineProperty(Cl, _privateField, {
|
||||||
|
writable: true,
|
||||||
|
value: 0
|
||||||
|
});
|
||||||
var cl = new Cl();
|
var cl = new Cl();
|
||||||
|
|||||||
@ -42,12 +42,12 @@ var _get_privateFieldValue = function () {
|
|||||||
return babelHelpers.classPrivateFieldLooseBase(Cl, _privateField)[_privateField];
|
return babelHelpers.classPrivateFieldLooseBase(Cl, _privateField)[_privateField];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Object.defineProperty(Cl, _privateFieldValue, {
|
||||||
|
get: _get_privateFieldValue,
|
||||||
|
set: _set_privateFieldValue
|
||||||
|
});
|
||||||
Object.defineProperty(Cl, _privateField, {
|
Object.defineProperty(Cl, _privateField, {
|
||||||
writable: true,
|
writable: true,
|
||||||
value: "top secret string"
|
value: "top secret string"
|
||||||
});
|
});
|
||||||
Cl.publicField = "not secret string";
|
Cl.publicField = "not secret string";
|
||||||
Object.defineProperty(Cl, _privateFieldValue, {
|
|
||||||
get: _get_privateFieldValue,
|
|
||||||
set: _set_privateFieldValue
|
|
||||||
});
|
|
||||||
|
|||||||
@ -1,29 +0,0 @@
|
|||||||
expect(() => {
|
|
||||||
class C {
|
|
||||||
static #_ = new C;
|
|
||||||
static get #p() { return C };
|
|
||||||
constructor() {
|
|
||||||
C.#p;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}).toThrow(/attempted to use private field on non-instance/);
|
|
||||||
|
|
||||||
expect(() => {
|
|
||||||
class C {
|
|
||||||
static #_ = new C;
|
|
||||||
static set #p(v) {};
|
|
||||||
constructor() {
|
|
||||||
C.#p = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}).toThrow(/attempted to use private field on non-instance/);
|
|
||||||
|
|
||||||
expect(() => {
|
|
||||||
class C {
|
|
||||||
static #_ = new C;
|
|
||||||
static set #p(v) {};
|
|
||||||
constructor() {
|
|
||||||
for (C.#p of [0]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}).toThrow(/attempted to use private field on non-instance/);
|
|
||||||
@ -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);
|
||||||
@ -21,11 +21,11 @@ var _get_privateStaticFieldValue = function () {
|
|||||||
return babelHelpers.classPrivateFieldLooseBase(Cl, _PRIVATE_STATIC_FIELD)[_PRIVATE_STATIC_FIELD];
|
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, {
|
Object.defineProperty(Cl, _privateStaticFieldValue, {
|
||||||
get: _get_privateStaticFieldValue,
|
get: _get_privateStaticFieldValue,
|
||||||
set: _set_privateStaticFieldValue
|
set: _set_privateStaticFieldValue
|
||||||
});
|
});
|
||||||
|
Object.defineProperty(Cl, _PRIVATE_STATIC_FIELD, {
|
||||||
|
writable: true,
|
||||||
|
value: "top secret string"
|
||||||
|
});
|
||||||
|
|||||||
@ -13,11 +13,11 @@ var _set_privateStaticFieldValue = function (newValue) {
|
|||||||
babelHelpers.classPrivateFieldLooseBase(Cl, _PRIVATE_STATIC_FIELD)[_PRIVATE_STATIC_FIELD] = 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, {
|
Object.defineProperty(Cl, _privateStaticFieldValue, {
|
||||||
get: void 0,
|
get: void 0,
|
||||||
set: _set_privateStaticFieldValue
|
set: _set_privateStaticFieldValue
|
||||||
});
|
});
|
||||||
|
Object.defineProperty(Cl, _PRIVATE_STATIC_FIELD, {
|
||||||
|
writable: true,
|
||||||
|
value: 0
|
||||||
|
});
|
||||||
|
|||||||
@ -14,12 +14,12 @@ var _get_privateFieldValue = function () {
|
|||||||
return babelHelpers.classPrivateFieldLooseBase(this, _privateField)[_privateField];
|
return babelHelpers.classPrivateFieldLooseBase(this, _privateField)[_privateField];
|
||||||
};
|
};
|
||||||
|
|
||||||
Object.defineProperty(Cl, _privateField, {
|
|
||||||
writable: true,
|
|
||||||
value: 0
|
|
||||||
});
|
|
||||||
Object.defineProperty(Cl, _privateFieldValue, {
|
Object.defineProperty(Cl, _privateFieldValue, {
|
||||||
get: _get_privateFieldValue,
|
get: _get_privateFieldValue,
|
||||||
set: void 0
|
set: void 0
|
||||||
});
|
});
|
||||||
|
Object.defineProperty(Cl, _privateField, {
|
||||||
|
writable: true,
|
||||||
|
value: 0
|
||||||
|
});
|
||||||
const cl = new Cl();
|
const cl = new Cl();
|
||||||
|
|||||||
@ -42,12 +42,12 @@ var _get_privateFieldValue = function () {
|
|||||||
return babelHelpers.classPrivateFieldLooseBase(Cl, _privateField)[_privateField];
|
return babelHelpers.classPrivateFieldLooseBase(Cl, _privateField)[_privateField];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Object.defineProperty(Cl, _privateFieldValue, {
|
||||||
|
get: _get_privateFieldValue,
|
||||||
|
set: _set_privateFieldValue
|
||||||
|
});
|
||||||
Object.defineProperty(Cl, _privateField, {
|
Object.defineProperty(Cl, _privateField, {
|
||||||
writable: true,
|
writable: true,
|
||||||
value: "top secret string"
|
value: "top secret string"
|
||||||
});
|
});
|
||||||
babelHelpers.defineProperty(Cl, "publicField", "not secret string");
|
babelHelpers.defineProperty(Cl, "publicField", "not secret string");
|
||||||
Object.defineProperty(Cl, _privateFieldValue, {
|
|
||||||
get: _get_privateFieldValue,
|
|
||||||
set: _set_privateFieldValue
|
|
||||||
});
|
|
||||||
|
|||||||
@ -1,29 +0,0 @@
|
|||||||
expect(() => {
|
|
||||||
class C {
|
|
||||||
static #_ = new C;
|
|
||||||
static get #p() { return C };
|
|
||||||
constructor() {
|
|
||||||
C.#p;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}).toThrow(/attempted to get private static field before its declaration/);
|
|
||||||
|
|
||||||
expect(() => {
|
|
||||||
class C {
|
|
||||||
static #_ = new C;
|
|
||||||
static set #p(v) {};
|
|
||||||
constructor() {
|
|
||||||
C.#p = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}).toThrow(/attempted to set private static field before its declaration/);
|
|
||||||
|
|
||||||
expect(() => {
|
|
||||||
class C {
|
|
||||||
static #_ = new C;
|
|
||||||
static set #p(v) {};
|
|
||||||
constructor() {
|
|
||||||
for (C.#p of [0]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}).toThrow(/attempted to set private static field before its declaration/);
|
|
||||||
@ -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);
|
||||||
@ -17,11 +17,11 @@ var _get_privateStaticFieldValue = function () {
|
|||||||
return babelHelpers.classStaticPrivateFieldSpecGet(Cl, Cl, _PRIVATE_STATIC_FIELD);
|
return babelHelpers.classStaticPrivateFieldSpecGet(Cl, Cl, _PRIVATE_STATIC_FIELD);
|
||||||
};
|
};
|
||||||
|
|
||||||
var _PRIVATE_STATIC_FIELD = {
|
|
||||||
writable: true,
|
|
||||||
value: "top secret string"
|
|
||||||
};
|
|
||||||
var _privateStaticFieldValue = {
|
var _privateStaticFieldValue = {
|
||||||
get: _get_privateStaticFieldValue,
|
get: _get_privateStaticFieldValue,
|
||||||
set: _set_privateStaticFieldValue
|
set: _set_privateStaticFieldValue
|
||||||
};
|
};
|
||||||
|
var _PRIVATE_STATIC_FIELD = {
|
||||||
|
writable: true,
|
||||||
|
value: "top secret string"
|
||||||
|
};
|
||||||
|
|||||||
@ -9,11 +9,11 @@ var _set_privateStaticFieldValue = function (newValue) {
|
|||||||
babelHelpers.classStaticPrivateFieldSpecSet(Cl, Cl, _PRIVATE_STATIC_FIELD, newValue);
|
babelHelpers.classStaticPrivateFieldSpecSet(Cl, Cl, _PRIVATE_STATIC_FIELD, newValue);
|
||||||
};
|
};
|
||||||
|
|
||||||
var _PRIVATE_STATIC_FIELD = {
|
|
||||||
writable: true,
|
|
||||||
value: 0
|
|
||||||
};
|
|
||||||
var _privateStaticFieldValue = {
|
var _privateStaticFieldValue = {
|
||||||
get: void 0,
|
get: void 0,
|
||||||
set: _set_privateStaticFieldValue
|
set: _set_privateStaticFieldValue
|
||||||
};
|
};
|
||||||
|
var _PRIVATE_STATIC_FIELD = {
|
||||||
|
writable: true,
|
||||||
|
value: 0
|
||||||
|
};
|
||||||
|
|||||||
@ -10,12 +10,12 @@ var _get_privateFieldValue = function () {
|
|||||||
return babelHelpers.classStaticPrivateFieldSpecGet(this, Cl, _privateField);
|
return babelHelpers.classStaticPrivateFieldSpecGet(this, Cl, _privateField);
|
||||||
};
|
};
|
||||||
|
|
||||||
var _privateField = {
|
|
||||||
writable: true,
|
|
||||||
value: 0
|
|
||||||
};
|
|
||||||
var _privateFieldValue = {
|
var _privateFieldValue = {
|
||||||
get: _get_privateFieldValue,
|
get: _get_privateFieldValue,
|
||||||
set: void 0
|
set: void 0
|
||||||
};
|
};
|
||||||
|
var _privateField = {
|
||||||
|
writable: true,
|
||||||
|
value: 0
|
||||||
|
};
|
||||||
var cl = new Cl();
|
var cl = new Cl();
|
||||||
|
|||||||
@ -40,12 +40,12 @@ var _get_privateFieldValue = function () {
|
|||||||
return babelHelpers.classStaticPrivateFieldSpecGet(Cl, Cl, _privateField);
|
return babelHelpers.classStaticPrivateFieldSpecGet(Cl, Cl, _privateField);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var _privateFieldValue = {
|
||||||
|
get: _get_privateFieldValue,
|
||||||
|
set: _set_privateFieldValue
|
||||||
|
};
|
||||||
var _privateField = {
|
var _privateField = {
|
||||||
writable: true,
|
writable: true,
|
||||||
value: "top secret string"
|
value: "top secret string"
|
||||||
};
|
};
|
||||||
babelHelpers.defineProperty(Cl, "publicField", "not secret string");
|
babelHelpers.defineProperty(Cl, "publicField", "not secret string");
|
||||||
var _privateFieldValue = {
|
|
||||||
get: _get_privateFieldValue,
|
|
||||||
set: _set_privateFieldValue
|
|
||||||
};
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user