Show
Ignore:
Timestamp:
05/18/05 03:51:03 (4 years ago)
Author:
Stevan
svk:copy_cache_prev:
4945
Message:

Perl::MetaModel? - findMethod and invokeMethod methods coded and tested (and an isMethodSupported too); Smalltalk Meta-Model++

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • ext/Perl-MetaModel/lib/Perl/Meta/Class.pm

    r3361 r3373  
    158158} 
    159159 
    160 # can we remove these? 
    161160method methods      ($self:) returns Hash  { %:methods        } 
    162161method methodLabels ($self:) returns Array { %:methods.keys() } 
    163162 
    164163method findMethod ($self: $label) returns Perl::Meta::Method { 
    165  
    166 } 
    167  
    168 our &Perl::Meta::Class::isMethodSupported ::= &Perl::Meta::Class::findMethod; 
    169  
    170 method invokeMethod ($self: Str $label, @args) returns Any {   
     164    return %:methods{$label} if %:methods.exists($label); 
     165    return $:parent.findMethod($label) if $:parent.defined; 
     166    return undef; 
     167} 
     168 
     169method isMethodSupported ($self: $label) returns Bool { 
     170    $self.findMethod($label) ?? 1 :: 0; 
     171} 
     172 
     173method invokeMethod ($self: Str $label, *@args) returns Any {   
    171174    my $method = $self.findMethod($label); 
    172175    ($method.defined) 
    173176        || die "Method not found"; 
    174177    my $impl = $method.code(); 
     178    ($impl.defined) 
     179        || die "Method has no code";     
    175180    return $impl($self, @args); 
    176181}