package LIMS::Local::RunmodeDeclare;
use base 'CGI::Application::Plugin::RunmodeDeclare';
sub parse_proto {
my $ctx = shift;
my ($proto) = @_;
$proto ||= '';
# Do all the signature parsing here
my %signature;
$signature{invocant} = '$c'; # <= replaced $elf
$signature{invocant} = $1 if $proto =~ s{^(\$.+):\s*}{};
my @protos = split /\s*,\s*/, $proto;
for my $idx (0..$#protos) {
my $sig = $signature{$idx} = {};
my $proto = $protos[$idx];
# print STDERR "proto: $proto\n";
$sig->{proto} = $proto;
$sig->{idx} = $idx;
$sig->{is_at_underscore} = $proto eq '@_';
$sig->{is_ref_alias} = $proto =~ s{^\\}{}x;
$sig->{trait} = $1 if $proto =~ s{ \s+ is \s+ (\S+) \s* }{}x;
$sig->{default} = $1 if $proto =~ s{ \s* = \s* (.*) }{}x;
my($sigil, $name) = $proto =~ m{^ (.)(.*) }x;
$sig->{is_optional} = ($name =~ s{\?$}{} or $sig->{default});
$sig->{sigil} = $sigil;
$sig->{name} = $name;
}
# XXX At this point we could do sanity checks
return \%signature;
}
1;