Changeset 22013 for src/perl6

Show
Ignore:
Timestamp:
08/22/08 20:14:34 (3 months ago)
Author:
lwall
Message:

[Cursor] more speed tweaks

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • src/perl6/Cursor.pmc

    r21975 r22013  
    618618                    sub { 
    619619                        my \$C = shift; 
    620                         pos(\$\$buf) = \$C->{_pos}; 
     620                        my \$P = \$C->{_pos}; 
     621                        pos(\$\$buf) = \$P; 
    621622 
    622623                        my \$result; 
     
    645646                            my $tried = ""; 
    646647                            vec($tried,$last-1,1) = 1; 
    647                             $_[0] = [$tried, $+[0] - $-[0], []]; 
     648                            $_[0] = [$tried, pos($$buf) - $P, []]; 
    648649                        } 
    649650                        $result; 
     
    852853     
    853854    my $fate = $self->{_fate}; 
    854     if ($fate and $fate->[0] eq $name) { 
    855         $self->deb("Fate passed to $name: $$fate[3]") if $DEBUG & DEBUG::fates; 
    856         ($tag, $try, $fate) = @$fate; 
     855    if ($fate) { 
     856        if ($fate->[0] eq $name) { 
     857            $self->deb("Fate passed to $name: $$fate[3]") if $DEBUG & DEBUG::fates; 
     858            ($tag, $try, $fate) = @$fate; 
     859            $r{_fate} = $fate; 
     860            return (CORE::bless \%r, ref $self), $tag, $try, $relex; 
     861        } 
     862        elsif ($fate->[0] . ':*' eq $name) { 
     863            $self->deb("Fate passed to $name: $$fate[3]") if $DEBUG & DEBUG::fates; 
     864            ($tag, $try, $fate) = @$fate; 
     865            $r{_fate} = $fate; 
     866            return (CORE::bless \%r, ref $self), $tag, $try, $relex; 
     867        } 
     868    } 
     869 
     870    $relex = $self->_AUTOLEXnow($name,$retree); 
     871    $fate = $relex->($self,$_[0]); 
     872    if ($fate) { 
     873        $self->deb("FATE OF ${pkg}::$name: $$fate[3]") if $DEBUG & DEBUG::fates; 
     874        ($tag, $try, $fate) = @$fate; 
    857875        $r{_fate} = $fate; 
    858876    } 
    859     elsif ($fate and $fate->[0] . ':*' eq $name) { 
    860         $self->deb("Fate passed to $name: $$fate[3]") if $DEBUG & DEBUG::fates; 
    861         ($tag, $try, $fate) = @$fate; 
    862         $r{_fate} = $fate; 
    863     } 
    864     else { 
    865         $relex = $self->_AUTOLEXnow($name,$retree); 
    866         $fate = $relex->($self,$_[0]); 
    867         if ($fate) { 
    868             $self->deb("FATE OF ${pkg}::$name: $$fate[3]") if $DEBUG & DEBUG::fates; 
    869             ($tag, $try, $fate) = @$fate; 
    870             $r{_fate} = $fate; 
    871         } 
    872         else { 
    873             $self->deb("NO FATE FOR ${pkg}::$name (will probe)") if $DEBUG & DEBUG::fates; 
    874             $tag = ''; 
    875         } 
     877    else { 
     878        $self->deb("NO FATE FOR ${pkg}::$name (will probe)") if $DEBUG & DEBUG::fates; 
     879        $tag = ''; 
    876880    } 
    877881    return (CORE::bless \%r, ref $self), $tag, $try, $relex;