Handle private access chained on an optional chain (#11248)
Co-authored-by: Nicolò Ribaudo <nicolo.ribaudo@gmail.com> Co-authored-by: Huáng Jùnliàng <jlhwung@gmail.com>
This commit is contained in:
parent
852520eff5
commit
bda759ac3d
@ -128,8 +128,12 @@ const privateNameVisitor = privateNameVisitorFactory({
|
|||||||
const { privateNamesMap, redeclared } = this;
|
const { privateNamesMap, redeclared } = this;
|
||||||
const { node, parentPath } = path;
|
const { node, parentPath } = path;
|
||||||
|
|
||||||
if (!parentPath.isMemberExpression({ property: node })) return;
|
if (
|
||||||
|
!parentPath.isMemberExpression({ property: node }) &&
|
||||||
|
!parentPath.isOptionalMemberExpression({ property: node })
|
||||||
|
) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
const { name } = node.id;
|
const { name } = node.id;
|
||||||
if (!privateNamesMap.has(name)) return;
|
if (!privateNamesMap.has(name)) return;
|
||||||
if (redeclared && redeclared.includes(name)) return;
|
if (redeclared && redeclared.includes(name)) return;
|
||||||
@ -296,23 +300,43 @@ const privateNameHandlerSpec = {
|
|||||||
// The first access (the get) should do the memo assignment.
|
// The first access (the get) should do the memo assignment.
|
||||||
this.memoise(member, 1);
|
this.memoise(member, 1);
|
||||||
|
|
||||||
return optimiseCall(this.get(member), this.receiver(member), args);
|
return optimiseCall(this.get(member), this.receiver(member), args, false);
|
||||||
|
},
|
||||||
|
|
||||||
|
optionalCall(member, args) {
|
||||||
|
this.memoise(member, 1);
|
||||||
|
|
||||||
|
return optimiseCall(this.get(member), this.receiver(member), args, true);
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
const privateNameHandlerLoose = {
|
const privateNameHandlerLoose = {
|
||||||
handle(member) {
|
get(member) {
|
||||||
const { privateNamesMap, file } = this;
|
const { privateNamesMap, file } = this;
|
||||||
const { object } = member.node;
|
const { object } = member.node;
|
||||||
const { name } = member.node.property.id;
|
const { name } = member.node.property.id;
|
||||||
|
|
||||||
member.replaceWith(
|
return template.expression`BASE(REF, PROP)[PROP]`({
|
||||||
template.expression`BASE(REF, PROP)[PROP]`({
|
|
||||||
BASE: file.addHelper("classPrivateFieldLooseBase"),
|
BASE: file.addHelper("classPrivateFieldLooseBase"),
|
||||||
REF: object,
|
REF: object,
|
||||||
PROP: privateNamesMap.get(name).id,
|
PROP: privateNamesMap.get(name).id,
|
||||||
}),
|
});
|
||||||
);
|
},
|
||||||
|
|
||||||
|
simpleSet(member) {
|
||||||
|
return this.get(member);
|
||||||
|
},
|
||||||
|
|
||||||
|
destructureSet(member) {
|
||||||
|
return this.get(member);
|
||||||
|
},
|
||||||
|
|
||||||
|
call(member, args) {
|
||||||
|
return t.callExpression(this.get(member), args);
|
||||||
|
},
|
||||||
|
|
||||||
|
optionalCall(member, args) {
|
||||||
|
return t.optionalCallExpression(this.get(member), args, true);
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -326,21 +350,14 @@ export function transformPrivateNamesUsage(
|
|||||||
if (!privateNamesMap.size) return;
|
if (!privateNamesMap.size) return;
|
||||||
|
|
||||||
const body = path.get("body");
|
const body = path.get("body");
|
||||||
|
const handler = loose ? privateNameHandlerLoose : privateNameHandlerSpec;
|
||||||
|
|
||||||
if (loose) {
|
|
||||||
body.traverse(privateNameVisitor, {
|
|
||||||
privateNamesMap,
|
|
||||||
file: state,
|
|
||||||
...privateNameHandlerLoose,
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
memberExpressionToFunctions(body, privateNameVisitor, {
|
memberExpressionToFunctions(body, privateNameVisitor, {
|
||||||
privateNamesMap,
|
privateNamesMap,
|
||||||
classRef: ref,
|
classRef: ref,
|
||||||
file: state,
|
file: state,
|
||||||
...privateNameHandlerSpec,
|
...handler,
|
||||||
});
|
});
|
||||||
}
|
|
||||||
body.traverse(privateInVisitor, {
|
body.traverse(privateInVisitor, {
|
||||||
privateNamesMap,
|
privateNamesMap,
|
||||||
classRef: ref,
|
classRef: ref,
|
||||||
|
|||||||
@ -29,6 +29,55 @@ class AssignmentMemoiser {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function toNonOptional(path, base) {
|
||||||
|
const { node } = path;
|
||||||
|
if (path.isOptionalMemberExpression()) {
|
||||||
|
return t.memberExpression(base, node.property, node.computed);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (path.isOptionalCallExpression()) {
|
||||||
|
const callee = path.get("callee");
|
||||||
|
if (path.node.optional && callee.isOptionalMemberExpression()) {
|
||||||
|
const { object } = callee.node;
|
||||||
|
const context = path.scope.maybeGenerateMemoised(object) || object;
|
||||||
|
callee
|
||||||
|
.get("object")
|
||||||
|
.replaceWith(t.assignmentExpression("=", context, object));
|
||||||
|
|
||||||
|
return t.callExpression(t.memberExpression(base, t.identifier("call")), [
|
||||||
|
context,
|
||||||
|
...node.arguments,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return t.callExpression(base, node.arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
return path.node;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Determines if the current path is in a detached tree. This can happen when
|
||||||
|
// we are iterating on a path, and replace an ancestor with a new node. Babel
|
||||||
|
// doesn't always stop traversing the old node tree, and that can cause
|
||||||
|
// inconsistencies.
|
||||||
|
function isInDetachedTree(path) {
|
||||||
|
while (path) {
|
||||||
|
if (path.isProgram()) break;
|
||||||
|
|
||||||
|
const { parentPath, container, listKey } = path;
|
||||||
|
const parentNode = parentPath.node;
|
||||||
|
if (listKey) {
|
||||||
|
if (container !== parentNode[listKey]) return true;
|
||||||
|
} else {
|
||||||
|
if (container !== parentNode) return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
path = parentPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
const handle = {
|
const handle = {
|
||||||
memoise() {
|
memoise() {
|
||||||
// noop.
|
// noop.
|
||||||
@ -37,9 +86,175 @@ const handle = {
|
|||||||
handle(member) {
|
handle(member) {
|
||||||
const { node, parent, parentPath } = member;
|
const { node, parent, parentPath } = member;
|
||||||
|
|
||||||
|
if (member.isOptionalMemberExpression()) {
|
||||||
|
// Transforming optional chaining requires we replace ancestors.
|
||||||
|
if (isInDetachedTree(member)) return;
|
||||||
|
|
||||||
|
// We're looking for the end of _this_ optional chain, which is actually
|
||||||
|
// the "rightmost" property access of the chain. This is because
|
||||||
|
// everything up to that property access is "optional".
|
||||||
|
//
|
||||||
|
// Let's take the case of `FOO?.BAR.baz?.qux`, with `FOO?.BAR` being our
|
||||||
|
// member. The "end" to most users would be `qux` property access.
|
||||||
|
// Everything up to it could be skipped if it `FOO` were nullish. But
|
||||||
|
// actually, we can consider the `baz` access to be the end. So we're
|
||||||
|
// looking for the nearest optional chain that is `optional: true`.
|
||||||
|
const endPath = member.find(({ node, parent, parentPath }) => {
|
||||||
|
if (parentPath.isOptionalMemberExpression()) {
|
||||||
|
// We need to check `parent.object` since we could be inside the
|
||||||
|
// computed expression of a `bad?.[FOO?.BAR]`. In this case, the
|
||||||
|
// endPath is the `FOO?.BAR` member itself.
|
||||||
|
return parent.optional || parent.object !== node;
|
||||||
|
}
|
||||||
|
if (parentPath.isOptionalCallExpression()) {
|
||||||
|
// Checking `parent.callee` since we could be in the arguments, eg
|
||||||
|
// `bad?.(FOO?.BAR)`.
|
||||||
|
// Also skip `FOO?.BAR` in `FOO?.BAR?.()` since we need to transform the optional call to ensure proper this
|
||||||
|
return (
|
||||||
|
// In FOO?.#BAR?.(), endPath points the optional call expression so we skip FOO?.#BAR
|
||||||
|
(node !== member.node && parent.optional) || parent.callee !== node
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
|
||||||
|
const rootParentPath = endPath.parentPath;
|
||||||
|
if (
|
||||||
|
rootParentPath.isUpdateExpression({ argument: node }) ||
|
||||||
|
rootParentPath.isAssignmentExpression({ left: node })
|
||||||
|
) {
|
||||||
|
throw member.buildCodeFrameError(`can't handle assignment`);
|
||||||
|
}
|
||||||
|
if (rootParentPath.isUnaryExpression({ operator: "delete" })) {
|
||||||
|
throw member.buildCodeFrameError(`can't handle delete`);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Now, we're looking for the start of this optional chain, which is
|
||||||
|
// optional to the left of this member.
|
||||||
|
//
|
||||||
|
// Let's take the case of `foo?.bar?.baz.QUX?.BAM`, with `QUX?.BAM` being
|
||||||
|
// our member. The "start" to most users would be `foo` object access.
|
||||||
|
// But actually, we can consider the `bar` access to be the start. So
|
||||||
|
// we're looking for the nearest optional chain that is `optional: true`,
|
||||||
|
// which is guaranteed to be somewhere in the object/callee tree.
|
||||||
|
let startingOptional = member;
|
||||||
|
for (;;) {
|
||||||
|
if (startingOptional.isOptionalMemberExpression()) {
|
||||||
|
if (startingOptional.node.optional) break;
|
||||||
|
startingOptional = startingOptional.get("object");
|
||||||
|
continue;
|
||||||
|
} else if (startingOptional.isOptionalCallExpression()) {
|
||||||
|
if (startingOptional.node.optional) break;
|
||||||
|
startingOptional = startingOptional.get("callee");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// prevent infinite loop: unreachable if the AST is well-formed
|
||||||
|
throw new Error(
|
||||||
|
`Internal error: unexpected ${startingOptional.node.type}`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
const { scope } = member;
|
||||||
|
const startingProp = startingOptional.isOptionalMemberExpression()
|
||||||
|
? "object"
|
||||||
|
: "callee";
|
||||||
|
const startingNode = startingOptional.node[startingProp];
|
||||||
|
const baseNeedsMemoised = scope.maybeGenerateMemoised(startingNode);
|
||||||
|
const baseRef = baseNeedsMemoised ?? startingNode;
|
||||||
|
|
||||||
|
// Compute parentIsOptionalCall before `startingOptional` is replaced
|
||||||
|
// as `node` may refer to `startingOptional.node` before replaced.
|
||||||
|
const parentIsOptionalCall = parentPath.isOptionalCallExpression({
|
||||||
|
callee: node,
|
||||||
|
});
|
||||||
|
startingOptional.replaceWith(toNonOptional(startingOptional, baseRef));
|
||||||
|
if (parentIsOptionalCall) {
|
||||||
|
if (parent.optional) {
|
||||||
|
parentPath.replaceWith(this.optionalCall(member, parent.arguments));
|
||||||
|
} else {
|
||||||
|
parentPath.replaceWith(this.call(member, parent.arguments));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
member.replaceWith(this.get(member));
|
||||||
|
}
|
||||||
|
|
||||||
|
let regular = member.node;
|
||||||
|
for (let current = member; current !== endPath; ) {
|
||||||
|
const { parentPath } = current;
|
||||||
|
// skip transforming `Foo.#BAR?.call(FOO)`
|
||||||
|
if (parentPath === endPath && parentIsOptionalCall && parent.optional) {
|
||||||
|
regular = parentPath.node;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
regular = toNonOptional(parentPath, regular);
|
||||||
|
current = parentPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
let context;
|
||||||
|
const endParentPath = endPath.parentPath;
|
||||||
|
if (
|
||||||
|
t.isMemberExpression(regular) &&
|
||||||
|
endParentPath.isOptionalCallExpression({
|
||||||
|
callee: endPath.node,
|
||||||
|
optional: true,
|
||||||
|
})
|
||||||
|
) {
|
||||||
|
const { object } = regular;
|
||||||
|
context = member.scope.maybeGenerateMemoised(object);
|
||||||
|
if (context) {
|
||||||
|
regular.object = t.assignmentExpression("=", context, object);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
endPath.replaceWith(
|
||||||
|
t.conditionalExpression(
|
||||||
|
t.logicalExpression(
|
||||||
|
"||",
|
||||||
|
t.binaryExpression(
|
||||||
|
"===",
|
||||||
|
baseNeedsMemoised
|
||||||
|
? t.assignmentExpression("=", baseRef, startingNode)
|
||||||
|
: baseRef,
|
||||||
|
t.nullLiteral(),
|
||||||
|
),
|
||||||
|
t.binaryExpression(
|
||||||
|
"===",
|
||||||
|
t.cloneNode(baseRef),
|
||||||
|
scope.buildUndefinedNode(),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
scope.buildUndefinedNode(),
|
||||||
|
regular,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
if (context) {
|
||||||
|
const endParent = endParentPath.node;
|
||||||
|
endParentPath.replaceWith(
|
||||||
|
t.optionalCallExpression(
|
||||||
|
t.optionalMemberExpression(
|
||||||
|
endParent.callee,
|
||||||
|
t.identifier("call"),
|
||||||
|
false,
|
||||||
|
true,
|
||||||
|
),
|
||||||
|
[context, ...endParent.arguments],
|
||||||
|
false,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// MEMBER++ -> _set(MEMBER, (_ref = (+_get(MEMBER))) + 1), _ref
|
// MEMBER++ -> _set(MEMBER, (_ref = (+_get(MEMBER))) + 1), _ref
|
||||||
// ++MEMBER -> _set(MEMBER, (+_get(MEMBER)) + 1)
|
// ++MEMBER -> _set(MEMBER, (+_get(MEMBER)) + 1)
|
||||||
if (parentPath.isUpdateExpression({ argument: node })) {
|
if (parentPath.isUpdateExpression({ argument: node })) {
|
||||||
|
if (this.simpleSet) {
|
||||||
|
member.replaceWith(this.simpleSet(member));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const { operator, prefix } = parent;
|
const { operator, prefix } = parent;
|
||||||
|
|
||||||
// Give the state handler a chance to memoise the member, since we'll
|
// Give the state handler a chance to memoise the member, since we'll
|
||||||
@ -72,6 +287,11 @@ const handle = {
|
|||||||
// MEMBER = VALUE -> _set(MEMBER, VALUE)
|
// MEMBER = VALUE -> _set(MEMBER, VALUE)
|
||||||
// MEMBER += VALUE -> _set(MEMBER, _get(MEMBER) + VALUE)
|
// MEMBER += VALUE -> _set(MEMBER, _get(MEMBER) + VALUE)
|
||||||
if (parentPath.isAssignmentExpression({ left: node })) {
|
if (parentPath.isAssignmentExpression({ left: node })) {
|
||||||
|
if (this.simpleSet) {
|
||||||
|
member.replaceWith(this.simpleSet(member));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const { operator, right } = parent;
|
const { operator, right } = parent;
|
||||||
let value = right;
|
let value = right;
|
||||||
|
|
||||||
@ -94,9 +314,13 @@ const handle = {
|
|||||||
|
|
||||||
// MEMBER(ARGS) -> _call(MEMBER, ARGS)
|
// MEMBER(ARGS) -> _call(MEMBER, ARGS)
|
||||||
if (parentPath.isCallExpression({ callee: node })) {
|
if (parentPath.isCallExpression({ callee: node })) {
|
||||||
const { arguments: args } = parent;
|
parentPath.replaceWith(this.call(member, parent.arguments));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
parentPath.replaceWith(this.call(member, args));
|
// MEMBER?.(ARGS) -> _optionalCall(MEMBER, ARGS)
|
||||||
|
if (parentPath.isOptionalCallExpression({ callee: node })) {
|
||||||
|
parentPath.replaceWith(this.optionalCall(member, parent.arguments));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
import * as t from "@babel/types";
|
import * as t from "@babel/types";
|
||||||
|
|
||||||
export default function(callee, thisNode, args) {
|
export default function(callee, thisNode, args, optional) {
|
||||||
if (
|
if (
|
||||||
args.length === 1 &&
|
args.length === 1 &&
|
||||||
t.isSpreadElement(args[0]) &&
|
t.isSpreadElement(args[0]) &&
|
||||||
@ -12,6 +12,13 @@ export default function(callee, thisNode, args) {
|
|||||||
args[0].argument,
|
args[0].argument,
|
||||||
]);
|
]);
|
||||||
} else {
|
} else {
|
||||||
|
if (optional) {
|
||||||
|
return t.optionalCallExpression(
|
||||||
|
t.optionalMemberExpression(callee, t.identifier("call"), false, true),
|
||||||
|
[thisNode, ...args],
|
||||||
|
false,
|
||||||
|
);
|
||||||
|
}
|
||||||
return t.callExpression(t.memberExpression(callee, t.identifier("call")), [
|
return t.callExpression(t.memberExpression(callee, t.identifier("call")), [
|
||||||
thisNode,
|
thisNode,
|
||||||
...args,
|
...args,
|
||||||
|
|||||||
@ -158,6 +158,7 @@ const specHandlers = {
|
|||||||
this._get(superMember, thisRefs),
|
this._get(superMember, thisRefs),
|
||||||
t.cloneNode(thisRefs.this),
|
t.cloneNode(thisRefs.this),
|
||||||
args,
|
args,
|
||||||
|
false,
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@ -215,7 +216,7 @@ const looseHandlers = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
call(superMember, args) {
|
call(superMember, args) {
|
||||||
return optimiseCall(this.get(superMember), t.thisExpression(), args);
|
return optimiseCall(this.get(superMember), t.thisExpression(), args, false);
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -502,7 +502,8 @@ export default class ExpressionParser extends LValParser {
|
|||||||
if (arg.type === "Identifier") {
|
if (arg.type === "Identifier") {
|
||||||
this.raise(node.start, Errors.StrictDelete);
|
this.raise(node.start, Errors.StrictDelete);
|
||||||
} else if (
|
} else if (
|
||||||
arg.type === "MemberExpression" &&
|
(arg.type === "MemberExpression" ||
|
||||||
|
arg.type === "OptionalMemberExpression") &&
|
||||||
arg.property.type === "PrivateName"
|
arg.property.type === "PrivateName"
|
||||||
) {
|
) {
|
||||||
this.raise(node.start, Errors.DeletePrivateField);
|
this.raise(node.start, Errors.DeletePrivateField);
|
||||||
@ -616,8 +617,6 @@ export default class ExpressionParser extends LValParser {
|
|||||||
node.object = base;
|
node.object = base;
|
||||||
node.property = computed
|
node.property = computed
|
||||||
? this.parseExpression()
|
? this.parseExpression()
|
||||||
: optional
|
|
||||||
? this.parseIdentifier(true)
|
|
||||||
: this.parseMaybePrivateName(true);
|
: this.parseMaybePrivateName(true);
|
||||||
node.computed = computed;
|
node.computed = computed;
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,6 @@
|
|||||||
|
class Foo {
|
||||||
|
#x;
|
||||||
|
constructor() {
|
||||||
|
delete this?.#x;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"plugins": ["classPrivateProperties"]
|
||||||
|
}
|
||||||
@ -0,0 +1,99 @@
|
|||||||
|
{
|
||||||
|
"type": "File",
|
||||||
|
"start":0,"end":62,"loc":{"start":{"line":1,"column":0},"end":{"line":6,"column":1}},
|
||||||
|
"errors": [
|
||||||
|
"SyntaxError: Deleting a private field is not allowed (4:4)"
|
||||||
|
],
|
||||||
|
"program": {
|
||||||
|
"type": "Program",
|
||||||
|
"start":0,"end":62,"loc":{"start":{"line":1,"column":0},"end":{"line":6,"column":1}},
|
||||||
|
"sourceType": "script",
|
||||||
|
"interpreter": null,
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "ClassDeclaration",
|
||||||
|
"start":0,"end":62,"loc":{"start":{"line":1,"column":0},"end":{"line":6,"column":1}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":6,"end":9,"loc":{"start":{"line":1,"column":6},"end":{"line":1,"column":9},"identifierName":"Foo"},
|
||||||
|
"name": "Foo"
|
||||||
|
},
|
||||||
|
"superClass": null,
|
||||||
|
"body": {
|
||||||
|
"type": "ClassBody",
|
||||||
|
"start":10,"end":62,"loc":{"start":{"line":1,"column":10},"end":{"line":6,"column":1}},
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "ClassPrivateProperty",
|
||||||
|
"start":14,"end":17,"loc":{"start":{"line":2,"column":2},"end":{"line":2,"column":5}},
|
||||||
|
"static": false,
|
||||||
|
"key": {
|
||||||
|
"type": "PrivateName",
|
||||||
|
"start":14,"end":16,"loc":{"start":{"line":2,"column":2},"end":{"line":2,"column":4}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":15,"end":16,"loc":{"start":{"line":2,"column":3},"end":{"line":2,"column":4},"identifierName":"x"},
|
||||||
|
"name": "x"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ClassMethod",
|
||||||
|
"start":20,"end":60,"loc":{"start":{"line":3,"column":2},"end":{"line":5,"column":3}},
|
||||||
|
"static": false,
|
||||||
|
"key": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":20,"end":31,"loc":{"start":{"line":3,"column":2},"end":{"line":3,"column":13},"identifierName":"constructor"},
|
||||||
|
"name": "constructor"
|
||||||
|
},
|
||||||
|
"computed": false,
|
||||||
|
"kind": "constructor",
|
||||||
|
"id": null,
|
||||||
|
"generator": false,
|
||||||
|
"async": false,
|
||||||
|
"params": [],
|
||||||
|
"body": {
|
||||||
|
"type": "BlockStatement",
|
||||||
|
"start":34,"end":60,"loc":{"start":{"line":3,"column":16},"end":{"line":5,"column":3}},
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "ExpressionStatement",
|
||||||
|
"start":40,"end":56,"loc":{"start":{"line":4,"column":4},"end":{"line":4,"column":20}},
|
||||||
|
"expression": {
|
||||||
|
"type": "UnaryExpression",
|
||||||
|
"start":40,"end":55,"loc":{"start":{"line":4,"column":4},"end":{"line":4,"column":19}},
|
||||||
|
"operator": "delete",
|
||||||
|
"prefix": true,
|
||||||
|
"argument": {
|
||||||
|
"type": "OptionalMemberExpression",
|
||||||
|
"start":47,"end":55,"loc":{"start":{"line":4,"column":11},"end":{"line":4,"column":19}},
|
||||||
|
"object": {
|
||||||
|
"type": "ThisExpression",
|
||||||
|
"start":47,"end":51,"loc":{"start":{"line":4,"column":11},"end":{"line":4,"column":15}}
|
||||||
|
},
|
||||||
|
"property": {
|
||||||
|
"type": "PrivateName",
|
||||||
|
"start":53,"end":55,"loc":{"start":{"line":4,"column":17},"end":{"line":4,"column":19}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":54,"end":55,"loc":{"start":{"line":4,"column":18},"end":{"line":4,"column":19},"identifierName":"x"},
|
||||||
|
"name": "x"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"computed": false,
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"directives": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"directives": []
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
class Foo {
|
||||||
|
static #x = 1;
|
||||||
|
static #m = function() {};
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
const o = { Foo: Foo };
|
||||||
|
return [
|
||||||
|
o?.Foo.#x,
|
||||||
|
o?.Foo.#x.toFixed,
|
||||||
|
o?.Foo.#x.toFixed(2),
|
||||||
|
o?.Foo.#m(),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"plugins": ["classPrivateProperties"]
|
||||||
|
}
|
||||||
@ -0,0 +1,321 @@
|
|||||||
|
{
|
||||||
|
"type": "File",
|
||||||
|
"start":0,"end":219,"loc":{"start":{"line":1,"column":0},"end":{"line":14,"column":1}},
|
||||||
|
"program": {
|
||||||
|
"type": "Program",
|
||||||
|
"start":0,"end":219,"loc":{"start":{"line":1,"column":0},"end":{"line":14,"column":1}},
|
||||||
|
"sourceType": "script",
|
||||||
|
"interpreter": null,
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "ClassDeclaration",
|
||||||
|
"start":0,"end":219,"loc":{"start":{"line":1,"column":0},"end":{"line":14,"column":1}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":6,"end":9,"loc":{"start":{"line":1,"column":6},"end":{"line":1,"column":9},"identifierName":"Foo"},
|
||||||
|
"name": "Foo"
|
||||||
|
},
|
||||||
|
"superClass": null,
|
||||||
|
"body": {
|
||||||
|
"type": "ClassBody",
|
||||||
|
"start":10,"end":219,"loc":{"start":{"line":1,"column":10},"end":{"line":14,"column":1}},
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "ClassPrivateProperty",
|
||||||
|
"start":14,"end":28,"loc":{"start":{"line":2,"column":2},"end":{"line":2,"column":16}},
|
||||||
|
"static": true,
|
||||||
|
"key": {
|
||||||
|
"type": "PrivateName",
|
||||||
|
"start":21,"end":23,"loc":{"start":{"line":2,"column":9},"end":{"line":2,"column":11}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":22,"end":23,"loc":{"start":{"line":2,"column":10},"end":{"line":2,"column":11},"identifierName":"x"},
|
||||||
|
"name": "x"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"value": {
|
||||||
|
"type": "NumericLiteral",
|
||||||
|
"start":26,"end":27,"loc":{"start":{"line":2,"column":14},"end":{"line":2,"column":15}},
|
||||||
|
"extra": {
|
||||||
|
"rawValue": 1,
|
||||||
|
"raw": "1"
|
||||||
|
},
|
||||||
|
"value": 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ClassPrivateProperty",
|
||||||
|
"start":31,"end":57,"loc":{"start":{"line":3,"column":2},"end":{"line":3,"column":28}},
|
||||||
|
"static": true,
|
||||||
|
"key": {
|
||||||
|
"type": "PrivateName",
|
||||||
|
"start":38,"end":40,"loc":{"start":{"line":3,"column":9},"end":{"line":3,"column":11}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":39,"end":40,"loc":{"start":{"line":3,"column":10},"end":{"line":3,"column":11},"identifierName":"m"},
|
||||||
|
"name": "m"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"value": {
|
||||||
|
"type": "FunctionExpression",
|
||||||
|
"start":43,"end":56,"loc":{"start":{"line":3,"column":14},"end":{"line":3,"column":27}},
|
||||||
|
"id": null,
|
||||||
|
"generator": false,
|
||||||
|
"async": false,
|
||||||
|
"params": [],
|
||||||
|
"body": {
|
||||||
|
"type": "BlockStatement",
|
||||||
|
"start":54,"end":56,"loc":{"start":{"line":3,"column":25},"end":{"line":3,"column":27}},
|
||||||
|
"body": [],
|
||||||
|
"directives": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ClassMethod",
|
||||||
|
"start":61,"end":217,"loc":{"start":{"line":5,"column":2},"end":{"line":13,"column":3}},
|
||||||
|
"static": true,
|
||||||
|
"key": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":68,"end":72,"loc":{"start":{"line":5,"column":9},"end":{"line":5,"column":13},"identifierName":"test"},
|
||||||
|
"name": "test"
|
||||||
|
},
|
||||||
|
"computed": false,
|
||||||
|
"kind": "method",
|
||||||
|
"id": null,
|
||||||
|
"generator": false,
|
||||||
|
"async": false,
|
||||||
|
"params": [],
|
||||||
|
"body": {
|
||||||
|
"type": "BlockStatement",
|
||||||
|
"start":75,"end":217,"loc":{"start":{"line":5,"column":16},"end":{"line":13,"column":3}},
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "VariableDeclaration",
|
||||||
|
"start":81,"end":104,"loc":{"start":{"line":6,"column":4},"end":{"line":6,"column":27}},
|
||||||
|
"declarations": [
|
||||||
|
{
|
||||||
|
"type": "VariableDeclarator",
|
||||||
|
"start":87,"end":103,"loc":{"start":{"line":6,"column":10},"end":{"line":6,"column":26}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":87,"end":88,"loc":{"start":{"line":6,"column":10},"end":{"line":6,"column":11},"identifierName":"o"},
|
||||||
|
"name": "o"
|
||||||
|
},
|
||||||
|
"init": {
|
||||||
|
"type": "ObjectExpression",
|
||||||
|
"start":91,"end":103,"loc":{"start":{"line":6,"column":14},"end":{"line":6,"column":26}},
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"type": "ObjectProperty",
|
||||||
|
"start":93,"end":101,"loc":{"start":{"line":6,"column":16},"end":{"line":6,"column":24}},
|
||||||
|
"method": false,
|
||||||
|
"key": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":93,"end":96,"loc":{"start":{"line":6,"column":16},"end":{"line":6,"column":19},"identifierName":"Foo"},
|
||||||
|
"name": "Foo"
|
||||||
|
},
|
||||||
|
"computed": false,
|
||||||
|
"shorthand": false,
|
||||||
|
"value": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":98,"end":101,"loc":{"start":{"line":6,"column":21},"end":{"line":6,"column":24},"identifierName":"Foo"},
|
||||||
|
"name": "Foo"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"kind": "const"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ReturnStatement",
|
||||||
|
"start":109,"end":213,"loc":{"start":{"line":7,"column":4},"end":{"line":12,"column":6}},
|
||||||
|
"argument": {
|
||||||
|
"type": "ArrayExpression",
|
||||||
|
"start":116,"end":212,"loc":{"start":{"line":7,"column":11},"end":{"line":12,"column":5}},
|
||||||
|
"extra": {
|
||||||
|
"trailingComma": 205
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"type": "OptionalMemberExpression",
|
||||||
|
"start":124,"end":133,"loc":{"start":{"line":8,"column":6},"end":{"line":8,"column":15}},
|
||||||
|
"object": {
|
||||||
|
"type": "OptionalMemberExpression",
|
||||||
|
"start":124,"end":130,"loc":{"start":{"line":8,"column":6},"end":{"line":8,"column":12}},
|
||||||
|
"object": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":124,"end":125,"loc":{"start":{"line":8,"column":6},"end":{"line":8,"column":7},"identifierName":"o"},
|
||||||
|
"name": "o"
|
||||||
|
},
|
||||||
|
"property": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":127,"end":130,"loc":{"start":{"line":8,"column":9},"end":{"line":8,"column":12},"identifierName":"Foo"},
|
||||||
|
"name": "Foo"
|
||||||
|
},
|
||||||
|
"computed": false,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"property": {
|
||||||
|
"type": "PrivateName",
|
||||||
|
"start":131,"end":133,"loc":{"start":{"line":8,"column":13},"end":{"line":8,"column":15}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":132,"end":133,"loc":{"start":{"line":8,"column":14},"end":{"line":8,"column":15},"identifierName":"x"},
|
||||||
|
"name": "x"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"computed": false,
|
||||||
|
"optional": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "OptionalMemberExpression",
|
||||||
|
"start":141,"end":158,"loc":{"start":{"line":9,"column":6},"end":{"line":9,"column":23}},
|
||||||
|
"object": {
|
||||||
|
"type": "OptionalMemberExpression",
|
||||||
|
"start":141,"end":150,"loc":{"start":{"line":9,"column":6},"end":{"line":9,"column":15}},
|
||||||
|
"object": {
|
||||||
|
"type": "OptionalMemberExpression",
|
||||||
|
"start":141,"end":147,"loc":{"start":{"line":9,"column":6},"end":{"line":9,"column":12}},
|
||||||
|
"object": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":141,"end":142,"loc":{"start":{"line":9,"column":6},"end":{"line":9,"column":7},"identifierName":"o"},
|
||||||
|
"name": "o"
|
||||||
|
},
|
||||||
|
"property": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":144,"end":147,"loc":{"start":{"line":9,"column":9},"end":{"line":9,"column":12},"identifierName":"Foo"},
|
||||||
|
"name": "Foo"
|
||||||
|
},
|
||||||
|
"computed": false,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"property": {
|
||||||
|
"type": "PrivateName",
|
||||||
|
"start":148,"end":150,"loc":{"start":{"line":9,"column":13},"end":{"line":9,"column":15}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":149,"end":150,"loc":{"start":{"line":9,"column":14},"end":{"line":9,"column":15},"identifierName":"x"},
|
||||||
|
"name": "x"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"computed": false,
|
||||||
|
"optional": false
|
||||||
|
},
|
||||||
|
"property": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":151,"end":158,"loc":{"start":{"line":9,"column":16},"end":{"line":9,"column":23},"identifierName":"toFixed"},
|
||||||
|
"name": "toFixed"
|
||||||
|
},
|
||||||
|
"computed": false,
|
||||||
|
"optional": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "OptionalCallExpression",
|
||||||
|
"start":166,"end":186,"loc":{"start":{"line":10,"column":6},"end":{"line":10,"column":26}},
|
||||||
|
"callee": {
|
||||||
|
"type": "OptionalMemberExpression",
|
||||||
|
"start":166,"end":183,"loc":{"start":{"line":10,"column":6},"end":{"line":10,"column":23}},
|
||||||
|
"object": {
|
||||||
|
"type": "OptionalMemberExpression",
|
||||||
|
"start":166,"end":175,"loc":{"start":{"line":10,"column":6},"end":{"line":10,"column":15}},
|
||||||
|
"object": {
|
||||||
|
"type": "OptionalMemberExpression",
|
||||||
|
"start":166,"end":172,"loc":{"start":{"line":10,"column":6},"end":{"line":10,"column":12}},
|
||||||
|
"object": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":166,"end":167,"loc":{"start":{"line":10,"column":6},"end":{"line":10,"column":7},"identifierName":"o"},
|
||||||
|
"name": "o"
|
||||||
|
},
|
||||||
|
"property": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":169,"end":172,"loc":{"start":{"line":10,"column":9},"end":{"line":10,"column":12},"identifierName":"Foo"},
|
||||||
|
"name": "Foo"
|
||||||
|
},
|
||||||
|
"computed": false,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"property": {
|
||||||
|
"type": "PrivateName",
|
||||||
|
"start":173,"end":175,"loc":{"start":{"line":10,"column":13},"end":{"line":10,"column":15}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":174,"end":175,"loc":{"start":{"line":10,"column":14},"end":{"line":10,"column":15},"identifierName":"x"},
|
||||||
|
"name": "x"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"computed": false,
|
||||||
|
"optional": false
|
||||||
|
},
|
||||||
|
"property": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":176,"end":183,"loc":{"start":{"line":10,"column":16},"end":{"line":10,"column":23},"identifierName":"toFixed"},
|
||||||
|
"name": "toFixed"
|
||||||
|
},
|
||||||
|
"computed": false,
|
||||||
|
"optional": false
|
||||||
|
},
|
||||||
|
"arguments": [
|
||||||
|
{
|
||||||
|
"type": "NumericLiteral",
|
||||||
|
"start":184,"end":185,"loc":{"start":{"line":10,"column":24},"end":{"line":10,"column":25}},
|
||||||
|
"extra": {
|
||||||
|
"rawValue": 2,
|
||||||
|
"raw": "2"
|
||||||
|
},
|
||||||
|
"value": 2
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "OptionalCallExpression",
|
||||||
|
"start":194,"end":205,"loc":{"start":{"line":11,"column":6},"end":{"line":11,"column":17}},
|
||||||
|
"callee": {
|
||||||
|
"type": "OptionalMemberExpression",
|
||||||
|
"start":194,"end":203,"loc":{"start":{"line":11,"column":6},"end":{"line":11,"column":15}},
|
||||||
|
"object": {
|
||||||
|
"type": "OptionalMemberExpression",
|
||||||
|
"start":194,"end":200,"loc":{"start":{"line":11,"column":6},"end":{"line":11,"column":12}},
|
||||||
|
"object": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":194,"end":195,"loc":{"start":{"line":11,"column":6},"end":{"line":11,"column":7},"identifierName":"o"},
|
||||||
|
"name": "o"
|
||||||
|
},
|
||||||
|
"property": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":197,"end":200,"loc":{"start":{"line":11,"column":9},"end":{"line":11,"column":12},"identifierName":"Foo"},
|
||||||
|
"name": "Foo"
|
||||||
|
},
|
||||||
|
"computed": false,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"property": {
|
||||||
|
"type": "PrivateName",
|
||||||
|
"start":201,"end":203,"loc":{"start":{"line":11,"column":13},"end":{"line":11,"column":15}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":202,"end":203,"loc":{"start":{"line":11,"column":14},"end":{"line":11,"column":15},"identifierName":"m"},
|
||||||
|
"name": "m"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"computed": false,
|
||||||
|
"optional": false
|
||||||
|
},
|
||||||
|
"arguments": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"directives": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"directives": []
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
class Foo {
|
||||||
|
static #m = function() {};
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
return Foo?.#m();
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"plugins": ["classPrivateProperties"]
|
||||||
|
}
|
||||||
@ -0,0 +1,109 @@
|
|||||||
|
{
|
||||||
|
"type": "File",
|
||||||
|
"start":0,"end":87,"loc":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},
|
||||||
|
"program": {
|
||||||
|
"type": "Program",
|
||||||
|
"start":0,"end":87,"loc":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},
|
||||||
|
"sourceType": "script",
|
||||||
|
"interpreter": null,
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "ClassDeclaration",
|
||||||
|
"start":0,"end":87,"loc":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":6,"end":9,"loc":{"start":{"line":1,"column":6},"end":{"line":1,"column":9},"identifierName":"Foo"},
|
||||||
|
"name": "Foo"
|
||||||
|
},
|
||||||
|
"superClass": null,
|
||||||
|
"body": {
|
||||||
|
"type": "ClassBody",
|
||||||
|
"start":10,"end":87,"loc":{"start":{"line":1,"column":10},"end":{"line":7,"column":1}},
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "ClassPrivateProperty",
|
||||||
|
"start":14,"end":40,"loc":{"start":{"line":2,"column":2},"end":{"line":2,"column":28}},
|
||||||
|
"static": true,
|
||||||
|
"key": {
|
||||||
|
"type": "PrivateName",
|
||||||
|
"start":21,"end":23,"loc":{"start":{"line":2,"column":9},"end":{"line":2,"column":11}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":22,"end":23,"loc":{"start":{"line":2,"column":10},"end":{"line":2,"column":11},"identifierName":"m"},
|
||||||
|
"name": "m"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"value": {
|
||||||
|
"type": "FunctionExpression",
|
||||||
|
"start":26,"end":39,"loc":{"start":{"line":2,"column":14},"end":{"line":2,"column":27}},
|
||||||
|
"id": null,
|
||||||
|
"generator": false,
|
||||||
|
"async": false,
|
||||||
|
"params": [],
|
||||||
|
"body": {
|
||||||
|
"type": "BlockStatement",
|
||||||
|
"start":37,"end":39,"loc":{"start":{"line":2,"column":25},"end":{"line":2,"column":27}},
|
||||||
|
"body": [],
|
||||||
|
"directives": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ClassMethod",
|
||||||
|
"start":44,"end":85,"loc":{"start":{"line":4,"column":2},"end":{"line":6,"column":3}},
|
||||||
|
"static": true,
|
||||||
|
"key": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":51,"end":55,"loc":{"start":{"line":4,"column":9},"end":{"line":4,"column":13},"identifierName":"test"},
|
||||||
|
"name": "test"
|
||||||
|
},
|
||||||
|
"computed": false,
|
||||||
|
"kind": "method",
|
||||||
|
"id": null,
|
||||||
|
"generator": false,
|
||||||
|
"async": false,
|
||||||
|
"params": [],
|
||||||
|
"body": {
|
||||||
|
"type": "BlockStatement",
|
||||||
|
"start":58,"end":85,"loc":{"start":{"line":4,"column":16},"end":{"line":6,"column":3}},
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "ReturnStatement",
|
||||||
|
"start":64,"end":81,"loc":{"start":{"line":5,"column":4},"end":{"line":5,"column":21}},
|
||||||
|
"argument": {
|
||||||
|
"type": "OptionalCallExpression",
|
||||||
|
"start":71,"end":80,"loc":{"start":{"line":5,"column":11},"end":{"line":5,"column":20}},
|
||||||
|
"callee": {
|
||||||
|
"type": "OptionalMemberExpression",
|
||||||
|
"start":71,"end":78,"loc":{"start":{"line":5,"column":11},"end":{"line":5,"column":18}},
|
||||||
|
"object": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":71,"end":74,"loc":{"start":{"line":5,"column":11},"end":{"line":5,"column":14},"identifierName":"Foo"},
|
||||||
|
"name": "Foo"
|
||||||
|
},
|
||||||
|
"property": {
|
||||||
|
"type": "PrivateName",
|
||||||
|
"start":76,"end":78,"loc":{"start":{"line":5,"column":16},"end":{"line":5,"column":18}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":77,"end":78,"loc":{"start":{"line":5,"column":17},"end":{"line":5,"column":18},"identifierName":"m"},
|
||||||
|
"name": "m"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"computed": false,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"arguments": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"directives": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"directives": []
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
class Foo {
|
||||||
|
static #x = 1;
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
return Foo?.#x.toFixed(2);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"plugins": ["classPrivateProperties"]
|
||||||
|
}
|
||||||
@ -0,0 +1,125 @@
|
|||||||
|
{
|
||||||
|
"type": "File",
|
||||||
|
"start":0,"end":84,"loc":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},
|
||||||
|
"program": {
|
||||||
|
"type": "Program",
|
||||||
|
"start":0,"end":84,"loc":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},
|
||||||
|
"sourceType": "script",
|
||||||
|
"interpreter": null,
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "ClassDeclaration",
|
||||||
|
"start":0,"end":84,"loc":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":6,"end":9,"loc":{"start":{"line":1,"column":6},"end":{"line":1,"column":9},"identifierName":"Foo"},
|
||||||
|
"name": "Foo"
|
||||||
|
},
|
||||||
|
"superClass": null,
|
||||||
|
"body": {
|
||||||
|
"type": "ClassBody",
|
||||||
|
"start":10,"end":84,"loc":{"start":{"line":1,"column":10},"end":{"line":7,"column":1}},
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "ClassPrivateProperty",
|
||||||
|
"start":14,"end":28,"loc":{"start":{"line":2,"column":2},"end":{"line":2,"column":16}},
|
||||||
|
"static": true,
|
||||||
|
"key": {
|
||||||
|
"type": "PrivateName",
|
||||||
|
"start":21,"end":23,"loc":{"start":{"line":2,"column":9},"end":{"line":2,"column":11}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":22,"end":23,"loc":{"start":{"line":2,"column":10},"end":{"line":2,"column":11},"identifierName":"x"},
|
||||||
|
"name": "x"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"value": {
|
||||||
|
"type": "NumericLiteral",
|
||||||
|
"start":26,"end":27,"loc":{"start":{"line":2,"column":14},"end":{"line":2,"column":15}},
|
||||||
|
"extra": {
|
||||||
|
"rawValue": 1,
|
||||||
|
"raw": "1"
|
||||||
|
},
|
||||||
|
"value": 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ClassMethod",
|
||||||
|
"start":32,"end":82,"loc":{"start":{"line":4,"column":2},"end":{"line":6,"column":3}},
|
||||||
|
"static": true,
|
||||||
|
"key": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":39,"end":43,"loc":{"start":{"line":4,"column":9},"end":{"line":4,"column":13},"identifierName":"test"},
|
||||||
|
"name": "test"
|
||||||
|
},
|
||||||
|
"computed": false,
|
||||||
|
"kind": "method",
|
||||||
|
"id": null,
|
||||||
|
"generator": false,
|
||||||
|
"async": false,
|
||||||
|
"params": [],
|
||||||
|
"body": {
|
||||||
|
"type": "BlockStatement",
|
||||||
|
"start":46,"end":82,"loc":{"start":{"line":4,"column":16},"end":{"line":6,"column":3}},
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "ReturnStatement",
|
||||||
|
"start":52,"end":78,"loc":{"start":{"line":5,"column":4},"end":{"line":5,"column":30}},
|
||||||
|
"argument": {
|
||||||
|
"type": "OptionalCallExpression",
|
||||||
|
"start":59,"end":77,"loc":{"start":{"line":5,"column":11},"end":{"line":5,"column":29}},
|
||||||
|
"callee": {
|
||||||
|
"type": "OptionalMemberExpression",
|
||||||
|
"start":59,"end":74,"loc":{"start":{"line":5,"column":11},"end":{"line":5,"column":26}},
|
||||||
|
"object": {
|
||||||
|
"type": "OptionalMemberExpression",
|
||||||
|
"start":59,"end":66,"loc":{"start":{"line":5,"column":11},"end":{"line":5,"column":18}},
|
||||||
|
"object": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":59,"end":62,"loc":{"start":{"line":5,"column":11},"end":{"line":5,"column":14},"identifierName":"Foo"},
|
||||||
|
"name": "Foo"
|
||||||
|
},
|
||||||
|
"property": {
|
||||||
|
"type": "PrivateName",
|
||||||
|
"start":64,"end":66,"loc":{"start":{"line":5,"column":16},"end":{"line":5,"column":18}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":65,"end":66,"loc":{"start":{"line":5,"column":17},"end":{"line":5,"column":18},"identifierName":"x"},
|
||||||
|
"name": "x"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"computed": false,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"property": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":67,"end":74,"loc":{"start":{"line":5,"column":19},"end":{"line":5,"column":26},"identifierName":"toFixed"},
|
||||||
|
"name": "toFixed"
|
||||||
|
},
|
||||||
|
"computed": false,
|
||||||
|
"optional": false
|
||||||
|
},
|
||||||
|
"arguments": [
|
||||||
|
{
|
||||||
|
"type": "NumericLiteral",
|
||||||
|
"start":75,"end":76,"loc":{"start":{"line":5,"column":27},"end":{"line":5,"column":28}},
|
||||||
|
"extra": {
|
||||||
|
"rawValue": 2,
|
||||||
|
"raw": "2"
|
||||||
|
},
|
||||||
|
"value": 2
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"directives": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"directives": []
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
class Foo {
|
||||||
|
static #x = 1;
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
return Foo?.#x.toFixed;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"plugins": ["classPrivateProperties"]
|
||||||
|
}
|
||||||
@ -0,0 +1,110 @@
|
|||||||
|
{
|
||||||
|
"type": "File",
|
||||||
|
"start":0,"end":81,"loc":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},
|
||||||
|
"program": {
|
||||||
|
"type": "Program",
|
||||||
|
"start":0,"end":81,"loc":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},
|
||||||
|
"sourceType": "script",
|
||||||
|
"interpreter": null,
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "ClassDeclaration",
|
||||||
|
"start":0,"end":81,"loc":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":6,"end":9,"loc":{"start":{"line":1,"column":6},"end":{"line":1,"column":9},"identifierName":"Foo"},
|
||||||
|
"name": "Foo"
|
||||||
|
},
|
||||||
|
"superClass": null,
|
||||||
|
"body": {
|
||||||
|
"type": "ClassBody",
|
||||||
|
"start":10,"end":81,"loc":{"start":{"line":1,"column":10},"end":{"line":7,"column":1}},
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "ClassPrivateProperty",
|
||||||
|
"start":14,"end":28,"loc":{"start":{"line":2,"column":2},"end":{"line":2,"column":16}},
|
||||||
|
"static": true,
|
||||||
|
"key": {
|
||||||
|
"type": "PrivateName",
|
||||||
|
"start":21,"end":23,"loc":{"start":{"line":2,"column":9},"end":{"line":2,"column":11}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":22,"end":23,"loc":{"start":{"line":2,"column":10},"end":{"line":2,"column":11},"identifierName":"x"},
|
||||||
|
"name": "x"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"value": {
|
||||||
|
"type": "NumericLiteral",
|
||||||
|
"start":26,"end":27,"loc":{"start":{"line":2,"column":14},"end":{"line":2,"column":15}},
|
||||||
|
"extra": {
|
||||||
|
"rawValue": 1,
|
||||||
|
"raw": "1"
|
||||||
|
},
|
||||||
|
"value": 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ClassMethod",
|
||||||
|
"start":32,"end":79,"loc":{"start":{"line":4,"column":2},"end":{"line":6,"column":3}},
|
||||||
|
"static": true,
|
||||||
|
"key": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":39,"end":43,"loc":{"start":{"line":4,"column":9},"end":{"line":4,"column":13},"identifierName":"test"},
|
||||||
|
"name": "test"
|
||||||
|
},
|
||||||
|
"computed": false,
|
||||||
|
"kind": "method",
|
||||||
|
"id": null,
|
||||||
|
"generator": false,
|
||||||
|
"async": false,
|
||||||
|
"params": [],
|
||||||
|
"body": {
|
||||||
|
"type": "BlockStatement",
|
||||||
|
"start":46,"end":79,"loc":{"start":{"line":4,"column":16},"end":{"line":6,"column":3}},
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "ReturnStatement",
|
||||||
|
"start":52,"end":75,"loc":{"start":{"line":5,"column":4},"end":{"line":5,"column":27}},
|
||||||
|
"argument": {
|
||||||
|
"type": "OptionalMemberExpression",
|
||||||
|
"start":59,"end":74,"loc":{"start":{"line":5,"column":11},"end":{"line":5,"column":26}},
|
||||||
|
"object": {
|
||||||
|
"type": "OptionalMemberExpression",
|
||||||
|
"start":59,"end":66,"loc":{"start":{"line":5,"column":11},"end":{"line":5,"column":18}},
|
||||||
|
"object": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":59,"end":62,"loc":{"start":{"line":5,"column":11},"end":{"line":5,"column":14},"identifierName":"Foo"},
|
||||||
|
"name": "Foo"
|
||||||
|
},
|
||||||
|
"property": {
|
||||||
|
"type": "PrivateName",
|
||||||
|
"start":64,"end":66,"loc":{"start":{"line":5,"column":16},"end":{"line":5,"column":18}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":65,"end":66,"loc":{"start":{"line":5,"column":17},"end":{"line":5,"column":18},"identifierName":"x"},
|
||||||
|
"name": "x"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"computed": false,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"property": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":67,"end":74,"loc":{"start":{"line":5,"column":19},"end":{"line":5,"column":26},"identifierName":"toFixed"},
|
||||||
|
"name": "toFixed"
|
||||||
|
},
|
||||||
|
"computed": false,
|
||||||
|
"optional": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"directives": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"directives": []
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
class Foo {
|
||||||
|
static #x = 1;
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
return Foo?.#x;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"plugins": ["classPrivateProperties"]
|
||||||
|
}
|
||||||
@ -0,0 +1,99 @@
|
|||||||
|
{
|
||||||
|
"type": "File",
|
||||||
|
"start":0,"end":73,"loc":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},
|
||||||
|
"program": {
|
||||||
|
"type": "Program",
|
||||||
|
"start":0,"end":73,"loc":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},
|
||||||
|
"sourceType": "script",
|
||||||
|
"interpreter": null,
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "ClassDeclaration",
|
||||||
|
"start":0,"end":73,"loc":{"start":{"line":1,"column":0},"end":{"line":7,"column":1}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":6,"end":9,"loc":{"start":{"line":1,"column":6},"end":{"line":1,"column":9},"identifierName":"Foo"},
|
||||||
|
"name": "Foo"
|
||||||
|
},
|
||||||
|
"superClass": null,
|
||||||
|
"body": {
|
||||||
|
"type": "ClassBody",
|
||||||
|
"start":10,"end":73,"loc":{"start":{"line":1,"column":10},"end":{"line":7,"column":1}},
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "ClassPrivateProperty",
|
||||||
|
"start":14,"end":28,"loc":{"start":{"line":2,"column":2},"end":{"line":2,"column":16}},
|
||||||
|
"static": true,
|
||||||
|
"key": {
|
||||||
|
"type": "PrivateName",
|
||||||
|
"start":21,"end":23,"loc":{"start":{"line":2,"column":9},"end":{"line":2,"column":11}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":22,"end":23,"loc":{"start":{"line":2,"column":10},"end":{"line":2,"column":11},"identifierName":"x"},
|
||||||
|
"name": "x"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"value": {
|
||||||
|
"type": "NumericLiteral",
|
||||||
|
"start":26,"end":27,"loc":{"start":{"line":2,"column":14},"end":{"line":2,"column":15}},
|
||||||
|
"extra": {
|
||||||
|
"rawValue": 1,
|
||||||
|
"raw": "1"
|
||||||
|
},
|
||||||
|
"value": 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ClassMethod",
|
||||||
|
"start":32,"end":71,"loc":{"start":{"line":4,"column":2},"end":{"line":6,"column":3}},
|
||||||
|
"static": true,
|
||||||
|
"key": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":39,"end":43,"loc":{"start":{"line":4,"column":9},"end":{"line":4,"column":13},"identifierName":"test"},
|
||||||
|
"name": "test"
|
||||||
|
},
|
||||||
|
"computed": false,
|
||||||
|
"kind": "method",
|
||||||
|
"id": null,
|
||||||
|
"generator": false,
|
||||||
|
"async": false,
|
||||||
|
"params": [],
|
||||||
|
"body": {
|
||||||
|
"type": "BlockStatement",
|
||||||
|
"start":46,"end":71,"loc":{"start":{"line":4,"column":16},"end":{"line":6,"column":3}},
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"type": "ReturnStatement",
|
||||||
|
"start":52,"end":67,"loc":{"start":{"line":5,"column":4},"end":{"line":5,"column":19}},
|
||||||
|
"argument": {
|
||||||
|
"type": "OptionalMemberExpression",
|
||||||
|
"start":59,"end":66,"loc":{"start":{"line":5,"column":11},"end":{"line":5,"column":18}},
|
||||||
|
"object": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":59,"end":62,"loc":{"start":{"line":5,"column":11},"end":{"line":5,"column":14},"identifierName":"Foo"},
|
||||||
|
"name": "Foo"
|
||||||
|
},
|
||||||
|
"property": {
|
||||||
|
"type": "PrivateName",
|
||||||
|
"start":64,"end":66,"loc":{"start":{"line":5,"column":16},"end":{"line":5,"column":18}},
|
||||||
|
"id": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"start":65,"end":66,"loc":{"start":{"line":5,"column":17},"end":{"line":5,"column":18},"identifierName":"x"},
|
||||||
|
"name": "x"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"computed": false,
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"directives": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"directives": []
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,122 @@
|
|||||||
|
class Foo {
|
||||||
|
static #x = 1;
|
||||||
|
static #m = function() { return this.#x; };
|
||||||
|
static #self = Foo;
|
||||||
|
static self = Foo;
|
||||||
|
static getSelf() { return this }
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
const o = { Foo: Foo };
|
||||||
|
const deep = { very: { o } };
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(o?.Foo.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#m().toString).toEqual(1..toString);
|
||||||
|
expect(o?.Foo.#m().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(deep?.very.o?.Foo.#m()).toEqual(1);
|
||||||
|
expect(deep?.very.o?.Foo.#m().toString).toEqual(1..toString);
|
||||||
|
expect(deep?.very.o?.Foo.#m().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.self.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.self.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.self?.self.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.self?.self.#m()).toEqual(1);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.getSelf().#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf?.().#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf().#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.().#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf()?.self.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.self.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.self.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.self.#m()).toEqual(1);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#m().toString).toEqual(1..toString);
|
||||||
|
expect(fn?.().Foo.#m().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m()).toEqual(1);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m().toString).toEqual(1..toString);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.self.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.self.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.self?.self.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.self?.self.#m()).toEqual(1);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.getSelf().#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.().#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf().#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.().#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.self.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.self.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.self.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.self.#m()).toEqual(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static testNull() {
|
||||||
|
const o = null;;
|
||||||
|
const deep = { very: { o } };
|
||||||
|
const fn = null;
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(o?.Foo.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#m().toString).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#m().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(deep?.very.o?.Foo.#m()).toEqual(undefined);
|
||||||
|
expect(deep?.very.o?.Foo.#m().toString).toEqual(undefined);
|
||||||
|
expect(deep?.very.o?.Foo.#m().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.self.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.self.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.self?.self.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.self?.self.#m()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.getSelf().#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf?.().#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf().#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.().#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf()?.self.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.self.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.self.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.self.#m()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#m().toString).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#m().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m()).toEqual(undefined);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m().toString).toEqual(undefined);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.self.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.self.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.self?.self.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.self?.self.#m()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.getSelf().#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.().#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf().#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.().#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.self.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.self.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.self.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.self.#m()).toEqual(undefined);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
|
Foo.testNull();
|
||||||
@ -0,0 +1,66 @@
|
|||||||
|
class Foo {
|
||||||
|
static #x = 1;
|
||||||
|
static #m = function() { return this.#x; };
|
||||||
|
static #self = Foo;
|
||||||
|
static self = Foo;
|
||||||
|
static getSelf() { return this }
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
const o = { Foo: Foo };
|
||||||
|
const deep = { very: { o } };
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
o?.Foo.#m();
|
||||||
|
o?.Foo.#m().toString;
|
||||||
|
o?.Foo.#m().toString();
|
||||||
|
|
||||||
|
deep?.very.o?.Foo.#m();
|
||||||
|
deep?.very.o?.Foo.#m().toString;
|
||||||
|
deep?.very.o?.Foo.#m().toString();
|
||||||
|
|
||||||
|
o?.Foo.#self.#m();
|
||||||
|
o?.Foo.#self.self.#m();
|
||||||
|
o?.Foo.#self?.self.#m();
|
||||||
|
o?.Foo.#self.self?.self.#m();
|
||||||
|
o?.Foo.#self?.self?.self.#m();
|
||||||
|
|
||||||
|
o?.Foo.#self.getSelf().#m();
|
||||||
|
o?.Foo.#self.getSelf?.().#m();
|
||||||
|
o?.Foo.#self?.getSelf().#m();
|
||||||
|
o?.Foo.#self?.getSelf?.().#m();
|
||||||
|
o?.Foo.#self.getSelf()?.self.#m();
|
||||||
|
o?.Foo.#self.getSelf?.()?.self.#m();
|
||||||
|
o?.Foo.#self?.getSelf()?.self.#m();
|
||||||
|
o?.Foo.#self?.getSelf?.()?.self.#m();
|
||||||
|
|
||||||
|
fn?.().Foo.#m();
|
||||||
|
fn?.().Foo.#m().toString;
|
||||||
|
fn?.().Foo.#m().toString();
|
||||||
|
|
||||||
|
fnDeep?.().very.o?.Foo.#m();
|
||||||
|
fnDeep?.().very.o?.Foo.#m().toString;
|
||||||
|
fnDeep?.().very.o?.Foo.#m().toString();
|
||||||
|
|
||||||
|
fn?.().Foo.#self.#m();
|
||||||
|
fn?.().Foo.#self.self.#m();
|
||||||
|
fn?.().Foo.#self?.self.#m();
|
||||||
|
fn?.().Foo.#self.self?.self.#m();
|
||||||
|
fn?.().Foo.#self?.self?.self.#m();
|
||||||
|
|
||||||
|
fn?.().Foo.#self.getSelf().#m();
|
||||||
|
fn?.().Foo.#self.getSelf?.().#m();
|
||||||
|
fn?.().Foo.#self?.getSelf().#m();
|
||||||
|
fn?.().Foo.#self?.getSelf?.().#m();
|
||||||
|
fn?.().Foo.#self.getSelf()?.self.#m();
|
||||||
|
fn?.().Foo.#self.getSelf?.()?.self.#m();
|
||||||
|
fn?.().Foo.#self?.getSelf()?.self.#m();
|
||||||
|
fn?.().Foo.#self?.getSelf?.()?.self.#m();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"plugins": [
|
||||||
|
["proposal-optional-chaining", { "loose": true }],
|
||||||
|
["proposal-class-properties", { "loose": true }]
|
||||||
|
]
|
||||||
|
}
|
||||||
@ -0,0 +1,95 @@
|
|||||||
|
function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError("attempted to use private field on non-instance"); } return receiver; }
|
||||||
|
|
||||||
|
var id = 0;
|
||||||
|
|
||||||
|
function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; }
|
||||||
|
|
||||||
|
class Foo {
|
||||||
|
static getSelf() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
var _deep$very$o, _deep$very$o2, _deep$very$o3, _ref, _ref2, _self2, _classPrivateFieldLoo, _ref3, _ref4, _getSelf, _ref5, _ref6, _classPrivateFieldLoo2, _call, _getSelf2, _getSelf3, _fnDeep$very$o, _fnDeep$very$o2, _fnDeep$very$o3, _ref7, _ref8, _self3, _classPrivateFieldLoo3, _ref9, _ref10, _getSelf4, _ref11, _ref12, _classPrivateFieldLoo4, _call2, _getSelf5, _getSelf6, _ref13, _ref14, _ref15, _ref16, _ref17, _ref18, _ref19, _ref20, _ref21, _ref22;
|
||||||
|
|
||||||
|
const o = {
|
||||||
|
Foo: Foo
|
||||||
|
};
|
||||||
|
const deep = {
|
||||||
|
very: {
|
||||||
|
o
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _m)[_m]();
|
||||||
|
o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _m)[_m]().toString;
|
||||||
|
o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _m)[_m]().toString();
|
||||||
|
(_deep$very$o = deep == null ? void 0 : deep.very.o) === null || _deep$very$o === void 0 ? void 0 : _classPrivateFieldLooseBase(_deep$very$o.Foo, _m)[_m]();
|
||||||
|
(_deep$very$o2 = deep == null ? void 0 : deep.very.o) === null || _deep$very$o2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_deep$very$o2.Foo, _m)[_m]().toString;
|
||||||
|
(_deep$very$o3 = deep == null ? void 0 : deep.very.o) === null || _deep$very$o3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_deep$very$o3.Foo, _m)[_m]().toString();
|
||||||
|
o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(_classPrivateFieldLooseBase(o.Foo, _self)[_self], _m)[_m]();
|
||||||
|
o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(_classPrivateFieldLooseBase(o.Foo, _self)[_self].self, _m)[_m]();
|
||||||
|
(_ref = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self]) === null || _ref === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref.self, _m)[_m]();
|
||||||
|
(_ref2 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self].self) === null || _ref2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref2.self, _m)[_m]();
|
||||||
|
(_self2 = (_ref13 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self]) == null ? void 0 : _ref13.self) === null || _self2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_self2.self, _m)[_m]();
|
||||||
|
o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(_classPrivateFieldLooseBase(o.Foo, _self)[_self].getSelf(), _m)[_m]();
|
||||||
|
(_ref3 = o === null || o === void 0 ? void 0 : (_classPrivateFieldLoo = _classPrivateFieldLooseBase(o.Foo, _self)[_self]).getSelf) === null || _ref3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref3.call(_classPrivateFieldLoo), _m)[_m]();
|
||||||
|
(_ref4 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self]) === null || _ref4 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref4.getSelf(), _m)[_m]();
|
||||||
|
(_getSelf = (_ref14 = _ref5 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self]) == null ? void 0 : _ref14.getSelf) === null || _getSelf === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf.call(_ref5), _m)[_m]();
|
||||||
|
(_ref6 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self].getSelf()) === null || _ref6 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref6.self, _m)[_m]();
|
||||||
|
(_call = (_ref15 = o === null || o === void 0 ? void 0 : (_classPrivateFieldLoo2 = _classPrivateFieldLooseBase(o.Foo, _self)[_self]).getSelf) == null ? void 0 : _ref15.call(_classPrivateFieldLoo2)) === null || _call === void 0 ? void 0 : _classPrivateFieldLooseBase(_call.self, _m)[_m]();
|
||||||
|
(_getSelf2 = (_ref16 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self]) == null ? void 0 : _ref16.getSelf()) === null || _getSelf2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf2.self, _m)[_m]();
|
||||||
|
(_getSelf3 = (_ref17 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self]) == null ? void 0 : _ref17.getSelf == null ? void 0 : _ref17.getSelf()) === null || _getSelf3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf3.self, _m)[_m]();
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _m)[_m]();
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _m)[_m]().toString;
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _m)[_m]().toString();
|
||||||
|
(_fnDeep$very$o = fnDeep == null ? void 0 : fnDeep().very.o) === null || _fnDeep$very$o === void 0 ? void 0 : _classPrivateFieldLooseBase(_fnDeep$very$o.Foo, _m)[_m]();
|
||||||
|
(_fnDeep$very$o2 = fnDeep == null ? void 0 : fnDeep().very.o) === null || _fnDeep$very$o2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_fnDeep$very$o2.Foo, _m)[_m]().toString;
|
||||||
|
(_fnDeep$very$o3 = fnDeep == null ? void 0 : fnDeep().very.o) === null || _fnDeep$very$o3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_fnDeep$very$o3.Foo, _m)[_m]().toString();
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(_classPrivateFieldLooseBase(fn().Foo, _self)[_self], _m)[_m]();
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(_classPrivateFieldLooseBase(fn().Foo, _self)[_self].self, _m)[_m]();
|
||||||
|
(_ref7 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self]) === null || _ref7 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref7.self, _m)[_m]();
|
||||||
|
(_ref8 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self].self) === null || _ref8 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref8.self, _m)[_m]();
|
||||||
|
(_self3 = (_ref18 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self]) == null ? void 0 : _ref18.self) === null || _self3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_self3.self, _m)[_m]();
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(_classPrivateFieldLooseBase(fn().Foo, _self)[_self].getSelf(), _m)[_m]();
|
||||||
|
(_ref9 = fn === null || fn === void 0 ? void 0 : (_classPrivateFieldLoo3 = _classPrivateFieldLooseBase(fn().Foo, _self)[_self]).getSelf) === null || _ref9 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref9.call(_classPrivateFieldLoo3), _m)[_m]();
|
||||||
|
(_ref10 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self]) === null || _ref10 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref10.getSelf(), _m)[_m]();
|
||||||
|
(_getSelf4 = (_ref19 = _ref11 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self]) == null ? void 0 : _ref19.getSelf) === null || _getSelf4 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf4.call(_ref11), _m)[_m]();
|
||||||
|
(_ref12 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self].getSelf()) === null || _ref12 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref12.self, _m)[_m]();
|
||||||
|
(_call2 = (_ref20 = fn === null || fn === void 0 ? void 0 : (_classPrivateFieldLoo4 = _classPrivateFieldLooseBase(fn().Foo, _self)[_self]).getSelf) == null ? void 0 : _ref20.call(_classPrivateFieldLoo4)) === null || _call2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_call2.self, _m)[_m]();
|
||||||
|
(_getSelf5 = (_ref21 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self]) == null ? void 0 : _ref21.getSelf()) === null || _getSelf5 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf5.self, _m)[_m]();
|
||||||
|
(_getSelf6 = (_ref22 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self]) == null ? void 0 : _ref22.getSelf == null ? void 0 : _ref22.getSelf()) === null || _getSelf6 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf6.self, _m)[_m]();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
var _x = _classPrivateFieldLooseKey("x");
|
||||||
|
|
||||||
|
var _m = _classPrivateFieldLooseKey("m");
|
||||||
|
|
||||||
|
var _self = _classPrivateFieldLooseKey("self");
|
||||||
|
|
||||||
|
Object.defineProperty(Foo, _x, {
|
||||||
|
writable: true,
|
||||||
|
value: 1
|
||||||
|
});
|
||||||
|
Object.defineProperty(Foo, _m, {
|
||||||
|
writable: true,
|
||||||
|
value: function () {
|
||||||
|
return _classPrivateFieldLooseBase(this, _x)[_x];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(Foo, _self, {
|
||||||
|
writable: true,
|
||||||
|
value: Foo
|
||||||
|
});
|
||||||
|
Foo.self = Foo;
|
||||||
|
Foo.test();
|
||||||
@ -0,0 +1,122 @@
|
|||||||
|
class Foo {
|
||||||
|
static #x = 1;
|
||||||
|
static #m = function() { return this.#x; };
|
||||||
|
static #self = Foo;
|
||||||
|
static self = Foo;
|
||||||
|
static getSelf() { return this }
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
const o = { Foo: Foo };
|
||||||
|
const deep = { very: { o } };
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(o?.Foo.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#m().toString).toEqual(1..toString);
|
||||||
|
expect(o?.Foo.#m().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(deep?.very.o?.Foo.#m()).toEqual(1);
|
||||||
|
expect(deep?.very.o?.Foo.#m().toString).toEqual(1..toString);
|
||||||
|
expect(deep?.very.o?.Foo.#m().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.self.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.self.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.self?.self.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.self?.self.#m()).toEqual(1);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.getSelf().#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf?.().#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf().#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.().#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf()?.self.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.self.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.self.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.self.#m()).toEqual(1);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#m().toString).toEqual(1..toString);
|
||||||
|
expect(fn?.().Foo.#m().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m()).toEqual(1);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m().toString).toEqual(1..toString);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.self.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.self.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.self?.self.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.self?.self.#m()).toEqual(1);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.getSelf().#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.().#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf().#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.().#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.self.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.self.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.self.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.self.#m()).toEqual(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static testNull() {
|
||||||
|
const o = null;;
|
||||||
|
const deep = { very: { o } };
|
||||||
|
const fn = null;
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(o?.Foo.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#m().toString).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#m().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(deep?.very.o?.Foo.#m()).toEqual(undefined);
|
||||||
|
expect(deep?.very.o?.Foo.#m().toString).toEqual(undefined);
|
||||||
|
expect(deep?.very.o?.Foo.#m().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.self.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.self.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.self?.self.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.self?.self.#m()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.getSelf().#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf?.().#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf().#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.().#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf()?.self.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.self.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.self.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.self.#m()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#m().toString).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#m().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m()).toEqual(undefined);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m().toString).toEqual(undefined);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.self.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.self.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.self?.self.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.self?.self.#m()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.getSelf().#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.().#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf().#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.().#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.self.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.self.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.self.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.self.#m()).toEqual(undefined);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
|
Foo.testNull();
|
||||||
@ -0,0 +1,66 @@
|
|||||||
|
class Foo {
|
||||||
|
static #x = 1;
|
||||||
|
static #m = function() { return this.#x; };
|
||||||
|
static #self = Foo;
|
||||||
|
static self = Foo;
|
||||||
|
static getSelf() { return this }
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
const o = { Foo: Foo };
|
||||||
|
const deep = { very: { o } };
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
o?.Foo.#m();
|
||||||
|
o?.Foo.#m().toString;
|
||||||
|
o?.Foo.#m().toString();
|
||||||
|
|
||||||
|
deep?.very.o?.Foo.#m();
|
||||||
|
deep?.very.o?.Foo.#m().toString;
|
||||||
|
deep?.very.o?.Foo.#m().toString();
|
||||||
|
|
||||||
|
o?.Foo.#self.#m();
|
||||||
|
o?.Foo.#self.self.#m();
|
||||||
|
o?.Foo.#self?.self.#m();
|
||||||
|
o?.Foo.#self.self?.self.#m();
|
||||||
|
o?.Foo.#self?.self?.self.#m();
|
||||||
|
|
||||||
|
o?.Foo.#self.getSelf().#m();
|
||||||
|
o?.Foo.#self.getSelf?.().#m();
|
||||||
|
o?.Foo.#self?.getSelf().#m();
|
||||||
|
o?.Foo.#self?.getSelf?.().#m();
|
||||||
|
o?.Foo.#self.getSelf()?.self.#m();
|
||||||
|
o?.Foo.#self.getSelf?.()?.self.#m();
|
||||||
|
o?.Foo.#self?.getSelf()?.self.#m();
|
||||||
|
o?.Foo.#self?.getSelf?.()?.self.#m();
|
||||||
|
|
||||||
|
fn?.().Foo.#m();
|
||||||
|
fn?.().Foo.#m().toString;
|
||||||
|
fn?.().Foo.#m().toString();
|
||||||
|
|
||||||
|
fnDeep?.().very.o?.Foo.#m();
|
||||||
|
fnDeep?.().very.o?.Foo.#m().toString;
|
||||||
|
fnDeep?.().very.o?.Foo.#m().toString();
|
||||||
|
|
||||||
|
fn?.().Foo.#self.#m();
|
||||||
|
fn?.().Foo.#self.self.#m();
|
||||||
|
fn?.().Foo.#self?.self.#m();
|
||||||
|
fn?.().Foo.#self.self?.self.#m();
|
||||||
|
fn?.().Foo.#self?.self?.self.#m();
|
||||||
|
|
||||||
|
fn?.().Foo.#self.getSelf().#m();
|
||||||
|
fn?.().Foo.#self.getSelf?.().#m();
|
||||||
|
fn?.().Foo.#self?.getSelf().#m();
|
||||||
|
fn?.().Foo.#self?.getSelf?.().#m();
|
||||||
|
fn?.().Foo.#self.getSelf()?.self.#m();
|
||||||
|
fn?.().Foo.#self.getSelf?.()?.self.#m();
|
||||||
|
fn?.().Foo.#self?.getSelf()?.self.#m();
|
||||||
|
fn?.().Foo.#self?.getSelf?.()?.self.#m();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"plugins": [["proposal-class-properties", { "loose": true }]],
|
||||||
|
"minNodeVersion": "14.0.0"
|
||||||
|
}
|
||||||
@ -0,0 +1,95 @@
|
|||||||
|
function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError("attempted to use private field on non-instance"); } return receiver; }
|
||||||
|
|
||||||
|
var id = 0;
|
||||||
|
|
||||||
|
function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; }
|
||||||
|
|
||||||
|
class Foo {
|
||||||
|
static getSelf() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
var _deep$very$o, _deep$very$o2, _deep$very$o3, _ref, _ref2, _self2, _classPrivateFieldLoo, _ref3, _ref4, _getSelf, _ref5, _ref6, _classPrivateFieldLoo2, _call, _getSelf2, _getSelf3, _fnDeep$very$o, _fnDeep$very$o2, _fnDeep$very$o3, _ref7, _ref8, _self3, _classPrivateFieldLoo3, _ref9, _ref10, _getSelf4, _ref11, _ref12, _classPrivateFieldLoo4, _call2, _getSelf5, _getSelf6;
|
||||||
|
|
||||||
|
const o = {
|
||||||
|
Foo: Foo
|
||||||
|
};
|
||||||
|
const deep = {
|
||||||
|
very: {
|
||||||
|
o
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _m)[_m]();
|
||||||
|
o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _m)[_m]().toString;
|
||||||
|
o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _m)[_m]().toString();
|
||||||
|
(_deep$very$o = deep?.very.o) === null || _deep$very$o === void 0 ? void 0 : _classPrivateFieldLooseBase(_deep$very$o.Foo, _m)[_m]();
|
||||||
|
(_deep$very$o2 = deep?.very.o) === null || _deep$very$o2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_deep$very$o2.Foo, _m)[_m]().toString;
|
||||||
|
(_deep$very$o3 = deep?.very.o) === null || _deep$very$o3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_deep$very$o3.Foo, _m)[_m]().toString();
|
||||||
|
o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(_classPrivateFieldLooseBase(o.Foo, _self)[_self], _m)[_m]();
|
||||||
|
o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(_classPrivateFieldLooseBase(o.Foo, _self)[_self].self, _m)[_m]();
|
||||||
|
(_ref = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self]) === null || _ref === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref.self, _m)[_m]();
|
||||||
|
(_ref2 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self].self) === null || _ref2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref2.self, _m)[_m]();
|
||||||
|
(_self2 = (o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self])?.self) === null || _self2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_self2.self, _m)[_m]();
|
||||||
|
o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(_classPrivateFieldLooseBase(o.Foo, _self)[_self].getSelf(), _m)[_m]();
|
||||||
|
(_ref3 = o === null || o === void 0 ? void 0 : (_classPrivateFieldLoo = _classPrivateFieldLooseBase(o.Foo, _self)[_self]).getSelf) === null || _ref3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref3.call(_classPrivateFieldLoo), _m)[_m]();
|
||||||
|
(_ref4 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self]) === null || _ref4 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref4.getSelf(), _m)[_m]();
|
||||||
|
(_getSelf = (_ref5 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self])?.getSelf) === null || _getSelf === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf.call(_ref5), _m)[_m]();
|
||||||
|
(_ref6 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self].getSelf()) === null || _ref6 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref6.self, _m)[_m]();
|
||||||
|
(_call = (o === null || o === void 0 ? void 0 : (_classPrivateFieldLoo2 = _classPrivateFieldLooseBase(o.Foo, _self)[_self]).getSelf)?.call(_classPrivateFieldLoo2)) === null || _call === void 0 ? void 0 : _classPrivateFieldLooseBase(_call.self, _m)[_m]();
|
||||||
|
(_getSelf2 = (o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self])?.getSelf()) === null || _getSelf2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf2.self, _m)[_m]();
|
||||||
|
(_getSelf3 = (o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self])?.getSelf?.()) === null || _getSelf3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf3.self, _m)[_m]();
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _m)[_m]();
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _m)[_m]().toString;
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _m)[_m]().toString();
|
||||||
|
(_fnDeep$very$o = fnDeep?.().very.o) === null || _fnDeep$very$o === void 0 ? void 0 : _classPrivateFieldLooseBase(_fnDeep$very$o.Foo, _m)[_m]();
|
||||||
|
(_fnDeep$very$o2 = fnDeep?.().very.o) === null || _fnDeep$very$o2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_fnDeep$very$o2.Foo, _m)[_m]().toString;
|
||||||
|
(_fnDeep$very$o3 = fnDeep?.().very.o) === null || _fnDeep$very$o3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_fnDeep$very$o3.Foo, _m)[_m]().toString();
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(_classPrivateFieldLooseBase(fn().Foo, _self)[_self], _m)[_m]();
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(_classPrivateFieldLooseBase(fn().Foo, _self)[_self].self, _m)[_m]();
|
||||||
|
(_ref7 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self]) === null || _ref7 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref7.self, _m)[_m]();
|
||||||
|
(_ref8 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self].self) === null || _ref8 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref8.self, _m)[_m]();
|
||||||
|
(_self3 = (fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self])?.self) === null || _self3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_self3.self, _m)[_m]();
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(_classPrivateFieldLooseBase(fn().Foo, _self)[_self].getSelf(), _m)[_m]();
|
||||||
|
(_ref9 = fn === null || fn === void 0 ? void 0 : (_classPrivateFieldLoo3 = _classPrivateFieldLooseBase(fn().Foo, _self)[_self]).getSelf) === null || _ref9 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref9.call(_classPrivateFieldLoo3), _m)[_m]();
|
||||||
|
(_ref10 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self]) === null || _ref10 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref10.getSelf(), _m)[_m]();
|
||||||
|
(_getSelf4 = (_ref11 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self])?.getSelf) === null || _getSelf4 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf4.call(_ref11), _m)[_m]();
|
||||||
|
(_ref12 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self].getSelf()) === null || _ref12 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref12.self, _m)[_m]();
|
||||||
|
(_call2 = (fn === null || fn === void 0 ? void 0 : (_classPrivateFieldLoo4 = _classPrivateFieldLooseBase(fn().Foo, _self)[_self]).getSelf)?.call(_classPrivateFieldLoo4)) === null || _call2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_call2.self, _m)[_m]();
|
||||||
|
(_getSelf5 = (fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self])?.getSelf()) === null || _getSelf5 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf5.self, _m)[_m]();
|
||||||
|
(_getSelf6 = (fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self])?.getSelf?.()) === null || _getSelf6 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf6.self, _m)[_m]();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
var _x = _classPrivateFieldLooseKey("x");
|
||||||
|
|
||||||
|
var _m = _classPrivateFieldLooseKey("m");
|
||||||
|
|
||||||
|
var _self = _classPrivateFieldLooseKey("self");
|
||||||
|
|
||||||
|
Object.defineProperty(Foo, _x, {
|
||||||
|
writable: true,
|
||||||
|
value: 1
|
||||||
|
});
|
||||||
|
Object.defineProperty(Foo, _m, {
|
||||||
|
writable: true,
|
||||||
|
value: function () {
|
||||||
|
return _classPrivateFieldLooseBase(this, _x)[_x];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(Foo, _self, {
|
||||||
|
writable: true,
|
||||||
|
value: Foo
|
||||||
|
});
|
||||||
|
Foo.self = Foo;
|
||||||
|
Foo.test();
|
||||||
@ -0,0 +1,121 @@
|
|||||||
|
class Foo {
|
||||||
|
static #x = 1;
|
||||||
|
static #self = Foo;
|
||||||
|
static self = Foo;
|
||||||
|
static getSelf() { return this }
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
const o = { Foo: Foo };
|
||||||
|
const deep = { very: { o } };
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(o?.Foo.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#x.toString).toEqual(1..toString);
|
||||||
|
expect(o?.Foo.#x.toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(deep?.very.o?.Foo.#x).toEqual(1);
|
||||||
|
expect(deep?.very.o?.Foo.#x.toString).toEqual(1..toString);
|
||||||
|
expect(deep?.very.o?.Foo.#x.toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.self.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.self.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.self?.self.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.self?.self.#x).toEqual(1);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.getSelf().#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf?.().#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf().#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.().#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf()?.self.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.self.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.self.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.self.#x).toEqual(1);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#x.toString).toEqual(1..toString);
|
||||||
|
expect(fn?.().Foo.#x.toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#x).toEqual(1);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#x.toString).toEqual(1..toString);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#x.toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.self.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.self.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.self?.self.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.self?.self.#x).toEqual(1);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.getSelf().#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.().#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf().#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.().#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.self.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.self.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.self.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.self.#x).toEqual(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static testNull() {
|
||||||
|
const o = null;;
|
||||||
|
const deep = { very: { o } };
|
||||||
|
const fn = null;
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(o?.Foo.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#x.toString).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#x.toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(deep?.very.o?.Foo.#x).toEqual(undefined);
|
||||||
|
expect(deep?.very.o?.Foo.#x.toString).toEqual(undefined);
|
||||||
|
expect(deep?.very.o?.Foo.#x.toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.self.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.self.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.self?.self.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.self?.self.#x).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.getSelf().#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf?.().#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf().#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.().#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf()?.self.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.self.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.self.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.self.#x).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#x.toString).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#x.toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#x).toEqual(undefined);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#x.toString).toEqual(undefined);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#x.toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.self.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.self.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.self?.self.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.self?.self.#x).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.getSelf().#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.().#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf().#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.().#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.self.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.self.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.self.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.self.#x).toEqual(undefined);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
|
Foo.testNull();
|
||||||
@ -0,0 +1,65 @@
|
|||||||
|
class Foo {
|
||||||
|
static #x = 1;
|
||||||
|
static #self = Foo;
|
||||||
|
static self = Foo;
|
||||||
|
static getSelf() { return this }
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
const o = { Foo: Foo };
|
||||||
|
const deep = { very: { o } };
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
o?.Foo.#x;
|
||||||
|
o?.Foo.#x.toString;
|
||||||
|
o?.Foo.#x.toString();
|
||||||
|
|
||||||
|
deep?.very.o?.Foo.#x;
|
||||||
|
deep?.very.o?.Foo.#x.toString;
|
||||||
|
deep?.very.o?.Foo.#x.toString();
|
||||||
|
|
||||||
|
o?.Foo.#self.#x;
|
||||||
|
o?.Foo.#self.self.#x;
|
||||||
|
o?.Foo.#self?.self.#x;
|
||||||
|
o?.Foo.#self.self?.self.#x;
|
||||||
|
o?.Foo.#self?.self?.self.#x;
|
||||||
|
|
||||||
|
o?.Foo.#self.getSelf().#x;
|
||||||
|
o?.Foo.#self.getSelf?.().#x;
|
||||||
|
o?.Foo.#self?.getSelf().#x;
|
||||||
|
o?.Foo.#self?.getSelf?.().#x;
|
||||||
|
o?.Foo.#self.getSelf()?.self.#x;
|
||||||
|
o?.Foo.#self.getSelf?.()?.self.#x;
|
||||||
|
o?.Foo.#self?.getSelf()?.self.#x;
|
||||||
|
o?.Foo.#self?.getSelf?.()?.self.#x;
|
||||||
|
|
||||||
|
fn?.().Foo.#x;
|
||||||
|
fn?.().Foo.#x.toString;
|
||||||
|
fn?.().Foo.#x.toString();
|
||||||
|
|
||||||
|
fnDeep?.().very.o?.Foo.#x;
|
||||||
|
fnDeep?.().very.o?.Foo.#x.toString;
|
||||||
|
fnDeep?.().very.o?.Foo.#x.toString();
|
||||||
|
|
||||||
|
fn?.().Foo.#self.#x;
|
||||||
|
fn?.().Foo.#self.self.#x;
|
||||||
|
fn?.().Foo.#self?.self.#x;
|
||||||
|
fn?.().Foo.#self.self?.self.#x;
|
||||||
|
fn?.().Foo.#self?.self?.self.#x;
|
||||||
|
|
||||||
|
fn?.().Foo.#self.getSelf().#x;
|
||||||
|
fn?.().Foo.#self.getSelf?.().#x;
|
||||||
|
fn?.().Foo.#self?.getSelf().#x;
|
||||||
|
fn?.().Foo.#self?.getSelf?.().#x;
|
||||||
|
fn?.().Foo.#self.getSelf()?.self.#x;
|
||||||
|
fn?.().Foo.#self.getSelf?.()?.self.#x;
|
||||||
|
fn?.().Foo.#self?.getSelf()?.self.#x;
|
||||||
|
fn?.().Foo.#self?.getSelf?.()?.self.#x;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"plugins": [
|
||||||
|
["proposal-optional-chaining", { "loose": true }],
|
||||||
|
["proposal-class-properties", { "loose": true }]
|
||||||
|
]
|
||||||
|
}
|
||||||
@ -0,0 +1,87 @@
|
|||||||
|
function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError("attempted to use private field on non-instance"); } return receiver; }
|
||||||
|
|
||||||
|
var id = 0;
|
||||||
|
|
||||||
|
function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; }
|
||||||
|
|
||||||
|
class Foo {
|
||||||
|
static getSelf() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
var _deep$very$o, _deep$very$o2, _deep$very$o3, _ref, _ref2, _self2, _classPrivateFieldLoo, _ref3, _ref4, _getSelf, _ref5, _ref6, _classPrivateFieldLoo2, _call, _getSelf2, _getSelf3, _fnDeep$very$o, _fnDeep$very$o2, _fnDeep$very$o3, _ref7, _ref8, _self3, _classPrivateFieldLoo3, _ref9, _ref10, _getSelf4, _ref11, _ref12, _classPrivateFieldLoo4, _call2, _getSelf5, _getSelf6, _ref13, _ref14, _ref15, _ref16, _ref17, _ref18, _ref19, _ref20, _ref21, _ref22;
|
||||||
|
|
||||||
|
const o = {
|
||||||
|
Foo: Foo
|
||||||
|
};
|
||||||
|
const deep = {
|
||||||
|
very: {
|
||||||
|
o
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _x)[_x];
|
||||||
|
o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _x)[_x].toString;
|
||||||
|
o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _x)[_x].toString();
|
||||||
|
(_deep$very$o = deep == null ? void 0 : deep.very.o) === null || _deep$very$o === void 0 ? void 0 : _classPrivateFieldLooseBase(_deep$very$o.Foo, _x)[_x];
|
||||||
|
(_deep$very$o2 = deep == null ? void 0 : deep.very.o) === null || _deep$very$o2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_deep$very$o2.Foo, _x)[_x].toString;
|
||||||
|
(_deep$very$o3 = deep == null ? void 0 : deep.very.o) === null || _deep$very$o3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_deep$very$o3.Foo, _x)[_x].toString();
|
||||||
|
o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(_classPrivateFieldLooseBase(o.Foo, _self)[_self], _x)[_x];
|
||||||
|
o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(_classPrivateFieldLooseBase(o.Foo, _self)[_self].self, _x)[_x];
|
||||||
|
(_ref = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self]) === null || _ref === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref.self, _x)[_x];
|
||||||
|
(_ref2 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self].self) === null || _ref2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref2.self, _x)[_x];
|
||||||
|
(_self2 = (_ref13 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self]) == null ? void 0 : _ref13.self) === null || _self2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_self2.self, _x)[_x];
|
||||||
|
o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(_classPrivateFieldLooseBase(o.Foo, _self)[_self].getSelf(), _x)[_x];
|
||||||
|
(_ref3 = o === null || o === void 0 ? void 0 : (_classPrivateFieldLoo = _classPrivateFieldLooseBase(o.Foo, _self)[_self]).getSelf) === null || _ref3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref3.call(_classPrivateFieldLoo), _x)[_x];
|
||||||
|
(_ref4 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self]) === null || _ref4 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref4.getSelf(), _x)[_x];
|
||||||
|
(_getSelf = (_ref14 = _ref5 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self]) == null ? void 0 : _ref14.getSelf) === null || _getSelf === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf.call(_ref5), _x)[_x];
|
||||||
|
(_ref6 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self].getSelf()) === null || _ref6 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref6.self, _x)[_x];
|
||||||
|
(_call = (_ref15 = o === null || o === void 0 ? void 0 : (_classPrivateFieldLoo2 = _classPrivateFieldLooseBase(o.Foo, _self)[_self]).getSelf) == null ? void 0 : _ref15.call(_classPrivateFieldLoo2)) === null || _call === void 0 ? void 0 : _classPrivateFieldLooseBase(_call.self, _x)[_x];
|
||||||
|
(_getSelf2 = (_ref16 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self]) == null ? void 0 : _ref16.getSelf()) === null || _getSelf2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf2.self, _x)[_x];
|
||||||
|
(_getSelf3 = (_ref17 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self]) == null ? void 0 : _ref17.getSelf == null ? void 0 : _ref17.getSelf()) === null || _getSelf3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf3.self, _x)[_x];
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _x)[_x];
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _x)[_x].toString;
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _x)[_x].toString();
|
||||||
|
(_fnDeep$very$o = fnDeep == null ? void 0 : fnDeep().very.o) === null || _fnDeep$very$o === void 0 ? void 0 : _classPrivateFieldLooseBase(_fnDeep$very$o.Foo, _x)[_x];
|
||||||
|
(_fnDeep$very$o2 = fnDeep == null ? void 0 : fnDeep().very.o) === null || _fnDeep$very$o2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_fnDeep$very$o2.Foo, _x)[_x].toString;
|
||||||
|
(_fnDeep$very$o3 = fnDeep == null ? void 0 : fnDeep().very.o) === null || _fnDeep$very$o3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_fnDeep$very$o3.Foo, _x)[_x].toString();
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(_classPrivateFieldLooseBase(fn().Foo, _self)[_self], _x)[_x];
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(_classPrivateFieldLooseBase(fn().Foo, _self)[_self].self, _x)[_x];
|
||||||
|
(_ref7 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self]) === null || _ref7 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref7.self, _x)[_x];
|
||||||
|
(_ref8 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self].self) === null || _ref8 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref8.self, _x)[_x];
|
||||||
|
(_self3 = (_ref18 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self]) == null ? void 0 : _ref18.self) === null || _self3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_self3.self, _x)[_x];
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(_classPrivateFieldLooseBase(fn().Foo, _self)[_self].getSelf(), _x)[_x];
|
||||||
|
(_ref9 = fn === null || fn === void 0 ? void 0 : (_classPrivateFieldLoo3 = _classPrivateFieldLooseBase(fn().Foo, _self)[_self]).getSelf) === null || _ref9 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref9.call(_classPrivateFieldLoo3), _x)[_x];
|
||||||
|
(_ref10 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self]) === null || _ref10 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref10.getSelf(), _x)[_x];
|
||||||
|
(_getSelf4 = (_ref19 = _ref11 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self]) == null ? void 0 : _ref19.getSelf) === null || _getSelf4 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf4.call(_ref11), _x)[_x];
|
||||||
|
(_ref12 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self].getSelf()) === null || _ref12 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref12.self, _x)[_x];
|
||||||
|
(_call2 = (_ref20 = fn === null || fn === void 0 ? void 0 : (_classPrivateFieldLoo4 = _classPrivateFieldLooseBase(fn().Foo, _self)[_self]).getSelf) == null ? void 0 : _ref20.call(_classPrivateFieldLoo4)) === null || _call2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_call2.self, _x)[_x];
|
||||||
|
(_getSelf5 = (_ref21 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self]) == null ? void 0 : _ref21.getSelf()) === null || _getSelf5 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf5.self, _x)[_x];
|
||||||
|
(_getSelf6 = (_ref22 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self]) == null ? void 0 : _ref22.getSelf == null ? void 0 : _ref22.getSelf()) === null || _getSelf6 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf6.self, _x)[_x];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
var _x = _classPrivateFieldLooseKey("x");
|
||||||
|
|
||||||
|
var _self = _classPrivateFieldLooseKey("self");
|
||||||
|
|
||||||
|
Object.defineProperty(Foo, _x, {
|
||||||
|
writable: true,
|
||||||
|
value: 1
|
||||||
|
});
|
||||||
|
Object.defineProperty(Foo, _self, {
|
||||||
|
writable: true,
|
||||||
|
value: Foo
|
||||||
|
});
|
||||||
|
Foo.self = Foo;
|
||||||
|
Foo.test();
|
||||||
@ -0,0 +1,121 @@
|
|||||||
|
class Foo {
|
||||||
|
static #x = 1;
|
||||||
|
static #self = Foo;
|
||||||
|
static self = Foo;
|
||||||
|
static getSelf() { return this }
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
const o = { Foo: Foo };
|
||||||
|
const deep = { very: { o } };
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(o?.Foo.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#x.toString).toEqual(1..toString);
|
||||||
|
expect(o?.Foo.#x.toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(deep?.very.o?.Foo.#x).toEqual(1);
|
||||||
|
expect(deep?.very.o?.Foo.#x.toString).toEqual(1..toString);
|
||||||
|
expect(deep?.very.o?.Foo.#x.toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.self.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.self.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.self?.self.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.self?.self.#x).toEqual(1);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.getSelf().#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf?.().#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf().#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.().#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf()?.self.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.self.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.self.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.self.#x).toEqual(1);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#x.toString).toEqual(1..toString);
|
||||||
|
expect(fn?.().Foo.#x.toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#x).toEqual(1);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#x.toString).toEqual(1..toString);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#x.toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.self.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.self.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.self?.self.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.self?.self.#x).toEqual(1);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.getSelf().#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.().#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf().#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.().#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.self.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.self.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.self.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.self.#x).toEqual(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static testNull() {
|
||||||
|
const o = null;;
|
||||||
|
const deep = { very: { o } };
|
||||||
|
const fn = null;
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(o?.Foo.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#x.toString).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#x.toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(deep?.very.o?.Foo.#x).toEqual(undefined);
|
||||||
|
expect(deep?.very.o?.Foo.#x.toString).toEqual(undefined);
|
||||||
|
expect(deep?.very.o?.Foo.#x.toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.self.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.self.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.self?.self.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.self?.self.#x).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.getSelf().#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf?.().#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf().#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.().#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf()?.self.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.self.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.self.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.self.#x).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#x.toString).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#x.toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#x).toEqual(undefined);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#x.toString).toEqual(undefined);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#x.toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.self.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.self.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.self?.self.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.self?.self.#x).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.getSelf().#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.().#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf().#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.().#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.self.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.self.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.self.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.self.#x).toEqual(undefined);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
|
Foo.testNull();
|
||||||
@ -0,0 +1,66 @@
|
|||||||
|
class Foo {
|
||||||
|
static #x = 1;
|
||||||
|
static #self = Foo;
|
||||||
|
static self = Foo;
|
||||||
|
static getSelf() { return this }
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
const o = { Foo: Foo };
|
||||||
|
const deep = { very: { o } };
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
o?.Foo.#x;
|
||||||
|
o?.Foo.#x.toString;
|
||||||
|
o?.Foo.#x.toString();
|
||||||
|
|
||||||
|
deep?.very.o?.Foo.#x;
|
||||||
|
deep?.very.o?.Foo.#x.toString;
|
||||||
|
deep?.very.o?.Foo.#x.toString();
|
||||||
|
|
||||||
|
o?.Foo.#self.#x;
|
||||||
|
o?.Foo.#self.self.#x;
|
||||||
|
o?.Foo.#self?.self.#x;
|
||||||
|
o?.Foo.#self.self?.self.#x;
|
||||||
|
o?.Foo.#self?.self?.self.#x;
|
||||||
|
|
||||||
|
o?.Foo.#self.getSelf().#x;
|
||||||
|
o?.Foo.#self.getSelf?.().#x;
|
||||||
|
o?.Foo.#self?.getSelf().#x;
|
||||||
|
o?.Foo.#self?.getSelf?.().#x;
|
||||||
|
o?.Foo.#self.getSelf()?.self.#x;
|
||||||
|
o?.Foo.#self.getSelf?.()?.self.#x;
|
||||||
|
o?.Foo.#self?.getSelf()?.self.#x;
|
||||||
|
o?.Foo.#self?.getSelf?.()?.self.#x;
|
||||||
|
|
||||||
|
fn?.().Foo.#x;
|
||||||
|
fn?.().Foo.#x.toString;
|
||||||
|
fn?.().Foo.#x.toString();
|
||||||
|
|
||||||
|
fnDeep?.().very.o?.Foo.#x;
|
||||||
|
fnDeep?.().very.o?.Foo.#x.toString;
|
||||||
|
fnDeep?.().very.o?.Foo.#x.toString();
|
||||||
|
|
||||||
|
fn?.().Foo.#self.#x;
|
||||||
|
fn?.().Foo.#self.self.#x;
|
||||||
|
fn?.().Foo.#self?.self.#x;
|
||||||
|
fn?.().Foo.#self.self?.self.#x;
|
||||||
|
fn?.().Foo.#self?.self?.self.#x;
|
||||||
|
|
||||||
|
fn?.().Foo.#self.getSelf().#x;
|
||||||
|
fn?.().Foo.#self.getSelf?.().#x;
|
||||||
|
fn?.().Foo.#self?.getSelf().#x;
|
||||||
|
fn?.().Foo.#self?.getSelf?.().#x;
|
||||||
|
fn?.().Foo.#self.getSelf()?.self.#x;
|
||||||
|
fn?.().Foo.#self.getSelf?.()?.self.#x;
|
||||||
|
fn?.().Foo.#self?.getSelf()?.self.#x;
|
||||||
|
fn?.().Foo.#self?.getSelf?.()?.self.#x;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"plugins": [["proposal-class-properties", { "loose": true }]],
|
||||||
|
"minNodeVersion": "14.0.0"
|
||||||
|
}
|
||||||
@ -0,0 +1,87 @@
|
|||||||
|
function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError("attempted to use private field on non-instance"); } return receiver; }
|
||||||
|
|
||||||
|
var id = 0;
|
||||||
|
|
||||||
|
function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; }
|
||||||
|
|
||||||
|
class Foo {
|
||||||
|
static getSelf() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
var _deep$very$o, _deep$very$o2, _deep$very$o3, _ref, _ref2, _self2, _classPrivateFieldLoo, _ref3, _ref4, _getSelf, _ref5, _ref6, _classPrivateFieldLoo2, _call, _getSelf2, _getSelf3, _fnDeep$very$o, _fnDeep$very$o2, _fnDeep$very$o3, _ref7, _ref8, _self3, _classPrivateFieldLoo3, _ref9, _ref10, _getSelf4, _ref11, _ref12, _classPrivateFieldLoo4, _call2, _getSelf5, _getSelf6;
|
||||||
|
|
||||||
|
const o = {
|
||||||
|
Foo: Foo
|
||||||
|
};
|
||||||
|
const deep = {
|
||||||
|
very: {
|
||||||
|
o
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _x)[_x];
|
||||||
|
o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _x)[_x].toString;
|
||||||
|
o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _x)[_x].toString();
|
||||||
|
(_deep$very$o = deep?.very.o) === null || _deep$very$o === void 0 ? void 0 : _classPrivateFieldLooseBase(_deep$very$o.Foo, _x)[_x];
|
||||||
|
(_deep$very$o2 = deep?.very.o) === null || _deep$very$o2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_deep$very$o2.Foo, _x)[_x].toString;
|
||||||
|
(_deep$very$o3 = deep?.very.o) === null || _deep$very$o3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_deep$very$o3.Foo, _x)[_x].toString();
|
||||||
|
o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(_classPrivateFieldLooseBase(o.Foo, _self)[_self], _x)[_x];
|
||||||
|
o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(_classPrivateFieldLooseBase(o.Foo, _self)[_self].self, _x)[_x];
|
||||||
|
(_ref = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self]) === null || _ref === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref.self, _x)[_x];
|
||||||
|
(_ref2 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self].self) === null || _ref2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref2.self, _x)[_x];
|
||||||
|
(_self2 = (o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self])?.self) === null || _self2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_self2.self, _x)[_x];
|
||||||
|
o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(_classPrivateFieldLooseBase(o.Foo, _self)[_self].getSelf(), _x)[_x];
|
||||||
|
(_ref3 = o === null || o === void 0 ? void 0 : (_classPrivateFieldLoo = _classPrivateFieldLooseBase(o.Foo, _self)[_self]).getSelf) === null || _ref3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref3.call(_classPrivateFieldLoo), _x)[_x];
|
||||||
|
(_ref4 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self]) === null || _ref4 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref4.getSelf(), _x)[_x];
|
||||||
|
(_getSelf = (_ref5 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self])?.getSelf) === null || _getSelf === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf.call(_ref5), _x)[_x];
|
||||||
|
(_ref6 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self].getSelf()) === null || _ref6 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref6.self, _x)[_x];
|
||||||
|
(_call = (o === null || o === void 0 ? void 0 : (_classPrivateFieldLoo2 = _classPrivateFieldLooseBase(o.Foo, _self)[_self]).getSelf)?.call(_classPrivateFieldLoo2)) === null || _call === void 0 ? void 0 : _classPrivateFieldLooseBase(_call.self, _x)[_x];
|
||||||
|
(_getSelf2 = (o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self])?.getSelf()) === null || _getSelf2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf2.self, _x)[_x];
|
||||||
|
(_getSelf3 = (o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self])?.getSelf?.()) === null || _getSelf3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf3.self, _x)[_x];
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _x)[_x];
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _x)[_x].toString;
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _x)[_x].toString();
|
||||||
|
(_fnDeep$very$o = fnDeep?.().very.o) === null || _fnDeep$very$o === void 0 ? void 0 : _classPrivateFieldLooseBase(_fnDeep$very$o.Foo, _x)[_x];
|
||||||
|
(_fnDeep$very$o2 = fnDeep?.().very.o) === null || _fnDeep$very$o2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_fnDeep$very$o2.Foo, _x)[_x].toString;
|
||||||
|
(_fnDeep$very$o3 = fnDeep?.().very.o) === null || _fnDeep$very$o3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_fnDeep$very$o3.Foo, _x)[_x].toString();
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(_classPrivateFieldLooseBase(fn().Foo, _self)[_self], _x)[_x];
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(_classPrivateFieldLooseBase(fn().Foo, _self)[_self].self, _x)[_x];
|
||||||
|
(_ref7 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self]) === null || _ref7 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref7.self, _x)[_x];
|
||||||
|
(_ref8 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self].self) === null || _ref8 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref8.self, _x)[_x];
|
||||||
|
(_self3 = (fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self])?.self) === null || _self3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_self3.self, _x)[_x];
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(_classPrivateFieldLooseBase(fn().Foo, _self)[_self].getSelf(), _x)[_x];
|
||||||
|
(_ref9 = fn === null || fn === void 0 ? void 0 : (_classPrivateFieldLoo3 = _classPrivateFieldLooseBase(fn().Foo, _self)[_self]).getSelf) === null || _ref9 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref9.call(_classPrivateFieldLoo3), _x)[_x];
|
||||||
|
(_ref10 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self]) === null || _ref10 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref10.getSelf(), _x)[_x];
|
||||||
|
(_getSelf4 = (_ref11 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self])?.getSelf) === null || _getSelf4 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf4.call(_ref11), _x)[_x];
|
||||||
|
(_ref12 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self].getSelf()) === null || _ref12 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref12.self, _x)[_x];
|
||||||
|
(_call2 = (fn === null || fn === void 0 ? void 0 : (_classPrivateFieldLoo4 = _classPrivateFieldLooseBase(fn().Foo, _self)[_self]).getSelf)?.call(_classPrivateFieldLoo4)) === null || _call2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_call2.self, _x)[_x];
|
||||||
|
(_getSelf5 = (fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self])?.getSelf()) === null || _getSelf5 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf5.self, _x)[_x];
|
||||||
|
(_getSelf6 = (fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self])?.getSelf?.()) === null || _getSelf6 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf6.self, _x)[_x];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
var _x = _classPrivateFieldLooseKey("x");
|
||||||
|
|
||||||
|
var _self = _classPrivateFieldLooseKey("self");
|
||||||
|
|
||||||
|
Object.defineProperty(Foo, _x, {
|
||||||
|
writable: true,
|
||||||
|
value: 1
|
||||||
|
});
|
||||||
|
Object.defineProperty(Foo, _self, {
|
||||||
|
writable: true,
|
||||||
|
value: Foo
|
||||||
|
});
|
||||||
|
Foo.self = Foo;
|
||||||
|
Foo.test();
|
||||||
@ -0,0 +1,126 @@
|
|||||||
|
class Foo {
|
||||||
|
static #x = 1;
|
||||||
|
static #m = function() { return this.#x; };
|
||||||
|
static #self = Foo;
|
||||||
|
static self = Foo;
|
||||||
|
static getSelf() { return this }
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
const o = { Foo: Foo };
|
||||||
|
const deep = { very: { o } };
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(Foo.#m?.()).toEqual(1);
|
||||||
|
expect(Foo.#m?.().toString).toEqual(1..toString);
|
||||||
|
expect(Foo.#m?.().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(o?.Foo.#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#m?.().toString).toEqual(1..toString);
|
||||||
|
expect(o?.Foo.#m?.().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(deep?.very.o?.Foo.#m?.()).toEqual(1);
|
||||||
|
expect(deep?.very.o?.Foo.#m?.().toString).toEqual(1..toString);
|
||||||
|
expect(deep?.very.o?.Foo.#m?.().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.self.#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.self.#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.self?.self.#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.self?.self.#m?.()).toEqual(1);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.getSelf().#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf?.().#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf().#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.().#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf()?.self.#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.self.#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.self.#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.self.#m?.()).toEqual(1);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#m?.().toString).toEqual(1..toString);
|
||||||
|
expect(fn?.().Foo.#m?.().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m?.()).toEqual(1);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m?.().toString).toEqual(1..toString);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m?.().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.self.#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.self.#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.self?.self.#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.self?.self.#m?.()).toEqual(1);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.getSelf().#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.().#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf().#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.().#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.self.#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.self.#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.self.#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.self.#m?.()).toEqual(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static testNull() {
|
||||||
|
const o = null;;
|
||||||
|
const deep = { very: { o } };
|
||||||
|
const fn = null;
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(o?.Foo.#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#m?.().toString).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#m?.().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(deep?.very.o?.Foo.#m?.()).toEqual(undefined);
|
||||||
|
expect(deep?.very.o?.Foo.#m?.().toString).toEqual(undefined);
|
||||||
|
expect(deep?.very.o?.Foo.#m?.().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.self?.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.self?.self.#m?.()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.getSelf().#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf?.().#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf().#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.().#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf()?.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.self.#m?.()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#m?.().toString).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#m?.().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m?.()).toEqual(undefined);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m?.().toString).toEqual(undefined);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m?.().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.self?.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.self?.self.#m?.()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.getSelf().#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.().#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf().#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.().#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.self.#m?.()).toEqual(undefined);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
|
Foo.testNull();
|
||||||
@ -0,0 +1,71 @@
|
|||||||
|
class Foo {
|
||||||
|
static #x = 1;
|
||||||
|
static #m = function() { return this.#x; };
|
||||||
|
static #self = Foo;
|
||||||
|
static self = Foo;
|
||||||
|
static getSelf() { return this }
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
const o = { Foo: Foo };
|
||||||
|
const deep = { very: { o } };
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo.#m?.();
|
||||||
|
Foo.#m?.().toString;
|
||||||
|
Foo.#m?.().toString();
|
||||||
|
|
||||||
|
o?.Foo.#m?.();
|
||||||
|
o?.Foo.#m?.().toString;
|
||||||
|
o?.Foo.#m?.().toString();
|
||||||
|
|
||||||
|
deep?.very.o?.Foo.#m?.();
|
||||||
|
deep?.very.o?.Foo.#m?.().toString;
|
||||||
|
deep?.very.o?.Foo.#m?.().toString();
|
||||||
|
|
||||||
|
o?.Foo.#self.#m?.();
|
||||||
|
o?.Foo.#self.self.#m?.();
|
||||||
|
o?.Foo.#self?.self.#m?.();
|
||||||
|
o?.Foo.#self.self?.self.#m?.();
|
||||||
|
o?.Foo.#self?.self?.self.#m?.();
|
||||||
|
|
||||||
|
o?.Foo.#self.getSelf().#m?.();
|
||||||
|
o?.Foo.#self.getSelf?.().#m?.();
|
||||||
|
o?.Foo.#self?.getSelf().#m?.();
|
||||||
|
o?.Foo.#self?.getSelf?.().#m?.();
|
||||||
|
o?.Foo.#self.getSelf()?.self.#m?.();
|
||||||
|
o?.Foo.#self.getSelf?.()?.self.#m?.();
|
||||||
|
o?.Foo.#self?.getSelf()?.self.#m?.();
|
||||||
|
o?.Foo.#self?.getSelf?.()?.self.#m?.();
|
||||||
|
|
||||||
|
fn?.().Foo.#m?.();
|
||||||
|
fn?.().Foo.#m?.().toString;
|
||||||
|
fn?.().Foo.#m?.().toString();
|
||||||
|
|
||||||
|
fnDeep?.().very.o?.Foo.#m?.();
|
||||||
|
fnDeep?.().very.o?.Foo.#m?.().toString;
|
||||||
|
fnDeep?.().very.o?.Foo.#m?.().toString();
|
||||||
|
|
||||||
|
fn?.().Foo.#self.#m?.();
|
||||||
|
fn?.().Foo.#self.self.#m?.();
|
||||||
|
fn?.().Foo.#self?.self.#m?.();
|
||||||
|
fn?.().Foo.#self.self?.self.#m?.();
|
||||||
|
fn?.().Foo.#self?.self?.self.#m?.();
|
||||||
|
|
||||||
|
fn?.().Foo.#self.getSelf().#m?.();
|
||||||
|
fn?.().Foo.#self.getSelf?.().#m?.();
|
||||||
|
fn?.().Foo.#self?.getSelf().#m?.();
|
||||||
|
fn?.().Foo.#self?.getSelf?.().#m?.();
|
||||||
|
fn?.().Foo.#self.getSelf()?.self.#m?.();
|
||||||
|
fn?.().Foo.#self.getSelf?.()?.self.#m?.();
|
||||||
|
fn?.().Foo.#self?.getSelf()?.self.#m?.();
|
||||||
|
fn?.().Foo.#self?.getSelf?.()?.self.#m?.();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"plugins": [
|
||||||
|
["proposal-optional-chaining", { "loose": true }],
|
||||||
|
["proposal-class-properties", { "loose": true }]
|
||||||
|
]
|
||||||
|
}
|
||||||
@ -0,0 +1,98 @@
|
|||||||
|
function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError("attempted to use private field on non-instance"); } return receiver; }
|
||||||
|
|
||||||
|
var id = 0;
|
||||||
|
|
||||||
|
function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; }
|
||||||
|
|
||||||
|
class Foo {
|
||||||
|
static getSelf() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
var _deep$very$o, _deep$very$o2, _deep$very$o3, _classPrivateFieldLoo, _classPrivateFieldLoo2, _ref, _ref2, _self2, _classPrivateFieldLoo3, _classPrivateFieldLoo4, _ref3, _ref4, _getSelf, _ref5, _ref6, _classPrivateFieldLoo5, _call, _getSelf2, _getSelf3, _fnDeep$very$o, _fnDeep$very$o2, _fnDeep$very$o3, _classPrivateFieldLoo6, _classPrivateFieldLoo7, _ref7, _ref8, _self3, _classPrivateFieldLoo8, _classPrivateFieldLoo9, _ref9, _ref10, _getSelf4, _ref11, _ref12, _classPrivateFieldLoo10, _call2, _getSelf5, _getSelf6, _classPrivateFieldLoo11, _classPrivateFieldLoo12, _classPrivateFieldLoo13, _classPrivateFieldLoo14, _classPrivateFieldLoo15, _classPrivateFieldLoo16, _classPrivateFieldLoo17, _classPrivateFieldLoo18, _classPrivateFieldLoo19, _classPrivateFieldLoo20, _classPrivateFieldLoo21, _classPrivateFieldLoo22, _classPrivateFieldLoo23, _classPrivateFieldLoo24, _classPrivateFieldLoo25, _classPrivateFieldLoo26, _classPrivateFieldLoo27, _classPrivateFieldLoo28, _ref13, _ref14, _classPrivateFieldLoo29, _classPrivateFieldLoo30, _classPrivateFieldLoo31, _classPrivateFieldLoo32, _ref15, _classPrivateFieldLoo33, _classPrivateFieldLoo34, _ref16, _classPrivateFieldLoo35, _classPrivateFieldLoo36, _classPrivateFieldLoo37, _classPrivateFieldLoo38, _ref17, _classPrivateFieldLoo39, _classPrivateFieldLoo40, _classPrivateFieldLoo41, _classPrivateFieldLoo42, _ref18, _classPrivateFieldLoo43, _classPrivateFieldLoo44, _ref19, _classPrivateFieldLoo45, _classPrivateFieldLoo46, _ref20, _classPrivateFieldLoo47, _classPrivateFieldLoo48, _classPrivateFieldLoo49, _classPrivateFieldLoo50, _classPrivateFieldLoo51, _classPrivateFieldLoo52, _classPrivateFieldLoo53, _classPrivateFieldLoo54, _classPrivateFieldLoo55, _classPrivateFieldLoo56, _classPrivateFieldLoo57, _classPrivateFieldLoo58, _classPrivateFieldLoo59, _classPrivateFieldLoo60, _ref21, _ref22, _classPrivateFieldLoo61, _classPrivateFieldLoo62, _classPrivateFieldLoo63, _classPrivateFieldLoo64, _ref23, _classPrivateFieldLoo65, _classPrivateFieldLoo66, _ref24, _classPrivateFieldLoo67, _classPrivateFieldLoo68, _classPrivateFieldLoo69, _classPrivateFieldLoo70, _ref25, _classPrivateFieldLoo71, _classPrivateFieldLoo72, _classPrivateFieldLoo73, _classPrivateFieldLoo74, _ref26, _classPrivateFieldLoo75, _classPrivateFieldLoo76, _ref27, _classPrivateFieldLoo77, _classPrivateFieldLoo78, _ref28, _classPrivateFieldLoo79, _classPrivateFieldLoo80;
|
||||||
|
|
||||||
|
const o = {
|
||||||
|
Foo: Foo
|
||||||
|
};
|
||||||
|
const deep = {
|
||||||
|
very: {
|
||||||
|
o
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
(_classPrivateFieldLoo11 = (_classPrivateFieldLoo12 = _classPrivateFieldLooseBase(Foo, _m))[_m]) == null ? void 0 : _classPrivateFieldLoo11.call(_classPrivateFieldLoo12);
|
||||||
|
(_classPrivateFieldLoo13 = (_classPrivateFieldLoo14 = _classPrivateFieldLooseBase(Foo, _m))[_m]) == null ? void 0 : _classPrivateFieldLoo13.call(_classPrivateFieldLoo14).toString;
|
||||||
|
(_classPrivateFieldLoo15 = (_classPrivateFieldLoo16 = _classPrivateFieldLooseBase(Foo, _m))[_m]) == null ? void 0 : _classPrivateFieldLoo15.call(_classPrivateFieldLoo16).toString();
|
||||||
|
o === null || o === void 0 ? void 0 : (_classPrivateFieldLoo17 = (_classPrivateFieldLoo18 = _classPrivateFieldLooseBase(o.Foo, _m))[_m]) == null ? void 0 : _classPrivateFieldLoo17.call(_classPrivateFieldLoo18);
|
||||||
|
o === null || o === void 0 ? void 0 : (_classPrivateFieldLoo19 = (_classPrivateFieldLoo20 = _classPrivateFieldLooseBase(o.Foo, _m))[_m]) == null ? void 0 : _classPrivateFieldLoo19.call(_classPrivateFieldLoo20).toString;
|
||||||
|
o === null || o === void 0 ? void 0 : (_classPrivateFieldLoo21 = (_classPrivateFieldLoo22 = _classPrivateFieldLooseBase(o.Foo, _m))[_m]) == null ? void 0 : _classPrivateFieldLoo21.call(_classPrivateFieldLoo22).toString();
|
||||||
|
(_deep$very$o = deep == null ? void 0 : deep.very.o) === null || _deep$very$o === void 0 ? void 0 : (_classPrivateFieldLoo23 = (_classPrivateFieldLoo24 = _classPrivateFieldLooseBase(_deep$very$o.Foo, _m))[_m]) == null ? void 0 : _classPrivateFieldLoo23.call(_classPrivateFieldLoo24);
|
||||||
|
(_deep$very$o2 = deep == null ? void 0 : deep.very.o) === null || _deep$very$o2 === void 0 ? void 0 : (_classPrivateFieldLoo25 = (_classPrivateFieldLoo26 = _classPrivateFieldLooseBase(_deep$very$o2.Foo, _m))[_m]) == null ? void 0 : _classPrivateFieldLoo25.call(_classPrivateFieldLoo26).toString;
|
||||||
|
(_deep$very$o3 = deep == null ? void 0 : deep.very.o) === null || _deep$very$o3 === void 0 ? void 0 : (_classPrivateFieldLoo27 = (_classPrivateFieldLoo28 = _classPrivateFieldLooseBase(_deep$very$o3.Foo, _m))[_m]) == null ? void 0 : _classPrivateFieldLoo27.call(_classPrivateFieldLoo28).toString();
|
||||||
|
(_ref13 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(_classPrivateFieldLoo = _classPrivateFieldLooseBase(o.Foo, _self)[_self], _m)[_m]) == null ? void 0 : _ref13.call(_classPrivateFieldLoo);
|
||||||
|
(_ref14 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(_classPrivateFieldLoo2 = _classPrivateFieldLooseBase(o.Foo, _self)[_self].self, _m)[_m]) == null ? void 0 : _ref14.call(_classPrivateFieldLoo2);
|
||||||
|
(_ref = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self]) === null || _ref === void 0 ? void 0 : (_classPrivateFieldLoo29 = (_classPrivateFieldLoo30 = _classPrivateFieldLooseBase(_ref.self, _m))[_m]) == null ? void 0 : _classPrivateFieldLoo29.call(_classPrivateFieldLoo30);
|
||||||
|
(_ref2 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self].self) === null || _ref2 === void 0 ? void 0 : (_classPrivateFieldLoo31 = (_classPrivateFieldLoo32 = _classPrivateFieldLooseBase(_ref2.self, _m))[_m]) == null ? void 0 : _classPrivateFieldLoo31.call(_classPrivateFieldLoo32);
|
||||||
|
(_self2 = (_ref15 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self]) == null ? void 0 : _ref15.self) === null || _self2 === void 0 ? void 0 : (_classPrivateFieldLoo33 = (_classPrivateFieldLoo34 = _classPrivateFieldLooseBase(_self2.self, _m))[_m]) == null ? void 0 : _classPrivateFieldLoo33.call(_classPrivateFieldLoo34);
|
||||||
|
(_ref16 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(_classPrivateFieldLoo3 = _classPrivateFieldLooseBase(o.Foo, _self)[_self].getSelf(), _m)[_m]) == null ? void 0 : _ref16.call(_classPrivateFieldLoo3);
|
||||||
|
(_ref3 = o === null || o === void 0 ? void 0 : (_classPrivateFieldLoo4 = _classPrivateFieldLooseBase(o.Foo, _self)[_self]).getSelf) === null || _ref3 === void 0 ? void 0 : (_classPrivateFieldLoo35 = (_classPrivateFieldLoo36 = _classPrivateFieldLooseBase(_ref3.call(_classPrivateFieldLoo4), _m))[_m]) == null ? void 0 : _classPrivateFieldLoo35.call(_classPrivateFieldLoo36);
|
||||||
|
(_ref4 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self]) === null || _ref4 === void 0 ? void 0 : (_classPrivateFieldLoo37 = (_classPrivateFieldLoo38 = _classPrivateFieldLooseBase(_ref4.getSelf(), _m))[_m]) == null ? void 0 : _classPrivateFieldLoo37.call(_classPrivateFieldLoo38);
|
||||||
|
(_getSelf = (_ref17 = _ref5 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self]) == null ? void 0 : _ref17.getSelf) === null || _getSelf === void 0 ? void 0 : (_classPrivateFieldLoo39 = (_classPrivateFieldLoo40 = _classPrivateFieldLooseBase(_getSelf.call(_ref5), _m))[_m]) == null ? void 0 : _classPrivateFieldLoo39.call(_classPrivateFieldLoo40);
|
||||||
|
(_ref6 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self].getSelf()) === null || _ref6 === void 0 ? void 0 : (_classPrivateFieldLoo41 = (_classPrivateFieldLoo42 = _classPrivateFieldLooseBase(_ref6.self, _m))[_m]) == null ? void 0 : _classPrivateFieldLoo41.call(_classPrivateFieldLoo42);
|
||||||
|
(_call = (_ref18 = o === null || o === void 0 ? void 0 : (_classPrivateFieldLoo5 = _classPrivateFieldLooseBase(o.Foo, _self)[_self]).getSelf) == null ? void 0 : _ref18.call(_classPrivateFieldLoo5)) === null || _call === void 0 ? void 0 : (_classPrivateFieldLoo43 = (_classPrivateFieldLoo44 = _classPrivateFieldLooseBase(_call.self, _m))[_m]) == null ? void 0 : _classPrivateFieldLoo43.call(_classPrivateFieldLoo44);
|
||||||
|
(_getSelf2 = (_ref19 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self]) == null ? void 0 : _ref19.getSelf()) === null || _getSelf2 === void 0 ? void 0 : (_classPrivateFieldLoo45 = (_classPrivateFieldLoo46 = _classPrivateFieldLooseBase(_getSelf2.self, _m))[_m]) == null ? void 0 : _classPrivateFieldLoo45.call(_classPrivateFieldLoo46);
|
||||||
|
(_getSelf3 = (_ref20 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self]) == null ? void 0 : _ref20.getSelf == null ? void 0 : _ref20.getSelf()) === null || _getSelf3 === void 0 ? void 0 : (_classPrivateFieldLoo47 = (_classPrivateFieldLoo48 = _classPrivateFieldLooseBase(_getSelf3.self, _m))[_m]) == null ? void 0 : _classPrivateFieldLoo47.call(_classPrivateFieldLoo48);
|
||||||
|
fn === null || fn === void 0 ? void 0 : (_classPrivateFieldLoo49 = (_classPrivateFieldLoo50 = _classPrivateFieldLooseBase(fn().Foo, _m))[_m]) == null ? void 0 : _classPrivateFieldLoo49.call(_classPrivateFieldLoo50);
|
||||||
|
fn === null || fn === void 0 ? void 0 : (_classPrivateFieldLoo51 = (_classPrivateFieldLoo52 = _classPrivateFieldLooseBase(fn().Foo, _m))[_m]) == null ? void 0 : _classPrivateFieldLoo51.call(_classPrivateFieldLoo52).toString;
|
||||||
|
fn === null || fn === void 0 ? void 0 : (_classPrivateFieldLoo53 = (_classPrivateFieldLoo54 = _classPrivateFieldLooseBase(fn().Foo, _m))[_m]) == null ? void 0 : _classPrivateFieldLoo53.call(_classPrivateFieldLoo54).toString();
|
||||||
|
(_fnDeep$very$o = fnDeep == null ? void 0 : fnDeep().very.o) === null || _fnDeep$very$o === void 0 ? void 0 : (_classPrivateFieldLoo55 = (_classPrivateFieldLoo56 = _classPrivateFieldLooseBase(_fnDeep$very$o.Foo, _m))[_m]) == null ? void 0 : _classPrivateFieldLoo55.call(_classPrivateFieldLoo56);
|
||||||
|
(_fnDeep$very$o2 = fnDeep == null ? void 0 : fnDeep().very.o) === null || _fnDeep$very$o2 === void 0 ? void 0 : (_classPrivateFieldLoo57 = (_classPrivateFieldLoo58 = _classPrivateFieldLooseBase(_fnDeep$very$o2.Foo, _m))[_m]) == null ? void 0 : _classPrivateFieldLoo57.call(_classPrivateFieldLoo58).toString;
|
||||||
|
(_fnDeep$very$o3 = fnDeep == null ? void 0 : fnDeep().very.o) === null || _fnDeep$very$o3 === void 0 ? void 0 : (_classPrivateFieldLoo59 = (_classPrivateFieldLoo60 = _classPrivateFieldLooseBase(_fnDeep$very$o3.Foo, _m))[_m]) == null ? void 0 : _classPrivateFieldLoo59.call(_classPrivateFieldLoo60).toString();
|
||||||
|
(_ref21 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(_classPrivateFieldLoo6 = _classPrivateFieldLooseBase(fn().Foo, _self)[_self], _m)[_m]) == null ? void 0 : _ref21.call(_classPrivateFieldLoo6);
|
||||||
|
(_ref22 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(_classPrivateFieldLoo7 = _classPrivateFieldLooseBase(fn().Foo, _self)[_self].self, _m)[_m]) == null ? void 0 : _ref22.call(_classPrivateFieldLoo7);
|
||||||
|
(_ref7 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self]) === null || _ref7 === void 0 ? void 0 : (_classPrivateFieldLoo61 = (_classPrivateFieldLoo62 = _classPrivateFieldLooseBase(_ref7.self, _m))[_m]) == null ? void 0 : _classPrivateFieldLoo61.call(_classPrivateFieldLoo62);
|
||||||
|
(_ref8 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self].self) === null || _ref8 === void 0 ? void 0 : (_classPrivateFieldLoo63 = (_classPrivateFieldLoo64 = _classPrivateFieldLooseBase(_ref8.self, _m))[_m]) == null ? void 0 : _classPrivateFieldLoo63.call(_classPrivateFieldLoo64);
|
||||||
|
(_self3 = (_ref23 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self]) == null ? void 0 : _ref23.self) === null || _self3 === void 0 ? void 0 : (_classPrivateFieldLoo65 = (_classPrivateFieldLoo66 = _classPrivateFieldLooseBase(_self3.self, _m))[_m]) == null ? void 0 : _classPrivateFieldLoo65.call(_classPrivateFieldLoo66);
|
||||||
|
(_ref24 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(_classPrivateFieldLoo8 = _classPrivateFieldLooseBase(fn().Foo, _self)[_self].getSelf(), _m)[_m]) == null ? void 0 : _ref24.call(_classPrivateFieldLoo8);
|
||||||
|
(_ref9 = fn === null || fn === void 0 ? void 0 : (_classPrivateFieldLoo9 = _classPrivateFieldLooseBase(fn().Foo, _self)[_self]).getSelf) === null || _ref9 === void 0 ? void 0 : (_classPrivateFieldLoo67 = (_classPrivateFieldLoo68 = _classPrivateFieldLooseBase(_ref9.call(_classPrivateFieldLoo9), _m))[_m]) == null ? void 0 : _classPrivateFieldLoo67.call(_classPrivateFieldLoo68);
|
||||||
|
(_ref10 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self]) === null || _ref10 === void 0 ? void 0 : (_classPrivateFieldLoo69 = (_classPrivateFieldLoo70 = _classPrivateFieldLooseBase(_ref10.getSelf(), _m))[_m]) == null ? void 0 : _classPrivateFieldLoo69.call(_classPrivateFieldLoo70);
|
||||||
|
(_getSelf4 = (_ref25 = _ref11 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self]) == null ? void 0 : _ref25.getSelf) === null || _getSelf4 === void 0 ? void 0 : (_classPrivateFieldLoo71 = (_classPrivateFieldLoo72 = _classPrivateFieldLooseBase(_getSelf4.call(_ref11), _m))[_m]) == null ? void 0 : _classPrivateFieldLoo71.call(_classPrivateFieldLoo72);
|
||||||
|
(_ref12 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self].getSelf()) === null || _ref12 === void 0 ? void 0 : (_classPrivateFieldLoo73 = (_classPrivateFieldLoo74 = _classPrivateFieldLooseBase(_ref12.self, _m))[_m]) == null ? void 0 : _classPrivateFieldLoo73.call(_classPrivateFieldLoo74);
|
||||||
|
(_call2 = (_ref26 = fn === null || fn === void 0 ? void 0 : (_classPrivateFieldLoo10 = _classPrivateFieldLooseBase(fn().Foo, _self)[_self]).getSelf) == null ? void 0 : _ref26.call(_classPrivateFieldLoo10)) === null || _call2 === void 0 ? void 0 : (_classPrivateFieldLoo75 = (_classPrivateFieldLoo76 = _classPrivateFieldLooseBase(_call2.self, _m))[_m]) == null ? void 0 : _classPrivateFieldLoo75.call(_classPrivateFieldLoo76);
|
||||||
|
(_getSelf5 = (_ref27 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self]) == null ? void 0 : _ref27.getSelf()) === null || _getSelf5 === void 0 ? void 0 : (_classPrivateFieldLoo77 = (_classPrivateFieldLoo78 = _classPrivateFieldLooseBase(_getSelf5.self, _m))[_m]) == null ? void 0 : _classPrivateFieldLoo77.call(_classPrivateFieldLoo78);
|
||||||
|
(_getSelf6 = (_ref28 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self]) == null ? void 0 : _ref28.getSelf == null ? void 0 : _ref28.getSelf()) === null || _getSelf6 === void 0 ? void 0 : (_classPrivateFieldLoo79 = (_classPrivateFieldLoo80 = _classPrivateFieldLooseBase(_getSelf6.self, _m))[_m]) == null ? void 0 : _classPrivateFieldLoo79.call(_classPrivateFieldLoo80);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
var _x = _classPrivateFieldLooseKey("x");
|
||||||
|
|
||||||
|
var _m = _classPrivateFieldLooseKey("m");
|
||||||
|
|
||||||
|
var _self = _classPrivateFieldLooseKey("self");
|
||||||
|
|
||||||
|
Object.defineProperty(Foo, _x, {
|
||||||
|
writable: true,
|
||||||
|
value: 1
|
||||||
|
});
|
||||||
|
Object.defineProperty(Foo, _m, {
|
||||||
|
writable: true,
|
||||||
|
value: function () {
|
||||||
|
return _classPrivateFieldLooseBase(this, _x)[_x];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(Foo, _self, {
|
||||||
|
writable: true,
|
||||||
|
value: Foo
|
||||||
|
});
|
||||||
|
Foo.self = Foo;
|
||||||
|
Foo.test();
|
||||||
@ -0,0 +1,126 @@
|
|||||||
|
class Foo {
|
||||||
|
static #x = 1;
|
||||||
|
static #m = function() { return this.#x; };
|
||||||
|
static #self = Foo;
|
||||||
|
static self = Foo;
|
||||||
|
static getSelf() { return this }
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
const o = { Foo: Foo };
|
||||||
|
const deep = { very: { o } };
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(Foo.#m?.()).toEqual(1);
|
||||||
|
expect(Foo.#m?.().toString).toEqual(1..toString);
|
||||||
|
expect(Foo.#m?.().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(o?.Foo.#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#m?.().toString).toEqual(1..toString);
|
||||||
|
expect(o?.Foo.#m?.().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(deep?.very.o?.Foo.#m?.()).toEqual(1);
|
||||||
|
expect(deep?.very.o?.Foo.#m?.().toString).toEqual(1..toString);
|
||||||
|
expect(deep?.very.o?.Foo.#m?.().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.self.#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.self.#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.self?.self.#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.self?.self.#m?.()).toEqual(1);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.getSelf().#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf?.().#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf().#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.().#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf()?.self.#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.self.#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.self.#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.self.#m?.()).toEqual(1);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#m?.().toString).toEqual(1..toString);
|
||||||
|
expect(fn?.().Foo.#m?.().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m?.()).toEqual(1);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m?.().toString).toEqual(1..toString);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m?.().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.self.#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.self.#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.self?.self.#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.self?.self.#m?.()).toEqual(1);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.getSelf().#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.().#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf().#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.().#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.self.#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.self.#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.self.#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.self.#m?.()).toEqual(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static testNull() {
|
||||||
|
const o = null;;
|
||||||
|
const deep = { very: { o } };
|
||||||
|
const fn = null;
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(o?.Foo.#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#m?.().toString).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#m?.().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(deep?.very.o?.Foo.#m?.()).toEqual(undefined);
|
||||||
|
expect(deep?.very.o?.Foo.#m?.().toString).toEqual(undefined);
|
||||||
|
expect(deep?.very.o?.Foo.#m?.().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.self?.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.self?.self.#m?.()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.getSelf().#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf?.().#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf().#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.().#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf()?.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.self.#m?.()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#m?.().toString).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#m?.().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m?.()).toEqual(undefined);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m?.().toString).toEqual(undefined);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m?.().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.self?.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.self?.self.#m?.()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.getSelf().#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.().#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf().#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.().#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.self.#m?.()).toEqual(undefined);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
|
Foo.testNull();
|
||||||
@ -0,0 +1,71 @@
|
|||||||
|
class Foo {
|
||||||
|
static #x = 1;
|
||||||
|
static #m = function() { return this.#x; };
|
||||||
|
static #self = Foo;
|
||||||
|
static self = Foo;
|
||||||
|
static getSelf() { return this }
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
const o = { Foo: Foo };
|
||||||
|
const deep = { very: { o } };
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo.#m?.();
|
||||||
|
Foo.#m?.().toString;
|
||||||
|
Foo.#m?.().toString();
|
||||||
|
|
||||||
|
o?.Foo.#m?.();
|
||||||
|
o?.Foo.#m?.().toString;
|
||||||
|
o?.Foo.#m?.().toString();
|
||||||
|
|
||||||
|
deep?.very.o?.Foo.#m?.();
|
||||||
|
deep?.very.o?.Foo.#m?.().toString;
|
||||||
|
deep?.very.o?.Foo.#m?.().toString();
|
||||||
|
|
||||||
|
o?.Foo.#self.#m?.();
|
||||||
|
o?.Foo.#self.self.#m?.();
|
||||||
|
o?.Foo.#self?.self.#m?.();
|
||||||
|
o?.Foo.#self.self?.self.#m?.();
|
||||||
|
o?.Foo.#self?.self?.self.#m?.();
|
||||||
|
|
||||||
|
o?.Foo.#self.getSelf().#m?.();
|
||||||
|
o?.Foo.#self.getSelf?.().#m?.();
|
||||||
|
o?.Foo.#self?.getSelf().#m?.();
|
||||||
|
o?.Foo.#self?.getSelf?.().#m?.();
|
||||||
|
o?.Foo.#self.getSelf()?.self.#m?.();
|
||||||
|
o?.Foo.#self.getSelf?.()?.self.#m?.();
|
||||||
|
o?.Foo.#self?.getSelf()?.self.#m?.();
|
||||||
|
o?.Foo.#self?.getSelf?.()?.self.#m?.();
|
||||||
|
|
||||||
|
fn?.().Foo.#m?.();
|
||||||
|
fn?.().Foo.#m?.().toString;
|
||||||
|
fn?.().Foo.#m?.().toString();
|
||||||
|
|
||||||
|
fnDeep?.().very.o?.Foo.#m?.();
|
||||||
|
fnDeep?.().very.o?.Foo.#m?.().toString;
|
||||||
|
fnDeep?.().very.o?.Foo.#m?.().toString();
|
||||||
|
|
||||||
|
fn?.().Foo.#self.#m?.();
|
||||||
|
fn?.().Foo.#self.self.#m?.();
|
||||||
|
fn?.().Foo.#self?.self.#m?.();
|
||||||
|
fn?.().Foo.#self.self?.self.#m?.();
|
||||||
|
fn?.().Foo.#self?.self?.self.#m?.();
|
||||||
|
|
||||||
|
fn?.().Foo.#self.getSelf().#m?.();
|
||||||
|
fn?.().Foo.#self.getSelf?.().#m?.();
|
||||||
|
fn?.().Foo.#self?.getSelf().#m?.();
|
||||||
|
fn?.().Foo.#self?.getSelf?.().#m?.();
|
||||||
|
fn?.().Foo.#self.getSelf()?.self.#m?.();
|
||||||
|
fn?.().Foo.#self.getSelf?.()?.self.#m?.();
|
||||||
|
fn?.().Foo.#self?.getSelf()?.self.#m?.();
|
||||||
|
fn?.().Foo.#self?.getSelf?.()?.self.#m?.();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"plugins": [["proposal-class-properties", { "loose": true }]],
|
||||||
|
"minNodeVersion": "14.0.0"
|
||||||
|
}
|
||||||
@ -0,0 +1,98 @@
|
|||||||
|
function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError("attempted to use private field on non-instance"); } return receiver; }
|
||||||
|
|
||||||
|
var id = 0;
|
||||||
|
|
||||||
|
function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; }
|
||||||
|
|
||||||
|
class Foo {
|
||||||
|
static getSelf() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
var _deep$very$o, _deep$very$o2, _deep$very$o3, _classPrivateFieldLoo, _classPrivateFieldLoo2, _ref, _ref2, _self2, _classPrivateFieldLoo3, _classPrivateFieldLoo4, _ref3, _ref4, _getSelf, _ref5, _ref6, _classPrivateFieldLoo5, _call, _getSelf2, _getSelf3, _fnDeep$very$o, _fnDeep$very$o2, _fnDeep$very$o3, _classPrivateFieldLoo6, _classPrivateFieldLoo7, _ref7, _ref8, _self3, _classPrivateFieldLoo8, _classPrivateFieldLoo9, _ref9, _ref10, _getSelf4, _ref11, _ref12, _classPrivateFieldLoo10, _call2, _getSelf5, _getSelf6;
|
||||||
|
|
||||||
|
const o = {
|
||||||
|
Foo: Foo
|
||||||
|
};
|
||||||
|
const deep = {
|
||||||
|
very: {
|
||||||
|
o
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
_classPrivateFieldLooseBase(Foo, _m)[_m]?.();
|
||||||
|
_classPrivateFieldLooseBase(Foo, _m)[_m]?.().toString;
|
||||||
|
_classPrivateFieldLooseBase(Foo, _m)[_m]?.().toString();
|
||||||
|
o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _m)[_m]?.();
|
||||||
|
o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _m)[_m]?.().toString;
|
||||||
|
o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _m)[_m]?.().toString();
|
||||||
|
(_deep$very$o = deep?.very.o) === null || _deep$very$o === void 0 ? void 0 : _classPrivateFieldLooseBase(_deep$very$o.Foo, _m)[_m]?.();
|
||||||
|
(_deep$very$o2 = deep?.very.o) === null || _deep$very$o2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_deep$very$o2.Foo, _m)[_m]?.().toString;
|
||||||
|
(_deep$very$o3 = deep?.very.o) === null || _deep$very$o3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_deep$very$o3.Foo, _m)[_m]?.().toString();
|
||||||
|
(o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(_classPrivateFieldLoo = _classPrivateFieldLooseBase(o.Foo, _self)[_self], _m)[_m])?.call(_classPrivateFieldLoo);
|
||||||
|
(o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(_classPrivateFieldLoo2 = _classPrivateFieldLooseBase(o.Foo, _self)[_self].self, _m)[_m])?.call(_classPrivateFieldLoo2);
|
||||||
|
(_ref = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self]) === null || _ref === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref.self, _m)[_m]?.();
|
||||||
|
(_ref2 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self].self) === null || _ref2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref2.self, _m)[_m]?.();
|
||||||
|
(_self2 = (o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self])?.self) === null || _self2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_self2.self, _m)[_m]?.();
|
||||||
|
(o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(_classPrivateFieldLoo3 = _classPrivateFieldLooseBase(o.Foo, _self)[_self].getSelf(), _m)[_m])?.call(_classPrivateFieldLoo3);
|
||||||
|
(_ref3 = o === null || o === void 0 ? void 0 : (_classPrivateFieldLoo4 = _classPrivateFieldLooseBase(o.Foo, _self)[_self]).getSelf) === null || _ref3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref3.call(_classPrivateFieldLoo4), _m)[_m]?.();
|
||||||
|
(_ref4 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self]) === null || _ref4 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref4.getSelf(), _m)[_m]?.();
|
||||||
|
(_getSelf = (_ref5 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self])?.getSelf) === null || _getSelf === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf.call(_ref5), _m)[_m]?.();
|
||||||
|
(_ref6 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self].getSelf()) === null || _ref6 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref6.self, _m)[_m]?.();
|
||||||
|
(_call = (o === null || o === void 0 ? void 0 : (_classPrivateFieldLoo5 = _classPrivateFieldLooseBase(o.Foo, _self)[_self]).getSelf)?.call(_classPrivateFieldLoo5)) === null || _call === void 0 ? void 0 : _classPrivateFieldLooseBase(_call.self, _m)[_m]?.();
|
||||||
|
(_getSelf2 = (o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self])?.getSelf()) === null || _getSelf2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf2.self, _m)[_m]?.();
|
||||||
|
(_getSelf3 = (o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self])?.getSelf?.()) === null || _getSelf3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf3.self, _m)[_m]?.();
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _m)[_m]?.();
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _m)[_m]?.().toString;
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _m)[_m]?.().toString();
|
||||||
|
(_fnDeep$very$o = fnDeep?.().very.o) === null || _fnDeep$very$o === void 0 ? void 0 : _classPrivateFieldLooseBase(_fnDeep$very$o.Foo, _m)[_m]?.();
|
||||||
|
(_fnDeep$very$o2 = fnDeep?.().very.o) === null || _fnDeep$very$o2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_fnDeep$very$o2.Foo, _m)[_m]?.().toString;
|
||||||
|
(_fnDeep$very$o3 = fnDeep?.().very.o) === null || _fnDeep$very$o3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_fnDeep$very$o3.Foo, _m)[_m]?.().toString();
|
||||||
|
(fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(_classPrivateFieldLoo6 = _classPrivateFieldLooseBase(fn().Foo, _self)[_self], _m)[_m])?.call(_classPrivateFieldLoo6);
|
||||||
|
(fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(_classPrivateFieldLoo7 = _classPrivateFieldLooseBase(fn().Foo, _self)[_self].self, _m)[_m])?.call(_classPrivateFieldLoo7);
|
||||||
|
(_ref7 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self]) === null || _ref7 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref7.self, _m)[_m]?.();
|
||||||
|
(_ref8 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self].self) === null || _ref8 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref8.self, _m)[_m]?.();
|
||||||
|
(_self3 = (fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self])?.self) === null || _self3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_self3.self, _m)[_m]?.();
|
||||||
|
(fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(_classPrivateFieldLoo8 = _classPrivateFieldLooseBase(fn().Foo, _self)[_self].getSelf(), _m)[_m])?.call(_classPrivateFieldLoo8);
|
||||||
|
(_ref9 = fn === null || fn === void 0 ? void 0 : (_classPrivateFieldLoo9 = _classPrivateFieldLooseBase(fn().Foo, _self)[_self]).getSelf) === null || _ref9 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref9.call(_classPrivateFieldLoo9), _m)[_m]?.();
|
||||||
|
(_ref10 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self]) === null || _ref10 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref10.getSelf(), _m)[_m]?.();
|
||||||
|
(_getSelf4 = (_ref11 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self])?.getSelf) === null || _getSelf4 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf4.call(_ref11), _m)[_m]?.();
|
||||||
|
(_ref12 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self].getSelf()) === null || _ref12 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref12.self, _m)[_m]?.();
|
||||||
|
(_call2 = (fn === null || fn === void 0 ? void 0 : (_classPrivateFieldLoo10 = _classPrivateFieldLooseBase(fn().Foo, _self)[_self]).getSelf)?.call(_classPrivateFieldLoo10)) === null || _call2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_call2.self, _m)[_m]?.();
|
||||||
|
(_getSelf5 = (fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self])?.getSelf()) === null || _getSelf5 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf5.self, _m)[_m]?.();
|
||||||
|
(_getSelf6 = (fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self])?.getSelf?.()) === null || _getSelf6 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf6.self, _m)[_m]?.();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
var _x = _classPrivateFieldLooseKey("x");
|
||||||
|
|
||||||
|
var _m = _classPrivateFieldLooseKey("m");
|
||||||
|
|
||||||
|
var _self = _classPrivateFieldLooseKey("self");
|
||||||
|
|
||||||
|
Object.defineProperty(Foo, _x, {
|
||||||
|
writable: true,
|
||||||
|
value: 1
|
||||||
|
});
|
||||||
|
Object.defineProperty(Foo, _m, {
|
||||||
|
writable: true,
|
||||||
|
value: function () {
|
||||||
|
return _classPrivateFieldLooseBase(this, _x)[_x];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(Foo, _self, {
|
||||||
|
writable: true,
|
||||||
|
value: Foo
|
||||||
|
});
|
||||||
|
Foo.self = Foo;
|
||||||
|
Foo.test();
|
||||||
@ -0,0 +1,126 @@
|
|||||||
|
class Foo {
|
||||||
|
static #x = 1;
|
||||||
|
static #m = function() { return this.#x; };
|
||||||
|
static #self = Foo;
|
||||||
|
static self = Foo;
|
||||||
|
static getSelf() { return this }
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
const o = { Foo: Foo };
|
||||||
|
const deep = { very: { o } };
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(Foo?.#m()).toEqual(1);
|
||||||
|
expect(Foo?.#m().toString).toEqual(1..toString);
|
||||||
|
expect(Foo?.#m().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(o?.Foo?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo?.#m().toString).toEqual(1..toString);
|
||||||
|
expect(o?.Foo?.#m().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(deep?.very.o?.Foo?.#m()).toEqual(1);
|
||||||
|
expect(deep?.very.o?.Foo?.#m().toString).toEqual(1..toString);
|
||||||
|
expect(deep?.very.o?.Foo?.#m().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(o?.Foo.#self?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.self?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.self?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.self?.self?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.self?.self?.#m()).toEqual(1);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.getSelf()?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf()?.self?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.self?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.self?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.self?.#m()).toEqual(1);
|
||||||
|
|
||||||
|
expect(fn?.().Foo?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo?.#m().toString).toEqual(1..toString);
|
||||||
|
expect(fn?.().Foo?.#m().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#m()).toEqual(1);
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#m().toString).toEqual(1..toString);
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#m().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.self?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.self?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.self?.self?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.self?.self?.#m()).toEqual(1);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.self?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.self?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.self?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.self?.#m()).toEqual(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static testNull() {
|
||||||
|
const o = null;;
|
||||||
|
const deep = { very: { o } };
|
||||||
|
const fn = null;
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(o?.Foo?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo?.#m().toString).toEqual(undefined);
|
||||||
|
expect(o?.Foo?.#m().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(deep?.very.o?.Foo?.#m()).toEqual(undefined);
|
||||||
|
expect(deep?.very.o?.Foo?.#m().toString).toEqual(undefined);
|
||||||
|
expect(deep?.very.o?.Foo?.#m().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.self?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.self?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.self?.self?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.self?.self?.#m()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.getSelf()?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf()?.self?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.self?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.self?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.self?.#m()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo?.#m().toString).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo?.#m().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#m()).toEqual(undefined);
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#m().toString).toEqual(undefined);
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#m().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.self?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.self?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.self?.self?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.self?.self?.#m()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.self?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.self?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.self?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.self?.#m()).toEqual(undefined);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
|
Foo.testNull();
|
||||||
@ -0,0 +1,70 @@
|
|||||||
|
class Foo {
|
||||||
|
static #x = 1;
|
||||||
|
static #m = function() { return this.#x; };
|
||||||
|
static #self = Foo;
|
||||||
|
static self = Foo;
|
||||||
|
static getSelf() { return this }
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
const o = { Foo: Foo };
|
||||||
|
const deep = { very: { o } };
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo?.#m();
|
||||||
|
Foo?.#m().toString;
|
||||||
|
Foo?.#m().toString();
|
||||||
|
|
||||||
|
o?.Foo?.#m();
|
||||||
|
o?.Foo?.#m().toString;
|
||||||
|
o?.Foo?.#m().toString();
|
||||||
|
|
||||||
|
deep?.very.o?.Foo?.#m();
|
||||||
|
deep?.very.o?.Foo?.#m().toString;
|
||||||
|
deep?.very.o?.Foo?.#m().toString();
|
||||||
|
|
||||||
|
o?.Foo.#self?.#m();
|
||||||
|
o?.Foo.#self.self?.#m();
|
||||||
|
o?.Foo.#self?.self?.#m();
|
||||||
|
o?.Foo.#self.self?.self?.#m();
|
||||||
|
o?.Foo.#self?.self?.self?.#m();
|
||||||
|
|
||||||
|
o?.Foo.#self.getSelf()?.#m();
|
||||||
|
o?.Foo.#self.getSelf?.()?.#m();
|
||||||
|
o?.Foo.#self?.getSelf()?.#m();
|
||||||
|
o?.Foo.#self?.getSelf?.()?.#m();
|
||||||
|
o?.Foo.#self.getSelf()?.self?.#m();
|
||||||
|
o?.Foo.#self.getSelf?.()?.self?.#m();
|
||||||
|
o?.Foo.#self?.getSelf()?.self?.#m();
|
||||||
|
o?.Foo.#self?.getSelf?.()?.self?.#m();
|
||||||
|
|
||||||
|
fn?.().Foo?.#m();
|
||||||
|
fn?.().Foo?.#m().toString;
|
||||||
|
fn?.().Foo?.#m().toString();
|
||||||
|
|
||||||
|
fnDeep?.().very.o?.Foo?.#m();
|
||||||
|
fnDeep?.().very.o?.Foo?.#m().toString;
|
||||||
|
fnDeep?.().very.o?.Foo?.#m().toString();
|
||||||
|
|
||||||
|
fn?.().Foo.#self?.#m();
|
||||||
|
fn?.().Foo.#self.self?.#m();
|
||||||
|
fn?.().Foo.#self?.self?.#m();
|
||||||
|
fn?.().Foo.#self.self?.self?.#m();
|
||||||
|
fn?.().Foo.#self?.self?.self?.#m();
|
||||||
|
|
||||||
|
fn?.().Foo.#self.getSelf()?.#m();
|
||||||
|
fn?.().Foo.#self.getSelf?.()?.#m();
|
||||||
|
fn?.().Foo.#self?.getSelf()?.#m();
|
||||||
|
fn?.().Foo.#self?.getSelf?.()?.#m();
|
||||||
|
fn?.().Foo.#self.getSelf()?.self?.#m();
|
||||||
|
fn?.().Foo.#self.getSelf?.()?.self?.#m();
|
||||||
|
fn?.().Foo.#self?.getSelf()?.self?.#m();
|
||||||
|
fn?.().Foo.#self?.getSelf?.()?.self?.#m();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"plugins": [
|
||||||
|
["proposal-optional-chaining", { "loose": true }],
|
||||||
|
["proposal-class-properties", { "loose": true }]
|
||||||
|
]
|
||||||
|
}
|
||||||
@ -0,0 +1,98 @@
|
|||||||
|
function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError("attempted to use private field on non-instance"); } return receiver; }
|
||||||
|
|
||||||
|
var id = 0;
|
||||||
|
|
||||||
|
function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; }
|
||||||
|
|
||||||
|
class Foo {
|
||||||
|
static getSelf() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
var _o$Foo, _o$Foo2, _o$Foo3, _deep$very$o$Foo, _deep$very$o$Foo2, _deep$very$o$Foo3, _ref, _ref2, _self2, _self3, _self$self, _ref3, _classPrivateFieldLoo, _call, _getSelf, _getSelf2, _self4, _classPrivateFieldLoo2, _call$self, _getSelf$self, _getSelf$self2, _fn$Foo, _fn$Foo2, _fn$Foo3, _fnDeep$very$o$Foo, _fnDeep$very$o$Foo2, _fnDeep$very$o$Foo3, _ref4, _ref5, _self5, _self6, _self$self2, _ref6, _classPrivateFieldLoo3, _call2, _getSelf3, _getSelf4, _self7, _classPrivateFieldLoo4, _call$self2, _getSelf$self3, _getSelf$self4, _deep$very$o, _deep$very$o2, _deep$very$o3, _ref7, _ref8, _ref9, _ref9$self, _ref10, _ref11, _ref12, _ref13, _ref14, _ref14$call, _ref15, _ref15$getSelf, _ref16, _ref16$getSelf, _fnDeep$very$o, _fnDeep$very$o2, _fnDeep$very$o3, _ref17, _ref18, _ref19, _ref19$self, _ref20, _ref21, _ref22, _ref23, _ref24, _ref24$call, _ref25, _ref25$getSelf, _ref26, _ref26$getSelf;
|
||||||
|
|
||||||
|
const o = {
|
||||||
|
Foo: Foo
|
||||||
|
};
|
||||||
|
const deep = {
|
||||||
|
very: {
|
||||||
|
o
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo === null || Foo === void 0 ? void 0 : _classPrivateFieldLooseBase(Foo, _m)[_m]();
|
||||||
|
Foo === null || Foo === void 0 ? void 0 : _classPrivateFieldLooseBase(Foo, _m)[_m]().toString;
|
||||||
|
Foo === null || Foo === void 0 ? void 0 : _classPrivateFieldLooseBase(Foo, _m)[_m]().toString();
|
||||||
|
(_o$Foo = o == null ? void 0 : o.Foo) === null || _o$Foo === void 0 ? void 0 : _classPrivateFieldLooseBase(_o$Foo, _m)[_m]();
|
||||||
|
(_o$Foo2 = o == null ? void 0 : o.Foo) === null || _o$Foo2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_o$Foo2, _m)[_m]().toString;
|
||||||
|
(_o$Foo3 = o == null ? void 0 : o.Foo) === null || _o$Foo3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_o$Foo3, _m)[_m]().toString();
|
||||||
|
(_deep$very$o$Foo = deep == null ? void 0 : (_deep$very$o = deep.very.o) == null ? void 0 : _deep$very$o.Foo) === null || _deep$very$o$Foo === void 0 ? void 0 : _classPrivateFieldLooseBase(_deep$very$o$Foo, _m)[_m]();
|
||||||
|
(_deep$very$o$Foo2 = deep == null ? void 0 : (_deep$very$o2 = deep.very.o) == null ? void 0 : _deep$very$o2.Foo) === null || _deep$very$o$Foo2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_deep$very$o$Foo2, _m)[_m]().toString;
|
||||||
|
(_deep$very$o$Foo3 = deep == null ? void 0 : (_deep$very$o3 = deep.very.o) == null ? void 0 : _deep$very$o3.Foo) === null || _deep$very$o$Foo3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_deep$very$o$Foo3, _m)[_m]().toString();
|
||||||
|
(_ref = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self]) === null || _ref === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref, _m)[_m]();
|
||||||
|
(_ref2 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self].self) === null || _ref2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref2, _m)[_m]();
|
||||||
|
(_self2 = (_ref7 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self]) == null ? void 0 : _ref7.self) === null || _self2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_self2, _m)[_m]();
|
||||||
|
(_self3 = (_ref8 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self].self) == null ? void 0 : _ref8.self) === null || _self3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_self3, _m)[_m]();
|
||||||
|
(_self$self = (_ref9 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self]) == null ? void 0 : (_ref9$self = _ref9.self) == null ? void 0 : _ref9$self.self) === null || _self$self === void 0 ? void 0 : _classPrivateFieldLooseBase(_self$self, _m)[_m]();
|
||||||
|
(_ref3 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self].getSelf()) === null || _ref3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref3, _m)[_m]();
|
||||||
|
(_call = (_ref10 = o === null || o === void 0 ? void 0 : (_classPrivateFieldLoo = _classPrivateFieldLooseBase(o.Foo, _self)[_self]).getSelf) == null ? void 0 : _ref10.call(_classPrivateFieldLoo)) === null || _call === void 0 ? void 0 : _classPrivateFieldLooseBase(_call, _m)[_m]();
|
||||||
|
(_getSelf = (_ref11 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self]) == null ? void 0 : _ref11.getSelf()) === null || _getSelf === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf, _m)[_m]();
|
||||||
|
(_getSelf2 = (_ref12 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self]) == null ? void 0 : _ref12.getSelf == null ? void 0 : _ref12.getSelf()) === null || _getSelf2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf2, _m)[_m]();
|
||||||
|
(_self4 = (_ref13 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self].getSelf()) == null ? void 0 : _ref13.self) === null || _self4 === void 0 ? void 0 : _classPrivateFieldLooseBase(_self4, _m)[_m]();
|
||||||
|
(_call$self = (_ref14 = o === null || o === void 0 ? void 0 : (_classPrivateFieldLoo2 = _classPrivateFieldLooseBase(o.Foo, _self)[_self]).getSelf) == null ? void 0 : (_ref14$call = _ref14.call(_classPrivateFieldLoo2)) == null ? void 0 : _ref14$call.self) === null || _call$self === void 0 ? void 0 : _classPrivateFieldLooseBase(_call$self, _m)[_m]();
|
||||||
|
(_getSelf$self = (_ref15 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self]) == null ? void 0 : (_ref15$getSelf = _ref15.getSelf()) == null ? void 0 : _ref15$getSelf.self) === null || _getSelf$self === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf$self, _m)[_m]();
|
||||||
|
(_getSelf$self2 = (_ref16 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self]) == null ? void 0 : _ref16.getSelf == null ? void 0 : (_ref16$getSelf = _ref16.getSelf()) == null ? void 0 : _ref16$getSelf.self) === null || _getSelf$self2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf$self2, _m)[_m]();
|
||||||
|
(_fn$Foo = fn == null ? void 0 : fn().Foo) === null || _fn$Foo === void 0 ? void 0 : _classPrivateFieldLooseBase(_fn$Foo, _m)[_m]();
|
||||||
|
(_fn$Foo2 = fn == null ? void 0 : fn().Foo) === null || _fn$Foo2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_fn$Foo2, _m)[_m]().toString;
|
||||||
|
(_fn$Foo3 = fn == null ? void 0 : fn().Foo) === null || _fn$Foo3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_fn$Foo3, _m)[_m]().toString();
|
||||||
|
(_fnDeep$very$o$Foo = fnDeep == null ? void 0 : (_fnDeep$very$o = fnDeep().very.o) == null ? void 0 : _fnDeep$very$o.Foo) === null || _fnDeep$very$o$Foo === void 0 ? void 0 : _classPrivateFieldLooseBase(_fnDeep$very$o$Foo, _m)[_m]();
|
||||||
|
(_fnDeep$very$o$Foo2 = fnDeep == null ? void 0 : (_fnDeep$very$o2 = fnDeep().very.o) == null ? void 0 : _fnDeep$very$o2.Foo) === null || _fnDeep$very$o$Foo2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_fnDeep$very$o$Foo2, _m)[_m]().toString;
|
||||||
|
(_fnDeep$very$o$Foo3 = fnDeep == null ? void 0 : (_fnDeep$very$o3 = fnDeep().very.o) == null ? void 0 : _fnDeep$very$o3.Foo) === null || _fnDeep$very$o$Foo3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_fnDeep$very$o$Foo3, _m)[_m]().toString();
|
||||||
|
(_ref4 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self]) === null || _ref4 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref4, _m)[_m]();
|
||||||
|
(_ref5 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self].self) === null || _ref5 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref5, _m)[_m]();
|
||||||
|
(_self5 = (_ref17 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self]) == null ? void 0 : _ref17.self) === null || _self5 === void 0 ? void 0 : _classPrivateFieldLooseBase(_self5, _m)[_m]();
|
||||||
|
(_self6 = (_ref18 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self].self) == null ? void 0 : _ref18.self) === null || _self6 === void 0 ? void 0 : _classPrivateFieldLooseBase(_self6, _m)[_m]();
|
||||||
|
(_self$self2 = (_ref19 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self]) == null ? void 0 : (_ref19$self = _ref19.self) == null ? void 0 : _ref19$self.self) === null || _self$self2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_self$self2, _m)[_m]();
|
||||||
|
(_ref6 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self].getSelf()) === null || _ref6 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref6, _m)[_m]();
|
||||||
|
(_call2 = (_ref20 = fn === null || fn === void 0 ? void 0 : (_classPrivateFieldLoo3 = _classPrivateFieldLooseBase(fn().Foo, _self)[_self]).getSelf) == null ? void 0 : _ref20.call(_classPrivateFieldLoo3)) === null || _call2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_call2, _m)[_m]();
|
||||||
|
(_getSelf3 = (_ref21 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self]) == null ? void 0 : _ref21.getSelf()) === null || _getSelf3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf3, _m)[_m]();
|
||||||
|
(_getSelf4 = (_ref22 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self]) == null ? void 0 : _ref22.getSelf == null ? void 0 : _ref22.getSelf()) === null || _getSelf4 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf4, _m)[_m]();
|
||||||
|
(_self7 = (_ref23 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self].getSelf()) == null ? void 0 : _ref23.self) === null || _self7 === void 0 ? void 0 : _classPrivateFieldLooseBase(_self7, _m)[_m]();
|
||||||
|
(_call$self2 = (_ref24 = fn === null || fn === void 0 ? void 0 : (_classPrivateFieldLoo4 = _classPrivateFieldLooseBase(fn().Foo, _self)[_self]).getSelf) == null ? void 0 : (_ref24$call = _ref24.call(_classPrivateFieldLoo4)) == null ? void 0 : _ref24$call.self) === null || _call$self2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_call$self2, _m)[_m]();
|
||||||
|
(_getSelf$self3 = (_ref25 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self]) == null ? void 0 : (_ref25$getSelf = _ref25.getSelf()) == null ? void 0 : _ref25$getSelf.self) === null || _getSelf$self3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf$self3, _m)[_m]();
|
||||||
|
(_getSelf$self4 = (_ref26 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self]) == null ? void 0 : _ref26.getSelf == null ? void 0 : (_ref26$getSelf = _ref26.getSelf()) == null ? void 0 : _ref26$getSelf.self) === null || _getSelf$self4 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf$self4, _m)[_m]();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
var _x = _classPrivateFieldLooseKey("x");
|
||||||
|
|
||||||
|
var _m = _classPrivateFieldLooseKey("m");
|
||||||
|
|
||||||
|
var _self = _classPrivateFieldLooseKey("self");
|
||||||
|
|
||||||
|
Object.defineProperty(Foo, _x, {
|
||||||
|
writable: true,
|
||||||
|
value: 1
|
||||||
|
});
|
||||||
|
Object.defineProperty(Foo, _m, {
|
||||||
|
writable: true,
|
||||||
|
value: function () {
|
||||||
|
return _classPrivateFieldLooseBase(this, _x)[_x];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(Foo, _self, {
|
||||||
|
writable: true,
|
||||||
|
value: Foo
|
||||||
|
});
|
||||||
|
Foo.self = Foo;
|
||||||
|
Foo.test();
|
||||||
@ -0,0 +1,126 @@
|
|||||||
|
class Foo {
|
||||||
|
static #x = 1;
|
||||||
|
static #m = function() { return this.#x; };
|
||||||
|
static #self = Foo;
|
||||||
|
static self = Foo;
|
||||||
|
static getSelf() { return this }
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
const o = { Foo: Foo };
|
||||||
|
const deep = { very: { o } };
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(Foo?.#m()).toEqual(1);
|
||||||
|
expect(Foo?.#m().toString).toEqual(1..toString);
|
||||||
|
expect(Foo?.#m().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(o?.Foo?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo?.#m().toString).toEqual(1..toString);
|
||||||
|
expect(o?.Foo?.#m().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(deep?.very.o?.Foo?.#m()).toEqual(1);
|
||||||
|
expect(deep?.very.o?.Foo?.#m().toString).toEqual(1..toString);
|
||||||
|
expect(deep?.very.o?.Foo?.#m().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(o?.Foo.#self?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.self?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.self?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.self?.self?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.self?.self?.#m()).toEqual(1);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.getSelf()?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf()?.self?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.self?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.self?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.self?.#m()).toEqual(1);
|
||||||
|
|
||||||
|
expect(fn?.().Foo?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo?.#m().toString).toEqual(1..toString);
|
||||||
|
expect(fn?.().Foo?.#m().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#m()).toEqual(1);
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#m().toString).toEqual(1..toString);
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#m().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.self?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.self?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.self?.self?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.self?.self?.#m()).toEqual(1);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.self?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.self?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.self?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.self?.#m()).toEqual(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static testNull() {
|
||||||
|
const o = null;;
|
||||||
|
const deep = { very: { o } };
|
||||||
|
const fn = null;
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(o?.Foo?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo?.#m().toString).toEqual(undefined);
|
||||||
|
expect(o?.Foo?.#m().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(deep?.very.o?.Foo?.#m()).toEqual(undefined);
|
||||||
|
expect(deep?.very.o?.Foo?.#m().toString).toEqual(undefined);
|
||||||
|
expect(deep?.very.o?.Foo?.#m().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.self?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.self?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.self?.self?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.self?.self?.#m()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.getSelf()?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf()?.self?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.self?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.self?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.self?.#m()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo?.#m().toString).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo?.#m().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#m()).toEqual(undefined);
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#m().toString).toEqual(undefined);
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#m().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.self?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.self?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.self?.self?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.self?.self?.#m()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.self?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.self?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.self?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.self?.#m()).toEqual(undefined);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
|
Foo.testNull();
|
||||||
@ -0,0 +1,70 @@
|
|||||||
|
class Foo {
|
||||||
|
static #x = 1;
|
||||||
|
static #m = function() { return this.#x; };
|
||||||
|
static #self = Foo;
|
||||||
|
static self = Foo;
|
||||||
|
static getSelf() { return this }
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
const o = { Foo: Foo };
|
||||||
|
const deep = { very: { o } };
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo?.#m();
|
||||||
|
Foo?.#m().toString;
|
||||||
|
Foo?.#m().toString();
|
||||||
|
|
||||||
|
o?.Foo.#m();
|
||||||
|
o?.Foo.#m().toString;
|
||||||
|
o?.Foo.#m().toString();
|
||||||
|
|
||||||
|
deep?.very.o?.Foo.#m();
|
||||||
|
deep?.very.o?.Foo.#m().toString;
|
||||||
|
deep?.very.o?.Foo.#m().toString();
|
||||||
|
|
||||||
|
o?.Foo.#self.#m();
|
||||||
|
o?.Foo.#self.self.#m();
|
||||||
|
o?.Foo.#self?.self.#m();
|
||||||
|
o?.Foo.#self.self?.self.#m();
|
||||||
|
o?.Foo.#self?.self?.self.#m();
|
||||||
|
|
||||||
|
o?.Foo.#self.getSelf().#m();
|
||||||
|
o?.Foo.#self.getSelf?.().#m();
|
||||||
|
o?.Foo.#self?.getSelf().#m();
|
||||||
|
o?.Foo.#self?.getSelf?.().#m();
|
||||||
|
o?.Foo.#self.getSelf()?.self.#m();
|
||||||
|
o?.Foo.#self.getSelf?.()?.self.#m();
|
||||||
|
o?.Foo.#self?.getSelf()?.self.#m();
|
||||||
|
o?.Foo.#self?.getSelf?.()?.self.#m();
|
||||||
|
|
||||||
|
fn?.().Foo.#m();
|
||||||
|
fn?.().Foo.#m().toString;
|
||||||
|
fn?.().Foo.#m().toString();
|
||||||
|
|
||||||
|
fnDeep?.().very.o?.Foo.#m();
|
||||||
|
fnDeep?.().very.o?.Foo.#m().toString;
|
||||||
|
fnDeep?.().very.o?.Foo.#m().toString();
|
||||||
|
|
||||||
|
fn?.().Foo.#self.#m();
|
||||||
|
fn?.().Foo.#self.self.#m();
|
||||||
|
fn?.().Foo.#self?.self.#m();
|
||||||
|
fn?.().Foo.#self.self?.self.#m();
|
||||||
|
fn?.().Foo.#self?.self?.self.#m();
|
||||||
|
|
||||||
|
fn?.().Foo.#self.getSelf().#m();
|
||||||
|
fn?.().Foo.#self.getSelf?.().#m();
|
||||||
|
fn?.().Foo.#self?.getSelf().#m();
|
||||||
|
fn?.().Foo.#self?.getSelf?.().#m();
|
||||||
|
fn?.().Foo.#self.getSelf()?.self.#m();
|
||||||
|
fn?.().Foo.#self.getSelf?.()?.self.#m();
|
||||||
|
fn?.().Foo.#self?.getSelf()?.self.#m();
|
||||||
|
fn?.().Foo.#self?.getSelf?.()?.self.#m();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"plugins": [["proposal-class-properties", { "loose": true }]],
|
||||||
|
"minNodeVersion": "14.0.0"
|
||||||
|
}
|
||||||
@ -0,0 +1,98 @@
|
|||||||
|
function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError("attempted to use private field on non-instance"); } return receiver; }
|
||||||
|
|
||||||
|
var id = 0;
|
||||||
|
|
||||||
|
function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; }
|
||||||
|
|
||||||
|
class Foo {
|
||||||
|
static getSelf() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
var _deep$very$o, _deep$very$o2, _deep$very$o3, _ref, _ref2, _self2, _classPrivateFieldLoo, _ref3, _ref4, _getSelf, _ref5, _ref6, _classPrivateFieldLoo2, _call, _getSelf2, _getSelf3, _fnDeep$very$o, _fnDeep$very$o2, _fnDeep$very$o3, _ref7, _ref8, _self3, _classPrivateFieldLoo3, _ref9, _ref10, _getSelf4, _ref11, _ref12, _classPrivateFieldLoo4, _call2, _getSelf5, _getSelf6;
|
||||||
|
|
||||||
|
const o = {
|
||||||
|
Foo: Foo
|
||||||
|
};
|
||||||
|
const deep = {
|
||||||
|
very: {
|
||||||
|
o
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo === null || Foo === void 0 ? void 0 : _classPrivateFieldLooseBase(Foo, _m)[_m]();
|
||||||
|
Foo === null || Foo === void 0 ? void 0 : _classPrivateFieldLooseBase(Foo, _m)[_m]().toString;
|
||||||
|
Foo === null || Foo === void 0 ? void 0 : _classPrivateFieldLooseBase(Foo, _m)[_m]().toString();
|
||||||
|
o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _m)[_m]();
|
||||||
|
o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _m)[_m]().toString;
|
||||||
|
o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _m)[_m]().toString();
|
||||||
|
(_deep$very$o = deep?.very.o) === null || _deep$very$o === void 0 ? void 0 : _classPrivateFieldLooseBase(_deep$very$o.Foo, _m)[_m]();
|
||||||
|
(_deep$very$o2 = deep?.very.o) === null || _deep$very$o2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_deep$very$o2.Foo, _m)[_m]().toString;
|
||||||
|
(_deep$very$o3 = deep?.very.o) === null || _deep$very$o3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_deep$very$o3.Foo, _m)[_m]().toString();
|
||||||
|
o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(_classPrivateFieldLooseBase(o.Foo, _self)[_self], _m)[_m]();
|
||||||
|
o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(_classPrivateFieldLooseBase(o.Foo, _self)[_self].self, _m)[_m]();
|
||||||
|
(_ref = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self]) === null || _ref === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref.self, _m)[_m]();
|
||||||
|
(_ref2 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self].self) === null || _ref2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref2.self, _m)[_m]();
|
||||||
|
(_self2 = (o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self])?.self) === null || _self2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_self2.self, _m)[_m]();
|
||||||
|
o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(_classPrivateFieldLooseBase(o.Foo, _self)[_self].getSelf(), _m)[_m]();
|
||||||
|
(_ref3 = o === null || o === void 0 ? void 0 : (_classPrivateFieldLoo = _classPrivateFieldLooseBase(o.Foo, _self)[_self]).getSelf) === null || _ref3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref3.call(_classPrivateFieldLoo), _m)[_m]();
|
||||||
|
(_ref4 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self]) === null || _ref4 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref4.getSelf(), _m)[_m]();
|
||||||
|
(_getSelf = (_ref5 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self])?.getSelf) === null || _getSelf === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf.call(_ref5), _m)[_m]();
|
||||||
|
(_ref6 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self].getSelf()) === null || _ref6 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref6.self, _m)[_m]();
|
||||||
|
(_call = (o === null || o === void 0 ? void 0 : (_classPrivateFieldLoo2 = _classPrivateFieldLooseBase(o.Foo, _self)[_self]).getSelf)?.call(_classPrivateFieldLoo2)) === null || _call === void 0 ? void 0 : _classPrivateFieldLooseBase(_call.self, _m)[_m]();
|
||||||
|
(_getSelf2 = (o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self])?.getSelf()) === null || _getSelf2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf2.self, _m)[_m]();
|
||||||
|
(_getSelf3 = (o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self])?.getSelf?.()) === null || _getSelf3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf3.self, _m)[_m]();
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _m)[_m]();
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _m)[_m]().toString;
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _m)[_m]().toString();
|
||||||
|
(_fnDeep$very$o = fnDeep?.().very.o) === null || _fnDeep$very$o === void 0 ? void 0 : _classPrivateFieldLooseBase(_fnDeep$very$o.Foo, _m)[_m]();
|
||||||
|
(_fnDeep$very$o2 = fnDeep?.().very.o) === null || _fnDeep$very$o2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_fnDeep$very$o2.Foo, _m)[_m]().toString;
|
||||||
|
(_fnDeep$very$o3 = fnDeep?.().very.o) === null || _fnDeep$very$o3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_fnDeep$very$o3.Foo, _m)[_m]().toString();
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(_classPrivateFieldLooseBase(fn().Foo, _self)[_self], _m)[_m]();
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(_classPrivateFieldLooseBase(fn().Foo, _self)[_self].self, _m)[_m]();
|
||||||
|
(_ref7 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self]) === null || _ref7 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref7.self, _m)[_m]();
|
||||||
|
(_ref8 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self].self) === null || _ref8 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref8.self, _m)[_m]();
|
||||||
|
(_self3 = (fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self])?.self) === null || _self3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_self3.self, _m)[_m]();
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(_classPrivateFieldLooseBase(fn().Foo, _self)[_self].getSelf(), _m)[_m]();
|
||||||
|
(_ref9 = fn === null || fn === void 0 ? void 0 : (_classPrivateFieldLoo3 = _classPrivateFieldLooseBase(fn().Foo, _self)[_self]).getSelf) === null || _ref9 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref9.call(_classPrivateFieldLoo3), _m)[_m]();
|
||||||
|
(_ref10 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self]) === null || _ref10 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref10.getSelf(), _m)[_m]();
|
||||||
|
(_getSelf4 = (_ref11 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self])?.getSelf) === null || _getSelf4 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf4.call(_ref11), _m)[_m]();
|
||||||
|
(_ref12 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self].getSelf()) === null || _ref12 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref12.self, _m)[_m]();
|
||||||
|
(_call2 = (fn === null || fn === void 0 ? void 0 : (_classPrivateFieldLoo4 = _classPrivateFieldLooseBase(fn().Foo, _self)[_self]).getSelf)?.call(_classPrivateFieldLoo4)) === null || _call2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_call2.self, _m)[_m]();
|
||||||
|
(_getSelf5 = (fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self])?.getSelf()) === null || _getSelf5 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf5.self, _m)[_m]();
|
||||||
|
(_getSelf6 = (fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self])?.getSelf?.()) === null || _getSelf6 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf6.self, _m)[_m]();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
var _x = _classPrivateFieldLooseKey("x");
|
||||||
|
|
||||||
|
var _m = _classPrivateFieldLooseKey("m");
|
||||||
|
|
||||||
|
var _self = _classPrivateFieldLooseKey("self");
|
||||||
|
|
||||||
|
Object.defineProperty(Foo, _x, {
|
||||||
|
writable: true,
|
||||||
|
value: 1
|
||||||
|
});
|
||||||
|
Object.defineProperty(Foo, _m, {
|
||||||
|
writable: true,
|
||||||
|
value: function () {
|
||||||
|
return _classPrivateFieldLooseBase(this, _x)[_x];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Object.defineProperty(Foo, _self, {
|
||||||
|
writable: true,
|
||||||
|
value: Foo
|
||||||
|
});
|
||||||
|
Foo.self = Foo;
|
||||||
|
Foo.test();
|
||||||
@ -0,0 +1,125 @@
|
|||||||
|
class Foo {
|
||||||
|
static #x = 1;
|
||||||
|
static #self = Foo;
|
||||||
|
static self = Foo;
|
||||||
|
static getSelf() { return this }
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
const o = { Foo: Foo };
|
||||||
|
const deep = { very: { o } };
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(Foo?.#x).toEqual(1);
|
||||||
|
expect(Foo?.#x.toString).toEqual(1..toString);
|
||||||
|
expect(Foo?.#x.toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(o?.Foo?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo?.#x.toString).toEqual(1..toString);
|
||||||
|
expect(o?.Foo?.#x.toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(deep?.very.o?.Foo?.#x).toEqual(1);
|
||||||
|
expect(deep?.very.o?.Foo?.#x.toString).toEqual(1..toString);
|
||||||
|
expect(deep?.very.o?.Foo?.#x.toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(o?.Foo.#self?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.self?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.self?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.self?.self?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.self?.self?.#x).toEqual(1);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.getSelf()?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf()?.self?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.self?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.self?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.self?.#x).toEqual(1);
|
||||||
|
|
||||||
|
expect(fn?.().Foo?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo?.#x.toString).toEqual(1..toString);
|
||||||
|
expect(fn?.().Foo?.#x.toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#x).toEqual(1);
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#x.toString).toEqual(1..toString);
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#x.toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.self?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.self?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.self?.self?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.self?.self?.#x).toEqual(1);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.self?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.self?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.self?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.self?.#x).toEqual(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static testNull() {
|
||||||
|
const o = null;;
|
||||||
|
const deep = { very: { o } };
|
||||||
|
const fn = null;
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(o?.Foo?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo?.#x.toString).toEqual(undefined);
|
||||||
|
expect(o?.Foo?.#x.toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(deep?.very.o?.Foo?.#x).toEqual(undefined);
|
||||||
|
expect(deep?.very.o?.Foo?.#x.toString).toEqual(undefined);
|
||||||
|
expect(deep?.very.o?.Foo?.#x.toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.self?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.self?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.self?.self?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.self?.self?.#x).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.getSelf()?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf()?.self?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.self?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.self?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.self?.#x).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo?.#x.toString).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo?.#x.toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#x).toEqual(undefined);
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#x.toString).toEqual(undefined);
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#x.toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.self?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.self?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.self?.self?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.self?.self?.#x).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.self?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.self?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.self?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.self?.#x).toEqual(undefined);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
|
Foo.testNull();
|
||||||
@ -0,0 +1,69 @@
|
|||||||
|
class Foo {
|
||||||
|
static #x = 1;
|
||||||
|
static #self = Foo;
|
||||||
|
static self = Foo;
|
||||||
|
static getSelf() { return this }
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
const o = { Foo: Foo };
|
||||||
|
const deep = { very: { o } };
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo?.#x;
|
||||||
|
Foo?.#x.toString;
|
||||||
|
Foo?.#x.toString();
|
||||||
|
|
||||||
|
o?.Foo?.#x;
|
||||||
|
o?.Foo?.#x.toString;
|
||||||
|
o?.Foo?.#x.toString();
|
||||||
|
|
||||||
|
deep?.very.o?.Foo?.#x;
|
||||||
|
deep?.very.o?.Foo?.#x.toString;
|
||||||
|
deep?.very.o?.Foo?.#x.toString();
|
||||||
|
|
||||||
|
o?.Foo.#self?.#x;
|
||||||
|
o?.Foo.#self.self?.#x;
|
||||||
|
o?.Foo.#self?.self?.#x;
|
||||||
|
o?.Foo.#self.self?.self?.#x;
|
||||||
|
o?.Foo.#self?.self?.self?.#x;
|
||||||
|
|
||||||
|
o?.Foo.#self.getSelf()?.#x;
|
||||||
|
o?.Foo.#self.getSelf?.()?.#x;
|
||||||
|
o?.Foo.#self?.getSelf()?.#x;
|
||||||
|
o?.Foo.#self?.getSelf?.()?.#x;
|
||||||
|
o?.Foo.#self.getSelf()?.self?.#x;
|
||||||
|
o?.Foo.#self.getSelf?.()?.self?.#x;
|
||||||
|
o?.Foo.#self?.getSelf()?.self?.#x;
|
||||||
|
o?.Foo.#self?.getSelf?.()?.self?.#x;
|
||||||
|
|
||||||
|
fn?.().Foo?.#x;
|
||||||
|
fn?.().Foo?.#x.toString;
|
||||||
|
fn?.().Foo?.#x.toString();
|
||||||
|
|
||||||
|
fnDeep?.().very.o?.Foo?.#x;
|
||||||
|
fnDeep?.().very.o?.Foo?.#x.toString;
|
||||||
|
fnDeep?.().very.o?.Foo?.#x.toString();
|
||||||
|
|
||||||
|
fn?.().Foo.#self?.#x;
|
||||||
|
fn?.().Foo.#self.self?.#x;
|
||||||
|
fn?.().Foo.#self?.self?.#x;
|
||||||
|
fn?.().Foo.#self.self?.self?.#x;
|
||||||
|
fn?.().Foo.#self?.self?.self?.#x;
|
||||||
|
|
||||||
|
fn?.().Foo.#self.getSelf()?.#x;
|
||||||
|
fn?.().Foo.#self.getSelf?.()?.#x;
|
||||||
|
fn?.().Foo.#self?.getSelf()?.#x;
|
||||||
|
fn?.().Foo.#self?.getSelf?.()?.#x;
|
||||||
|
fn?.().Foo.#self.getSelf()?.self?.#x;
|
||||||
|
fn?.().Foo.#self.getSelf?.()?.self?.#x;
|
||||||
|
fn?.().Foo.#self?.getSelf()?.self?.#x;
|
||||||
|
fn?.().Foo.#self?.getSelf?.()?.self?.#x;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"plugins": [
|
||||||
|
["proposal-optional-chaining", { "loose": true }],
|
||||||
|
["proposal-class-properties", { "loose": true }]
|
||||||
|
]
|
||||||
|
}
|
||||||
@ -0,0 +1,90 @@
|
|||||||
|
function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError("attempted to use private field on non-instance"); } return receiver; }
|
||||||
|
|
||||||
|
var id = 0;
|
||||||
|
|
||||||
|
function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; }
|
||||||
|
|
||||||
|
class Foo {
|
||||||
|
static getSelf() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
var _o$Foo, _o$Foo2, _o$Foo3, _deep$very$o$Foo, _deep$very$o$Foo2, _deep$very$o$Foo3, _ref, _ref2, _self2, _self3, _self$self, _ref3, _classPrivateFieldLoo, _call, _getSelf, _getSelf2, _self4, _classPrivateFieldLoo2, _call$self, _getSelf$self, _getSelf$self2, _fn$Foo, _fn$Foo2, _fn$Foo3, _fnDeep$very$o$Foo, _fnDeep$very$o$Foo2, _fnDeep$very$o$Foo3, _ref4, _ref5, _self5, _self6, _self$self2, _ref6, _classPrivateFieldLoo3, _call2, _getSelf3, _getSelf4, _self7, _classPrivateFieldLoo4, _call$self2, _getSelf$self3, _getSelf$self4, _deep$very$o, _deep$very$o2, _deep$very$o3, _ref7, _ref8, _ref9, _ref9$self, _ref10, _ref11, _ref12, _ref13, _ref14, _ref14$call, _ref15, _ref15$getSelf, _ref16, _ref16$getSelf, _fnDeep$very$o, _fnDeep$very$o2, _fnDeep$very$o3, _ref17, _ref18, _ref19, _ref19$self, _ref20, _ref21, _ref22, _ref23, _ref24, _ref24$call, _ref25, _ref25$getSelf, _ref26, _ref26$getSelf;
|
||||||
|
|
||||||
|
const o = {
|
||||||
|
Foo: Foo
|
||||||
|
};
|
||||||
|
const deep = {
|
||||||
|
very: {
|
||||||
|
o
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo === null || Foo === void 0 ? void 0 : _classPrivateFieldLooseBase(Foo, _x)[_x];
|
||||||
|
Foo === null || Foo === void 0 ? void 0 : _classPrivateFieldLooseBase(Foo, _x)[_x].toString;
|
||||||
|
Foo === null || Foo === void 0 ? void 0 : _classPrivateFieldLooseBase(Foo, _x)[_x].toString();
|
||||||
|
(_o$Foo = o == null ? void 0 : o.Foo) === null || _o$Foo === void 0 ? void 0 : _classPrivateFieldLooseBase(_o$Foo, _x)[_x];
|
||||||
|
(_o$Foo2 = o == null ? void 0 : o.Foo) === null || _o$Foo2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_o$Foo2, _x)[_x].toString;
|
||||||
|
(_o$Foo3 = o == null ? void 0 : o.Foo) === null || _o$Foo3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_o$Foo3, _x)[_x].toString();
|
||||||
|
(_deep$very$o$Foo = deep == null ? void 0 : (_deep$very$o = deep.very.o) == null ? void 0 : _deep$very$o.Foo) === null || _deep$very$o$Foo === void 0 ? void 0 : _classPrivateFieldLooseBase(_deep$very$o$Foo, _x)[_x];
|
||||||
|
(_deep$very$o$Foo2 = deep == null ? void 0 : (_deep$very$o2 = deep.very.o) == null ? void 0 : _deep$very$o2.Foo) === null || _deep$very$o$Foo2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_deep$very$o$Foo2, _x)[_x].toString;
|
||||||
|
(_deep$very$o$Foo3 = deep == null ? void 0 : (_deep$very$o3 = deep.very.o) == null ? void 0 : _deep$very$o3.Foo) === null || _deep$very$o$Foo3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_deep$very$o$Foo3, _x)[_x].toString();
|
||||||
|
(_ref = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self]) === null || _ref === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref, _x)[_x];
|
||||||
|
(_ref2 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self].self) === null || _ref2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref2, _x)[_x];
|
||||||
|
(_self2 = (_ref7 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self]) == null ? void 0 : _ref7.self) === null || _self2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_self2, _x)[_x];
|
||||||
|
(_self3 = (_ref8 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self].self) == null ? void 0 : _ref8.self) === null || _self3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_self3, _x)[_x];
|
||||||
|
(_self$self = (_ref9 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self]) == null ? void 0 : (_ref9$self = _ref9.self) == null ? void 0 : _ref9$self.self) === null || _self$self === void 0 ? void 0 : _classPrivateFieldLooseBase(_self$self, _x)[_x];
|
||||||
|
(_ref3 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self].getSelf()) === null || _ref3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref3, _x)[_x];
|
||||||
|
(_call = (_ref10 = o === null || o === void 0 ? void 0 : (_classPrivateFieldLoo = _classPrivateFieldLooseBase(o.Foo, _self)[_self]).getSelf) == null ? void 0 : _ref10.call(_classPrivateFieldLoo)) === null || _call === void 0 ? void 0 : _classPrivateFieldLooseBase(_call, _x)[_x];
|
||||||
|
(_getSelf = (_ref11 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self]) == null ? void 0 : _ref11.getSelf()) === null || _getSelf === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf, _x)[_x];
|
||||||
|
(_getSelf2 = (_ref12 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self]) == null ? void 0 : _ref12.getSelf == null ? void 0 : _ref12.getSelf()) === null || _getSelf2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf2, _x)[_x];
|
||||||
|
(_self4 = (_ref13 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self].getSelf()) == null ? void 0 : _ref13.self) === null || _self4 === void 0 ? void 0 : _classPrivateFieldLooseBase(_self4, _x)[_x];
|
||||||
|
(_call$self = (_ref14 = o === null || o === void 0 ? void 0 : (_classPrivateFieldLoo2 = _classPrivateFieldLooseBase(o.Foo, _self)[_self]).getSelf) == null ? void 0 : (_ref14$call = _ref14.call(_classPrivateFieldLoo2)) == null ? void 0 : _ref14$call.self) === null || _call$self === void 0 ? void 0 : _classPrivateFieldLooseBase(_call$self, _x)[_x];
|
||||||
|
(_getSelf$self = (_ref15 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self]) == null ? void 0 : (_ref15$getSelf = _ref15.getSelf()) == null ? void 0 : _ref15$getSelf.self) === null || _getSelf$self === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf$self, _x)[_x];
|
||||||
|
(_getSelf$self2 = (_ref16 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self]) == null ? void 0 : _ref16.getSelf == null ? void 0 : (_ref16$getSelf = _ref16.getSelf()) == null ? void 0 : _ref16$getSelf.self) === null || _getSelf$self2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf$self2, _x)[_x];
|
||||||
|
(_fn$Foo = fn == null ? void 0 : fn().Foo) === null || _fn$Foo === void 0 ? void 0 : _classPrivateFieldLooseBase(_fn$Foo, _x)[_x];
|
||||||
|
(_fn$Foo2 = fn == null ? void 0 : fn().Foo) === null || _fn$Foo2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_fn$Foo2, _x)[_x].toString;
|
||||||
|
(_fn$Foo3 = fn == null ? void 0 : fn().Foo) === null || _fn$Foo3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_fn$Foo3, _x)[_x].toString();
|
||||||
|
(_fnDeep$very$o$Foo = fnDeep == null ? void 0 : (_fnDeep$very$o = fnDeep().very.o) == null ? void 0 : _fnDeep$very$o.Foo) === null || _fnDeep$very$o$Foo === void 0 ? void 0 : _classPrivateFieldLooseBase(_fnDeep$very$o$Foo, _x)[_x];
|
||||||
|
(_fnDeep$very$o$Foo2 = fnDeep == null ? void 0 : (_fnDeep$very$o2 = fnDeep().very.o) == null ? void 0 : _fnDeep$very$o2.Foo) === null || _fnDeep$very$o$Foo2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_fnDeep$very$o$Foo2, _x)[_x].toString;
|
||||||
|
(_fnDeep$very$o$Foo3 = fnDeep == null ? void 0 : (_fnDeep$very$o3 = fnDeep().very.o) == null ? void 0 : _fnDeep$very$o3.Foo) === null || _fnDeep$very$o$Foo3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_fnDeep$very$o$Foo3, _x)[_x].toString();
|
||||||
|
(_ref4 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self]) === null || _ref4 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref4, _x)[_x];
|
||||||
|
(_ref5 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self].self) === null || _ref5 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref5, _x)[_x];
|
||||||
|
(_self5 = (_ref17 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self]) == null ? void 0 : _ref17.self) === null || _self5 === void 0 ? void 0 : _classPrivateFieldLooseBase(_self5, _x)[_x];
|
||||||
|
(_self6 = (_ref18 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self].self) == null ? void 0 : _ref18.self) === null || _self6 === void 0 ? void 0 : _classPrivateFieldLooseBase(_self6, _x)[_x];
|
||||||
|
(_self$self2 = (_ref19 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self]) == null ? void 0 : (_ref19$self = _ref19.self) == null ? void 0 : _ref19$self.self) === null || _self$self2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_self$self2, _x)[_x];
|
||||||
|
(_ref6 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self].getSelf()) === null || _ref6 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref6, _x)[_x];
|
||||||
|
(_call2 = (_ref20 = fn === null || fn === void 0 ? void 0 : (_classPrivateFieldLoo3 = _classPrivateFieldLooseBase(fn().Foo, _self)[_self]).getSelf) == null ? void 0 : _ref20.call(_classPrivateFieldLoo3)) === null || _call2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_call2, _x)[_x];
|
||||||
|
(_getSelf3 = (_ref21 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self]) == null ? void 0 : _ref21.getSelf()) === null || _getSelf3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf3, _x)[_x];
|
||||||
|
(_getSelf4 = (_ref22 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self]) == null ? void 0 : _ref22.getSelf == null ? void 0 : _ref22.getSelf()) === null || _getSelf4 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf4, _x)[_x];
|
||||||
|
(_self7 = (_ref23 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self].getSelf()) == null ? void 0 : _ref23.self) === null || _self7 === void 0 ? void 0 : _classPrivateFieldLooseBase(_self7, _x)[_x];
|
||||||
|
(_call$self2 = (_ref24 = fn === null || fn === void 0 ? void 0 : (_classPrivateFieldLoo4 = _classPrivateFieldLooseBase(fn().Foo, _self)[_self]).getSelf) == null ? void 0 : (_ref24$call = _ref24.call(_classPrivateFieldLoo4)) == null ? void 0 : _ref24$call.self) === null || _call$self2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_call$self2, _x)[_x];
|
||||||
|
(_getSelf$self3 = (_ref25 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self]) == null ? void 0 : (_ref25$getSelf = _ref25.getSelf()) == null ? void 0 : _ref25$getSelf.self) === null || _getSelf$self3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf$self3, _x)[_x];
|
||||||
|
(_getSelf$self4 = (_ref26 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self]) == null ? void 0 : _ref26.getSelf == null ? void 0 : (_ref26$getSelf = _ref26.getSelf()) == null ? void 0 : _ref26$getSelf.self) === null || _getSelf$self4 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf$self4, _x)[_x];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
var _x = _classPrivateFieldLooseKey("x");
|
||||||
|
|
||||||
|
var _self = _classPrivateFieldLooseKey("self");
|
||||||
|
|
||||||
|
Object.defineProperty(Foo, _x, {
|
||||||
|
writable: true,
|
||||||
|
value: 1
|
||||||
|
});
|
||||||
|
Object.defineProperty(Foo, _self, {
|
||||||
|
writable: true,
|
||||||
|
value: Foo
|
||||||
|
});
|
||||||
|
Foo.self = Foo;
|
||||||
|
Foo.test();
|
||||||
@ -0,0 +1,125 @@
|
|||||||
|
class Foo {
|
||||||
|
static #x = 1;
|
||||||
|
static #self = Foo;
|
||||||
|
static self = Foo;
|
||||||
|
static getSelf() { return this }
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
const o = { Foo: Foo };
|
||||||
|
const deep = { very: { o } };
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(Foo?.#x).toEqual(1);
|
||||||
|
expect(Foo?.#x.toString).toEqual(1..toString);
|
||||||
|
expect(Foo?.#x.toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(o?.Foo?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo?.#x.toString).toEqual(1..toString);
|
||||||
|
expect(o?.Foo?.#x.toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(deep?.very.o?.Foo?.#x).toEqual(1);
|
||||||
|
expect(deep?.very.o?.Foo?.#x.toString).toEqual(1..toString);
|
||||||
|
expect(deep?.very.o?.Foo?.#x.toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(o?.Foo.#self?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.self?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.self?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.self?.self?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.self?.self?.#x).toEqual(1);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.getSelf()?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf()?.self?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.self?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.self?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.self?.#x).toEqual(1);
|
||||||
|
|
||||||
|
expect(fn?.().Foo?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo?.#x.toString).toEqual(1..toString);
|
||||||
|
expect(fn?.().Foo?.#x.toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#x).toEqual(1);
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#x.toString).toEqual(1..toString);
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#x.toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.self?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.self?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.self?.self?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.self?.self?.#x).toEqual(1);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.self?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.self?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.self?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.self?.#x).toEqual(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static testNull() {
|
||||||
|
const o = null;;
|
||||||
|
const deep = { very: { o } };
|
||||||
|
const fn = null;
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(o?.Foo?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo?.#x.toString).toEqual(undefined);
|
||||||
|
expect(o?.Foo?.#x.toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(deep?.very.o?.Foo?.#x).toEqual(undefined);
|
||||||
|
expect(deep?.very.o?.Foo?.#x.toString).toEqual(undefined);
|
||||||
|
expect(deep?.very.o?.Foo?.#x.toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.self?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.self?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.self?.self?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.self?.self?.#x).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.getSelf()?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf()?.self?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.self?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.self?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.self?.#x).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo?.#x.toString).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo?.#x.toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#x).toEqual(undefined);
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#x.toString).toEqual(undefined);
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#x.toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.self?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.self?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.self?.self?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.self?.self?.#x).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.self?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.self?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.self?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.self?.#x).toEqual(undefined);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
|
Foo.testNull();
|
||||||
@ -0,0 +1,70 @@
|
|||||||
|
class Foo {
|
||||||
|
static #x = 1;
|
||||||
|
static #self = Foo;
|
||||||
|
static self = Foo;
|
||||||
|
static getSelf() { return this }
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
const o = { Foo: Foo };
|
||||||
|
const deep = { very: { o } };
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo?.#x;
|
||||||
|
Foo?.#x.toString;
|
||||||
|
Foo?.#x.toString();
|
||||||
|
|
||||||
|
o?.Foo?.#x;
|
||||||
|
o?.Foo?.#x.toString;
|
||||||
|
o?.Foo?.#x.toString();
|
||||||
|
|
||||||
|
deep?.very.o?.Foo?.#x;
|
||||||
|
deep?.very.o?.Foo?.#x.toString;
|
||||||
|
deep?.very.o?.Foo?.#x.toString();
|
||||||
|
|
||||||
|
o?.Foo.#self?.#x;
|
||||||
|
o?.Foo.#self.self?.#x;
|
||||||
|
o?.Foo.#self?.self?.#x;
|
||||||
|
o?.Foo.#self.self?.self?.#x;
|
||||||
|
o?.Foo.#self?.self?.self?.#x;
|
||||||
|
|
||||||
|
o?.Foo.#self.getSelf()?.#x;
|
||||||
|
o?.Foo.#self.getSelf?.()?.#x;
|
||||||
|
o?.Foo.#self?.getSelf()?.#x;
|
||||||
|
o?.Foo.#self?.getSelf?.()?.#x;
|
||||||
|
o?.Foo.#self.getSelf()?.self?.#x;
|
||||||
|
o?.Foo.#self.getSelf?.()?.self?.#x;
|
||||||
|
o?.Foo.#self?.getSelf()?.self?.#x;
|
||||||
|
o?.Foo.#self?.getSelf?.()?.self?.#x;
|
||||||
|
|
||||||
|
fn?.().Foo?.#x;
|
||||||
|
fn?.().Foo?.#x.toString;
|
||||||
|
fn?.().Foo?.#x.toString();
|
||||||
|
|
||||||
|
fnDeep?.().very.o?.Foo?.#x;
|
||||||
|
fnDeep?.().very.o?.Foo?.#x.toString;
|
||||||
|
fnDeep?.().very.o?.Foo?.#x.toString();
|
||||||
|
|
||||||
|
fn?.().Foo.#self?.#x;
|
||||||
|
fn?.().Foo.#self.self?.#x;
|
||||||
|
fn?.().Foo.#self?.self?.#x;
|
||||||
|
fn?.().Foo.#self.self?.self?.#x;
|
||||||
|
fn?.().Foo.#self?.self?.self?.#x;
|
||||||
|
|
||||||
|
fn?.().Foo.#self.getSelf()?.#x;
|
||||||
|
fn?.().Foo.#self.getSelf?.()?.#x;
|
||||||
|
fn?.().Foo.#self?.getSelf()?.#x;
|
||||||
|
fn?.().Foo.#self?.getSelf?.()?.#x;
|
||||||
|
fn?.().Foo.#self.getSelf()?.self?.#x;
|
||||||
|
fn?.().Foo.#self.getSelf?.()?.self?.#x;
|
||||||
|
fn?.().Foo.#self?.getSelf()?.self?.#x;
|
||||||
|
fn?.().Foo.#self?.getSelf?.()?.self?.#x;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"plugins": [["proposal-class-properties", { "loose": true }]],
|
||||||
|
"minNodeVersion": "14.0.0"
|
||||||
|
}
|
||||||
@ -0,0 +1,90 @@
|
|||||||
|
function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError("attempted to use private field on non-instance"); } return receiver; }
|
||||||
|
|
||||||
|
var id = 0;
|
||||||
|
|
||||||
|
function _classPrivateFieldLooseKey(name) { return "__private_" + id++ + "_" + name; }
|
||||||
|
|
||||||
|
class Foo {
|
||||||
|
static getSelf() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
var _o$Foo, _o$Foo2, _o$Foo3, _deep$very$o$Foo, _deep$very$o$Foo2, _deep$very$o$Foo3, _ref, _ref2, _self2, _self3, _self$self, _ref3, _classPrivateFieldLoo, _call, _getSelf, _getSelf2, _self4, _classPrivateFieldLoo2, _call$self, _getSelf$self, _getSelf$self2, _fn$Foo, _fn$Foo2, _fn$Foo3, _fnDeep$very$o$Foo, _fnDeep$very$o$Foo2, _fnDeep$very$o$Foo3, _ref4, _ref5, _self5, _self6, _self$self2, _ref6, _classPrivateFieldLoo3, _call2, _getSelf3, _getSelf4, _self7, _classPrivateFieldLoo4, _call$self2, _getSelf$self3, _getSelf$self4;
|
||||||
|
|
||||||
|
const o = {
|
||||||
|
Foo: Foo
|
||||||
|
};
|
||||||
|
const deep = {
|
||||||
|
very: {
|
||||||
|
o
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo === null || Foo === void 0 ? void 0 : _classPrivateFieldLooseBase(Foo, _x)[_x];
|
||||||
|
Foo === null || Foo === void 0 ? void 0 : _classPrivateFieldLooseBase(Foo, _x)[_x].toString;
|
||||||
|
Foo === null || Foo === void 0 ? void 0 : _classPrivateFieldLooseBase(Foo, _x)[_x].toString();
|
||||||
|
(_o$Foo = o?.Foo) === null || _o$Foo === void 0 ? void 0 : _classPrivateFieldLooseBase(_o$Foo, _x)[_x];
|
||||||
|
(_o$Foo2 = o?.Foo) === null || _o$Foo2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_o$Foo2, _x)[_x].toString;
|
||||||
|
(_o$Foo3 = o?.Foo) === null || _o$Foo3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_o$Foo3, _x)[_x].toString();
|
||||||
|
(_deep$very$o$Foo = deep?.very.o?.Foo) === null || _deep$very$o$Foo === void 0 ? void 0 : _classPrivateFieldLooseBase(_deep$very$o$Foo, _x)[_x];
|
||||||
|
(_deep$very$o$Foo2 = deep?.very.o?.Foo) === null || _deep$very$o$Foo2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_deep$very$o$Foo2, _x)[_x].toString;
|
||||||
|
(_deep$very$o$Foo3 = deep?.very.o?.Foo) === null || _deep$very$o$Foo3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_deep$very$o$Foo3, _x)[_x].toString();
|
||||||
|
(_ref = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self]) === null || _ref === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref, _x)[_x];
|
||||||
|
(_ref2 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self].self) === null || _ref2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref2, _x)[_x];
|
||||||
|
(_self2 = (o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self])?.self) === null || _self2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_self2, _x)[_x];
|
||||||
|
(_self3 = (o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self].self)?.self) === null || _self3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_self3, _x)[_x];
|
||||||
|
(_self$self = (o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self])?.self?.self) === null || _self$self === void 0 ? void 0 : _classPrivateFieldLooseBase(_self$self, _x)[_x];
|
||||||
|
(_ref3 = o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self].getSelf()) === null || _ref3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref3, _x)[_x];
|
||||||
|
(_call = (o === null || o === void 0 ? void 0 : (_classPrivateFieldLoo = _classPrivateFieldLooseBase(o.Foo, _self)[_self]).getSelf)?.call(_classPrivateFieldLoo)) === null || _call === void 0 ? void 0 : _classPrivateFieldLooseBase(_call, _x)[_x];
|
||||||
|
(_getSelf = (o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self])?.getSelf()) === null || _getSelf === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf, _x)[_x];
|
||||||
|
(_getSelf2 = (o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self])?.getSelf?.()) === null || _getSelf2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf2, _x)[_x];
|
||||||
|
(_self4 = (o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self].getSelf())?.self) === null || _self4 === void 0 ? void 0 : _classPrivateFieldLooseBase(_self4, _x)[_x];
|
||||||
|
(_call$self = (o === null || o === void 0 ? void 0 : (_classPrivateFieldLoo2 = _classPrivateFieldLooseBase(o.Foo, _self)[_self]).getSelf)?.call(_classPrivateFieldLoo2)?.self) === null || _call$self === void 0 ? void 0 : _classPrivateFieldLooseBase(_call$self, _x)[_x];
|
||||||
|
(_getSelf$self = (o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self])?.getSelf()?.self) === null || _getSelf$self === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf$self, _x)[_x];
|
||||||
|
(_getSelf$self2 = (o === null || o === void 0 ? void 0 : _classPrivateFieldLooseBase(o.Foo, _self)[_self])?.getSelf?.()?.self) === null || _getSelf$self2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf$self2, _x)[_x];
|
||||||
|
(_fn$Foo = fn?.().Foo) === null || _fn$Foo === void 0 ? void 0 : _classPrivateFieldLooseBase(_fn$Foo, _x)[_x];
|
||||||
|
(_fn$Foo2 = fn?.().Foo) === null || _fn$Foo2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_fn$Foo2, _x)[_x].toString;
|
||||||
|
(_fn$Foo3 = fn?.().Foo) === null || _fn$Foo3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_fn$Foo3, _x)[_x].toString();
|
||||||
|
(_fnDeep$very$o$Foo = fnDeep?.().very.o?.Foo) === null || _fnDeep$very$o$Foo === void 0 ? void 0 : _classPrivateFieldLooseBase(_fnDeep$very$o$Foo, _x)[_x];
|
||||||
|
(_fnDeep$very$o$Foo2 = fnDeep?.().very.o?.Foo) === null || _fnDeep$very$o$Foo2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_fnDeep$very$o$Foo2, _x)[_x].toString;
|
||||||
|
(_fnDeep$very$o$Foo3 = fnDeep?.().very.o?.Foo) === null || _fnDeep$very$o$Foo3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_fnDeep$very$o$Foo3, _x)[_x].toString();
|
||||||
|
(_ref4 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self]) === null || _ref4 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref4, _x)[_x];
|
||||||
|
(_ref5 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self].self) === null || _ref5 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref5, _x)[_x];
|
||||||
|
(_self5 = (fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self])?.self) === null || _self5 === void 0 ? void 0 : _classPrivateFieldLooseBase(_self5, _x)[_x];
|
||||||
|
(_self6 = (fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self].self)?.self) === null || _self6 === void 0 ? void 0 : _classPrivateFieldLooseBase(_self6, _x)[_x];
|
||||||
|
(_self$self2 = (fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self])?.self?.self) === null || _self$self2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_self$self2, _x)[_x];
|
||||||
|
(_ref6 = fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self].getSelf()) === null || _ref6 === void 0 ? void 0 : _classPrivateFieldLooseBase(_ref6, _x)[_x];
|
||||||
|
(_call2 = (fn === null || fn === void 0 ? void 0 : (_classPrivateFieldLoo3 = _classPrivateFieldLooseBase(fn().Foo, _self)[_self]).getSelf)?.call(_classPrivateFieldLoo3)) === null || _call2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_call2, _x)[_x];
|
||||||
|
(_getSelf3 = (fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self])?.getSelf()) === null || _getSelf3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf3, _x)[_x];
|
||||||
|
(_getSelf4 = (fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self])?.getSelf?.()) === null || _getSelf4 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf4, _x)[_x];
|
||||||
|
(_self7 = (fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self].getSelf())?.self) === null || _self7 === void 0 ? void 0 : _classPrivateFieldLooseBase(_self7, _x)[_x];
|
||||||
|
(_call$self2 = (fn === null || fn === void 0 ? void 0 : (_classPrivateFieldLoo4 = _classPrivateFieldLooseBase(fn().Foo, _self)[_self]).getSelf)?.call(_classPrivateFieldLoo4)?.self) === null || _call$self2 === void 0 ? void 0 : _classPrivateFieldLooseBase(_call$self2, _x)[_x];
|
||||||
|
(_getSelf$self3 = (fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self])?.getSelf()?.self) === null || _getSelf$self3 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf$self3, _x)[_x];
|
||||||
|
(_getSelf$self4 = (fn === null || fn === void 0 ? void 0 : _classPrivateFieldLooseBase(fn().Foo, _self)[_self])?.getSelf?.()?.self) === null || _getSelf$self4 === void 0 ? void 0 : _classPrivateFieldLooseBase(_getSelf$self4, _x)[_x];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
var _x = _classPrivateFieldLooseKey("x");
|
||||||
|
|
||||||
|
var _self = _classPrivateFieldLooseKey("self");
|
||||||
|
|
||||||
|
Object.defineProperty(Foo, _x, {
|
||||||
|
writable: true,
|
||||||
|
value: 1
|
||||||
|
});
|
||||||
|
Object.defineProperty(Foo, _self, {
|
||||||
|
writable: true,
|
||||||
|
value: Foo
|
||||||
|
});
|
||||||
|
Foo.self = Foo;
|
||||||
|
Foo.test();
|
||||||
@ -0,0 +1,122 @@
|
|||||||
|
class Foo {
|
||||||
|
static #x = 1;
|
||||||
|
static #m = function() { return this.#x; };
|
||||||
|
static #self = Foo;
|
||||||
|
static self = Foo;
|
||||||
|
static getSelf() { return this }
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
const o = { Foo: Foo };
|
||||||
|
const deep = { very: { o } };
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(o?.Foo.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#m().toString).toEqual(1..toString);
|
||||||
|
expect(o?.Foo.#m().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(deep?.very.o?.Foo.#m()).toEqual(1);
|
||||||
|
expect(deep?.very.o?.Foo.#m().toString).toEqual(1..toString);
|
||||||
|
expect(deep?.very.o?.Foo.#m().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.self.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.self.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.self?.self.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.self?.self.#m()).toEqual(1);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.getSelf().#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf?.().#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf().#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.().#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf()?.self.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.self.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.self.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.self.#m()).toEqual(1);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#m().toString).toEqual(1..toString);
|
||||||
|
expect(fn?.().Foo.#m().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m()).toEqual(1);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m().toString).toEqual(1..toString);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.self.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.self.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.self?.self.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.self?.self.#m()).toEqual(1);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.getSelf().#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.().#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf().#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.().#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.self.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.self.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.self.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.self.#m()).toEqual(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static testNull() {
|
||||||
|
const o = null;;
|
||||||
|
const deep = { very: { o } };
|
||||||
|
const fn = null;
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(o?.Foo.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#m().toString).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#m().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(deep?.very.o?.Foo.#m()).toEqual(undefined);
|
||||||
|
expect(deep?.very.o?.Foo.#m().toString).toEqual(undefined);
|
||||||
|
expect(deep?.very.o?.Foo.#m().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.self.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.self.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.self?.self.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.self?.self.#m()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.getSelf().#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf?.().#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf().#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.().#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf()?.self.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.self.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.self.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.self.#m()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#m().toString).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#m().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m()).toEqual(undefined);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m().toString).toEqual(undefined);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.self.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.self.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.self?.self.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.self?.self.#m()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.getSelf().#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.().#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf().#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.().#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.self.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.self.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.self.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.self.#m()).toEqual(undefined);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
|
Foo.testNull();
|
||||||
@ -0,0 +1,66 @@
|
|||||||
|
class Foo {
|
||||||
|
static #x = 1;
|
||||||
|
static #m = function() { return this.#x; };
|
||||||
|
static #self = Foo;
|
||||||
|
static self = Foo;
|
||||||
|
static getSelf() { return this }
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
const o = { Foo: Foo };
|
||||||
|
const deep = { very: { o } };
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
o?.Foo.#m();
|
||||||
|
o?.Foo.#m().toString;
|
||||||
|
o?.Foo.#m().toString();
|
||||||
|
|
||||||
|
deep?.very.o?.Foo.#m();
|
||||||
|
deep?.very.o?.Foo.#m().toString;
|
||||||
|
deep?.very.o?.Foo.#m().toString();
|
||||||
|
|
||||||
|
o?.Foo.#self.#m();
|
||||||
|
o?.Foo.#self.self.#m();
|
||||||
|
o?.Foo.#self?.self.#m();
|
||||||
|
o?.Foo.#self.self?.self.#m();
|
||||||
|
o?.Foo.#self?.self?.self.#m();
|
||||||
|
|
||||||
|
o?.Foo.#self.getSelf().#m();
|
||||||
|
o?.Foo.#self.getSelf?.().#m();
|
||||||
|
o?.Foo.#self?.getSelf().#m();
|
||||||
|
o?.Foo.#self?.getSelf?.().#m();
|
||||||
|
o?.Foo.#self.getSelf()?.self.#m();
|
||||||
|
o?.Foo.#self.getSelf?.()?.self.#m();
|
||||||
|
o?.Foo.#self?.getSelf()?.self.#m();
|
||||||
|
o?.Foo.#self?.getSelf?.()?.self.#m();
|
||||||
|
|
||||||
|
fn?.().Foo.#m();
|
||||||
|
fn?.().Foo.#m().toString;
|
||||||
|
fn?.().Foo.#m().toString();
|
||||||
|
|
||||||
|
fnDeep?.().very.o?.Foo.#m();
|
||||||
|
fnDeep?.().very.o?.Foo.#m().toString;
|
||||||
|
fnDeep?.().very.o?.Foo.#m().toString();
|
||||||
|
|
||||||
|
fn?.().Foo.#self.#m();
|
||||||
|
fn?.().Foo.#self.self.#m();
|
||||||
|
fn?.().Foo.#self?.self.#m();
|
||||||
|
fn?.().Foo.#self.self?.self.#m();
|
||||||
|
fn?.().Foo.#self?.self?.self.#m();
|
||||||
|
|
||||||
|
fn?.().Foo.#self.getSelf().#m();
|
||||||
|
fn?.().Foo.#self.getSelf?.().#m();
|
||||||
|
fn?.().Foo.#self?.getSelf().#m();
|
||||||
|
fn?.().Foo.#self?.getSelf?.().#m();
|
||||||
|
fn?.().Foo.#self.getSelf()?.self.#m();
|
||||||
|
fn?.().Foo.#self.getSelf?.()?.self.#m();
|
||||||
|
fn?.().Foo.#self?.getSelf()?.self.#m();
|
||||||
|
fn?.().Foo.#self?.getSelf?.()?.self.#m();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"plugins": ["proposal-optional-chaining", "proposal-class-properties"]
|
||||||
|
}
|
||||||
@ -0,0 +1,89 @@
|
|||||||
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||||
|
|
||||||
|
function _classStaticPrivateFieldSpecGet(receiver, classConstructor, descriptor) { if (receiver !== classConstructor) { throw new TypeError("Private static access of wrong provenance"); } if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
|
||||||
|
|
||||||
|
class Foo {
|
||||||
|
static getSelf() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
var _o$Foo, _o$Foo2, _o$Foo3, _deep$very$o, _deep$very$o$Foo, _deep$very$o2, _deep$very$o2$Foo, _deep$very$o3, _deep$very$o3$Foo, _classStaticPrivateFi, _classStaticPrivateFi2, _ref, _ref$self, _ref2, _ref2$self, _self2, _self2$self, _classStaticPrivateFi3, _classStaticPrivateFi4, _ref3, _ref3$call, _ref4, _ref4$getSelf, _getSelf, _ref5, _getSelf$call, _ref6, _ref6$self, _classStaticPrivateFi5, _call, _call$self, _getSelf2, _getSelf2$self, _getSelf3, _getSelf3$self, _fn$Foo, _fn$Foo2, _fn$Foo3, _fnDeep$very$o, _fnDeep$very$o$Foo, _fnDeep$very$o2, _fnDeep$very$o2$Foo, _fnDeep$very$o3, _fnDeep$very$o3$Foo, _classStaticPrivateFi6, _classStaticPrivateFi7, _ref7, _ref7$self, _ref8, _ref8$self, _self3, _self3$self, _classStaticPrivateFi8, _classStaticPrivateFi9, _ref9, _ref9$call, _ref10, _ref10$getSelf, _getSelf4, _ref11, _getSelf4$call, _ref12, _ref12$self, _classStaticPrivateFi10, _call2, _call2$self, _getSelf5, _getSelf5$self, _getSelf6, _getSelf6$self, _ref13, _ref14, _ref15, _ref16, _ref17, _ref17$getSelf, _ref18, _ref19, _ref20, _ref21, _ref22, _ref22$getSelf;
|
||||||
|
|
||||||
|
const o = {
|
||||||
|
Foo: Foo
|
||||||
|
};
|
||||||
|
const deep = {
|
||||||
|
very: {
|
||||||
|
o
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_o$Foo = o.Foo, Foo, _m).call(_o$Foo);
|
||||||
|
o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_o$Foo2 = o.Foo, Foo, _m).call(_o$Foo2).toString;
|
||||||
|
o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_o$Foo3 = o.Foo, Foo, _m).call(_o$Foo3).toString();
|
||||||
|
(_deep$very$o = deep === null || deep === void 0 ? void 0 : deep.very.o) === null || _deep$very$o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_deep$very$o$Foo = _deep$very$o.Foo, Foo, _m).call(_deep$very$o$Foo);
|
||||||
|
(_deep$very$o2 = deep === null || deep === void 0 ? void 0 : deep.very.o) === null || _deep$very$o2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_deep$very$o2$Foo = _deep$very$o2.Foo, Foo, _m).call(_deep$very$o2$Foo).toString;
|
||||||
|
(_deep$very$o3 = deep === null || deep === void 0 ? void 0 : deep.very.o) === null || _deep$very$o3 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_deep$very$o3$Foo = _deep$very$o3.Foo, Foo, _m).call(_deep$very$o3$Foo).toString();
|
||||||
|
o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_classStaticPrivateFi = _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self), Foo, _m).call(_classStaticPrivateFi);
|
||||||
|
o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_classStaticPrivateFi2 = _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self).self, Foo, _m).call(_classStaticPrivateFi2);
|
||||||
|
(_ref = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)) === null || _ref === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref$self = _ref.self, Foo, _m).call(_ref$self);
|
||||||
|
(_ref2 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self).self) === null || _ref2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref2$self = _ref2.self, Foo, _m).call(_ref2$self);
|
||||||
|
(_self2 = (_ref13 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)) === null || _ref13 === void 0 ? void 0 : _ref13.self) === null || _self2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_self2$self = _self2.self, Foo, _m).call(_self2$self);
|
||||||
|
o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_classStaticPrivateFi3 = _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self).getSelf(), Foo, _m).call(_classStaticPrivateFi3);
|
||||||
|
(_ref3 = o === null || o === void 0 ? void 0 : (_classStaticPrivateFi4 = _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)).getSelf) === null || _ref3 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref3$call = _ref3.call(_classStaticPrivateFi4), Foo, _m).call(_ref3$call);
|
||||||
|
(_ref4 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)) === null || _ref4 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref4$getSelf = _ref4.getSelf(), Foo, _m).call(_ref4$getSelf);
|
||||||
|
(_getSelf = (_ref14 = _ref5 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)) === null || _ref14 === void 0 ? void 0 : _ref14.getSelf) === null || _getSelf === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf$call = _getSelf.call(_ref5), Foo, _m).call(_getSelf$call);
|
||||||
|
(_ref6 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self).getSelf()) === null || _ref6 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref6$self = _ref6.self, Foo, _m).call(_ref6$self);
|
||||||
|
(_call = (_ref15 = o === null || o === void 0 ? void 0 : (_classStaticPrivateFi5 = _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)).getSelf) === null || _ref15 === void 0 ? void 0 : _ref15.call(_classStaticPrivateFi5)) === null || _call === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_call$self = _call.self, Foo, _m).call(_call$self);
|
||||||
|
(_getSelf2 = (_ref16 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)) === null || _ref16 === void 0 ? void 0 : _ref16.getSelf()) === null || _getSelf2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf2$self = _getSelf2.self, Foo, _m).call(_getSelf2$self);
|
||||||
|
(_getSelf3 = (_ref17 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)) === null || _ref17 === void 0 ? void 0 : (_ref17$getSelf = _ref17.getSelf) === null || _ref17$getSelf === void 0 ? void 0 : _ref17$getSelf.call(_ref17)) === null || _getSelf3 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf3$self = _getSelf3.self, Foo, _m).call(_getSelf3$self);
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_fn$Foo = fn().Foo, Foo, _m).call(_fn$Foo);
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_fn$Foo2 = fn().Foo, Foo, _m).call(_fn$Foo2).toString;
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_fn$Foo3 = fn().Foo, Foo, _m).call(_fn$Foo3).toString();
|
||||||
|
(_fnDeep$very$o = fnDeep === null || fnDeep === void 0 ? void 0 : fnDeep().very.o) === null || _fnDeep$very$o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_fnDeep$very$o$Foo = _fnDeep$very$o.Foo, Foo, _m).call(_fnDeep$very$o$Foo);
|
||||||
|
(_fnDeep$very$o2 = fnDeep === null || fnDeep === void 0 ? void 0 : fnDeep().very.o) === null || _fnDeep$very$o2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_fnDeep$very$o2$Foo = _fnDeep$very$o2.Foo, Foo, _m).call(_fnDeep$very$o2$Foo).toString;
|
||||||
|
(_fnDeep$very$o3 = fnDeep === null || fnDeep === void 0 ? void 0 : fnDeep().very.o) === null || _fnDeep$very$o3 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_fnDeep$very$o3$Foo = _fnDeep$very$o3.Foo, Foo, _m).call(_fnDeep$very$o3$Foo).toString();
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_classStaticPrivateFi6 = _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self), Foo, _m).call(_classStaticPrivateFi6);
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_classStaticPrivateFi7 = _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self).self, Foo, _m).call(_classStaticPrivateFi7);
|
||||||
|
(_ref7 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)) === null || _ref7 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref7$self = _ref7.self, Foo, _m).call(_ref7$self);
|
||||||
|
(_ref8 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self).self) === null || _ref8 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref8$self = _ref8.self, Foo, _m).call(_ref8$self);
|
||||||
|
(_self3 = (_ref18 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)) === null || _ref18 === void 0 ? void 0 : _ref18.self) === null || _self3 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_self3$self = _self3.self, Foo, _m).call(_self3$self);
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_classStaticPrivateFi8 = _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self).getSelf(), Foo, _m).call(_classStaticPrivateFi8);
|
||||||
|
(_ref9 = fn === null || fn === void 0 ? void 0 : (_classStaticPrivateFi9 = _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)).getSelf) === null || _ref9 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref9$call = _ref9.call(_classStaticPrivateFi9), Foo, _m).call(_ref9$call);
|
||||||
|
(_ref10 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)) === null || _ref10 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref10$getSelf = _ref10.getSelf(), Foo, _m).call(_ref10$getSelf);
|
||||||
|
(_getSelf4 = (_ref19 = _ref11 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)) === null || _ref19 === void 0 ? void 0 : _ref19.getSelf) === null || _getSelf4 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf4$call = _getSelf4.call(_ref11), Foo, _m).call(_getSelf4$call);
|
||||||
|
(_ref12 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self).getSelf()) === null || _ref12 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref12$self = _ref12.self, Foo, _m).call(_ref12$self);
|
||||||
|
(_call2 = (_ref20 = fn === null || fn === void 0 ? void 0 : (_classStaticPrivateFi10 = _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)).getSelf) === null || _ref20 === void 0 ? void 0 : _ref20.call(_classStaticPrivateFi10)) === null || _call2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_call2$self = _call2.self, Foo, _m).call(_call2$self);
|
||||||
|
(_getSelf5 = (_ref21 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)) === null || _ref21 === void 0 ? void 0 : _ref21.getSelf()) === null || _getSelf5 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf5$self = _getSelf5.self, Foo, _m).call(_getSelf5$self);
|
||||||
|
(_getSelf6 = (_ref22 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)) === null || _ref22 === void 0 ? void 0 : (_ref22$getSelf = _ref22.getSelf) === null || _ref22$getSelf === void 0 ? void 0 : _ref22$getSelf.call(_ref22)) === null || _getSelf6 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf6$self = _getSelf6.self, Foo, _m).call(_getSelf6$self);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
var _x = {
|
||||||
|
writable: true,
|
||||||
|
value: 1
|
||||||
|
};
|
||||||
|
var _m = {
|
||||||
|
writable: true,
|
||||||
|
value: function () {
|
||||||
|
return _classStaticPrivateFieldSpecGet(this, Foo, _x);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var _self = {
|
||||||
|
writable: true,
|
||||||
|
value: Foo
|
||||||
|
};
|
||||||
|
|
||||||
|
_defineProperty(Foo, "self", Foo);
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
@ -0,0 +1,122 @@
|
|||||||
|
class Foo {
|
||||||
|
static #x = 1;
|
||||||
|
static #m = function() { return this.#x; };
|
||||||
|
static #self = Foo;
|
||||||
|
static self = Foo;
|
||||||
|
static getSelf() { return this }
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
const o = { Foo: Foo };
|
||||||
|
const deep = { very: { o } };
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(o?.Foo.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#m().toString).toEqual(1..toString);
|
||||||
|
expect(o?.Foo.#m().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(deep?.very.o?.Foo.#m()).toEqual(1);
|
||||||
|
expect(deep?.very.o?.Foo.#m().toString).toEqual(1..toString);
|
||||||
|
expect(deep?.very.o?.Foo.#m().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.self.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.self.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.self?.self.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.self?.self.#m()).toEqual(1);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.getSelf().#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf?.().#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf().#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.().#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf()?.self.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.self.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.self.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.self.#m()).toEqual(1);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#m().toString).toEqual(1..toString);
|
||||||
|
expect(fn?.().Foo.#m().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m()).toEqual(1);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m().toString).toEqual(1..toString);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.self.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.self.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.self?.self.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.self?.self.#m()).toEqual(1);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.getSelf().#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.().#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf().#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.().#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.self.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.self.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.self.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.self.#m()).toEqual(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static testNull() {
|
||||||
|
const o = null;;
|
||||||
|
const deep = { very: { o } };
|
||||||
|
const fn = null;
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(o?.Foo.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#m().toString).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#m().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(deep?.very.o?.Foo.#m()).toEqual(undefined);
|
||||||
|
expect(deep?.very.o?.Foo.#m().toString).toEqual(undefined);
|
||||||
|
expect(deep?.very.o?.Foo.#m().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.self.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.self.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.self?.self.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.self?.self.#m()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.getSelf().#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf?.().#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf().#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.().#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf()?.self.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.self.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.self.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.self.#m()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#m().toString).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#m().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m()).toEqual(undefined);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m().toString).toEqual(undefined);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.self.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.self.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.self?.self.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.self?.self.#m()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.getSelf().#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.().#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf().#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.().#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.self.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.self.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.self.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.self.#m()).toEqual(undefined);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
|
Foo.testNull();
|
||||||
@ -0,0 +1,66 @@
|
|||||||
|
class Foo {
|
||||||
|
static #x = 1;
|
||||||
|
static #m = function() { return this.#x; };
|
||||||
|
static #self = Foo;
|
||||||
|
static self = Foo;
|
||||||
|
static getSelf() { return this }
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
const o = { Foo: Foo };
|
||||||
|
const deep = { very: { o } };
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
o?.Foo.#m();
|
||||||
|
o?.Foo.#m().toString;
|
||||||
|
o?.Foo.#m().toString();
|
||||||
|
|
||||||
|
deep?.very.o?.Foo.#m();
|
||||||
|
deep?.very.o?.Foo.#m().toString;
|
||||||
|
deep?.very.o?.Foo.#m().toString();
|
||||||
|
|
||||||
|
o?.Foo.#self.#m();
|
||||||
|
o?.Foo.#self.self.#m();
|
||||||
|
o?.Foo.#self?.self.#m();
|
||||||
|
o?.Foo.#self.self?.self.#m();
|
||||||
|
o?.Foo.#self?.self?.self.#m();
|
||||||
|
|
||||||
|
o?.Foo.#self.getSelf().#m();
|
||||||
|
o?.Foo.#self.getSelf?.().#m();
|
||||||
|
o?.Foo.#self?.getSelf().#m();
|
||||||
|
o?.Foo.#self?.getSelf?.().#m();
|
||||||
|
o?.Foo.#self.getSelf()?.self.#m();
|
||||||
|
o?.Foo.#self.getSelf?.()?.self.#m();
|
||||||
|
o?.Foo.#self?.getSelf()?.self.#m();
|
||||||
|
o?.Foo.#self?.getSelf?.()?.self.#m();
|
||||||
|
|
||||||
|
fn?.().Foo.#m();
|
||||||
|
fn?.().Foo.#m().toString;
|
||||||
|
fn?.().Foo.#m().toString();
|
||||||
|
|
||||||
|
fnDeep?.().very.o?.Foo.#m();
|
||||||
|
fnDeep?.().very.o?.Foo.#m().toString;
|
||||||
|
fnDeep?.().very.o?.Foo.#m().toString();
|
||||||
|
|
||||||
|
fn?.().Foo.#self.#m();
|
||||||
|
fn?.().Foo.#self.self.#m();
|
||||||
|
fn?.().Foo.#self?.self.#m();
|
||||||
|
fn?.().Foo.#self.self?.self.#m();
|
||||||
|
fn?.().Foo.#self?.self?.self.#m();
|
||||||
|
|
||||||
|
fn?.().Foo.#self.getSelf().#m();
|
||||||
|
fn?.().Foo.#self.getSelf?.().#m();
|
||||||
|
fn?.().Foo.#self?.getSelf().#m();
|
||||||
|
fn?.().Foo.#self?.getSelf?.().#m();
|
||||||
|
fn?.().Foo.#self.getSelf()?.self.#m();
|
||||||
|
fn?.().Foo.#self.getSelf?.()?.self.#m();
|
||||||
|
fn?.().Foo.#self?.getSelf()?.self.#m();
|
||||||
|
fn?.().Foo.#self?.getSelf?.()?.self.#m();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"plugins": ["proposal-class-properties"],
|
||||||
|
"minNodeVersion": "14.0.0"
|
||||||
|
}
|
||||||
@ -0,0 +1,89 @@
|
|||||||
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||||
|
|
||||||
|
function _classStaticPrivateFieldSpecGet(receiver, classConstructor, descriptor) { if (receiver !== classConstructor) { throw new TypeError("Private static access of wrong provenance"); } if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
|
||||||
|
|
||||||
|
class Foo {
|
||||||
|
static getSelf() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
var _o$Foo, _o$Foo2, _o$Foo3, _deep$very$o, _deep$very$o$Foo, _deep$very$o2, _deep$very$o2$Foo, _deep$very$o3, _deep$very$o3$Foo, _classStaticPrivateFi, _classStaticPrivateFi2, _ref, _ref$self, _ref2, _ref2$self, _self2, _self2$self, _classStaticPrivateFi3, _classStaticPrivateFi4, _ref3, _ref3$call, _ref4, _ref4$getSelf, _getSelf, _ref5, _getSelf$call, _ref6, _ref6$self, _classStaticPrivateFi5, _call, _call$self, _getSelf2, _getSelf2$self, _getSelf3, _getSelf3$self, _fn$Foo, _fn$Foo2, _fn$Foo3, _fnDeep$very$o, _fnDeep$very$o$Foo, _fnDeep$very$o2, _fnDeep$very$o2$Foo, _fnDeep$very$o3, _fnDeep$very$o3$Foo, _classStaticPrivateFi6, _classStaticPrivateFi7, _ref7, _ref7$self, _ref8, _ref8$self, _self3, _self3$self, _classStaticPrivateFi8, _classStaticPrivateFi9, _ref9, _ref9$call, _ref10, _ref10$getSelf, _getSelf4, _ref11, _getSelf4$call, _ref12, _ref12$self, _classStaticPrivateFi10, _call2, _call2$self, _getSelf5, _getSelf5$self, _getSelf6, _getSelf6$self;
|
||||||
|
|
||||||
|
const o = {
|
||||||
|
Foo: Foo
|
||||||
|
};
|
||||||
|
const deep = {
|
||||||
|
very: {
|
||||||
|
o
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_o$Foo = o.Foo, Foo, _m).call(_o$Foo);
|
||||||
|
o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_o$Foo2 = o.Foo, Foo, _m).call(_o$Foo2).toString;
|
||||||
|
o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_o$Foo3 = o.Foo, Foo, _m).call(_o$Foo3).toString();
|
||||||
|
(_deep$very$o = deep?.very.o) === null || _deep$very$o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_deep$very$o$Foo = _deep$very$o.Foo, Foo, _m).call(_deep$very$o$Foo);
|
||||||
|
(_deep$very$o2 = deep?.very.o) === null || _deep$very$o2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_deep$very$o2$Foo = _deep$very$o2.Foo, Foo, _m).call(_deep$very$o2$Foo).toString;
|
||||||
|
(_deep$very$o3 = deep?.very.o) === null || _deep$very$o3 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_deep$very$o3$Foo = _deep$very$o3.Foo, Foo, _m).call(_deep$very$o3$Foo).toString();
|
||||||
|
o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_classStaticPrivateFi = _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self), Foo, _m).call(_classStaticPrivateFi);
|
||||||
|
o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_classStaticPrivateFi2 = _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self).self, Foo, _m).call(_classStaticPrivateFi2);
|
||||||
|
(_ref = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)) === null || _ref === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref$self = _ref.self, Foo, _m).call(_ref$self);
|
||||||
|
(_ref2 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self).self) === null || _ref2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref2$self = _ref2.self, Foo, _m).call(_ref2$self);
|
||||||
|
(_self2 = (o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self))?.self) === null || _self2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_self2$self = _self2.self, Foo, _m).call(_self2$self);
|
||||||
|
o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_classStaticPrivateFi3 = _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self).getSelf(), Foo, _m).call(_classStaticPrivateFi3);
|
||||||
|
(_ref3 = o === null || o === void 0 ? void 0 : (_classStaticPrivateFi4 = _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)).getSelf) === null || _ref3 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref3$call = _ref3.call(_classStaticPrivateFi4), Foo, _m).call(_ref3$call);
|
||||||
|
(_ref4 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)) === null || _ref4 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref4$getSelf = _ref4.getSelf(), Foo, _m).call(_ref4$getSelf);
|
||||||
|
(_getSelf = (_ref5 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self))?.getSelf) === null || _getSelf === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf$call = _getSelf.call(_ref5), Foo, _m).call(_getSelf$call);
|
||||||
|
(_ref6 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self).getSelf()) === null || _ref6 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref6$self = _ref6.self, Foo, _m).call(_ref6$self);
|
||||||
|
(_call = (o === null || o === void 0 ? void 0 : (_classStaticPrivateFi5 = _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)).getSelf)?.call(_classStaticPrivateFi5)) === null || _call === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_call$self = _call.self, Foo, _m).call(_call$self);
|
||||||
|
(_getSelf2 = (o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self))?.getSelf()) === null || _getSelf2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf2$self = _getSelf2.self, Foo, _m).call(_getSelf2$self);
|
||||||
|
(_getSelf3 = (o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self))?.getSelf?.()) === null || _getSelf3 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf3$self = _getSelf3.self, Foo, _m).call(_getSelf3$self);
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_fn$Foo = fn().Foo, Foo, _m).call(_fn$Foo);
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_fn$Foo2 = fn().Foo, Foo, _m).call(_fn$Foo2).toString;
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_fn$Foo3 = fn().Foo, Foo, _m).call(_fn$Foo3).toString();
|
||||||
|
(_fnDeep$very$o = fnDeep?.().very.o) === null || _fnDeep$very$o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_fnDeep$very$o$Foo = _fnDeep$very$o.Foo, Foo, _m).call(_fnDeep$very$o$Foo);
|
||||||
|
(_fnDeep$very$o2 = fnDeep?.().very.o) === null || _fnDeep$very$o2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_fnDeep$very$o2$Foo = _fnDeep$very$o2.Foo, Foo, _m).call(_fnDeep$very$o2$Foo).toString;
|
||||||
|
(_fnDeep$very$o3 = fnDeep?.().very.o) === null || _fnDeep$very$o3 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_fnDeep$very$o3$Foo = _fnDeep$very$o3.Foo, Foo, _m).call(_fnDeep$very$o3$Foo).toString();
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_classStaticPrivateFi6 = _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self), Foo, _m).call(_classStaticPrivateFi6);
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_classStaticPrivateFi7 = _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self).self, Foo, _m).call(_classStaticPrivateFi7);
|
||||||
|
(_ref7 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)) === null || _ref7 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref7$self = _ref7.self, Foo, _m).call(_ref7$self);
|
||||||
|
(_ref8 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self).self) === null || _ref8 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref8$self = _ref8.self, Foo, _m).call(_ref8$self);
|
||||||
|
(_self3 = (fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self))?.self) === null || _self3 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_self3$self = _self3.self, Foo, _m).call(_self3$self);
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_classStaticPrivateFi8 = _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self).getSelf(), Foo, _m).call(_classStaticPrivateFi8);
|
||||||
|
(_ref9 = fn === null || fn === void 0 ? void 0 : (_classStaticPrivateFi9 = _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)).getSelf) === null || _ref9 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref9$call = _ref9.call(_classStaticPrivateFi9), Foo, _m).call(_ref9$call);
|
||||||
|
(_ref10 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)) === null || _ref10 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref10$getSelf = _ref10.getSelf(), Foo, _m).call(_ref10$getSelf);
|
||||||
|
(_getSelf4 = (_ref11 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self))?.getSelf) === null || _getSelf4 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf4$call = _getSelf4.call(_ref11), Foo, _m).call(_getSelf4$call);
|
||||||
|
(_ref12 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self).getSelf()) === null || _ref12 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref12$self = _ref12.self, Foo, _m).call(_ref12$self);
|
||||||
|
(_call2 = (fn === null || fn === void 0 ? void 0 : (_classStaticPrivateFi10 = _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)).getSelf)?.call(_classStaticPrivateFi10)) === null || _call2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_call2$self = _call2.self, Foo, _m).call(_call2$self);
|
||||||
|
(_getSelf5 = (fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self))?.getSelf()) === null || _getSelf5 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf5$self = _getSelf5.self, Foo, _m).call(_getSelf5$self);
|
||||||
|
(_getSelf6 = (fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self))?.getSelf?.()) === null || _getSelf6 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf6$self = _getSelf6.self, Foo, _m).call(_getSelf6$self);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
var _x = {
|
||||||
|
writable: true,
|
||||||
|
value: 1
|
||||||
|
};
|
||||||
|
var _m = {
|
||||||
|
writable: true,
|
||||||
|
value: function () {
|
||||||
|
return _classStaticPrivateFieldSpecGet(this, Foo, _x);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var _self = {
|
||||||
|
writable: true,
|
||||||
|
value: Foo
|
||||||
|
};
|
||||||
|
|
||||||
|
_defineProperty(Foo, "self", Foo);
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
@ -0,0 +1,121 @@
|
|||||||
|
class Foo {
|
||||||
|
static #x = 1;
|
||||||
|
static #self = Foo;
|
||||||
|
static self = Foo;
|
||||||
|
static getSelf() { return this }
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
const o = { Foo: Foo };
|
||||||
|
const deep = { very: { o } };
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(o?.Foo.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#x.toString).toEqual(1..toString);
|
||||||
|
expect(o?.Foo.#x.toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(deep?.very.o?.Foo.#x).toEqual(1);
|
||||||
|
expect(deep?.very.o?.Foo.#x.toString).toEqual(1..toString);
|
||||||
|
expect(deep?.very.o?.Foo.#x.toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.self.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.self.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.self?.self.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.self?.self.#x).toEqual(1);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.getSelf().#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf?.().#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf().#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.().#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf()?.self.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.self.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.self.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.self.#x).toEqual(1);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#x.toString).toEqual(1..toString);
|
||||||
|
expect(fn?.().Foo.#x.toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#x).toEqual(1);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#x.toString).toEqual(1..toString);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#x.toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.self.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.self.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.self?.self.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.self?.self.#x).toEqual(1);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.getSelf().#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.().#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf().#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.().#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.self.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.self.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.self.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.self.#x).toEqual(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static testNull() {
|
||||||
|
const o = null;;
|
||||||
|
const deep = { very: { o } };
|
||||||
|
const fn = null;
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(o?.Foo.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#x.toString).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#x.toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(deep?.very.o?.Foo.#x).toEqual(undefined);
|
||||||
|
expect(deep?.very.o?.Foo.#x.toString).toEqual(undefined);
|
||||||
|
expect(deep?.very.o?.Foo.#x.toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.self.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.self.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.self?.self.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.self?.self.#x).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.getSelf().#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf?.().#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf().#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.().#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf()?.self.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.self.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.self.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.self.#x).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#x.toString).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#x.toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#x).toEqual(undefined);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#x.toString).toEqual(undefined);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#x.toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.self.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.self.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.self?.self.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.self?.self.#x).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.getSelf().#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.().#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf().#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.().#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.self.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.self.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.self.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.self.#x).toEqual(undefined);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
|
Foo.testNull();
|
||||||
@ -0,0 +1,65 @@
|
|||||||
|
class Foo {
|
||||||
|
static #x = 1;
|
||||||
|
static #self = Foo;
|
||||||
|
static self = Foo;
|
||||||
|
static getSelf() { return this }
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
const o = { Foo: Foo };
|
||||||
|
const deep = { very: { o } };
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
o?.Foo.#x;
|
||||||
|
o?.Foo.#x.toString;
|
||||||
|
o?.Foo.#x.toString();
|
||||||
|
|
||||||
|
deep?.very.o?.Foo.#x;
|
||||||
|
deep?.very.o?.Foo.#x.toString;
|
||||||
|
deep?.very.o?.Foo.#x.toString();
|
||||||
|
|
||||||
|
o?.Foo.#self.#x;
|
||||||
|
o?.Foo.#self.self.#x;
|
||||||
|
o?.Foo.#self?.self.#x;
|
||||||
|
o?.Foo.#self.self?.self.#x;
|
||||||
|
o?.Foo.#self?.self?.self.#x;
|
||||||
|
|
||||||
|
o?.Foo.#self.getSelf().#x;
|
||||||
|
o?.Foo.#self.getSelf?.().#x;
|
||||||
|
o?.Foo.#self?.getSelf().#x;
|
||||||
|
o?.Foo.#self?.getSelf?.().#x;
|
||||||
|
o?.Foo.#self.getSelf()?.self.#x;
|
||||||
|
o?.Foo.#self.getSelf?.()?.self.#x;
|
||||||
|
o?.Foo.#self?.getSelf()?.self.#x;
|
||||||
|
o?.Foo.#self?.getSelf?.()?.self.#x;
|
||||||
|
|
||||||
|
fn?.().Foo.#x;
|
||||||
|
fn?.().Foo.#x.toString;
|
||||||
|
fn?.().Foo.#x.toString();
|
||||||
|
|
||||||
|
fnDeep?.().very.o?.Foo.#x;
|
||||||
|
fnDeep?.().very.o?.Foo.#x.toString;
|
||||||
|
fnDeep?.().very.o?.Foo.#x.toString();
|
||||||
|
|
||||||
|
fn?.().Foo.#self.#x;
|
||||||
|
fn?.().Foo.#self.self.#x;
|
||||||
|
fn?.().Foo.#self?.self.#x;
|
||||||
|
fn?.().Foo.#self.self?.self.#x;
|
||||||
|
fn?.().Foo.#self?.self?.self.#x;
|
||||||
|
|
||||||
|
fn?.().Foo.#self.getSelf().#x;
|
||||||
|
fn?.().Foo.#self.getSelf?.().#x;
|
||||||
|
fn?.().Foo.#self?.getSelf().#x;
|
||||||
|
fn?.().Foo.#self?.getSelf?.().#x;
|
||||||
|
fn?.().Foo.#self.getSelf()?.self.#x;
|
||||||
|
fn?.().Foo.#self.getSelf?.()?.self.#x;
|
||||||
|
fn?.().Foo.#self?.getSelf()?.self.#x;
|
||||||
|
fn?.().Foo.#self?.getSelf?.()?.self.#x;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"plugins": ["proposal-optional-chaining", "proposal-class-properties"]
|
||||||
|
}
|
||||||
@ -0,0 +1,83 @@
|
|||||||
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||||
|
|
||||||
|
function _classStaticPrivateFieldSpecGet(receiver, classConstructor, descriptor) { if (receiver !== classConstructor) { throw new TypeError("Private static access of wrong provenance"); } if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
|
||||||
|
|
||||||
|
class Foo {
|
||||||
|
static getSelf() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
var _deep$very$o, _deep$very$o2, _deep$very$o3, _ref, _ref2, _self2, _classStaticPrivateFi, _ref3, _ref4, _getSelf, _ref5, _ref6, _classStaticPrivateFi2, _call, _getSelf2, _getSelf3, _fnDeep$very$o, _fnDeep$very$o2, _fnDeep$very$o3, _ref7, _ref8, _self3, _classStaticPrivateFi3, _ref9, _ref10, _getSelf4, _ref11, _ref12, _classStaticPrivateFi4, _call2, _getSelf5, _getSelf6, _ref13, _ref14, _ref15, _ref16, _ref17, _ref17$getSelf, _ref18, _ref19, _ref20, _ref21, _ref22, _ref22$getSelf;
|
||||||
|
|
||||||
|
const o = {
|
||||||
|
Foo: Foo
|
||||||
|
};
|
||||||
|
const deep = {
|
||||||
|
very: {
|
||||||
|
o
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _x);
|
||||||
|
o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _x).toString;
|
||||||
|
o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _x).toString();
|
||||||
|
(_deep$very$o = deep === null || deep === void 0 ? void 0 : deep.very.o) === null || _deep$very$o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_deep$very$o.Foo, Foo, _x);
|
||||||
|
(_deep$very$o2 = deep === null || deep === void 0 ? void 0 : deep.very.o) === null || _deep$very$o2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_deep$very$o2.Foo, Foo, _x).toString;
|
||||||
|
(_deep$very$o3 = deep === null || deep === void 0 ? void 0 : deep.very.o) === null || _deep$very$o3 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_deep$very$o3.Foo, Foo, _x).toString();
|
||||||
|
o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_classStaticPrivateFieldSpecGet(o.Foo, Foo, _self), Foo, _x);
|
||||||
|
o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_classStaticPrivateFieldSpecGet(o.Foo, Foo, _self).self, Foo, _x);
|
||||||
|
(_ref = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)) === null || _ref === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref.self, Foo, _x);
|
||||||
|
(_ref2 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self).self) === null || _ref2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref2.self, Foo, _x);
|
||||||
|
(_self2 = (_ref13 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)) === null || _ref13 === void 0 ? void 0 : _ref13.self) === null || _self2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_self2.self, Foo, _x);
|
||||||
|
o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_classStaticPrivateFieldSpecGet(o.Foo, Foo, _self).getSelf(), Foo, _x);
|
||||||
|
(_ref3 = o === null || o === void 0 ? void 0 : (_classStaticPrivateFi = _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)).getSelf) === null || _ref3 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref3.call(_classStaticPrivateFi), Foo, _x);
|
||||||
|
(_ref4 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)) === null || _ref4 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref4.getSelf(), Foo, _x);
|
||||||
|
(_getSelf = (_ref14 = _ref5 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)) === null || _ref14 === void 0 ? void 0 : _ref14.getSelf) === null || _getSelf === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf.call(_ref5), Foo, _x);
|
||||||
|
(_ref6 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self).getSelf()) === null || _ref6 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref6.self, Foo, _x);
|
||||||
|
(_call = (_ref15 = o === null || o === void 0 ? void 0 : (_classStaticPrivateFi2 = _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)).getSelf) === null || _ref15 === void 0 ? void 0 : _ref15.call(_classStaticPrivateFi2)) === null || _call === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_call.self, Foo, _x);
|
||||||
|
(_getSelf2 = (_ref16 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)) === null || _ref16 === void 0 ? void 0 : _ref16.getSelf()) === null || _getSelf2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf2.self, Foo, _x);
|
||||||
|
(_getSelf3 = (_ref17 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)) === null || _ref17 === void 0 ? void 0 : (_ref17$getSelf = _ref17.getSelf) === null || _ref17$getSelf === void 0 ? void 0 : _ref17$getSelf.call(_ref17)) === null || _getSelf3 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf3.self, Foo, _x);
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _x);
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _x).toString;
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _x).toString();
|
||||||
|
(_fnDeep$very$o = fnDeep === null || fnDeep === void 0 ? void 0 : fnDeep().very.o) === null || _fnDeep$very$o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_fnDeep$very$o.Foo, Foo, _x);
|
||||||
|
(_fnDeep$very$o2 = fnDeep === null || fnDeep === void 0 ? void 0 : fnDeep().very.o) === null || _fnDeep$very$o2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_fnDeep$very$o2.Foo, Foo, _x).toString;
|
||||||
|
(_fnDeep$very$o3 = fnDeep === null || fnDeep === void 0 ? void 0 : fnDeep().very.o) === null || _fnDeep$very$o3 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_fnDeep$very$o3.Foo, Foo, _x).toString();
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self), Foo, _x);
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self).self, Foo, _x);
|
||||||
|
(_ref7 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)) === null || _ref7 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref7.self, Foo, _x);
|
||||||
|
(_ref8 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self).self) === null || _ref8 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref8.self, Foo, _x);
|
||||||
|
(_self3 = (_ref18 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)) === null || _ref18 === void 0 ? void 0 : _ref18.self) === null || _self3 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_self3.self, Foo, _x);
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self).getSelf(), Foo, _x);
|
||||||
|
(_ref9 = fn === null || fn === void 0 ? void 0 : (_classStaticPrivateFi3 = _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)).getSelf) === null || _ref9 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref9.call(_classStaticPrivateFi3), Foo, _x);
|
||||||
|
(_ref10 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)) === null || _ref10 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref10.getSelf(), Foo, _x);
|
||||||
|
(_getSelf4 = (_ref19 = _ref11 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)) === null || _ref19 === void 0 ? void 0 : _ref19.getSelf) === null || _getSelf4 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf4.call(_ref11), Foo, _x);
|
||||||
|
(_ref12 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self).getSelf()) === null || _ref12 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref12.self, Foo, _x);
|
||||||
|
(_call2 = (_ref20 = fn === null || fn === void 0 ? void 0 : (_classStaticPrivateFi4 = _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)).getSelf) === null || _ref20 === void 0 ? void 0 : _ref20.call(_classStaticPrivateFi4)) === null || _call2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_call2.self, Foo, _x);
|
||||||
|
(_getSelf5 = (_ref21 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)) === null || _ref21 === void 0 ? void 0 : _ref21.getSelf()) === null || _getSelf5 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf5.self, Foo, _x);
|
||||||
|
(_getSelf6 = (_ref22 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)) === null || _ref22 === void 0 ? void 0 : (_ref22$getSelf = _ref22.getSelf) === null || _ref22$getSelf === void 0 ? void 0 : _ref22$getSelf.call(_ref22)) === null || _getSelf6 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf6.self, Foo, _x);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
var _x = {
|
||||||
|
writable: true,
|
||||||
|
value: 1
|
||||||
|
};
|
||||||
|
var _self = {
|
||||||
|
writable: true,
|
||||||
|
value: Foo
|
||||||
|
};
|
||||||
|
|
||||||
|
_defineProperty(Foo, "self", Foo);
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
@ -0,0 +1,121 @@
|
|||||||
|
class Foo {
|
||||||
|
static #x = 1;
|
||||||
|
static #self = Foo;
|
||||||
|
static self = Foo;
|
||||||
|
static getSelf() { return this }
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
const o = { Foo: Foo };
|
||||||
|
const deep = { very: { o } };
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(o?.Foo.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#x.toString).toEqual(1..toString);
|
||||||
|
expect(o?.Foo.#x.toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(deep?.very.o?.Foo.#x).toEqual(1);
|
||||||
|
expect(deep?.very.o?.Foo.#x.toString).toEqual(1..toString);
|
||||||
|
expect(deep?.very.o?.Foo.#x.toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.self.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.self.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.self?.self.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.self?.self.#x).toEqual(1);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.getSelf().#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf?.().#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf().#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.().#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf()?.self.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.self.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.self.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.self.#x).toEqual(1);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#x.toString).toEqual(1..toString);
|
||||||
|
expect(fn?.().Foo.#x.toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#x).toEqual(1);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#x.toString).toEqual(1..toString);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#x.toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.self.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.self.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.self?.self.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.self?.self.#x).toEqual(1);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.getSelf().#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.().#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf().#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.().#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.self.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.self.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.self.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.self.#x).toEqual(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static testNull() {
|
||||||
|
const o = null;;
|
||||||
|
const deep = { very: { o } };
|
||||||
|
const fn = null;
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(o?.Foo.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#x.toString).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#x.toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(deep?.very.o?.Foo.#x).toEqual(undefined);
|
||||||
|
expect(deep?.very.o?.Foo.#x.toString).toEqual(undefined);
|
||||||
|
expect(deep?.very.o?.Foo.#x.toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.self.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.self.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.self?.self.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.self?.self.#x).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.getSelf().#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf?.().#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf().#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.().#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf()?.self.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.self.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.self.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.self.#x).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#x.toString).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#x.toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#x).toEqual(undefined);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#x.toString).toEqual(undefined);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#x.toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.self.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.self.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.self?.self.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.self?.self.#x).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.getSelf().#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.().#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf().#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.().#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.self.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.self.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.self.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.self.#x).toEqual(undefined);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
|
Foo.testNull();
|
||||||
@ -0,0 +1,66 @@
|
|||||||
|
class Foo {
|
||||||
|
static #x = 1;
|
||||||
|
static #self = Foo;
|
||||||
|
static self = Foo;
|
||||||
|
static getSelf() { return this }
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
const o = { Foo: Foo };
|
||||||
|
const deep = { very: { o } };
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
o?.Foo.#x;
|
||||||
|
o?.Foo.#x.toString;
|
||||||
|
o?.Foo.#x.toString();
|
||||||
|
|
||||||
|
deep?.very.o?.Foo.#x;
|
||||||
|
deep?.very.o?.Foo.#x.toString;
|
||||||
|
deep?.very.o?.Foo.#x.toString();
|
||||||
|
|
||||||
|
o?.Foo.#self.#x;
|
||||||
|
o?.Foo.#self.self.#x;
|
||||||
|
o?.Foo.#self?.self.#x;
|
||||||
|
o?.Foo.#self.self?.self.#x;
|
||||||
|
o?.Foo.#self?.self?.self.#x;
|
||||||
|
|
||||||
|
o?.Foo.#self.getSelf().#x;
|
||||||
|
o?.Foo.#self.getSelf?.().#x;
|
||||||
|
o?.Foo.#self?.getSelf().#x;
|
||||||
|
o?.Foo.#self?.getSelf?.().#x;
|
||||||
|
o?.Foo.#self.getSelf()?.self.#x;
|
||||||
|
o?.Foo.#self.getSelf?.()?.self.#x;
|
||||||
|
o?.Foo.#self?.getSelf()?.self.#x;
|
||||||
|
o?.Foo.#self?.getSelf?.()?.self.#x;
|
||||||
|
|
||||||
|
fn?.().Foo.#x;
|
||||||
|
fn?.().Foo.#x.toString;
|
||||||
|
fn?.().Foo.#x.toString();
|
||||||
|
|
||||||
|
fnDeep?.().very.o?.Foo.#x;
|
||||||
|
fnDeep?.().very.o?.Foo.#x.toString;
|
||||||
|
fnDeep?.().very.o?.Foo.#x.toString();
|
||||||
|
|
||||||
|
fn?.().Foo.#self.#x;
|
||||||
|
fn?.().Foo.#self.self.#x;
|
||||||
|
fn?.().Foo.#self?.self.#x;
|
||||||
|
fn?.().Foo.#self.self?.self.#x;
|
||||||
|
fn?.().Foo.#self?.self?.self.#x;
|
||||||
|
|
||||||
|
fn?.().Foo.#self.getSelf().#x;
|
||||||
|
fn?.().Foo.#self.getSelf?.().#x;
|
||||||
|
fn?.().Foo.#self?.getSelf().#x;
|
||||||
|
fn?.().Foo.#self?.getSelf?.().#x;
|
||||||
|
fn?.().Foo.#self.getSelf()?.self.#x;
|
||||||
|
fn?.().Foo.#self.getSelf?.()?.self.#x;
|
||||||
|
fn?.().Foo.#self?.getSelf()?.self.#x;
|
||||||
|
fn?.().Foo.#self?.getSelf?.()?.self.#x;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"plugins": ["proposal-class-properties"],
|
||||||
|
"minNodeVersion": "14.0.0"
|
||||||
|
}
|
||||||
@ -0,0 +1,83 @@
|
|||||||
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||||
|
|
||||||
|
function _classStaticPrivateFieldSpecGet(receiver, classConstructor, descriptor) { if (receiver !== classConstructor) { throw new TypeError("Private static access of wrong provenance"); } if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
|
||||||
|
|
||||||
|
class Foo {
|
||||||
|
static getSelf() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
var _deep$very$o, _deep$very$o2, _deep$very$o3, _ref, _ref2, _self2, _classStaticPrivateFi, _ref3, _ref4, _getSelf, _ref5, _ref6, _classStaticPrivateFi2, _call, _getSelf2, _getSelf3, _fnDeep$very$o, _fnDeep$very$o2, _fnDeep$very$o3, _ref7, _ref8, _self3, _classStaticPrivateFi3, _ref9, _ref10, _getSelf4, _ref11, _ref12, _classStaticPrivateFi4, _call2, _getSelf5, _getSelf6;
|
||||||
|
|
||||||
|
const o = {
|
||||||
|
Foo: Foo
|
||||||
|
};
|
||||||
|
const deep = {
|
||||||
|
very: {
|
||||||
|
o
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _x);
|
||||||
|
o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _x).toString;
|
||||||
|
o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _x).toString();
|
||||||
|
(_deep$very$o = deep?.very.o) === null || _deep$very$o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_deep$very$o.Foo, Foo, _x);
|
||||||
|
(_deep$very$o2 = deep?.very.o) === null || _deep$very$o2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_deep$very$o2.Foo, Foo, _x).toString;
|
||||||
|
(_deep$very$o3 = deep?.very.o) === null || _deep$very$o3 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_deep$very$o3.Foo, Foo, _x).toString();
|
||||||
|
o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_classStaticPrivateFieldSpecGet(o.Foo, Foo, _self), Foo, _x);
|
||||||
|
o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_classStaticPrivateFieldSpecGet(o.Foo, Foo, _self).self, Foo, _x);
|
||||||
|
(_ref = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)) === null || _ref === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref.self, Foo, _x);
|
||||||
|
(_ref2 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self).self) === null || _ref2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref2.self, Foo, _x);
|
||||||
|
(_self2 = (o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self))?.self) === null || _self2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_self2.self, Foo, _x);
|
||||||
|
o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_classStaticPrivateFieldSpecGet(o.Foo, Foo, _self).getSelf(), Foo, _x);
|
||||||
|
(_ref3 = o === null || o === void 0 ? void 0 : (_classStaticPrivateFi = _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)).getSelf) === null || _ref3 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref3.call(_classStaticPrivateFi), Foo, _x);
|
||||||
|
(_ref4 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)) === null || _ref4 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref4.getSelf(), Foo, _x);
|
||||||
|
(_getSelf = (_ref5 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self))?.getSelf) === null || _getSelf === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf.call(_ref5), Foo, _x);
|
||||||
|
(_ref6 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self).getSelf()) === null || _ref6 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref6.self, Foo, _x);
|
||||||
|
(_call = (o === null || o === void 0 ? void 0 : (_classStaticPrivateFi2 = _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)).getSelf)?.call(_classStaticPrivateFi2)) === null || _call === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_call.self, Foo, _x);
|
||||||
|
(_getSelf2 = (o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self))?.getSelf()) === null || _getSelf2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf2.self, Foo, _x);
|
||||||
|
(_getSelf3 = (o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self))?.getSelf?.()) === null || _getSelf3 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf3.self, Foo, _x);
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _x);
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _x).toString;
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _x).toString();
|
||||||
|
(_fnDeep$very$o = fnDeep?.().very.o) === null || _fnDeep$very$o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_fnDeep$very$o.Foo, Foo, _x);
|
||||||
|
(_fnDeep$very$o2 = fnDeep?.().very.o) === null || _fnDeep$very$o2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_fnDeep$very$o2.Foo, Foo, _x).toString;
|
||||||
|
(_fnDeep$very$o3 = fnDeep?.().very.o) === null || _fnDeep$very$o3 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_fnDeep$very$o3.Foo, Foo, _x).toString();
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self), Foo, _x);
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self).self, Foo, _x);
|
||||||
|
(_ref7 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)) === null || _ref7 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref7.self, Foo, _x);
|
||||||
|
(_ref8 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self).self) === null || _ref8 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref8.self, Foo, _x);
|
||||||
|
(_self3 = (fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self))?.self) === null || _self3 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_self3.self, Foo, _x);
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self).getSelf(), Foo, _x);
|
||||||
|
(_ref9 = fn === null || fn === void 0 ? void 0 : (_classStaticPrivateFi3 = _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)).getSelf) === null || _ref9 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref9.call(_classStaticPrivateFi3), Foo, _x);
|
||||||
|
(_ref10 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)) === null || _ref10 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref10.getSelf(), Foo, _x);
|
||||||
|
(_getSelf4 = (_ref11 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self))?.getSelf) === null || _getSelf4 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf4.call(_ref11), Foo, _x);
|
||||||
|
(_ref12 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self).getSelf()) === null || _ref12 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref12.self, Foo, _x);
|
||||||
|
(_call2 = (fn === null || fn === void 0 ? void 0 : (_classStaticPrivateFi4 = _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)).getSelf)?.call(_classStaticPrivateFi4)) === null || _call2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_call2.self, Foo, _x);
|
||||||
|
(_getSelf5 = (fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self))?.getSelf()) === null || _getSelf5 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf5.self, Foo, _x);
|
||||||
|
(_getSelf6 = (fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self))?.getSelf?.()) === null || _getSelf6 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf6.self, Foo, _x);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
var _x = {
|
||||||
|
writable: true,
|
||||||
|
value: 1
|
||||||
|
};
|
||||||
|
var _self = {
|
||||||
|
writable: true,
|
||||||
|
value: Foo
|
||||||
|
};
|
||||||
|
|
||||||
|
_defineProperty(Foo, "self", Foo);
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
@ -0,0 +1,126 @@
|
|||||||
|
class Foo {
|
||||||
|
static #x = 1;
|
||||||
|
static #m = function() { return this.#x; };
|
||||||
|
static #self = Foo;
|
||||||
|
static self = Foo;
|
||||||
|
static getSelf() { return this }
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
const o = { Foo: Foo };
|
||||||
|
const deep = { very: { o } };
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(Foo.#m?.()).toEqual(1);
|
||||||
|
expect(Foo.#m?.().toString).toEqual(1..toString);
|
||||||
|
expect(Foo.#m?.().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(o?.Foo.#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#m?.().toString).toEqual(1..toString);
|
||||||
|
expect(o?.Foo.#m?.().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(deep?.very.o?.Foo.#m?.()).toEqual(1);
|
||||||
|
expect(deep?.very.o?.Foo.#m?.().toString).toEqual(1..toString);
|
||||||
|
expect(deep?.very.o?.Foo.#m?.().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.self.#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.self.#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.self?.self.#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.self?.self.#m?.()).toEqual(1);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.getSelf().#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf?.().#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf().#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.().#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf()?.self.#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.self.#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.self.#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.self.#m?.()).toEqual(1);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#m?.().toString).toEqual(1..toString);
|
||||||
|
expect(fn?.().Foo.#m?.().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m?.()).toEqual(1);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m?.().toString).toEqual(1..toString);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m?.().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.self.#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.self.#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.self?.self.#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.self?.self.#m?.()).toEqual(1);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.getSelf().#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.().#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf().#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.().#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.self.#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.self.#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.self.#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.self.#m?.()).toEqual(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static testNull() {
|
||||||
|
const o = null;;
|
||||||
|
const deep = { very: { o } };
|
||||||
|
const fn = null;
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(o?.Foo.#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#m?.().toString).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#m?.().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(deep?.very.o?.Foo.#m?.()).toEqual(undefined);
|
||||||
|
expect(deep?.very.o?.Foo.#m?.().toString).toEqual(undefined);
|
||||||
|
expect(deep?.very.o?.Foo.#m?.().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.self?.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.self?.self.#m?.()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.getSelf().#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf?.().#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf().#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.().#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf()?.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.self.#m?.()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#m?.().toString).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#m?.().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m?.()).toEqual(undefined);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m?.().toString).toEqual(undefined);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m?.().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.self?.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.self?.self.#m?.()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.getSelf().#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.().#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf().#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.().#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.self.#m?.()).toEqual(undefined);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
|
Foo.testNull();
|
||||||
@ -0,0 +1,71 @@
|
|||||||
|
class Foo {
|
||||||
|
static #x = 1;
|
||||||
|
static #m = function() { return this.#x; };
|
||||||
|
static #self = Foo;
|
||||||
|
static self = Foo;
|
||||||
|
static getSelf() { return this }
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
const o = { Foo: Foo };
|
||||||
|
const deep = { very: { o } };
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo.#m?.();
|
||||||
|
Foo.#m?.().toString;
|
||||||
|
Foo.#m?.().toString();
|
||||||
|
|
||||||
|
o?.Foo.#m?.();
|
||||||
|
o?.Foo.#m?.().toString;
|
||||||
|
o?.Foo.#m?.().toString();
|
||||||
|
|
||||||
|
deep?.very.o?.Foo.#m?.();
|
||||||
|
deep?.very.o?.Foo.#m?.().toString;
|
||||||
|
deep?.very.o?.Foo.#m?.().toString();
|
||||||
|
|
||||||
|
o?.Foo.#self.#m?.();
|
||||||
|
o?.Foo.#self.self.#m?.();
|
||||||
|
o?.Foo.#self?.self.#m?.();
|
||||||
|
o?.Foo.#self.self?.self.#m?.();
|
||||||
|
o?.Foo.#self?.self?.self.#m?.();
|
||||||
|
|
||||||
|
o?.Foo.#self.getSelf().#m?.();
|
||||||
|
o?.Foo.#self.getSelf?.().#m?.();
|
||||||
|
o?.Foo.#self?.getSelf().#m?.();
|
||||||
|
o?.Foo.#self?.getSelf?.().#m?.();
|
||||||
|
o?.Foo.#self.getSelf()?.self.#m?.();
|
||||||
|
o?.Foo.#self.getSelf?.()?.self.#m?.();
|
||||||
|
o?.Foo.#self?.getSelf()?.self.#m?.();
|
||||||
|
o?.Foo.#self?.getSelf?.()?.self.#m?.();
|
||||||
|
|
||||||
|
fn?.().Foo.#m?.();
|
||||||
|
fn?.().Foo.#m?.().toString;
|
||||||
|
fn?.().Foo.#m?.().toString();
|
||||||
|
|
||||||
|
fnDeep?.().very.o?.Foo.#m?.();
|
||||||
|
fnDeep?.().very.o?.Foo.#m?.().toString;
|
||||||
|
fnDeep?.().very.o?.Foo.#m?.().toString();
|
||||||
|
|
||||||
|
fn?.().Foo.#self.#m?.();
|
||||||
|
fn?.().Foo.#self.self.#m?.();
|
||||||
|
fn?.().Foo.#self?.self.#m?.();
|
||||||
|
fn?.().Foo.#self.self?.self.#m?.();
|
||||||
|
fn?.().Foo.#self?.self?.self.#m?.();
|
||||||
|
|
||||||
|
fn?.().Foo.#self.getSelf().#m?.();
|
||||||
|
fn?.().Foo.#self.getSelf?.().#m?.();
|
||||||
|
fn?.().Foo.#self?.getSelf().#m?.();
|
||||||
|
fn?.().Foo.#self?.getSelf?.().#m?.();
|
||||||
|
fn?.().Foo.#self.getSelf()?.self.#m?.();
|
||||||
|
fn?.().Foo.#self.getSelf?.()?.self.#m?.();
|
||||||
|
fn?.().Foo.#self?.getSelf()?.self.#m?.();
|
||||||
|
fn?.().Foo.#self?.getSelf?.()?.self.#m?.();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"plugins": ["proposal-optional-chaining", "proposal-class-properties"]
|
||||||
|
}
|
||||||
@ -0,0 +1,92 @@
|
|||||||
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||||
|
|
||||||
|
function _classStaticPrivateFieldSpecGet(receiver, classConstructor, descriptor) { if (receiver !== classConstructor) { throw new TypeError("Private static access of wrong provenance"); } if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
|
||||||
|
|
||||||
|
class Foo {
|
||||||
|
static getSelf() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
var _o$Foo, _o$Foo2, _o$Foo3, _deep$very$o, _deep$very$o$Foo, _deep$very$o2, _deep$very$o2$Foo, _deep$very$o3, _deep$very$o3$Foo, _classStaticPrivateFi, _classStaticPrivateFi2, _ref, _ref$self, _ref2, _ref2$self, _self2, _self2$self, _classStaticPrivateFi3, _classStaticPrivateFi4, _ref3, _ref3$call, _ref4, _ref4$getSelf, _getSelf, _ref5, _getSelf$call, _ref6, _ref6$self, _classStaticPrivateFi5, _call, _call$self, _getSelf2, _getSelf2$self, _getSelf3, _getSelf3$self, _fn$Foo, _fn$Foo2, _fn$Foo3, _fnDeep$very$o, _fnDeep$very$o$Foo, _fnDeep$very$o2, _fnDeep$very$o2$Foo, _fnDeep$very$o3, _fnDeep$very$o3$Foo, _classStaticPrivateFi6, _classStaticPrivateFi7, _ref7, _ref7$self, _ref8, _ref8$self, _self3, _self3$self, _classStaticPrivateFi8, _classStaticPrivateFi9, _ref9, _ref9$call, _ref10, _ref10$getSelf, _getSelf4, _ref11, _getSelf4$call, _ref12, _ref12$self, _classStaticPrivateFi10, _call2, _call2$self, _getSelf5, _getSelf5$self, _getSelf6, _getSelf6$self, _classStaticPrivateFi11, _classStaticPrivateFi12, _classStaticPrivateFi13, _classStaticPrivateFi14, _classStaticPrivateFi15, _classStaticPrivateFi16, _classStaticPrivateFi17, _classStaticPrivateFi18, _classStaticPrivateFi19, _ref13, _ref14, _classStaticPrivateFi20, _classStaticPrivateFi21, _ref15, _classStaticPrivateFi22, _ref16, _classStaticPrivateFi23, _classStaticPrivateFi24, _ref17, _classStaticPrivateFi25, _classStaticPrivateFi26, _ref18, _classStaticPrivateFi27, _ref19, _classStaticPrivateFi28, _ref20, _ref20$getSelf, _classStaticPrivateFi29, _classStaticPrivateFi30, _classStaticPrivateFi31, _classStaticPrivateFi32, _classStaticPrivateFi33, _classStaticPrivateFi34, _classStaticPrivateFi35, _ref21, _ref22, _classStaticPrivateFi36, _classStaticPrivateFi37, _ref23, _classStaticPrivateFi38, _ref24, _classStaticPrivateFi39, _classStaticPrivateFi40, _ref25, _classStaticPrivateFi41, _classStaticPrivateFi42, _ref26, _classStaticPrivateFi43, _ref27, _classStaticPrivateFi44, _ref28, _ref28$getSelf, _classStaticPrivateFi45;
|
||||||
|
|
||||||
|
const o = {
|
||||||
|
Foo: Foo
|
||||||
|
};
|
||||||
|
const deep = {
|
||||||
|
very: {
|
||||||
|
o
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
(_classStaticPrivateFi11 = _classStaticPrivateFieldSpecGet(Foo, Foo, _m)) === null || _classStaticPrivateFi11 === void 0 ? void 0 : _classStaticPrivateFi11.call(Foo);
|
||||||
|
(_classStaticPrivateFi12 = _classStaticPrivateFieldSpecGet(Foo, Foo, _m)) === null || _classStaticPrivateFi12 === void 0 ? void 0 : _classStaticPrivateFi12.call(Foo).toString;
|
||||||
|
(_classStaticPrivateFi13 = _classStaticPrivateFieldSpecGet(Foo, Foo, _m)) === null || _classStaticPrivateFi13 === void 0 ? void 0 : _classStaticPrivateFi13.call(Foo).toString();
|
||||||
|
o === null || o === void 0 ? void 0 : (_classStaticPrivateFi14 = _classStaticPrivateFieldSpecGet(_o$Foo = o.Foo, Foo, _m)) === null || _classStaticPrivateFi14 === void 0 ? void 0 : _classStaticPrivateFi14.call(_o$Foo);
|
||||||
|
o === null || o === void 0 ? void 0 : (_classStaticPrivateFi15 = _classStaticPrivateFieldSpecGet(_o$Foo2 = o.Foo, Foo, _m)) === null || _classStaticPrivateFi15 === void 0 ? void 0 : _classStaticPrivateFi15.call(_o$Foo2).toString;
|
||||||
|
o === null || o === void 0 ? void 0 : (_classStaticPrivateFi16 = _classStaticPrivateFieldSpecGet(_o$Foo3 = o.Foo, Foo, _m)) === null || _classStaticPrivateFi16 === void 0 ? void 0 : _classStaticPrivateFi16.call(_o$Foo3).toString();
|
||||||
|
(_deep$very$o = deep === null || deep === void 0 ? void 0 : deep.very.o) === null || _deep$very$o === void 0 ? void 0 : (_classStaticPrivateFi17 = _classStaticPrivateFieldSpecGet(_deep$very$o$Foo = _deep$very$o.Foo, Foo, _m)) === null || _classStaticPrivateFi17 === void 0 ? void 0 : _classStaticPrivateFi17.call(_deep$very$o$Foo);
|
||||||
|
(_deep$very$o2 = deep === null || deep === void 0 ? void 0 : deep.very.o) === null || _deep$very$o2 === void 0 ? void 0 : (_classStaticPrivateFi18 = _classStaticPrivateFieldSpecGet(_deep$very$o2$Foo = _deep$very$o2.Foo, Foo, _m)) === null || _classStaticPrivateFi18 === void 0 ? void 0 : _classStaticPrivateFi18.call(_deep$very$o2$Foo).toString;
|
||||||
|
(_deep$very$o3 = deep === null || deep === void 0 ? void 0 : deep.very.o) === null || _deep$very$o3 === void 0 ? void 0 : (_classStaticPrivateFi19 = _classStaticPrivateFieldSpecGet(_deep$very$o3$Foo = _deep$very$o3.Foo, Foo, _m)) === null || _classStaticPrivateFi19 === void 0 ? void 0 : _classStaticPrivateFi19.call(_deep$very$o3$Foo).toString();
|
||||||
|
(_ref13 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_classStaticPrivateFi = _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self), Foo, _m)) === null || _ref13 === void 0 ? void 0 : _ref13.call(_classStaticPrivateFi);
|
||||||
|
(_ref14 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_classStaticPrivateFi2 = _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self).self, Foo, _m)) === null || _ref14 === void 0 ? void 0 : _ref14.call(_classStaticPrivateFi2);
|
||||||
|
(_ref = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)) === null || _ref === void 0 ? void 0 : (_classStaticPrivateFi20 = _classStaticPrivateFieldSpecGet(_ref$self = _ref.self, Foo, _m)) === null || _classStaticPrivateFi20 === void 0 ? void 0 : _classStaticPrivateFi20.call(_ref$self);
|
||||||
|
(_ref2 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self).self) === null || _ref2 === void 0 ? void 0 : (_classStaticPrivateFi21 = _classStaticPrivateFieldSpecGet(_ref2$self = _ref2.self, Foo, _m)) === null || _classStaticPrivateFi21 === void 0 ? void 0 : _classStaticPrivateFi21.call(_ref2$self);
|
||||||
|
(_self2 = (_ref15 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)) === null || _ref15 === void 0 ? void 0 : _ref15.self) === null || _self2 === void 0 ? void 0 : (_classStaticPrivateFi22 = _classStaticPrivateFieldSpecGet(_self2$self = _self2.self, Foo, _m)) === null || _classStaticPrivateFi22 === void 0 ? void 0 : _classStaticPrivateFi22.call(_self2$self);
|
||||||
|
(_ref16 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_classStaticPrivateFi3 = _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self).getSelf(), Foo, _m)) === null || _ref16 === void 0 ? void 0 : _ref16.call(_classStaticPrivateFi3);
|
||||||
|
(_ref3 = o === null || o === void 0 ? void 0 : (_classStaticPrivateFi4 = _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)).getSelf) === null || _ref3 === void 0 ? void 0 : (_classStaticPrivateFi23 = _classStaticPrivateFieldSpecGet(_ref3$call = _ref3.call(_classStaticPrivateFi4), Foo, _m)) === null || _classStaticPrivateFi23 === void 0 ? void 0 : _classStaticPrivateFi23.call(_ref3$call);
|
||||||
|
(_ref4 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)) === null || _ref4 === void 0 ? void 0 : (_classStaticPrivateFi24 = _classStaticPrivateFieldSpecGet(_ref4$getSelf = _ref4.getSelf(), Foo, _m)) === null || _classStaticPrivateFi24 === void 0 ? void 0 : _classStaticPrivateFi24.call(_ref4$getSelf);
|
||||||
|
(_getSelf = (_ref17 = _ref5 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)) === null || _ref17 === void 0 ? void 0 : _ref17.getSelf) === null || _getSelf === void 0 ? void 0 : (_classStaticPrivateFi25 = _classStaticPrivateFieldSpecGet(_getSelf$call = _getSelf.call(_ref5), Foo, _m)) === null || _classStaticPrivateFi25 === void 0 ? void 0 : _classStaticPrivateFi25.call(_getSelf$call);
|
||||||
|
(_ref6 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self).getSelf()) === null || _ref6 === void 0 ? void 0 : (_classStaticPrivateFi26 = _classStaticPrivateFieldSpecGet(_ref6$self = _ref6.self, Foo, _m)) === null || _classStaticPrivateFi26 === void 0 ? void 0 : _classStaticPrivateFi26.call(_ref6$self);
|
||||||
|
(_call = (_ref18 = o === null || o === void 0 ? void 0 : (_classStaticPrivateFi5 = _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)).getSelf) === null || _ref18 === void 0 ? void 0 : _ref18.call(_classStaticPrivateFi5)) === null || _call === void 0 ? void 0 : (_classStaticPrivateFi27 = _classStaticPrivateFieldSpecGet(_call$self = _call.self, Foo, _m)) === null || _classStaticPrivateFi27 === void 0 ? void 0 : _classStaticPrivateFi27.call(_call$self);
|
||||||
|
(_getSelf2 = (_ref19 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)) === null || _ref19 === void 0 ? void 0 : _ref19.getSelf()) === null || _getSelf2 === void 0 ? void 0 : (_classStaticPrivateFi28 = _classStaticPrivateFieldSpecGet(_getSelf2$self = _getSelf2.self, Foo, _m)) === null || _classStaticPrivateFi28 === void 0 ? void 0 : _classStaticPrivateFi28.call(_getSelf2$self);
|
||||||
|
(_getSelf3 = (_ref20 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)) === null || _ref20 === void 0 ? void 0 : (_ref20$getSelf = _ref20.getSelf) === null || _ref20$getSelf === void 0 ? void 0 : _ref20$getSelf.call(_ref20)) === null || _getSelf3 === void 0 ? void 0 : (_classStaticPrivateFi29 = _classStaticPrivateFieldSpecGet(_getSelf3$self = _getSelf3.self, Foo, _m)) === null || _classStaticPrivateFi29 === void 0 ? void 0 : _classStaticPrivateFi29.call(_getSelf3$self);
|
||||||
|
fn === null || fn === void 0 ? void 0 : (_classStaticPrivateFi30 = _classStaticPrivateFieldSpecGet(_fn$Foo = fn().Foo, Foo, _m)) === null || _classStaticPrivateFi30 === void 0 ? void 0 : _classStaticPrivateFi30.call(_fn$Foo);
|
||||||
|
fn === null || fn === void 0 ? void 0 : (_classStaticPrivateFi31 = _classStaticPrivateFieldSpecGet(_fn$Foo2 = fn().Foo, Foo, _m)) === null || _classStaticPrivateFi31 === void 0 ? void 0 : _classStaticPrivateFi31.call(_fn$Foo2).toString;
|
||||||
|
fn === null || fn === void 0 ? void 0 : (_classStaticPrivateFi32 = _classStaticPrivateFieldSpecGet(_fn$Foo3 = fn().Foo, Foo, _m)) === null || _classStaticPrivateFi32 === void 0 ? void 0 : _classStaticPrivateFi32.call(_fn$Foo3).toString();
|
||||||
|
(_fnDeep$very$o = fnDeep === null || fnDeep === void 0 ? void 0 : fnDeep().very.o) === null || _fnDeep$very$o === void 0 ? void 0 : (_classStaticPrivateFi33 = _classStaticPrivateFieldSpecGet(_fnDeep$very$o$Foo = _fnDeep$very$o.Foo, Foo, _m)) === null || _classStaticPrivateFi33 === void 0 ? void 0 : _classStaticPrivateFi33.call(_fnDeep$very$o$Foo);
|
||||||
|
(_fnDeep$very$o2 = fnDeep === null || fnDeep === void 0 ? void 0 : fnDeep().very.o) === null || _fnDeep$very$o2 === void 0 ? void 0 : (_classStaticPrivateFi34 = _classStaticPrivateFieldSpecGet(_fnDeep$very$o2$Foo = _fnDeep$very$o2.Foo, Foo, _m)) === null || _classStaticPrivateFi34 === void 0 ? void 0 : _classStaticPrivateFi34.call(_fnDeep$very$o2$Foo).toString;
|
||||||
|
(_fnDeep$very$o3 = fnDeep === null || fnDeep === void 0 ? void 0 : fnDeep().very.o) === null || _fnDeep$very$o3 === void 0 ? void 0 : (_classStaticPrivateFi35 = _classStaticPrivateFieldSpecGet(_fnDeep$very$o3$Foo = _fnDeep$very$o3.Foo, Foo, _m)) === null || _classStaticPrivateFi35 === void 0 ? void 0 : _classStaticPrivateFi35.call(_fnDeep$very$o3$Foo).toString();
|
||||||
|
(_ref21 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_classStaticPrivateFi6 = _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self), Foo, _m)) === null || _ref21 === void 0 ? void 0 : _ref21.call(_classStaticPrivateFi6);
|
||||||
|
(_ref22 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_classStaticPrivateFi7 = _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self).self, Foo, _m)) === null || _ref22 === void 0 ? void 0 : _ref22.call(_classStaticPrivateFi7);
|
||||||
|
(_ref7 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)) === null || _ref7 === void 0 ? void 0 : (_classStaticPrivateFi36 = _classStaticPrivateFieldSpecGet(_ref7$self = _ref7.self, Foo, _m)) === null || _classStaticPrivateFi36 === void 0 ? void 0 : _classStaticPrivateFi36.call(_ref7$self);
|
||||||
|
(_ref8 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self).self) === null || _ref8 === void 0 ? void 0 : (_classStaticPrivateFi37 = _classStaticPrivateFieldSpecGet(_ref8$self = _ref8.self, Foo, _m)) === null || _classStaticPrivateFi37 === void 0 ? void 0 : _classStaticPrivateFi37.call(_ref8$self);
|
||||||
|
(_self3 = (_ref23 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)) === null || _ref23 === void 0 ? void 0 : _ref23.self) === null || _self3 === void 0 ? void 0 : (_classStaticPrivateFi38 = _classStaticPrivateFieldSpecGet(_self3$self = _self3.self, Foo, _m)) === null || _classStaticPrivateFi38 === void 0 ? void 0 : _classStaticPrivateFi38.call(_self3$self);
|
||||||
|
(_ref24 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_classStaticPrivateFi8 = _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self).getSelf(), Foo, _m)) === null || _ref24 === void 0 ? void 0 : _ref24.call(_classStaticPrivateFi8);
|
||||||
|
(_ref9 = fn === null || fn === void 0 ? void 0 : (_classStaticPrivateFi9 = _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)).getSelf) === null || _ref9 === void 0 ? void 0 : (_classStaticPrivateFi39 = _classStaticPrivateFieldSpecGet(_ref9$call = _ref9.call(_classStaticPrivateFi9), Foo, _m)) === null || _classStaticPrivateFi39 === void 0 ? void 0 : _classStaticPrivateFi39.call(_ref9$call);
|
||||||
|
(_ref10 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)) === null || _ref10 === void 0 ? void 0 : (_classStaticPrivateFi40 = _classStaticPrivateFieldSpecGet(_ref10$getSelf = _ref10.getSelf(), Foo, _m)) === null || _classStaticPrivateFi40 === void 0 ? void 0 : _classStaticPrivateFi40.call(_ref10$getSelf);
|
||||||
|
(_getSelf4 = (_ref25 = _ref11 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)) === null || _ref25 === void 0 ? void 0 : _ref25.getSelf) === null || _getSelf4 === void 0 ? void 0 : (_classStaticPrivateFi41 = _classStaticPrivateFieldSpecGet(_getSelf4$call = _getSelf4.call(_ref11), Foo, _m)) === null || _classStaticPrivateFi41 === void 0 ? void 0 : _classStaticPrivateFi41.call(_getSelf4$call);
|
||||||
|
(_ref12 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self).getSelf()) === null || _ref12 === void 0 ? void 0 : (_classStaticPrivateFi42 = _classStaticPrivateFieldSpecGet(_ref12$self = _ref12.self, Foo, _m)) === null || _classStaticPrivateFi42 === void 0 ? void 0 : _classStaticPrivateFi42.call(_ref12$self);
|
||||||
|
(_call2 = (_ref26 = fn === null || fn === void 0 ? void 0 : (_classStaticPrivateFi10 = _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)).getSelf) === null || _ref26 === void 0 ? void 0 : _ref26.call(_classStaticPrivateFi10)) === null || _call2 === void 0 ? void 0 : (_classStaticPrivateFi43 = _classStaticPrivateFieldSpecGet(_call2$self = _call2.self, Foo, _m)) === null || _classStaticPrivateFi43 === void 0 ? void 0 : _classStaticPrivateFi43.call(_call2$self);
|
||||||
|
(_getSelf5 = (_ref27 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)) === null || _ref27 === void 0 ? void 0 : _ref27.getSelf()) === null || _getSelf5 === void 0 ? void 0 : (_classStaticPrivateFi44 = _classStaticPrivateFieldSpecGet(_getSelf5$self = _getSelf5.self, Foo, _m)) === null || _classStaticPrivateFi44 === void 0 ? void 0 : _classStaticPrivateFi44.call(_getSelf5$self);
|
||||||
|
(_getSelf6 = (_ref28 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)) === null || _ref28 === void 0 ? void 0 : (_ref28$getSelf = _ref28.getSelf) === null || _ref28$getSelf === void 0 ? void 0 : _ref28$getSelf.call(_ref28)) === null || _getSelf6 === void 0 ? void 0 : (_classStaticPrivateFi45 = _classStaticPrivateFieldSpecGet(_getSelf6$self = _getSelf6.self, Foo, _m)) === null || _classStaticPrivateFi45 === void 0 ? void 0 : _classStaticPrivateFi45.call(_getSelf6$self);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
var _x = {
|
||||||
|
writable: true,
|
||||||
|
value: 1
|
||||||
|
};
|
||||||
|
var _m = {
|
||||||
|
writable: true,
|
||||||
|
value: function () {
|
||||||
|
return _classStaticPrivateFieldSpecGet(this, Foo, _x);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var _self = {
|
||||||
|
writable: true,
|
||||||
|
value: Foo
|
||||||
|
};
|
||||||
|
|
||||||
|
_defineProperty(Foo, "self", Foo);
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
@ -0,0 +1,126 @@
|
|||||||
|
class Foo {
|
||||||
|
static #x = 1;
|
||||||
|
static #m = function() { return this.#x; };
|
||||||
|
static #self = Foo;
|
||||||
|
static self = Foo;
|
||||||
|
static getSelf() { return this }
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
const o = { Foo: Foo };
|
||||||
|
const deep = { very: { o } };
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(Foo.#m?.()).toEqual(1);
|
||||||
|
expect(Foo.#m?.().toString).toEqual(1..toString);
|
||||||
|
expect(Foo.#m?.().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(o?.Foo.#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#m?.().toString).toEqual(1..toString);
|
||||||
|
expect(o?.Foo.#m?.().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(deep?.very.o?.Foo.#m?.()).toEqual(1);
|
||||||
|
expect(deep?.very.o?.Foo.#m?.().toString).toEqual(1..toString);
|
||||||
|
expect(deep?.very.o?.Foo.#m?.().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.self.#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.self.#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.self?.self.#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.self?.self.#m?.()).toEqual(1);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.getSelf().#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf?.().#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf().#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.().#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf()?.self.#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.self.#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.self.#m?.()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.self.#m?.()).toEqual(1);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#m?.().toString).toEqual(1..toString);
|
||||||
|
expect(fn?.().Foo.#m?.().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m?.()).toEqual(1);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m?.().toString).toEqual(1..toString);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m?.().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.self.#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.self.#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.self?.self.#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.self?.self.#m?.()).toEqual(1);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.getSelf().#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.().#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf().#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.().#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.self.#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.self.#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.self.#m?.()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.self.#m?.()).toEqual(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static testNull() {
|
||||||
|
const o = null;;
|
||||||
|
const deep = { very: { o } };
|
||||||
|
const fn = null;
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(o?.Foo.#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#m?.().toString).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#m?.().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(deep?.very.o?.Foo.#m?.()).toEqual(undefined);
|
||||||
|
expect(deep?.very.o?.Foo.#m?.().toString).toEqual(undefined);
|
||||||
|
expect(deep?.very.o?.Foo.#m?.().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.self?.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.self?.self.#m?.()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.getSelf().#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf?.().#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf().#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.().#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf()?.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.self.#m?.()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#m?.().toString).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#m?.().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m?.()).toEqual(undefined);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m?.().toString).toEqual(undefined);
|
||||||
|
expect(fnDeep?.().very.o?.Foo.#m?.().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.self?.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.self?.self.#m?.()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.getSelf().#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.().#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf().#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.().#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.self.#m?.()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.self.#m?.()).toEqual(undefined);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
|
Foo.testNull();
|
||||||
@ -0,0 +1,71 @@
|
|||||||
|
class Foo {
|
||||||
|
static #x = 1;
|
||||||
|
static #m = function() { return this.#x; };
|
||||||
|
static #self = Foo;
|
||||||
|
static self = Foo;
|
||||||
|
static getSelf() { return this }
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
const o = { Foo: Foo };
|
||||||
|
const deep = { very: { o } };
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo.#m?.();
|
||||||
|
Foo.#m?.().toString;
|
||||||
|
Foo.#m?.().toString();
|
||||||
|
|
||||||
|
o?.Foo.#m?.();
|
||||||
|
o?.Foo.#m?.().toString;
|
||||||
|
o?.Foo.#m?.().toString();
|
||||||
|
|
||||||
|
deep?.very.o?.Foo.#m?.();
|
||||||
|
deep?.very.o?.Foo.#m?.().toString;
|
||||||
|
deep?.very.o?.Foo.#m?.().toString();
|
||||||
|
|
||||||
|
o?.Foo.#self.#m?.();
|
||||||
|
o?.Foo.#self.self.#m?.();
|
||||||
|
o?.Foo.#self?.self.#m?.();
|
||||||
|
o?.Foo.#self.self?.self.#m?.();
|
||||||
|
o?.Foo.#self?.self?.self.#m?.();
|
||||||
|
|
||||||
|
o?.Foo.#self.getSelf().#m?.();
|
||||||
|
o?.Foo.#self.getSelf?.().#m?.();
|
||||||
|
o?.Foo.#self?.getSelf().#m?.();
|
||||||
|
o?.Foo.#self?.getSelf?.().#m?.();
|
||||||
|
o?.Foo.#self.getSelf()?.self.#m?.();
|
||||||
|
o?.Foo.#self.getSelf?.()?.self.#m?.();
|
||||||
|
o?.Foo.#self?.getSelf()?.self.#m?.();
|
||||||
|
o?.Foo.#self?.getSelf?.()?.self.#m?.();
|
||||||
|
|
||||||
|
fn?.().Foo.#m?.();
|
||||||
|
fn?.().Foo.#m?.().toString;
|
||||||
|
fn?.().Foo.#m?.().toString();
|
||||||
|
|
||||||
|
fnDeep?.().very.o?.Foo.#m?.();
|
||||||
|
fnDeep?.().very.o?.Foo.#m?.().toString;
|
||||||
|
fnDeep?.().very.o?.Foo.#m?.().toString();
|
||||||
|
|
||||||
|
fn?.().Foo.#self.#m?.();
|
||||||
|
fn?.().Foo.#self.self.#m?.();
|
||||||
|
fn?.().Foo.#self?.self.#m?.();
|
||||||
|
fn?.().Foo.#self.self?.self.#m?.();
|
||||||
|
fn?.().Foo.#self?.self?.self.#m?.();
|
||||||
|
|
||||||
|
fn?.().Foo.#self.getSelf().#m?.();
|
||||||
|
fn?.().Foo.#self.getSelf?.().#m?.();
|
||||||
|
fn?.().Foo.#self?.getSelf().#m?.();
|
||||||
|
fn?.().Foo.#self?.getSelf?.().#m?.();
|
||||||
|
fn?.().Foo.#self.getSelf()?.self.#m?.();
|
||||||
|
fn?.().Foo.#self.getSelf?.()?.self.#m?.();
|
||||||
|
fn?.().Foo.#self?.getSelf()?.self.#m?.();
|
||||||
|
fn?.().Foo.#self?.getSelf?.()?.self.#m?.();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"plugins": ["proposal-class-properties"],
|
||||||
|
"minNodeVersion": "14.0.0"
|
||||||
|
}
|
||||||
@ -0,0 +1,92 @@
|
|||||||
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||||
|
|
||||||
|
function _classStaticPrivateFieldSpecGet(receiver, classConstructor, descriptor) { if (receiver !== classConstructor) { throw new TypeError("Private static access of wrong provenance"); } if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
|
||||||
|
|
||||||
|
class Foo {
|
||||||
|
static getSelf() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
var _o$Foo, _o$Foo2, _o$Foo3, _deep$very$o, _deep$very$o$Foo, _deep$very$o2, _deep$very$o2$Foo, _deep$very$o3, _deep$very$o3$Foo, _classStaticPrivateFi, _classStaticPrivateFi2, _ref, _ref$self, _ref2, _ref2$self, _self2, _self2$self, _classStaticPrivateFi3, _classStaticPrivateFi4, _ref3, _ref3$call, _ref4, _ref4$getSelf, _getSelf, _ref5, _getSelf$call, _ref6, _ref6$self, _classStaticPrivateFi5, _call, _call$self, _getSelf2, _getSelf2$self, _getSelf3, _getSelf3$self, _fn$Foo, _fn$Foo2, _fn$Foo3, _fnDeep$very$o, _fnDeep$very$o$Foo, _fnDeep$very$o2, _fnDeep$very$o2$Foo, _fnDeep$very$o3, _fnDeep$very$o3$Foo, _classStaticPrivateFi6, _classStaticPrivateFi7, _ref7, _ref7$self, _ref8, _ref8$self, _self3, _self3$self, _classStaticPrivateFi8, _classStaticPrivateFi9, _ref9, _ref9$call, _ref10, _ref10$getSelf, _getSelf4, _ref11, _getSelf4$call, _ref12, _ref12$self, _classStaticPrivateFi10, _call2, _call2$self, _getSelf5, _getSelf5$self, _getSelf6, _getSelf6$self;
|
||||||
|
|
||||||
|
const o = {
|
||||||
|
Foo: Foo
|
||||||
|
};
|
||||||
|
const deep = {
|
||||||
|
very: {
|
||||||
|
o
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
_classStaticPrivateFieldSpecGet(Foo, Foo, _m)?.call(Foo);
|
||||||
|
_classStaticPrivateFieldSpecGet(Foo, Foo, _m)?.call(Foo).toString;
|
||||||
|
_classStaticPrivateFieldSpecGet(Foo, Foo, _m)?.call(Foo).toString();
|
||||||
|
o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_o$Foo = o.Foo, Foo, _m)?.call(_o$Foo);
|
||||||
|
o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_o$Foo2 = o.Foo, Foo, _m)?.call(_o$Foo2).toString;
|
||||||
|
o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_o$Foo3 = o.Foo, Foo, _m)?.call(_o$Foo3).toString();
|
||||||
|
(_deep$very$o = deep?.very.o) === null || _deep$very$o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_deep$very$o$Foo = _deep$very$o.Foo, Foo, _m)?.call(_deep$very$o$Foo);
|
||||||
|
(_deep$very$o2 = deep?.very.o) === null || _deep$very$o2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_deep$very$o2$Foo = _deep$very$o2.Foo, Foo, _m)?.call(_deep$very$o2$Foo).toString;
|
||||||
|
(_deep$very$o3 = deep?.very.o) === null || _deep$very$o3 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_deep$very$o3$Foo = _deep$very$o3.Foo, Foo, _m)?.call(_deep$very$o3$Foo).toString();
|
||||||
|
(o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_classStaticPrivateFi = _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self), Foo, _m))?.call(_classStaticPrivateFi);
|
||||||
|
(o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_classStaticPrivateFi2 = _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self).self, Foo, _m))?.call(_classStaticPrivateFi2);
|
||||||
|
(_ref = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)) === null || _ref === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref$self = _ref.self, Foo, _m)?.call(_ref$self);
|
||||||
|
(_ref2 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self).self) === null || _ref2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref2$self = _ref2.self, Foo, _m)?.call(_ref2$self);
|
||||||
|
(_self2 = (o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self))?.self) === null || _self2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_self2$self = _self2.self, Foo, _m)?.call(_self2$self);
|
||||||
|
(o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_classStaticPrivateFi3 = _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self).getSelf(), Foo, _m))?.call(_classStaticPrivateFi3);
|
||||||
|
(_ref3 = o === null || o === void 0 ? void 0 : (_classStaticPrivateFi4 = _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)).getSelf) === null || _ref3 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref3$call = _ref3.call(_classStaticPrivateFi4), Foo, _m)?.call(_ref3$call);
|
||||||
|
(_ref4 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)) === null || _ref4 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref4$getSelf = _ref4.getSelf(), Foo, _m)?.call(_ref4$getSelf);
|
||||||
|
(_getSelf = (_ref5 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self))?.getSelf) === null || _getSelf === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf$call = _getSelf.call(_ref5), Foo, _m)?.call(_getSelf$call);
|
||||||
|
(_ref6 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self).getSelf()) === null || _ref6 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref6$self = _ref6.self, Foo, _m)?.call(_ref6$self);
|
||||||
|
(_call = (o === null || o === void 0 ? void 0 : (_classStaticPrivateFi5 = _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)).getSelf)?.call(_classStaticPrivateFi5)) === null || _call === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_call$self = _call.self, Foo, _m)?.call(_call$self);
|
||||||
|
(_getSelf2 = (o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self))?.getSelf()) === null || _getSelf2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf2$self = _getSelf2.self, Foo, _m)?.call(_getSelf2$self);
|
||||||
|
(_getSelf3 = (o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self))?.getSelf?.()) === null || _getSelf3 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf3$self = _getSelf3.self, Foo, _m)?.call(_getSelf3$self);
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_fn$Foo = fn().Foo, Foo, _m)?.call(_fn$Foo);
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_fn$Foo2 = fn().Foo, Foo, _m)?.call(_fn$Foo2).toString;
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_fn$Foo3 = fn().Foo, Foo, _m)?.call(_fn$Foo3).toString();
|
||||||
|
(_fnDeep$very$o = fnDeep?.().very.o) === null || _fnDeep$very$o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_fnDeep$very$o$Foo = _fnDeep$very$o.Foo, Foo, _m)?.call(_fnDeep$very$o$Foo);
|
||||||
|
(_fnDeep$very$o2 = fnDeep?.().very.o) === null || _fnDeep$very$o2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_fnDeep$very$o2$Foo = _fnDeep$very$o2.Foo, Foo, _m)?.call(_fnDeep$very$o2$Foo).toString;
|
||||||
|
(_fnDeep$very$o3 = fnDeep?.().very.o) === null || _fnDeep$very$o3 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_fnDeep$very$o3$Foo = _fnDeep$very$o3.Foo, Foo, _m)?.call(_fnDeep$very$o3$Foo).toString();
|
||||||
|
(fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_classStaticPrivateFi6 = _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self), Foo, _m))?.call(_classStaticPrivateFi6);
|
||||||
|
(fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_classStaticPrivateFi7 = _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self).self, Foo, _m))?.call(_classStaticPrivateFi7);
|
||||||
|
(_ref7 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)) === null || _ref7 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref7$self = _ref7.self, Foo, _m)?.call(_ref7$self);
|
||||||
|
(_ref8 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self).self) === null || _ref8 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref8$self = _ref8.self, Foo, _m)?.call(_ref8$self);
|
||||||
|
(_self3 = (fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self))?.self) === null || _self3 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_self3$self = _self3.self, Foo, _m)?.call(_self3$self);
|
||||||
|
(fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_classStaticPrivateFi8 = _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self).getSelf(), Foo, _m))?.call(_classStaticPrivateFi8);
|
||||||
|
(_ref9 = fn === null || fn === void 0 ? void 0 : (_classStaticPrivateFi9 = _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)).getSelf) === null || _ref9 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref9$call = _ref9.call(_classStaticPrivateFi9), Foo, _m)?.call(_ref9$call);
|
||||||
|
(_ref10 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)) === null || _ref10 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref10$getSelf = _ref10.getSelf(), Foo, _m)?.call(_ref10$getSelf);
|
||||||
|
(_getSelf4 = (_ref11 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self))?.getSelf) === null || _getSelf4 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf4$call = _getSelf4.call(_ref11), Foo, _m)?.call(_getSelf4$call);
|
||||||
|
(_ref12 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self).getSelf()) === null || _ref12 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref12$self = _ref12.self, Foo, _m)?.call(_ref12$self);
|
||||||
|
(_call2 = (fn === null || fn === void 0 ? void 0 : (_classStaticPrivateFi10 = _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)).getSelf)?.call(_classStaticPrivateFi10)) === null || _call2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_call2$self = _call2.self, Foo, _m)?.call(_call2$self);
|
||||||
|
(_getSelf5 = (fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self))?.getSelf()) === null || _getSelf5 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf5$self = _getSelf5.self, Foo, _m)?.call(_getSelf5$self);
|
||||||
|
(_getSelf6 = (fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self))?.getSelf?.()) === null || _getSelf6 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf6$self = _getSelf6.self, Foo, _m)?.call(_getSelf6$self);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
var _x = {
|
||||||
|
writable: true,
|
||||||
|
value: 1
|
||||||
|
};
|
||||||
|
var _m = {
|
||||||
|
writable: true,
|
||||||
|
value: function () {
|
||||||
|
return _classStaticPrivateFieldSpecGet(this, Foo, _x);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var _self = {
|
||||||
|
writable: true,
|
||||||
|
value: Foo
|
||||||
|
};
|
||||||
|
|
||||||
|
_defineProperty(Foo, "self", Foo);
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
@ -0,0 +1,126 @@
|
|||||||
|
class Foo {
|
||||||
|
static #x = 1;
|
||||||
|
static #m = function() { return this.#x; };
|
||||||
|
static #self = Foo;
|
||||||
|
static self = Foo;
|
||||||
|
static getSelf() { return this }
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
const o = { Foo: Foo };
|
||||||
|
const deep = { very: { o } };
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(Foo?.#m()).toEqual(1);
|
||||||
|
expect(Foo?.#m().toString).toEqual(1..toString);
|
||||||
|
expect(Foo?.#m().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(o?.Foo?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo?.#m().toString).toEqual(1..toString);
|
||||||
|
expect(o?.Foo?.#m().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(deep?.very.o?.Foo?.#m()).toEqual(1);
|
||||||
|
expect(deep?.very.o?.Foo?.#m().toString).toEqual(1..toString);
|
||||||
|
expect(deep?.very.o?.Foo?.#m().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(o?.Foo.#self?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.self?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.self?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.self?.self?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.self?.self?.#m()).toEqual(1);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.getSelf()?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf()?.self?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.self?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.self?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.self?.#m()).toEqual(1);
|
||||||
|
|
||||||
|
expect(fn?.().Foo?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo?.#m().toString).toEqual(1..toString);
|
||||||
|
expect(fn?.().Foo?.#m().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#m()).toEqual(1);
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#m().toString).toEqual(1..toString);
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#m().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.self?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.self?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.self?.self?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.self?.self?.#m()).toEqual(1);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.self?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.self?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.self?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.self?.#m()).toEqual(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static testNull() {
|
||||||
|
const o = null;;
|
||||||
|
const deep = { very: { o } };
|
||||||
|
const fn = null;
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(o?.Foo?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo?.#m().toString).toEqual(undefined);
|
||||||
|
expect(o?.Foo?.#m().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(deep?.very.o?.Foo?.#m()).toEqual(undefined);
|
||||||
|
expect(deep?.very.o?.Foo?.#m().toString).toEqual(undefined);
|
||||||
|
expect(deep?.very.o?.Foo?.#m().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.self?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.self?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.self?.self?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.self?.self?.#m()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.getSelf()?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf()?.self?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.self?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.self?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.self?.#m()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo?.#m().toString).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo?.#m().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#m()).toEqual(undefined);
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#m().toString).toEqual(undefined);
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#m().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.self?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.self?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.self?.self?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.self?.self?.#m()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.self?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.self?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.self?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.self?.#m()).toEqual(undefined);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
|
Foo.testNull();
|
||||||
@ -0,0 +1,70 @@
|
|||||||
|
class Foo {
|
||||||
|
static #x = 1;
|
||||||
|
static #m = function() { return this.#x; };
|
||||||
|
static #self = Foo;
|
||||||
|
static self = Foo;
|
||||||
|
static getSelf() { return this }
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
const o = { Foo: Foo };
|
||||||
|
const deep = { very: { o } };
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo?.#m();
|
||||||
|
Foo?.#m().toString;
|
||||||
|
Foo?.#m().toString();
|
||||||
|
|
||||||
|
o?.Foo?.#m();
|
||||||
|
o?.Foo?.#m().toString;
|
||||||
|
o?.Foo?.#m().toString();
|
||||||
|
|
||||||
|
deep?.very.o?.Foo?.#m();
|
||||||
|
deep?.very.o?.Foo?.#m().toString;
|
||||||
|
deep?.very.o?.Foo?.#m().toString();
|
||||||
|
|
||||||
|
o?.Foo.#self?.#m();
|
||||||
|
o?.Foo.#self.self?.#m();
|
||||||
|
o?.Foo.#self?.self?.#m();
|
||||||
|
o?.Foo.#self.self?.self?.#m();
|
||||||
|
o?.Foo.#self?.self?.self?.#m();
|
||||||
|
|
||||||
|
o?.Foo.#self.getSelf()?.#m();
|
||||||
|
o?.Foo.#self.getSelf?.()?.#m();
|
||||||
|
o?.Foo.#self?.getSelf()?.#m();
|
||||||
|
o?.Foo.#self?.getSelf?.()?.#m();
|
||||||
|
o?.Foo.#self.getSelf()?.self?.#m();
|
||||||
|
o?.Foo.#self.getSelf?.()?.self?.#m();
|
||||||
|
o?.Foo.#self?.getSelf()?.self?.#m();
|
||||||
|
o?.Foo.#self?.getSelf?.()?.self?.#m();
|
||||||
|
|
||||||
|
fn?.().Foo?.#m();
|
||||||
|
fn?.().Foo?.#m().toString;
|
||||||
|
fn?.().Foo?.#m().toString();
|
||||||
|
|
||||||
|
fnDeep?.().very.o?.Foo?.#m();
|
||||||
|
fnDeep?.().very.o?.Foo?.#m().toString;
|
||||||
|
fnDeep?.().very.o?.Foo?.#m().toString();
|
||||||
|
|
||||||
|
fn?.().Foo.#self?.#m();
|
||||||
|
fn?.().Foo.#self.self?.#m();
|
||||||
|
fn?.().Foo.#self?.self?.#m();
|
||||||
|
fn?.().Foo.#self.self?.self?.#m();
|
||||||
|
fn?.().Foo.#self?.self?.self?.#m();
|
||||||
|
|
||||||
|
fn?.().Foo.#self.getSelf()?.#m();
|
||||||
|
fn?.().Foo.#self.getSelf?.()?.#m();
|
||||||
|
fn?.().Foo.#self?.getSelf()?.#m();
|
||||||
|
fn?.().Foo.#self?.getSelf?.()?.#m();
|
||||||
|
fn?.().Foo.#self.getSelf()?.self?.#m();
|
||||||
|
fn?.().Foo.#self.getSelf?.()?.self?.#m();
|
||||||
|
fn?.().Foo.#self?.getSelf()?.self?.#m();
|
||||||
|
fn?.().Foo.#self?.getSelf?.()?.self?.#m();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"plugins": ["proposal-optional-chaining", "proposal-class-properties"]
|
||||||
|
}
|
||||||
@ -0,0 +1,92 @@
|
|||||||
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||||
|
|
||||||
|
function _classStaticPrivateFieldSpecGet(receiver, classConstructor, descriptor) { if (receiver !== classConstructor) { throw new TypeError("Private static access of wrong provenance"); } if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
|
||||||
|
|
||||||
|
class Foo {
|
||||||
|
static getSelf() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
var _o$Foo, _o$Foo2, _o$Foo3, _deep$very$o$Foo, _deep$very$o$Foo2, _deep$very$o$Foo3, _ref, _ref2, _self2, _self3, _self$self, _ref3, _classStaticPrivateFi, _call, _getSelf, _getSelf2, _self4, _classStaticPrivateFi2, _call$self, _getSelf$self, _getSelf$self2, _fn$Foo, _fn$Foo2, _fn$Foo3, _fnDeep$very$o$Foo, _fnDeep$very$o$Foo2, _fnDeep$very$o$Foo3, _ref4, _ref5, _self5, _self6, _self$self2, _ref6, _classStaticPrivateFi3, _call2, _getSelf3, _getSelf4, _self7, _classStaticPrivateFi4, _call$self2, _getSelf$self3, _getSelf$self4, _deep$very$o, _deep$very$o2, _deep$very$o3, _ref7, _ref8, _ref9, _ref9$self, _ref10, _ref11, _ref12, _ref12$getSelf, _ref13, _ref14, _ref14$call, _ref15, _ref15$getSelf, _ref16, _ref16$getSelf, _ref16$getSelf$call, _fnDeep$very$o, _fnDeep$very$o2, _fnDeep$very$o3, _ref17, _ref18, _ref19, _ref19$self, _ref20, _ref21, _ref22, _ref22$getSelf, _ref23, _ref24, _ref24$call, _ref25, _ref25$getSelf, _ref26, _ref26$getSelf, _ref26$getSelf$call;
|
||||||
|
|
||||||
|
const o = {
|
||||||
|
Foo: Foo
|
||||||
|
};
|
||||||
|
const deep = {
|
||||||
|
very: {
|
||||||
|
o
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo === null || Foo === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(Foo, Foo, _m).call(Foo);
|
||||||
|
Foo === null || Foo === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(Foo, Foo, _m).call(Foo).toString;
|
||||||
|
Foo === null || Foo === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(Foo, Foo, _m).call(Foo).toString();
|
||||||
|
(_o$Foo = o === null || o === void 0 ? void 0 : o.Foo) === null || _o$Foo === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_o$Foo, Foo, _m).call(_o$Foo);
|
||||||
|
(_o$Foo2 = o === null || o === void 0 ? void 0 : o.Foo) === null || _o$Foo2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_o$Foo2, Foo, _m).call(_o$Foo2).toString;
|
||||||
|
(_o$Foo3 = o === null || o === void 0 ? void 0 : o.Foo) === null || _o$Foo3 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_o$Foo3, Foo, _m).call(_o$Foo3).toString();
|
||||||
|
(_deep$very$o$Foo = deep === null || deep === void 0 ? void 0 : (_deep$very$o = deep.very.o) === null || _deep$very$o === void 0 ? void 0 : _deep$very$o.Foo) === null || _deep$very$o$Foo === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_deep$very$o$Foo, Foo, _m).call(_deep$very$o$Foo);
|
||||||
|
(_deep$very$o$Foo2 = deep === null || deep === void 0 ? void 0 : (_deep$very$o2 = deep.very.o) === null || _deep$very$o2 === void 0 ? void 0 : _deep$very$o2.Foo) === null || _deep$very$o$Foo2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_deep$very$o$Foo2, Foo, _m).call(_deep$very$o$Foo2).toString;
|
||||||
|
(_deep$very$o$Foo3 = deep === null || deep === void 0 ? void 0 : (_deep$very$o3 = deep.very.o) === null || _deep$very$o3 === void 0 ? void 0 : _deep$very$o3.Foo) === null || _deep$very$o$Foo3 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_deep$very$o$Foo3, Foo, _m).call(_deep$very$o$Foo3).toString();
|
||||||
|
(_ref = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)) === null || _ref === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref, Foo, _m).call(_ref);
|
||||||
|
(_ref2 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self).self) === null || _ref2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref2, Foo, _m).call(_ref2);
|
||||||
|
(_self2 = (_ref7 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)) === null || _ref7 === void 0 ? void 0 : _ref7.self) === null || _self2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_self2, Foo, _m).call(_self2);
|
||||||
|
(_self3 = (_ref8 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self).self) === null || _ref8 === void 0 ? void 0 : _ref8.self) === null || _self3 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_self3, Foo, _m).call(_self3);
|
||||||
|
(_self$self = (_ref9 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)) === null || _ref9 === void 0 ? void 0 : (_ref9$self = _ref9.self) === null || _ref9$self === void 0 ? void 0 : _ref9$self.self) === null || _self$self === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_self$self, Foo, _m).call(_self$self);
|
||||||
|
(_ref3 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self).getSelf()) === null || _ref3 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref3, Foo, _m).call(_ref3);
|
||||||
|
(_call = (_ref10 = o === null || o === void 0 ? void 0 : (_classStaticPrivateFi = _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)).getSelf) === null || _ref10 === void 0 ? void 0 : _ref10.call(_classStaticPrivateFi)) === null || _call === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_call, Foo, _m).call(_call);
|
||||||
|
(_getSelf = (_ref11 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)) === null || _ref11 === void 0 ? void 0 : _ref11.getSelf()) === null || _getSelf === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf, Foo, _m).call(_getSelf);
|
||||||
|
(_getSelf2 = (_ref12 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)) === null || _ref12 === void 0 ? void 0 : (_ref12$getSelf = _ref12.getSelf) === null || _ref12$getSelf === void 0 ? void 0 : _ref12$getSelf.call(_ref12)) === null || _getSelf2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf2, Foo, _m).call(_getSelf2);
|
||||||
|
(_self4 = (_ref13 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self).getSelf()) === null || _ref13 === void 0 ? void 0 : _ref13.self) === null || _self4 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_self4, Foo, _m).call(_self4);
|
||||||
|
(_call$self = (_ref14 = o === null || o === void 0 ? void 0 : (_classStaticPrivateFi2 = _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)).getSelf) === null || _ref14 === void 0 ? void 0 : (_ref14$call = _ref14.call(_classStaticPrivateFi2)) === null || _ref14$call === void 0 ? void 0 : _ref14$call.self) === null || _call$self === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_call$self, Foo, _m).call(_call$self);
|
||||||
|
(_getSelf$self = (_ref15 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)) === null || _ref15 === void 0 ? void 0 : (_ref15$getSelf = _ref15.getSelf()) === null || _ref15$getSelf === void 0 ? void 0 : _ref15$getSelf.self) === null || _getSelf$self === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf$self, Foo, _m).call(_getSelf$self);
|
||||||
|
(_getSelf$self2 = (_ref16 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)) === null || _ref16 === void 0 ? void 0 : (_ref16$getSelf = _ref16.getSelf) === null || _ref16$getSelf === void 0 ? void 0 : (_ref16$getSelf$call = _ref16$getSelf.call(_ref16)) === null || _ref16$getSelf$call === void 0 ? void 0 : _ref16$getSelf$call.self) === null || _getSelf$self2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf$self2, Foo, _m).call(_getSelf$self2);
|
||||||
|
(_fn$Foo = fn === null || fn === void 0 ? void 0 : fn().Foo) === null || _fn$Foo === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_fn$Foo, Foo, _m).call(_fn$Foo);
|
||||||
|
(_fn$Foo2 = fn === null || fn === void 0 ? void 0 : fn().Foo) === null || _fn$Foo2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_fn$Foo2, Foo, _m).call(_fn$Foo2).toString;
|
||||||
|
(_fn$Foo3 = fn === null || fn === void 0 ? void 0 : fn().Foo) === null || _fn$Foo3 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_fn$Foo3, Foo, _m).call(_fn$Foo3).toString();
|
||||||
|
(_fnDeep$very$o$Foo = fnDeep === null || fnDeep === void 0 ? void 0 : (_fnDeep$very$o = fnDeep().very.o) === null || _fnDeep$very$o === void 0 ? void 0 : _fnDeep$very$o.Foo) === null || _fnDeep$very$o$Foo === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_fnDeep$very$o$Foo, Foo, _m).call(_fnDeep$very$o$Foo);
|
||||||
|
(_fnDeep$very$o$Foo2 = fnDeep === null || fnDeep === void 0 ? void 0 : (_fnDeep$very$o2 = fnDeep().very.o) === null || _fnDeep$very$o2 === void 0 ? void 0 : _fnDeep$very$o2.Foo) === null || _fnDeep$very$o$Foo2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_fnDeep$very$o$Foo2, Foo, _m).call(_fnDeep$very$o$Foo2).toString;
|
||||||
|
(_fnDeep$very$o$Foo3 = fnDeep === null || fnDeep === void 0 ? void 0 : (_fnDeep$very$o3 = fnDeep().very.o) === null || _fnDeep$very$o3 === void 0 ? void 0 : _fnDeep$very$o3.Foo) === null || _fnDeep$very$o$Foo3 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_fnDeep$very$o$Foo3, Foo, _m).call(_fnDeep$very$o$Foo3).toString();
|
||||||
|
(_ref4 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)) === null || _ref4 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref4, Foo, _m).call(_ref4);
|
||||||
|
(_ref5 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self).self) === null || _ref5 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref5, Foo, _m).call(_ref5);
|
||||||
|
(_self5 = (_ref17 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)) === null || _ref17 === void 0 ? void 0 : _ref17.self) === null || _self5 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_self5, Foo, _m).call(_self5);
|
||||||
|
(_self6 = (_ref18 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self).self) === null || _ref18 === void 0 ? void 0 : _ref18.self) === null || _self6 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_self6, Foo, _m).call(_self6);
|
||||||
|
(_self$self2 = (_ref19 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)) === null || _ref19 === void 0 ? void 0 : (_ref19$self = _ref19.self) === null || _ref19$self === void 0 ? void 0 : _ref19$self.self) === null || _self$self2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_self$self2, Foo, _m).call(_self$self2);
|
||||||
|
(_ref6 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self).getSelf()) === null || _ref6 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref6, Foo, _m).call(_ref6);
|
||||||
|
(_call2 = (_ref20 = fn === null || fn === void 0 ? void 0 : (_classStaticPrivateFi3 = _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)).getSelf) === null || _ref20 === void 0 ? void 0 : _ref20.call(_classStaticPrivateFi3)) === null || _call2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_call2, Foo, _m).call(_call2);
|
||||||
|
(_getSelf3 = (_ref21 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)) === null || _ref21 === void 0 ? void 0 : _ref21.getSelf()) === null || _getSelf3 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf3, Foo, _m).call(_getSelf3);
|
||||||
|
(_getSelf4 = (_ref22 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)) === null || _ref22 === void 0 ? void 0 : (_ref22$getSelf = _ref22.getSelf) === null || _ref22$getSelf === void 0 ? void 0 : _ref22$getSelf.call(_ref22)) === null || _getSelf4 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf4, Foo, _m).call(_getSelf4);
|
||||||
|
(_self7 = (_ref23 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self).getSelf()) === null || _ref23 === void 0 ? void 0 : _ref23.self) === null || _self7 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_self7, Foo, _m).call(_self7);
|
||||||
|
(_call$self2 = (_ref24 = fn === null || fn === void 0 ? void 0 : (_classStaticPrivateFi4 = _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)).getSelf) === null || _ref24 === void 0 ? void 0 : (_ref24$call = _ref24.call(_classStaticPrivateFi4)) === null || _ref24$call === void 0 ? void 0 : _ref24$call.self) === null || _call$self2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_call$self2, Foo, _m).call(_call$self2);
|
||||||
|
(_getSelf$self3 = (_ref25 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)) === null || _ref25 === void 0 ? void 0 : (_ref25$getSelf = _ref25.getSelf()) === null || _ref25$getSelf === void 0 ? void 0 : _ref25$getSelf.self) === null || _getSelf$self3 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf$self3, Foo, _m).call(_getSelf$self3);
|
||||||
|
(_getSelf$self4 = (_ref26 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)) === null || _ref26 === void 0 ? void 0 : (_ref26$getSelf = _ref26.getSelf) === null || _ref26$getSelf === void 0 ? void 0 : (_ref26$getSelf$call = _ref26$getSelf.call(_ref26)) === null || _ref26$getSelf$call === void 0 ? void 0 : _ref26$getSelf$call.self) === null || _getSelf$self4 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf$self4, Foo, _m).call(_getSelf$self4);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
var _x = {
|
||||||
|
writable: true,
|
||||||
|
value: 1
|
||||||
|
};
|
||||||
|
var _m = {
|
||||||
|
writable: true,
|
||||||
|
value: function () {
|
||||||
|
return _classStaticPrivateFieldSpecGet(this, Foo, _x);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var _self = {
|
||||||
|
writable: true,
|
||||||
|
value: Foo
|
||||||
|
};
|
||||||
|
|
||||||
|
_defineProperty(Foo, "self", Foo);
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
@ -0,0 +1,126 @@
|
|||||||
|
class Foo {
|
||||||
|
static #x = 1;
|
||||||
|
static #m = function() { return this.#x; };
|
||||||
|
static #self = Foo;
|
||||||
|
static self = Foo;
|
||||||
|
static getSelf() { return this }
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
const o = { Foo: Foo };
|
||||||
|
const deep = { very: { o } };
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(Foo?.#m()).toEqual(1);
|
||||||
|
expect(Foo?.#m().toString).toEqual(1..toString);
|
||||||
|
expect(Foo?.#m().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(o?.Foo?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo?.#m().toString).toEqual(1..toString);
|
||||||
|
expect(o?.Foo?.#m().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(deep?.very.o?.Foo?.#m()).toEqual(1);
|
||||||
|
expect(deep?.very.o?.Foo?.#m().toString).toEqual(1..toString);
|
||||||
|
expect(deep?.very.o?.Foo?.#m().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(o?.Foo.#self?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.self?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.self?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.self?.self?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.self?.self?.#m()).toEqual(1);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.getSelf()?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf()?.self?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.self?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.self?.#m()).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.self?.#m()).toEqual(1);
|
||||||
|
|
||||||
|
expect(fn?.().Foo?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo?.#m().toString).toEqual(1..toString);
|
||||||
|
expect(fn?.().Foo?.#m().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#m()).toEqual(1);
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#m().toString).toEqual(1..toString);
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#m().toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.self?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.self?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.self?.self?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.self?.self?.#m()).toEqual(1);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.self?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.self?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.self?.#m()).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.self?.#m()).toEqual(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static testNull() {
|
||||||
|
const o = null;;
|
||||||
|
const deep = { very: { o } };
|
||||||
|
const fn = null;
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(o?.Foo?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo?.#m().toString).toEqual(undefined);
|
||||||
|
expect(o?.Foo?.#m().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(deep?.very.o?.Foo?.#m()).toEqual(undefined);
|
||||||
|
expect(deep?.very.o?.Foo?.#m().toString).toEqual(undefined);
|
||||||
|
expect(deep?.very.o?.Foo?.#m().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.self?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.self?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.self?.self?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.self?.self?.#m()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.getSelf()?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf()?.self?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.self?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.self?.#m()).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.self?.#m()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo?.#m().toString).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo?.#m().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#m()).toEqual(undefined);
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#m().toString).toEqual(undefined);
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#m().toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.self?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.self?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.self?.self?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.self?.self?.#m()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.self?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.self?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.self?.#m()).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.self?.#m()).toEqual(undefined);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
|
Foo.testNull();
|
||||||
@ -0,0 +1,70 @@
|
|||||||
|
class Foo {
|
||||||
|
static #x = 1;
|
||||||
|
static #m = function() { return this.#x; };
|
||||||
|
static #self = Foo;
|
||||||
|
static self = Foo;
|
||||||
|
static getSelf() { return this }
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
const o = { Foo: Foo };
|
||||||
|
const deep = { very: { o } };
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo?.#m();
|
||||||
|
Foo?.#m().toString;
|
||||||
|
Foo?.#m().toString();
|
||||||
|
|
||||||
|
o?.Foo.#m();
|
||||||
|
o?.Foo.#m().toString;
|
||||||
|
o?.Foo.#m().toString();
|
||||||
|
|
||||||
|
deep?.very.o?.Foo.#m();
|
||||||
|
deep?.very.o?.Foo.#m().toString;
|
||||||
|
deep?.very.o?.Foo.#m().toString();
|
||||||
|
|
||||||
|
o?.Foo.#self.#m();
|
||||||
|
o?.Foo.#self.self.#m();
|
||||||
|
o?.Foo.#self?.self.#m();
|
||||||
|
o?.Foo.#self.self?.self.#m();
|
||||||
|
o?.Foo.#self?.self?.self.#m();
|
||||||
|
|
||||||
|
o?.Foo.#self.getSelf().#m();
|
||||||
|
o?.Foo.#self.getSelf?.().#m();
|
||||||
|
o?.Foo.#self?.getSelf().#m();
|
||||||
|
o?.Foo.#self?.getSelf?.().#m();
|
||||||
|
o?.Foo.#self.getSelf()?.self.#m();
|
||||||
|
o?.Foo.#self.getSelf?.()?.self.#m();
|
||||||
|
o?.Foo.#self?.getSelf()?.self.#m();
|
||||||
|
o?.Foo.#self?.getSelf?.()?.self.#m();
|
||||||
|
|
||||||
|
fn?.().Foo.#m();
|
||||||
|
fn?.().Foo.#m().toString;
|
||||||
|
fn?.().Foo.#m().toString();
|
||||||
|
|
||||||
|
fnDeep?.().very.o?.Foo.#m();
|
||||||
|
fnDeep?.().very.o?.Foo.#m().toString;
|
||||||
|
fnDeep?.().very.o?.Foo.#m().toString();
|
||||||
|
|
||||||
|
fn?.().Foo.#self.#m();
|
||||||
|
fn?.().Foo.#self.self.#m();
|
||||||
|
fn?.().Foo.#self?.self.#m();
|
||||||
|
fn?.().Foo.#self.self?.self.#m();
|
||||||
|
fn?.().Foo.#self?.self?.self.#m();
|
||||||
|
|
||||||
|
fn?.().Foo.#self.getSelf().#m();
|
||||||
|
fn?.().Foo.#self.getSelf?.().#m();
|
||||||
|
fn?.().Foo.#self?.getSelf().#m();
|
||||||
|
fn?.().Foo.#self?.getSelf?.().#m();
|
||||||
|
fn?.().Foo.#self.getSelf()?.self.#m();
|
||||||
|
fn?.().Foo.#self.getSelf?.()?.self.#m();
|
||||||
|
fn?.().Foo.#self?.getSelf()?.self.#m();
|
||||||
|
fn?.().Foo.#self?.getSelf?.()?.self.#m();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"plugins": ["proposal-class-properties"],
|
||||||
|
"minNodeVersion": "14.0.0"
|
||||||
|
}
|
||||||
@ -0,0 +1,92 @@
|
|||||||
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||||
|
|
||||||
|
function _classStaticPrivateFieldSpecGet(receiver, classConstructor, descriptor) { if (receiver !== classConstructor) { throw new TypeError("Private static access of wrong provenance"); } if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
|
||||||
|
|
||||||
|
class Foo {
|
||||||
|
static getSelf() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
var _o$Foo, _o$Foo2, _o$Foo3, _deep$very$o, _deep$very$o$Foo, _deep$very$o2, _deep$very$o2$Foo, _deep$very$o3, _deep$very$o3$Foo, _classStaticPrivateFi, _classStaticPrivateFi2, _ref, _ref$self, _ref2, _ref2$self, _self2, _self2$self, _classStaticPrivateFi3, _classStaticPrivateFi4, _ref3, _ref3$call, _ref4, _ref4$getSelf, _getSelf, _ref5, _getSelf$call, _ref6, _ref6$self, _classStaticPrivateFi5, _call, _call$self, _getSelf2, _getSelf2$self, _getSelf3, _getSelf3$self, _fn$Foo, _fn$Foo2, _fn$Foo3, _fnDeep$very$o, _fnDeep$very$o$Foo, _fnDeep$very$o2, _fnDeep$very$o2$Foo, _fnDeep$very$o3, _fnDeep$very$o3$Foo, _classStaticPrivateFi6, _classStaticPrivateFi7, _ref7, _ref7$self, _ref8, _ref8$self, _self3, _self3$self, _classStaticPrivateFi8, _classStaticPrivateFi9, _ref9, _ref9$call, _ref10, _ref10$getSelf, _getSelf4, _ref11, _getSelf4$call, _ref12, _ref12$self, _classStaticPrivateFi10, _call2, _call2$self, _getSelf5, _getSelf5$self, _getSelf6, _getSelf6$self;
|
||||||
|
|
||||||
|
const o = {
|
||||||
|
Foo: Foo
|
||||||
|
};
|
||||||
|
const deep = {
|
||||||
|
very: {
|
||||||
|
o
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo === null || Foo === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(Foo, Foo, _m).call(Foo);
|
||||||
|
Foo === null || Foo === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(Foo, Foo, _m).call(Foo).toString;
|
||||||
|
Foo === null || Foo === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(Foo, Foo, _m).call(Foo).toString();
|
||||||
|
o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_o$Foo = o.Foo, Foo, _m).call(_o$Foo);
|
||||||
|
o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_o$Foo2 = o.Foo, Foo, _m).call(_o$Foo2).toString;
|
||||||
|
o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_o$Foo3 = o.Foo, Foo, _m).call(_o$Foo3).toString();
|
||||||
|
(_deep$very$o = deep?.very.o) === null || _deep$very$o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_deep$very$o$Foo = _deep$very$o.Foo, Foo, _m).call(_deep$very$o$Foo);
|
||||||
|
(_deep$very$o2 = deep?.very.o) === null || _deep$very$o2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_deep$very$o2$Foo = _deep$very$o2.Foo, Foo, _m).call(_deep$very$o2$Foo).toString;
|
||||||
|
(_deep$very$o3 = deep?.very.o) === null || _deep$very$o3 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_deep$very$o3$Foo = _deep$very$o3.Foo, Foo, _m).call(_deep$very$o3$Foo).toString();
|
||||||
|
o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_classStaticPrivateFi = _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self), Foo, _m).call(_classStaticPrivateFi);
|
||||||
|
o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_classStaticPrivateFi2 = _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self).self, Foo, _m).call(_classStaticPrivateFi2);
|
||||||
|
(_ref = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)) === null || _ref === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref$self = _ref.self, Foo, _m).call(_ref$self);
|
||||||
|
(_ref2 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self).self) === null || _ref2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref2$self = _ref2.self, Foo, _m).call(_ref2$self);
|
||||||
|
(_self2 = (o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self))?.self) === null || _self2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_self2$self = _self2.self, Foo, _m).call(_self2$self);
|
||||||
|
o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_classStaticPrivateFi3 = _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self).getSelf(), Foo, _m).call(_classStaticPrivateFi3);
|
||||||
|
(_ref3 = o === null || o === void 0 ? void 0 : (_classStaticPrivateFi4 = _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)).getSelf) === null || _ref3 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref3$call = _ref3.call(_classStaticPrivateFi4), Foo, _m).call(_ref3$call);
|
||||||
|
(_ref4 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)) === null || _ref4 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref4$getSelf = _ref4.getSelf(), Foo, _m).call(_ref4$getSelf);
|
||||||
|
(_getSelf = (_ref5 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self))?.getSelf) === null || _getSelf === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf$call = _getSelf.call(_ref5), Foo, _m).call(_getSelf$call);
|
||||||
|
(_ref6 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self).getSelf()) === null || _ref6 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref6$self = _ref6.self, Foo, _m).call(_ref6$self);
|
||||||
|
(_call = (o === null || o === void 0 ? void 0 : (_classStaticPrivateFi5 = _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)).getSelf)?.call(_classStaticPrivateFi5)) === null || _call === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_call$self = _call.self, Foo, _m).call(_call$self);
|
||||||
|
(_getSelf2 = (o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self))?.getSelf()) === null || _getSelf2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf2$self = _getSelf2.self, Foo, _m).call(_getSelf2$self);
|
||||||
|
(_getSelf3 = (o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self))?.getSelf?.()) === null || _getSelf3 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf3$self = _getSelf3.self, Foo, _m).call(_getSelf3$self);
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_fn$Foo = fn().Foo, Foo, _m).call(_fn$Foo);
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_fn$Foo2 = fn().Foo, Foo, _m).call(_fn$Foo2).toString;
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_fn$Foo3 = fn().Foo, Foo, _m).call(_fn$Foo3).toString();
|
||||||
|
(_fnDeep$very$o = fnDeep?.().very.o) === null || _fnDeep$very$o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_fnDeep$very$o$Foo = _fnDeep$very$o.Foo, Foo, _m).call(_fnDeep$very$o$Foo);
|
||||||
|
(_fnDeep$very$o2 = fnDeep?.().very.o) === null || _fnDeep$very$o2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_fnDeep$very$o2$Foo = _fnDeep$very$o2.Foo, Foo, _m).call(_fnDeep$very$o2$Foo).toString;
|
||||||
|
(_fnDeep$very$o3 = fnDeep?.().very.o) === null || _fnDeep$very$o3 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_fnDeep$very$o3$Foo = _fnDeep$very$o3.Foo, Foo, _m).call(_fnDeep$very$o3$Foo).toString();
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_classStaticPrivateFi6 = _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self), Foo, _m).call(_classStaticPrivateFi6);
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_classStaticPrivateFi7 = _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self).self, Foo, _m).call(_classStaticPrivateFi7);
|
||||||
|
(_ref7 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)) === null || _ref7 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref7$self = _ref7.self, Foo, _m).call(_ref7$self);
|
||||||
|
(_ref8 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self).self) === null || _ref8 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref8$self = _ref8.self, Foo, _m).call(_ref8$self);
|
||||||
|
(_self3 = (fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self))?.self) === null || _self3 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_self3$self = _self3.self, Foo, _m).call(_self3$self);
|
||||||
|
fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_classStaticPrivateFi8 = _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self).getSelf(), Foo, _m).call(_classStaticPrivateFi8);
|
||||||
|
(_ref9 = fn === null || fn === void 0 ? void 0 : (_classStaticPrivateFi9 = _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)).getSelf) === null || _ref9 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref9$call = _ref9.call(_classStaticPrivateFi9), Foo, _m).call(_ref9$call);
|
||||||
|
(_ref10 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)) === null || _ref10 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref10$getSelf = _ref10.getSelf(), Foo, _m).call(_ref10$getSelf);
|
||||||
|
(_getSelf4 = (_ref11 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self))?.getSelf) === null || _getSelf4 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf4$call = _getSelf4.call(_ref11), Foo, _m).call(_getSelf4$call);
|
||||||
|
(_ref12 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self).getSelf()) === null || _ref12 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref12$self = _ref12.self, Foo, _m).call(_ref12$self);
|
||||||
|
(_call2 = (fn === null || fn === void 0 ? void 0 : (_classStaticPrivateFi10 = _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)).getSelf)?.call(_classStaticPrivateFi10)) === null || _call2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_call2$self = _call2.self, Foo, _m).call(_call2$self);
|
||||||
|
(_getSelf5 = (fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self))?.getSelf()) === null || _getSelf5 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf5$self = _getSelf5.self, Foo, _m).call(_getSelf5$self);
|
||||||
|
(_getSelf6 = (fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self))?.getSelf?.()) === null || _getSelf6 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf6$self = _getSelf6.self, Foo, _m).call(_getSelf6$self);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
var _x = {
|
||||||
|
writable: true,
|
||||||
|
value: 1
|
||||||
|
};
|
||||||
|
var _m = {
|
||||||
|
writable: true,
|
||||||
|
value: function () {
|
||||||
|
return _classStaticPrivateFieldSpecGet(this, Foo, _x);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var _self = {
|
||||||
|
writable: true,
|
||||||
|
value: Foo
|
||||||
|
};
|
||||||
|
|
||||||
|
_defineProperty(Foo, "self", Foo);
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
@ -0,0 +1,125 @@
|
|||||||
|
class Foo {
|
||||||
|
static #x = 1;
|
||||||
|
static #self = Foo;
|
||||||
|
static self = Foo;
|
||||||
|
static getSelf() { return this }
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
const o = { Foo: Foo };
|
||||||
|
const deep = { very: { o } };
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(Foo?.#x).toEqual(1);
|
||||||
|
expect(Foo?.#x.toString).toEqual(1..toString);
|
||||||
|
expect(Foo?.#x.toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(o?.Foo?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo?.#x.toString).toEqual(1..toString);
|
||||||
|
expect(o?.Foo?.#x.toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(deep?.very.o?.Foo?.#x).toEqual(1);
|
||||||
|
expect(deep?.very.o?.Foo?.#x.toString).toEqual(1..toString);
|
||||||
|
expect(deep?.very.o?.Foo?.#x.toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(o?.Foo.#self?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.self?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.self?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.self?.self?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.self?.self?.#x).toEqual(1);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.getSelf()?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf()?.self?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.self?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.self?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.self?.#x).toEqual(1);
|
||||||
|
|
||||||
|
expect(fn?.().Foo?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo?.#x.toString).toEqual(1..toString);
|
||||||
|
expect(fn?.().Foo?.#x.toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#x).toEqual(1);
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#x.toString).toEqual(1..toString);
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#x.toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.self?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.self?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.self?.self?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.self?.self?.#x).toEqual(1);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.self?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.self?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.self?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.self?.#x).toEqual(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static testNull() {
|
||||||
|
const o = null;;
|
||||||
|
const deep = { very: { o } };
|
||||||
|
const fn = null;
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(o?.Foo?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo?.#x.toString).toEqual(undefined);
|
||||||
|
expect(o?.Foo?.#x.toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(deep?.very.o?.Foo?.#x).toEqual(undefined);
|
||||||
|
expect(deep?.very.o?.Foo?.#x.toString).toEqual(undefined);
|
||||||
|
expect(deep?.very.o?.Foo?.#x.toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.self?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.self?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.self?.self?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.self?.self?.#x).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.getSelf()?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf()?.self?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.self?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.self?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.self?.#x).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo?.#x.toString).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo?.#x.toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#x).toEqual(undefined);
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#x.toString).toEqual(undefined);
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#x.toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.self?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.self?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.self?.self?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.self?.self?.#x).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.self?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.self?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.self?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.self?.#x).toEqual(undefined);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
|
Foo.testNull();
|
||||||
@ -0,0 +1,69 @@
|
|||||||
|
class Foo {
|
||||||
|
static #x = 1;
|
||||||
|
static #self = Foo;
|
||||||
|
static self = Foo;
|
||||||
|
static getSelf() { return this }
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
const o = { Foo: Foo };
|
||||||
|
const deep = { very: { o } };
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo?.#x;
|
||||||
|
Foo?.#x.toString;
|
||||||
|
Foo?.#x.toString();
|
||||||
|
|
||||||
|
o?.Foo?.#x;
|
||||||
|
o?.Foo?.#x.toString;
|
||||||
|
o?.Foo?.#x.toString();
|
||||||
|
|
||||||
|
deep?.very.o?.Foo?.#x;
|
||||||
|
deep?.very.o?.Foo?.#x.toString;
|
||||||
|
deep?.very.o?.Foo?.#x.toString();
|
||||||
|
|
||||||
|
o?.Foo.#self?.#x;
|
||||||
|
o?.Foo.#self.self?.#x;
|
||||||
|
o?.Foo.#self?.self?.#x;
|
||||||
|
o?.Foo.#self.self?.self?.#x;
|
||||||
|
o?.Foo.#self?.self?.self?.#x;
|
||||||
|
|
||||||
|
o?.Foo.#self.getSelf()?.#x;
|
||||||
|
o?.Foo.#self.getSelf?.()?.#x;
|
||||||
|
o?.Foo.#self?.getSelf()?.#x;
|
||||||
|
o?.Foo.#self?.getSelf?.()?.#x;
|
||||||
|
o?.Foo.#self.getSelf()?.self?.#x;
|
||||||
|
o?.Foo.#self.getSelf?.()?.self?.#x;
|
||||||
|
o?.Foo.#self?.getSelf()?.self?.#x;
|
||||||
|
o?.Foo.#self?.getSelf?.()?.self?.#x;
|
||||||
|
|
||||||
|
fn?.().Foo?.#x;
|
||||||
|
fn?.().Foo?.#x.toString;
|
||||||
|
fn?.().Foo?.#x.toString();
|
||||||
|
|
||||||
|
fnDeep?.().very.o?.Foo?.#x;
|
||||||
|
fnDeep?.().very.o?.Foo?.#x.toString;
|
||||||
|
fnDeep?.().very.o?.Foo?.#x.toString();
|
||||||
|
|
||||||
|
fn?.().Foo.#self?.#x;
|
||||||
|
fn?.().Foo.#self.self?.#x;
|
||||||
|
fn?.().Foo.#self?.self?.#x;
|
||||||
|
fn?.().Foo.#self.self?.self?.#x;
|
||||||
|
fn?.().Foo.#self?.self?.self?.#x;
|
||||||
|
|
||||||
|
fn?.().Foo.#self.getSelf()?.#x;
|
||||||
|
fn?.().Foo.#self.getSelf?.()?.#x;
|
||||||
|
fn?.().Foo.#self?.getSelf()?.#x;
|
||||||
|
fn?.().Foo.#self?.getSelf?.()?.#x;
|
||||||
|
fn?.().Foo.#self.getSelf()?.self?.#x;
|
||||||
|
fn?.().Foo.#self.getSelf?.()?.self?.#x;
|
||||||
|
fn?.().Foo.#self?.getSelf()?.self?.#x;
|
||||||
|
fn?.().Foo.#self?.getSelf?.()?.self?.#x;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"plugins": ["proposal-optional-chaining", "proposal-class-properties"]
|
||||||
|
}
|
||||||
@ -0,0 +1,86 @@
|
|||||||
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||||
|
|
||||||
|
function _classStaticPrivateFieldSpecGet(receiver, classConstructor, descriptor) { if (receiver !== classConstructor) { throw new TypeError("Private static access of wrong provenance"); } if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }
|
||||||
|
|
||||||
|
class Foo {
|
||||||
|
static getSelf() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
var _o$Foo, _o$Foo2, _o$Foo3, _deep$very$o$Foo, _deep$very$o$Foo2, _deep$very$o$Foo3, _ref, _ref2, _self2, _self3, _self$self, _ref3, _classStaticPrivateFi, _call, _getSelf, _getSelf2, _self4, _classStaticPrivateFi2, _call$self, _getSelf$self, _getSelf$self2, _fn$Foo, _fn$Foo2, _fn$Foo3, _fnDeep$very$o$Foo, _fnDeep$very$o$Foo2, _fnDeep$very$o$Foo3, _ref4, _ref5, _self5, _self6, _self$self2, _ref6, _classStaticPrivateFi3, _call2, _getSelf3, _getSelf4, _self7, _classStaticPrivateFi4, _call$self2, _getSelf$self3, _getSelf$self4, _deep$very$o, _deep$very$o2, _deep$very$o3, _ref7, _ref8, _ref9, _ref9$self, _ref10, _ref11, _ref12, _ref12$getSelf, _ref13, _ref14, _ref14$call, _ref15, _ref15$getSelf, _ref16, _ref16$getSelf, _ref16$getSelf$call, _fnDeep$very$o, _fnDeep$very$o2, _fnDeep$very$o3, _ref17, _ref18, _ref19, _ref19$self, _ref20, _ref21, _ref22, _ref22$getSelf, _ref23, _ref24, _ref24$call, _ref25, _ref25$getSelf, _ref26, _ref26$getSelf, _ref26$getSelf$call;
|
||||||
|
|
||||||
|
const o = {
|
||||||
|
Foo: Foo
|
||||||
|
};
|
||||||
|
const deep = {
|
||||||
|
very: {
|
||||||
|
o
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo === null || Foo === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(Foo, Foo, _x);
|
||||||
|
Foo === null || Foo === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(Foo, Foo, _x).toString;
|
||||||
|
Foo === null || Foo === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(Foo, Foo, _x).toString();
|
||||||
|
(_o$Foo = o === null || o === void 0 ? void 0 : o.Foo) === null || _o$Foo === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_o$Foo, Foo, _x);
|
||||||
|
(_o$Foo2 = o === null || o === void 0 ? void 0 : o.Foo) === null || _o$Foo2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_o$Foo2, Foo, _x).toString;
|
||||||
|
(_o$Foo3 = o === null || o === void 0 ? void 0 : o.Foo) === null || _o$Foo3 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_o$Foo3, Foo, _x).toString();
|
||||||
|
(_deep$very$o$Foo = deep === null || deep === void 0 ? void 0 : (_deep$very$o = deep.very.o) === null || _deep$very$o === void 0 ? void 0 : _deep$very$o.Foo) === null || _deep$very$o$Foo === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_deep$very$o$Foo, Foo, _x);
|
||||||
|
(_deep$very$o$Foo2 = deep === null || deep === void 0 ? void 0 : (_deep$very$o2 = deep.very.o) === null || _deep$very$o2 === void 0 ? void 0 : _deep$very$o2.Foo) === null || _deep$very$o$Foo2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_deep$very$o$Foo2, Foo, _x).toString;
|
||||||
|
(_deep$very$o$Foo3 = deep === null || deep === void 0 ? void 0 : (_deep$very$o3 = deep.very.o) === null || _deep$very$o3 === void 0 ? void 0 : _deep$very$o3.Foo) === null || _deep$very$o$Foo3 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_deep$very$o$Foo3, Foo, _x).toString();
|
||||||
|
(_ref = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)) === null || _ref === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref, Foo, _x);
|
||||||
|
(_ref2 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self).self) === null || _ref2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref2, Foo, _x);
|
||||||
|
(_self2 = (_ref7 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)) === null || _ref7 === void 0 ? void 0 : _ref7.self) === null || _self2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_self2, Foo, _x);
|
||||||
|
(_self3 = (_ref8 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self).self) === null || _ref8 === void 0 ? void 0 : _ref8.self) === null || _self3 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_self3, Foo, _x);
|
||||||
|
(_self$self = (_ref9 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)) === null || _ref9 === void 0 ? void 0 : (_ref9$self = _ref9.self) === null || _ref9$self === void 0 ? void 0 : _ref9$self.self) === null || _self$self === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_self$self, Foo, _x);
|
||||||
|
(_ref3 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self).getSelf()) === null || _ref3 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref3, Foo, _x);
|
||||||
|
(_call = (_ref10 = o === null || o === void 0 ? void 0 : (_classStaticPrivateFi = _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)).getSelf) === null || _ref10 === void 0 ? void 0 : _ref10.call(_classStaticPrivateFi)) === null || _call === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_call, Foo, _x);
|
||||||
|
(_getSelf = (_ref11 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)) === null || _ref11 === void 0 ? void 0 : _ref11.getSelf()) === null || _getSelf === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf, Foo, _x);
|
||||||
|
(_getSelf2 = (_ref12 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)) === null || _ref12 === void 0 ? void 0 : (_ref12$getSelf = _ref12.getSelf) === null || _ref12$getSelf === void 0 ? void 0 : _ref12$getSelf.call(_ref12)) === null || _getSelf2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf2, Foo, _x);
|
||||||
|
(_self4 = (_ref13 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self).getSelf()) === null || _ref13 === void 0 ? void 0 : _ref13.self) === null || _self4 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_self4, Foo, _x);
|
||||||
|
(_call$self = (_ref14 = o === null || o === void 0 ? void 0 : (_classStaticPrivateFi2 = _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)).getSelf) === null || _ref14 === void 0 ? void 0 : (_ref14$call = _ref14.call(_classStaticPrivateFi2)) === null || _ref14$call === void 0 ? void 0 : _ref14$call.self) === null || _call$self === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_call$self, Foo, _x);
|
||||||
|
(_getSelf$self = (_ref15 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)) === null || _ref15 === void 0 ? void 0 : (_ref15$getSelf = _ref15.getSelf()) === null || _ref15$getSelf === void 0 ? void 0 : _ref15$getSelf.self) === null || _getSelf$self === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf$self, Foo, _x);
|
||||||
|
(_getSelf$self2 = (_ref16 = o === null || o === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(o.Foo, Foo, _self)) === null || _ref16 === void 0 ? void 0 : (_ref16$getSelf = _ref16.getSelf) === null || _ref16$getSelf === void 0 ? void 0 : (_ref16$getSelf$call = _ref16$getSelf.call(_ref16)) === null || _ref16$getSelf$call === void 0 ? void 0 : _ref16$getSelf$call.self) === null || _getSelf$self2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf$self2, Foo, _x);
|
||||||
|
(_fn$Foo = fn === null || fn === void 0 ? void 0 : fn().Foo) === null || _fn$Foo === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_fn$Foo, Foo, _x);
|
||||||
|
(_fn$Foo2 = fn === null || fn === void 0 ? void 0 : fn().Foo) === null || _fn$Foo2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_fn$Foo2, Foo, _x).toString;
|
||||||
|
(_fn$Foo3 = fn === null || fn === void 0 ? void 0 : fn().Foo) === null || _fn$Foo3 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_fn$Foo3, Foo, _x).toString();
|
||||||
|
(_fnDeep$very$o$Foo = fnDeep === null || fnDeep === void 0 ? void 0 : (_fnDeep$very$o = fnDeep().very.o) === null || _fnDeep$very$o === void 0 ? void 0 : _fnDeep$very$o.Foo) === null || _fnDeep$very$o$Foo === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_fnDeep$very$o$Foo, Foo, _x);
|
||||||
|
(_fnDeep$very$o$Foo2 = fnDeep === null || fnDeep === void 0 ? void 0 : (_fnDeep$very$o2 = fnDeep().very.o) === null || _fnDeep$very$o2 === void 0 ? void 0 : _fnDeep$very$o2.Foo) === null || _fnDeep$very$o$Foo2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_fnDeep$very$o$Foo2, Foo, _x).toString;
|
||||||
|
(_fnDeep$very$o$Foo3 = fnDeep === null || fnDeep === void 0 ? void 0 : (_fnDeep$very$o3 = fnDeep().very.o) === null || _fnDeep$very$o3 === void 0 ? void 0 : _fnDeep$very$o3.Foo) === null || _fnDeep$very$o$Foo3 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_fnDeep$very$o$Foo3, Foo, _x).toString();
|
||||||
|
(_ref4 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)) === null || _ref4 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref4, Foo, _x);
|
||||||
|
(_ref5 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self).self) === null || _ref5 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref5, Foo, _x);
|
||||||
|
(_self5 = (_ref17 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)) === null || _ref17 === void 0 ? void 0 : _ref17.self) === null || _self5 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_self5, Foo, _x);
|
||||||
|
(_self6 = (_ref18 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self).self) === null || _ref18 === void 0 ? void 0 : _ref18.self) === null || _self6 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_self6, Foo, _x);
|
||||||
|
(_self$self2 = (_ref19 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)) === null || _ref19 === void 0 ? void 0 : (_ref19$self = _ref19.self) === null || _ref19$self === void 0 ? void 0 : _ref19$self.self) === null || _self$self2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_self$self2, Foo, _x);
|
||||||
|
(_ref6 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self).getSelf()) === null || _ref6 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_ref6, Foo, _x);
|
||||||
|
(_call2 = (_ref20 = fn === null || fn === void 0 ? void 0 : (_classStaticPrivateFi3 = _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)).getSelf) === null || _ref20 === void 0 ? void 0 : _ref20.call(_classStaticPrivateFi3)) === null || _call2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_call2, Foo, _x);
|
||||||
|
(_getSelf3 = (_ref21 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)) === null || _ref21 === void 0 ? void 0 : _ref21.getSelf()) === null || _getSelf3 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf3, Foo, _x);
|
||||||
|
(_getSelf4 = (_ref22 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)) === null || _ref22 === void 0 ? void 0 : (_ref22$getSelf = _ref22.getSelf) === null || _ref22$getSelf === void 0 ? void 0 : _ref22$getSelf.call(_ref22)) === null || _getSelf4 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf4, Foo, _x);
|
||||||
|
(_self7 = (_ref23 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self).getSelf()) === null || _ref23 === void 0 ? void 0 : _ref23.self) === null || _self7 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_self7, Foo, _x);
|
||||||
|
(_call$self2 = (_ref24 = fn === null || fn === void 0 ? void 0 : (_classStaticPrivateFi4 = _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)).getSelf) === null || _ref24 === void 0 ? void 0 : (_ref24$call = _ref24.call(_classStaticPrivateFi4)) === null || _ref24$call === void 0 ? void 0 : _ref24$call.self) === null || _call$self2 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_call$self2, Foo, _x);
|
||||||
|
(_getSelf$self3 = (_ref25 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)) === null || _ref25 === void 0 ? void 0 : (_ref25$getSelf = _ref25.getSelf()) === null || _ref25$getSelf === void 0 ? void 0 : _ref25$getSelf.self) === null || _getSelf$self3 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf$self3, Foo, _x);
|
||||||
|
(_getSelf$self4 = (_ref26 = fn === null || fn === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(fn().Foo, Foo, _self)) === null || _ref26 === void 0 ? void 0 : (_ref26$getSelf = _ref26.getSelf) === null || _ref26$getSelf === void 0 ? void 0 : (_ref26$getSelf$call = _ref26$getSelf.call(_ref26)) === null || _ref26$getSelf$call === void 0 ? void 0 : _ref26$getSelf$call.self) === null || _getSelf$self4 === void 0 ? void 0 : _classStaticPrivateFieldSpecGet(_getSelf$self4, Foo, _x);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
var _x = {
|
||||||
|
writable: true,
|
||||||
|
value: 1
|
||||||
|
};
|
||||||
|
var _self = {
|
||||||
|
writable: true,
|
||||||
|
value: Foo
|
||||||
|
};
|
||||||
|
|
||||||
|
_defineProperty(Foo, "self", Foo);
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
@ -0,0 +1,125 @@
|
|||||||
|
class Foo {
|
||||||
|
static #x = 1;
|
||||||
|
static #self = Foo;
|
||||||
|
static self = Foo;
|
||||||
|
static getSelf() { return this }
|
||||||
|
|
||||||
|
static test() {
|
||||||
|
const o = { Foo: Foo };
|
||||||
|
const deep = { very: { o } };
|
||||||
|
function fn() {
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(Foo?.#x).toEqual(1);
|
||||||
|
expect(Foo?.#x.toString).toEqual(1..toString);
|
||||||
|
expect(Foo?.#x.toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(o?.Foo?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo?.#x.toString).toEqual(1..toString);
|
||||||
|
expect(o?.Foo?.#x.toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(deep?.very.o?.Foo?.#x).toEqual(1);
|
||||||
|
expect(deep?.very.o?.Foo?.#x.toString).toEqual(1..toString);
|
||||||
|
expect(deep?.very.o?.Foo?.#x.toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(o?.Foo.#self?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.self?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.self?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.self?.self?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.self?.self?.#x).toEqual(1);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.getSelf()?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf()?.self?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.self?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.self?.#x).toEqual(1);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.self?.#x).toEqual(1);
|
||||||
|
|
||||||
|
expect(fn?.().Foo?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo?.#x.toString).toEqual(1..toString);
|
||||||
|
expect(fn?.().Foo?.#x.toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#x).toEqual(1);
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#x.toString).toEqual(1..toString);
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#x.toString()).toEqual('1');
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.self?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.self?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.self?.self?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.self?.self?.#x).toEqual(1);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.self?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.self?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.self?.#x).toEqual(1);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.self?.#x).toEqual(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static testNull() {
|
||||||
|
const o = null;;
|
||||||
|
const deep = { very: { o } };
|
||||||
|
const fn = null;
|
||||||
|
function fnDeep() {
|
||||||
|
return deep;
|
||||||
|
}
|
||||||
|
|
||||||
|
expect(o?.Foo?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo?.#x.toString).toEqual(undefined);
|
||||||
|
expect(o?.Foo?.#x.toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(deep?.very.o?.Foo?.#x).toEqual(undefined);
|
||||||
|
expect(deep?.very.o?.Foo?.#x.toString).toEqual(undefined);
|
||||||
|
expect(deep?.very.o?.Foo?.#x.toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.self?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.self?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.self?.self?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.self?.self?.#x).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(o?.Foo.#self.getSelf()?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf()?.self?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self.getSelf?.()?.self?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf()?.self?.#x).toEqual(undefined);
|
||||||
|
expect(o?.Foo.#self?.getSelf?.()?.self?.#x).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo?.#x.toString).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo?.#x.toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#x).toEqual(undefined);
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#x.toString).toEqual(undefined);
|
||||||
|
expect(fnDeep?.().very.o?.Foo?.#x.toString()).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.self?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.self?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.self?.self?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.self?.self?.#x).toEqual(undefined);
|
||||||
|
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf()?.self?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self.getSelf?.()?.self?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf()?.self?.#x).toEqual(undefined);
|
||||||
|
expect(fn?.().Foo.#self?.getSelf?.()?.self?.#x).toEqual(undefined);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Foo.test();
|
||||||
|
Foo.testNull();
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user