- Timestamp:
- 11/12/08 03:17:12 (8 weeks ago)
- Files:
-
- 1 modified
-
src/perl6/Cursor.pmc (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/perl6/Cursor.pmc
r22985 r22986 266 266 $self->deb("using cached $dir/$file") if $DEBUG & DEBUG::autolexer; 267 267 268 my @pat = <LEX>;269 chomp(@pat);270 $name = shift @pat;268 chomp($name = <LEX>); 269 local $/ = ""; 270 my @para = <LEX>; 271 271 close LEX; 272 272 my %lexer; … … 274 274 $lexer{DBA} = $dba; 275 275 $lexer{FILE} = "$dir/$file"; 276 my @pat = split(/\n/, $para[0]); 276 277 $lexer{PATS} = \@pat; 278 my $fates; 279 my $i = 0; 280 for (@pat) { 281 s/\(\?#FATE\d* +(.*?)\)/(?#FATE$i $1)/; 282 my $fstr = $1; 283 my $fate = $fates->[$i] = [0,0,0,$fstr]; 284 while ($fstr =~ s/(\S+)\s+(\S+)\s*//) { 285 $fate->[0] = $1; 286 $fate->[1] = $2; 287 $fate = $fate->[2] = [0,0,0,$fstr] if $fstr ne ''; 288 } 289 $i++; 290 } 291 $lexer{FATES} = $fates; 292 293 # if (@para > 0 and $para[1]) { 294 # for (split(/\n/, $para[1])) {} 295 # } 277 296 278 297 return \%lexer; … … 304 323 for my $alt (@alts) { 305 324 $alt .= "\t(?#FATE)" unless $alt =~ /FATE/; 306 $alt =~ s/\(\?#FATE /(?#FATE $proto ${class}::$method/;325 $alt =~ s/\(\?#FATE\d*/(?#FATE $proto ${class}::$method/; 307 326 $altnum++; 308 327 } … … 321 340 s/(\(\?#::\))+/(?#::)/; 322 341 } 342 my $fates; 343 my $i = 0; 344 for (@pat) { 345 my $fstr; 346 if ( s/\(\?#FATE\d* +(.*?)\)/(?#FATE$i $1)/) { 347 $fstr = $1; 348 } 349 else { 350 $_ .= "\t(?#FATE$i )"; 351 $fstr = ""; 352 } 353 my $fate = $fates->[$i] = [0,0,0,$fstr]; 354 while ($fstr =~ s/(\S+)\s+(\S+)\s*//) { 355 $fate->[0] = $1; 356 $fate->[1] = $2; 357 $fate = $fate->[2] = [0,0,0,$fstr] if $fstr ne ''; 358 } 359 $i++; 360 } 323 361 warn "(null pattern for $key)" unless @pat; 324 362 my $pat = join("\n", @pat); … … 326 364 $AUTOLEXED{$key} = $oldfakepos; 327 365 328 $lexer = { "NAME" => $name, "FILE" => "$dir/$file", "PATS" => [@pat], " DBA" => $dba};366 $lexer = { "NAME" => $name, "FILE" => "$dir/$file", "PATS" => [@pat], "FATES" => $fates, "DBA" => $dba}; 329 367 330 368 return $lexer if $lang =~ /ANON/; … … 685 723 my $i = 0; 686 724 my $fates = []; 687 if (@pats > 500) { 688 print "Too many patterns for $ch2 file $file\n"; 689 } 690 for (@pats) { 691 s/\(\?#FATE +(.*?)\)/(?#$i FATE $1)/; 692 my $fstr = $1; 693 my $fate = $fates->[$i] = [0,0,0,$fstr]; 694 while ($fstr =~ s/(\S+)\s+(\S+)\s*//) { 695 $fate->[0] = $1; 696 $fate->[1] = $2; 697 $fate = $fate->[2] = [0,0,0,$fstr] if $fstr ne ''; 698 } 699 $i++; 700 } 725 my $FATES = $lexer->{FATES}; 701 726 702 727 for my $pat (@pats) { 703 $pat =~ s/\(\?#.*?\)//g; 704 $pat =~ s/\s+//g; 705 $pat =~ s/:://g; 728 $pat =~ s/\t\(\?#FATE(\d+).*?\)// or die "Malformed fate"; 729 $fates->[$i++] = $FATES->[$1]; 706 730 } 707 731 … … 2151 2175 if ($PREFIX) { 2152 2176 for (@pat) { 2153 s/(\t\(\?#FATE) *(.*?\))(.*)/$3$1$PREFIX $2/g;2177 s/(\t\(\?#FATE)\d* *(.*?\))(.*)/$3$1$PREFIX $2/g; 2154 2178 } 2155 2179 } … … 2316 2340 my $newold = $oldalt; 2317 2341 my $newnew = $newalt; 2318 $newnew =~ s/\t\(\?#FATE *(.*?)\)//;2342 $newnew =~ s/\t\(\?#FATE\d* *(.*?)\)//; 2319 2343 my $morefate = $1; 2320 2344 $newold =~ s/(FATE.*?)\)/$1 $morefate)/;
