Nicholas Clark wrote: > Where does the op for cmp go in this? > > $ perl -MO=Concise -e '@a = sort {$b cmp $a} @b' > > I see: > > c <@> leave[1 ref] vKP/REFC ->(end) > 1 <0> enter ->2 > 2 <;> nextstate(main 2 -e:1) v ->3 > b <2> aassign[t2] vKS ->c > - <1> ex-list lK ->8 > 3 <0> pushmark s ->4 > 7 <@> sort lK/DESC ->8 > 4 <0> pushmark s ->5 > 6 <1> rv2av[t3] lK/1 ->7 > 5 <$> gv(*b) s ->6 > - <1> ex-list lK ->b > 8 <0> pushmark s ->9 > a <1> rv2av[t1] lKRM*/1 ->b > 9 <$> gv(*a) s ->a > > > > I expected to see an ex-scmp in there. Is the cmp ever compiled to ops?
yes, but it's freed in S_simplify_sort, called by ck_sort during optree construction, i.e. before the peephole optimizer is called. Concise shows the DESC flag on the sort op that indicates this is a reverse sort.