This reports unknown method names when generating C code for PMCs.
WDOT? Is this the right place for it? Should it die instead of warn?
-- Bob Rogers
http://rgrjr.dyndns.org/
* lib/Parrot/Pmc2c.pm:
+ Warn about definitions for unknown methods.
Diffs between last version checked in and current workfile(s):
Index: lib/Parrot/Pmc2c.pm
===================================================================
--- lib/Parrot/Pmc2c.pm (revision 18587)
+++ lib/Parrot/Pmc2c.pm (working copy)
@@ -629,15 +629,16 @@
my ( $self, $line, $out_name ) = @_;
my $cout = "";
+ my %method_used_p;
# vtable methods
foreach my $method ( @{ $self->{vtable}{methods} } ) {
my $meth = $method->{meth};
- next if $meth eq 'class_init';
if ( $self->implements($meth) ) {
my $ret = $self->body( $method, $line, $out_name );
$line += count_newlines($ret);
$cout .= $ret;
+ $method_used_p{$meth}++;
}
}
@@ -647,8 +648,16 @@
my $ret = $self->body( $method, $line, $out_name );
$line += count_newlines($ret);
$cout .= $ret;
+ $method_used_p{$method->{meth}}++;
}
+ # check for mispeled or unimplemented method names.
+ foreach my $method ( @{ $self->{methods} } ) {
+ my $meth = $method->{meth};
+ warn "Cannot generate code for method '$meth', which is unknown.\n"
+ unless $method_used_p{$meth} || $meth eq 'class_init';
+ }
+
$cout =~ s/^\s+$//mg;
return $cout;
}
End of diffs.