}
if (parent instanceof AST_Binary) {
if (lazy_op[parent.operator] && parent.left !== node) {
- var grandparent = scanner.parent(level + 1);
- if (!(grandparent instanceof AST_Binary)) return node;
- if (grandparent.operator != parent.operator) return node;
+ do {
+ node = parent;
+ parent = scanner.parent(++level);
+ } while (parent instanceof AST_Binary && parent.operator == node.operator);
+ return node;
}
return find_stop_value(parent, level + 1);
}
"true 42 42",
]
}
+
+issue_3626_1: {
+ options = {
+ collapse_vars: true,
+ }
+ input: {
+ var a = "foo", b = 42;
+ a.p && (b = a) && a;
+ console.log(a, b);
+ }
+ expect: {
+ var a = "foo", b = 42;
+ a.p && (b = a) && a;
+ console.log(a, b);
+ }
+ expect_stdout: "foo 42"
+}
+
+issue_3626_2: {
+ options = {
+ collapse_vars: true,
+ conditionals: true,
+ }
+ input: {
+ var a = "foo", b = 42, c = null;
+ if (a && a.p)
+ if (b = a)
+ c++ + a;
+ console.log(a, b, c);
+ }
+ expect: {
+ var a = "foo", b = 42, c = null;
+ a && a.p && (b = a) && c++ + a;
+ console.log(a, b, c);
+ }
+ expect_stdout: "foo 42 null"
+}