TODO tests in t/parser-subclass.t

Andy Armstrong andy at hexten.net
Wed Jun 11 10:40:15 UTC 2008


On 11 Jun 2008, at 10:25, Steve Purkis wrote:
> Finally, I've a nagging voice in the back of my head about circular  
> refs & memory leaks - parser refers to grammar refers to parser...   
> Any word on whether it's ok to use Scalar::Util's weaken() ?


How about making Grammar delete its ref to the parser when it sees end- 
of-stream?

sub tokenize {
     my $self = shift;

     my $line = $self->{stream}->next;
     unless ( defined $line ) {
         delete $self->{parser};    # break circular ref
         return;
     }

     my $token;

     foreach my $token_data ( @{ $self->{ordered_tokens} } ) {
         if ( $line =~ $token_data->{syntax} ) {
             my $handler = $token_data->{handler};
             $token = $self->$handler($line);
             last;
         }
     }

     $token = $self->_make_unknown_token($line) unless $token;

     return $self->{parser}->make_result($token);
}

Does that look OK?

-- 
Andy Armstrong, Hexten






More information about the tapx-dev mailing list