fix(javascript): retain private receiver and iterative disposal effects

This commit is contained in:
morluto committed 2026-10-24 02:50:17 +08:00
1 parent 0211b65a81
commit 787726817c
5 files changed
+169 -36

No files matched your search

@@ -1,9 +1,19 @@
import * as t from "@babel/types";
/** Operands exposed to user-defined primitive conversion by language operations. */
export const semanticCoercionOperands = (node: t.Node): readonly t.Node[] => {
export const semanticCoercionOperands = (
node: t.Node,
isObject: (operand: t.Node) => boolean = () => false,
): readonly t.Node[] => {
if (t.isBinaryExpression(node)) {
if (["===", "!==", "instanceof"].includes(node.operator)) return [];
if (["===", "!=="].includes(node.operator)) return [];
if (node.operator === "instanceof") return [node.left, node.right];
if (
["==", "!="].includes(node.operator) &&
isObject(node.left) &&
isObject(node.right)
)
return [];
return node.operator === "in" ? [node.left] : [node.left, node.right];
}
if (t.isUnaryExpression(node) && ["+", "-", "~"].includes(node.operator))