Changeset 7197 for perl5/Perl6-Value/lib/Perl6/Code.pm
- Timestamp:
- 09/29/05 06:44:20 (3 years ago)
- Files:
-
- 1 modified
-
perl5/Perl6-Value/lib/Perl6/Code.pm (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
perl5/Perl6-Value/lib/Perl6/Code.pm
r7194 r7197 154 154 Perl6::Type->new( 155 155 name => 'Array', 156 match => sub { ref($_[0]) eq 'ARRAY' || ref($_[0]) eq 'Array' } ) :156 match => sub { ref($_[0]) eq 'ARRAY' || ref($_[0]) eq 'Array' || ref($_[0]) eq 'Dispatchable' && $_[0]->isa('Array') } ) : 157 157 $name =~ /^\%/ ? 158 158 Perl6::Type->new( 159 159 name => 'Hash', 160 match => sub { ref($_[0]) eq 'HASH' || ref($_[0]) eq 'Hash' } ) :160 match => sub { ref($_[0]) eq 'HASH' || ref($_[0]) eq 'Hash' || ref($_[0]) eq 'Dispatchable' && $_[0]->isa('Hash') } ) : 161 161 $name =~ /^\&/ ? 162 162 Perl6::Type->new( … … 253 253 return $j if $j; 254 254 255 $self->check_params(@arguments)256 || confess "Signature does not match - (" . $self->signature_str . ")";255 my($ok,$err)=$self->check_params(@arguments); 256 $ok || confess "Signature does not match - (" . $self->signature_str . "): $err"; 257 257 # my %bound_params = $::SELF->bind_params(@arguments); 258 258 # warn "entering sub ".$self->name; … … 285 285 if ( $i >= scalar @{ $self->params } && $i >= scalar @params ) { 286 286 #warn "CHECK: $i - required $num_required - given @params"; 287 return 0if $num_required > scalar @params;287 return (0,"err1") if $num_required > scalar @params; 288 288 return 1; 289 289 } 290 290 # return 1 if $i > scalar $#{ $self->params } && $i > scalar $#params; 291 return 0if $i > scalar $#{ $self->params } && $i <= scalar $#params;291 return (0,"err2") if $i > scalar $#{ $self->params } && $i <= scalar $#params; 292 292 # warn $i; 293 293 my $spec = ${ $self->params }[$i]; … … 296 296 next if $spec->optional && ! defined $candidate; 297 297 if ( $spec->slurpy ) { ## && $spec->name eq 'Array' ) { 298 ## return 0unless $spec->match_type( [ @params[$i..$#params] ] ); XXX298 ## return (0,"") unless $spec->match_type( [ @params[$i..$#params] ] ); XXX 299 299 return 1; # @params = (); 300 300 } 301 301 else { 302 return 0 unless $spec->match_type($candidate); 302 my $mt = $spec->match_type($candidate); 303 return (0,"type mismatch: $candidate vs ".$spec->str) 304 if !$mt; 303 305 } 304 306 }
