- my $r = (name($op->first) eq 'and') ? ($self->inspect($op->first->first->sibling))[0]
- : ($self->inspect($op))[0];
+ my ($r2, $l2);
+ if (name($op->first) eq 'and') {
+ ($r2, $l2) = $self->inspect($op->first->first);
+ return $r2, $l2 if defined $r2 and zero $l2;
+ my $c = count $l2;
+ return { list => 1 }, undef if !$for and defined $r2;
+ my ($r3, $l3) = $self->inspect($op->first->first->sibling);
+ return { list => 1 }, undef if defined $r3 and defined $l3;
+ $r2 = add $r2, scale $c, $r3;
+ } else {
+ ($r2, $l2) = $self->inspect($op);
+ return { list => 1 }, undef if defined $r2 and defined $l2;
+ }
+
+ my $r = (defined $r1) ? add $r1, scale +(1 - count $r1), $r2
+ : $r2;