Changeset 22534
Legend:
- Unmodified
- Added
- Removed
-
src/perl6/Cursor.pmc
r22498 r22534 254 254 my %lexer; 255 255 $lexer{NAME} = $name; 256 $lexer{DBA} = $retree->{$key}{dba} // $name; 256 257 $lexer{FILE} = "$dir/$file"; 257 258 $lexer{PATS} = \@pat; … … 265 266 $AUTOLEXED{$key} = $fakepos; 266 267 my $ast = $retree->{$key}; 267 if ($ast ) {268 if ($ast and ref $ast ne 'HASH') { 268 269 @pat = $ast->longest($self->cursor_peek()); 269 270 } … … 306 307 $AUTOLEXED{$key} = $oldfakepos; 307 308 308 $lexer = { "NAME" => $name, "FILE" => "$dir/$file", "PATS" => [@pat] };309 $lexer = { "NAME" => $name, "FILE" => "$dir/$file", "PATS" => [@pat], "DBA" => $retree->{$key}{dba} // $name}; 309 310 310 311 if (not -d $dir) { … … 428 429 $self->_AUTOLEXpeek($key,$retree); 429 430 }; 430 $self->highwater($lexer->{ NAME}) if $self->{_pos} >= $::HIGHWATER;431 $self->highwater($lexer->{DBA}) if $self->{_pos} >= $::HIGHWATER; 431 432 my $buf = $self->{_orig}; 432 433 my $P = $self->{_pos}; -
src/perl6/STD.pm
r22532 r22534 453 453 :my $startpos = self.pos; 454 454 455 :dba <simple whitespace>455 :dba('whitespace') 456 456 [ 457 457 | \h+ <![#\s\\]> { $¢.<_>[$¢.pos]<ws> = $startpos; } # common case … … 461 461 ] 462 462 || 463 :dba<complicated whitespace>464 463 [ 465 464 | <.unsp> … … 478 477 token unsp { 479 478 \\ <?before [\s|'#'] > 479 :dba('unspace') 480 480 [ 481 481 | <.vws> {*} #= vwhite … … 486 486 487 487 token vws { 488 :dba('vertical whitespace') 488 489 \v 489 490 { $COMPILING::LINE++ } # XXX wrong several ways, use self.lineof($¢.pos) … … 499 500 500 501 token unv { 502 :dba('horizontal whitespace') 503 [ 501 504 | \h+ {*} #= hwhite 502 505 | <?before '='> ^^ <.pod_comment> {*} #= pod … … 507 510 | {} \N* {*} #= end 508 511 ] 512 ] 509 513 } 510 514 … … 573 577 574 578 token pblock { 579 :dba('parameterized block') 575 580 [ <lambda> <signature> ]? <block> 576 581 } … … 595 600 | <.unv>? $$ <.ws> 596 601 { $¢.<_>[$¢.pos]<endstmt> = 2; } {*} #= endstmt complex 597 | { $¢.<_>[$¢.pos]<endargs> = 1; } <.ws> {*}#= endargs602 | <.unsp>? { $¢.<_>[$¢.pos]<endargs> = 1; } {*} #= endargs 598 603 ] 599 604 } … … 621 626 | <.unv>? $$ <.ws> 622 627 { $¢.<_>[$¢.pos]<endstmt> = 2; } {*} #= endstmt complex 623 | { $¢.<_>[$¢.pos]<endargs> = 1; } <.ws> {*}#= endargs628 | <.unsp>? { $¢.<_>[$¢.pos]<endargs> = 1; } {*} #= endargs 624 629 ] 625 630 } … … 628 633 rule statementlist { 629 634 :my $PARSER is context<rw> = self; 635 :dba('statement list') 630 636 [ 631 637 | $ … … 637 643 # embedded semis, context-dependent semantics 638 644 rule semilist { 645 :dba('semicolon list') 639 646 [ 640 647 | <?before <[\)\]\}]> > … … 669 676 | <statement_control> {*} #= control 670 677 | <EXPR> {*} #= expr 671 :dba <statement end>678 :dba('statement end') 672 679 [ 673 680 || <?{ ($¢.<_>[$¢.pos]<endstmt> // 0) == 2 }> # no mod after end-line curly 674 681 || 675 :dba <statement modifier>682 :dba('statement modifier') 676 683 [ 677 684 | <statement_mod_loop> {*} #= mod loop 678 685 | <statement_mod_cond> {*} #= mod cond 679 :dba <statement modifier loop>686 :dba('statement modifier loop') 680 687 [ 681 688 || <?{ ($¢.<_>[$¢.pos]<endstmt> // 0) == 2 }> … … 848 855 849 856 token pre { 857 :dba('prefix or meta-prefix') 850 858 [ 851 859 | <prefix> … … 869 877 870 878 token nulltermish { 879 :dba('null term') 871 880 [ 872 881 | <?stdstopper> … … 876 885 877 886 token termish { 887 :dba('prefix or noun') 878 888 [ 879 889 | <pre>+ <noun> … … 882 892 883 893 # also queue up any postfixes, since adverbs could change things 894 :dba('postfix') 884 895 [ <?stdstopper> || 885 896 <post>* … … 930 941 931 942 ':' 943 :dba('colon pair') 932 944 [ 933 945 | '!' <identifier> … … 941 953 ] 942 954 {*} #= value 943 | :dba <signature>'(' ~ ')' <signature>955 | :dba('signature') '(' ~ ')' <signature> 944 956 | <postcircumfix> 945 957 { $key = ""; $value = $<postcircumfix>; } … … 957 969 958 970 ':' 971 :dba('colon pair (restricted)') 959 972 [ 960 973 | '!' <identifier> … … 978 991 <!stdstopper> 979 992 <!infixstopper> 993 :dba('infix or meta-infix') 980 994 [ 981 995 | <infix> … … 1010 1024 1011 1025 token dottyop { 1026 :dba('dotty method or postfix') 1012 1027 [ 1013 1028 | <methodop> … … 1029 1044 [ ['.' <.unsp>?]? <postfix_prefix_meta_operator> <.unsp>? ]* 1030 1045 1046 :dba('postfix') 1031 1047 [ 1032 1048 | <dotty> { $<O> = $<dotty><O> } … … 1114 1130 1115 1131 token postcircumfix:sym<( )> ( --> Methodcall) 1116 { :dba <argument list>'(' ~ ')' <semilist> }1132 { :dba('argument list') '(' ~ ')' <semilist> } 1117 1133 1118 1134 token postcircumfix:sym<[ ]> ( --> Methodcall) 1119 { :dba <subscript>'[' ~ ']' <semilist> }1135 { :dba('subscript') '[' ~ ']' <semilist> } 1120 1136 1121 1137 token postcircumfix:sym<{ }> ( --> Methodcall) 1122 { :dba <subscript>'{' ~ '}' <semilist> }1138 { :dba('subscript') '{' ~ '}' <semilist> } 1123 1139 1124 1140 token postcircumfix:sym«< >» ( --> Methodcall) … … 1144 1160 ] <.unsp>? 1145 1161 1162 :dba('method arguments') 1146 1163 [ 1147 1164 | '.'? <.unsp>? '(' ~ ')' <semilist> … … 1152 1169 token arglist { 1153 1170 :my StrPos $endargs is context<rw> = 0; 1171 :my $GOAL is context = 'endargs'; 1154 1172 <.ws> 1173 :dba('argument list') 1155 1174 [ 1156 1175 | <?stdstopper> … … 1172 1191 [ 1173 1192 | '(' ~ ')' <signature> 1174 | :dba <shape definition>'[' ~ ']' <semilist>1175 | :dba <shape definition>'{' ~ '}' <semilist>1193 | :dba('shape definition') '[' ~ ']' <semilist> 1194 | :dba('shape definition') '{' ~ '}' <semilist> 1176 1195 | <?before '<'> <postcircumfix> 1177 1196 ]* … … 1183 1202 <post_constraint>* 1184 1203 1204 # XXX generalize to any assignment operator? 1205 :dba('variable initializer') 1185 1206 [ 1186 1207 | '=' <.ws> <EXPR( ($<sigil> // '') eq '$' ?? item %item_assignment !! item %list_prefix )> … … 1190 1211 1191 1212 rule scoped { 1213 :dba('scoped declarator') 1192 1214 [ 1193 1215 | <declarator> … … 1630 1652 1631 1653 token deflongname { 1654 :dba('name to be defined') 1632 1655 <name> 1633 1656 # XXX too soon … … 1653 1676 [ 1654 1677 | <identifier> 1655 | :dba <indirect name>'(' ~ ')' <EXPR>1678 | :dba('indirect name') '(' ~ ')' <EXPR> 1656 1679 ] 1657 1680 ]? … … 1749 1772 # careful to distinguish from both integer and 42.method 1750 1773 token dec_number { 1774 :dba('decimal number') 1751 1775 [ 1752 1776 | $<coeff> = [ '.' \d+[_\d+]* ] <escale>? … … 1759 1783 ':' $<radix> = [\d+] <.unsp>? # XXX optional dot here? 1760 1784 {} # don't recurse in lexer 1785 :dba('number in radix notation') 1761 1786 [ 1762 1787 || '<' … … 2484 2509 | '!'?<longname> [ <multisig> | <trait> ]* 2485 2510 | <sigil> '.' 2511 :dba('subscript signature') 2486 2512 [ 2487 2513 | '(' ~ ')' <signature> … … 2777 2803 2778 2804 token circumfix:sigil ( --> Term) 2779 { :dba <contextualizer><sigil> '(' ~ ')' <semilist> }2805 { :dba('contextualizer') <sigil> '(' ~ ')' <semilist> } 2780 2806 2781 2807 #token circumfix:typecast ( --> Term) … … 2783 2809 2784 2810 token circumfix:sym<( )> ( --> Term) 2785 { :dba <parenthesized expression>'(' ~ ')' <semilist> }2811 { :dba('parenthesized expression') '(' ~ ')' <semilist> } 2786 2812 2787 2813 token circumfix:sym<[ ]> ( --> Term) 2788 { :dba <array composer>'[' ~ ']' <semilist> }2814 { :dba('array composer') '[' ~ ']' <semilist> } 2789 2815 2790 2816 ## methodcall … … 3210 3236 :my $listopish = 0; 3211 3237 [ 3212 | :dba <argument list>'.(' ~ ')' <semilist> {*} #= func args3213 | :dba <argument list>'(' ~ ')' <semilist> {*} #= func args3214 | :dba <argument list><.unsp> '.'? '(' ~ ')' <semilist> {*} #= func args3238 | :dba('argument list') '.(' ~ ')' <semilist> {*} #= func args 3239 | :dba('argument list') '(' ~ ')' <semilist> {*} #= func args 3240 | :dba('argument list') <.unsp> '.'? '(' ~ ')' <semilist> {*} #= func args 3215 3241 | {} [<?before \s> <!{ $istype }> <.ws> <!infixstopper> <arglist> { $listopish = 1 }]? 3216 3242 ] 3217 3243 3244 :dba('extra arglist after (...):') 3218 3245 [ 3219 3246 || <?{ $listopish }> … … 3234 3261 # parametric type? 3235 3262 <.unsp>? [ <?before '['> <postcircumfix> ]? 3263 :dba('type parameter') 3236 3264 [ 3237 3265 '::' … … 3327 3355 3328 3356 regex infixstopper { 3357 :dba('infix stopper') 3358 [ 3329 3359 | <?before <stopper> > 3330 3360 | <?before '!!' > <?{ $+GOAL eq '!!' }> 3331 3361 | <?before '{' | <lambda> > <?{ $+GOAL eq '{' and $¢.<_>[$¢.pos]<ws> }> 3362 | <?{ $+GOAL eq 'endargs' and $¢.<_>[$¢.pos]<endargs> }> 3363 ] 3332 3364 } 3333 3365 … … 3338 3370 regex stdstopper { 3339 3371 :my @stub = return self if self.<_>[self.pos].:exists<endstmt>; 3372 :dba('standard stopper') 3340 3373 [ 3341 3374 | <?terminator> … … 3632 3665 token rxinfix:sym<|> ( --> Junctive_or ) { <sym> } 3633 3666 token rxinfix:sym<&> ( --> Junctive_and ) { <sym> } 3667 token rxinfix:sym<~> ( --> Additive ) { <sym> } 3634 3668 3635 3669 token quantified_atom { … … 3645 3679 3646 3680 token atom { 3681 :dba('regex atom') 3647 3682 [ 3648 3683 | \w … … 3753 3788 $<binding> = ( <.ws> '=' <.ws> <quantified_atom> )? 3754 3789 { $<sym> = $<variable>.item; } 3755 }3756 3757 token metachar:sym<~> {3758 <sym>3759 3790 } 3760 3791 … … 3850 3881 token cclass_elem { 3851 3882 <.ws> 3883 :dba('character class element') 3852 3884 [ 3853 3885 | <name> … … 3857 3889 } 3858 3890 3859 token mod_arg { :dba <modifier argument>'(' ~ ')' <semilist> }3891 token mod_arg { :dba('modifier argument') '(' ~ ')' <semilist> } 3860 3892 3861 3893 token mod_internal:sym<:my> { ':' <?before 'my' \s > [:lang($¢.cursor_fresh($+LANG)) <statement> <eat_terminator> ] } -
src/perl6/gimme5
r22532 r22534 457 457 $args =~ s/\s+$//; 458 458 } 459 warn "ARGSTUFF : ", $argstuff if $argstuff =~ /\S/;459 warn "ARGSTUFF in $NAME: ", $argstuff if $argstuff =~ /\S/; 460 460 my $p = ""; 461 461 … … 1047 1047 return $kids[0] if @kids == 1; 1048 1048 1049 return bless { zyg => [@kids], min => $min, altname => $ALTNAME, name => $name },1049 return bless { zyg => [@kids], min => $min, altname => $ALTNAME, name => $name, %adverbs }, 1050 1050 "RE_any"; 1051 1051 } … … 1257 1257 $code = "my \$newlang = $code; \$C = \$C->cursor_fresh(\$newlang); "; 1258 1258 return bless { text => $code, min => 0, max => 0, noquant => 1, %adverbs }, "RE_decl"; 1259 } 1260 elsif ($adverb eq 'dba') { 1261 $adverbs{$adverb} = eval $code; 1259 1262 } 1260 1263 }
