Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ensure static private method init run before static property #12918

Merged
merged 3 commits into from Mar 3, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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);