
package B::Count;
my $c;
use B qw(walkoptree_slow svref_2object main_root main_start);
use Data::Dumper;

sub compile {
  B::clearsym();
  return sub { walkoptree_slow(main_root, "terse") }
}

sub terse {
  my ($order, $cvref) = @_;
  print "Terse @_\n";
  my $cv = svref_2object($cvref);
  walkoptree_slow($cv->ROOT, "terse");
}

sub B::OP::terse {
#  print "OP Terse (@_)\n";
  my $self = shift;
  $count{$self->name}++;
#  print $self->name, "\n";
  $c++ if $self->name eq 'nextstate';
}

CHECK { 
  print $c, "\n";
  for (sort {$count{$b} <=> $count{$a}} keys %count) {
    printf "%4d $_\n", $count{$_};
  }
}
1;
