Changeset 22080 for src/perl6

Show
Ignore:
Timestamp:
09/01/08 09:48:28 (3 months ago)
Author:
lwall
Message:

[STD] fix enum parsing (again)
[Cursor] minor speedups

Location:
src/perl6
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • src/perl6/Cursor.pmc

    r22014 r22080  
    428428        $self->_AUTOLEXpeek($key,$retree); 
    429429    }; 
    430     $self->highwater($lexer->{NAME}); 
     430    $self->highwater($lexer->{NAME}) if $self->{_pos} >= $::HIGHWATER; 
    431431    my $buf = $self->{_orig}; 
    432432    my $P = $self->{_pos}; 
     
    434434        return sub { return }; 
    435435    } 
    436     my $ch2 = substr($$buf,$P,5); 
    437     # wish I could persuade p5 to parse this directly out of $$buf... 
    438     $ch2 =~ s/^(\[[\\<>«»]*..|[<>][<>]..|[ -~].|.).*$/$1/s; 
    439  
     436    pos($$buf) = $P; 
     437    $$buf =~ m/\G(\[[\\<>«»]*..|[<>][<>]..|[ -~].|.)/smgc; 
     438    my $ch2 = $1; 
    440439 
    441440    $lexer->{$ch2} //= do { 
     
    462461#               print join "\n", @pats, ''; 
    463462#           } 
     463            # XXX this could be greatly compactified by just storing offsets into @pats 
     464            # and just appending a single line to a single digraph cache file. 
    464465            if (open PATS, '>', $file) { 
    465466                binmode(PATS, ":utf8"); 
     
    672673sub highwater { 
    673674    my $self = shift; 
    674     if ($self->{_pos} >= $::HIGHWATER) { 
    675         if ($self->{_pos} > $::HIGHWATER) { 
    676             %$::HIGHEXPECT = (); 
    677             $::HIGHMESS = ''; 
    678         } 
    679         for (@_) { 
    680             my $name = $_; 
    681             $name =~ s/_0[01]$//; 
    682             $name =~ s/_(\d\d)$/ (alt $1)/; 
    683             $name =~ s/:\*$//; 
    684             $::HIGHEXPECT->{$name}++; 
    685         } 
    686         $::HIGHWATER = $self->{_pos}; 
    687     } 
     675    if ($self->{_pos} > $::HIGHWATER) { 
     676        %$::HIGHEXPECT = (); 
     677        $::HIGHMESS = ''; 
     678    } 
     679    for (@_) { 
     680        my $name = $_; 
     681        $name =~ s/_0[01]$//; 
     682        $name =~ s/_(\d\d)$/ (alt $1)/; 
     683        $name =~ s/:\*$//; 
     684        $::HIGHEXPECT->{$name}++; 
     685    } 
     686    $::HIGHWATER = $self->{_pos}; 
    688687} 
    689688 
  • src/perl6/STD.pm

    r22063 r22080  
    25722572    :my $l; 
    25732573    <sym> <.ws> 
    2574     [ $l = <longname> { $¢.add_type($l); } <.ws> ]? 
     2574    [ $l = <longname> :: { $¢.add_type($l); } <.ws> ]? 
    25752575    <EXPR> <.ws> 
    25762576}