package Iotta::Copp::GetIDs; use strict; require Iotta::Elem; our @ISA = ("Iotta::Elem"); my $ws = "[ \t\n]"; sub addid { my $self = shift; my $l = shift; my $id = shift; unless (grep /^$id$/, @$l) { push @$l, "$id" } } sub append { my $self = shift; $_ = shift; my $rx = shift; my $l = shift; my $T = shift; while (s/$rx//) { my $id = $1; $id =~ s/^$ws+|$ws+$//g; $self->addid ($l, "$T$id"); } } sub run { my $self = shift; my $meta = shift; my $data = shift; my @list; $self->append ($data, qr/\bCO_CNT$ws*\(.*?,(.*?),/, \@list, "E"); $self->append ($data, qr/\bCO_CNT$ws*\(.*?,.*?,.*?,(.*?)\)/, \@list, "M"); $self->append ($data, qr/\bCO_M$ws*\(.*?,(.*?)[,)]/, \@list, "M"); #$self->append ($data, qr/CO_ATTR$ws*\(.*?,(.*?)[,)]/, \@list, "M"); $self->append ($data, qr/\bCO_ATTR$ws*\(.*?,(.*?)[,)]/, \@list, "M"); $self->append ($data, qr/\bCO_METH$ws*\(.*?,(.*?)[,)]/, \@list, "M"); $self->append ($data, qr/\bCO_METH$ws*\((.*?),/, \@list, "T"); $self->append ($data, qr/\bCO_OBJECT$ws*\((.*?),/, \@list, "T"); $self->append ($data, qr/\bCO_EV$ws*\(.*?,(.*?)[,)]/, \@list, "E"); $self->append ($data, qr/\bCO_P$ws*\(.*?,(.*?)[,)]/, \@list, "P"); $self->append ($data, qr/\bCO_A$ws*\(.*?,.*?,(.*?)[,)]/, \@list, "M"); $self->append ($data, qr/\bCO_PH_RET$ws*\(.*?,(.*?)[,)]/, \@list, "P"); $self->append ($data, qr/\bCO_PH_RET_C$ws*\(.*?,(.*?)[,)]/, \@list, "P"); $self->append ($data, qr/\bCO_MH_CASE$ws*\(.*?,(.*?)[,)]/, \@list, "M"); $self->append ($data, qr/\bCOM$ws*\((.*?)\)/, \@list, "M"); $self->append ($data, qr/\bCOE$ws*\((.*?)\)/, \@list, "E"); $self->append ($data, qr/\bCOP$ws*\((.*?)\)/, \@list, "P"); $self->append ($data, qr/\bCOX_THROW$ws*\((.*?)\)/, \@list, "X"); $self->append ($data, qr/\bCOX_ID$ws*\((.*?)\)/, \@list, "X"); $self->append ($data, qr/\bCO_BLESS(?:_M|_MP|_0|)$ws*\(.*?,(.*?)[,)]/, \@list, "T"); if ($data =~ /#include[ \t]*[<"].*?co_conv.h[">]/) { $self->append ($data, qr/\bP$ws*\(.*?,(.*?)[,)]/, \@list, "P"); $self->append ($data, qr/\bM$ws*\(.*?,(.*?)[,)]/, \@list, "M"); $self->append ($data, qr/\bE$ws*\(.*?,(.*?)[,)]/, \@list, "E"); } @{$$meta{idlist}} = (@{$$meta{idlist}}, @list); print STDERR (join ("\n", @{$$meta{idlist}})); $self->next->run ($meta, $data) if ($self->next); } 1;