- Timestamp:
- 08/18/08 00:20:07 (3 months ago)
- Location:
- examples
- Files:
-
- 2 modified
-
password-manager.p6 (modified) (7 diffs)
-
rules/unitsdat-grammar.pm (modified) (42 diffs)
Legend:
- Unmodified
- Added
- Removed
-
examples/password-manager.p6
r17701 r21928 59 59 my Hash of Str %pw; 60 60 61 sub help(--> ) { warn $=USAGE; }61 sub help(--> Void) { warn $=USAGE; } 62 62 63 63 my Code &abort := -> Str $err { warn "$err\n"; return; } 64 64 65 sub search(Str $pat --> ) {65 sub search(Str $pat --> Void) { 66 66 for %pw.keys -> $k { say %pw{$k}<user>, "\t", $k if $k ~~ /<$pat>/ } 67 67 } 68 68 69 sub mk(Str $acct, Str $pass is copy, Str $user --> ) {69 sub mk(Str $acct, Str $pass is copy, Str $user --> Void) { 70 70 $changed = True; 71 71 $pass = randpass if $pass eq 'R'; … … 73 73 } 74 74 75 sub del(Str $acct --> ) {75 sub del(Str $acct --> Void) { 76 76 abort "No account $acct" unless %pw{$acct}.:exists; 77 77 $changed = True; … … 79 79 } 80 80 81 sub pr(Str $acct --> ) {81 sub pr(Str $acct --> Void) { 82 82 abort "No account $acct" unless %pw{$acct}.:exists; 83 83 say %pw{$acct}<user pass>.join("\t"); 84 84 } 85 85 86 sub wxclip(Str $acct --> ) {86 sub wxclip(Str $acct --> Void) { 87 87 abort "No account $acct" unless %pw{$acct}.:exists; 88 88 xclip %pw{$acct}<pass>; 89 89 } 90 90 91 sub xclip(Str $s --> ) {91 sub xclip(Str $s --> Void) { 92 92 my IO $xclip = Pipe.to: 'xclip' orelse abort 'No xclip - use .p'; 93 93 $xclip.print: $s; … … 95 95 } 96 96 97 sub sx(Str $s --> ) {97 sub sx(Str $s --> Void) { 98 98 my Str $pw = %pw{$s}<pass> // 99 99 first Str, (%pw{$_}<pass> if /$s/ for %pw.keys) … … 116 116 } 117 117 118 sub cmt(--> ) {118 sub cmt(--> Void) { 119 119 unlink 'pwd.gpg.old' orelse abort "Couldn't unlink: $!"; 120 120 rename 'pwd.gpg', 'pwd.gpg.old' orelse abort "Couldn't rename: $!"; … … 131 131 regex cmd { 132 132 ^^ 133 [ '/' $<pat> := [ \N* ] { search $<pat> }134 | \s* <!before '.'> $<acct> := [ \T+? ] \s* $$ { sx $<acct> }135 | '.' [ n [ \t $<acct> := [ \T+ ] \t $<pass> := [ \T+ ] \t $<user> := [ \T+ ] $$133 [ '/' $<pat> = [ \N* ] { search $<pat> } 134 | \s* <!before '.'> $<acct> = [ \T+? ] \s* $$ { sx $<acct> } 135 | '.' [ n [ \t $<acct> = [ \T+ ] \t $<pass> = [ \T+ ] \t $<user> = [ \T+ ] $$ 136 136 { mk $<acct>, $<pass>, $<user> } 137 137 | { warn ".n [tab] account [tab] password [tab] username\n" } <commit> <fail> 138 138 ] 139 | d [ \s+ $<acct> := [ \T+? ] \s* $$ { del $<acct> }139 | d [ \s+ $<acct> = [ \T+? ] \s* $$ { del $<acct> } 140 140 | { warn ".d account\n" } <commit> <fail> 141 141 ] 142 | p [ \s+ $<acct> := [ \T+? ] \s* $$ { pr $<acct> }142 | p [ \s+ $<acct> = [ \T+? ] \s* $$ { pr $<acct> } 143 143 | { warn ".p account\n" } <commit> <fail> 144 144 ] 145 | x [ \s+ $<acct> := [ \T+? ] \s* $$ { wxclip $<acct> }145 | x [ \s+ $<acct> = [ \T+? ] \s* $$ { wxclip $<acct> } 146 146 | { warn ".x account\n" } <commit> <fail> 147 147 ] 148 | l [ \s+ $<len> := [ \d+ ] \s* $$ { $len = $<len> }148 | l [ \s+ $<len> = [ \d+ ] \s* $$ { $len = $<len> } 149 149 | { warn ".l length\nlength is $len\n" } <commit> <fail> 150 150 ] … … 163 163 164 164 regex pwent { 165 ^^ $<acct> := [ \T+ ] \t $<pass> := [ \T+ ] \t $<user> := [ \T+ ] $$165 ^^ $<acct> = [ \T+ ] \t $<pass> = [ \T+ ] \t $<user> = [ \T+ ] $$ 166 166 } 167 167 -
examples/rules/unitsdat-grammar.pm
r17704 r21928 5 5 has Bool $.is_linear; 6 6 # For nonlinear units only 7 has Num %.input_units 8 has method &.cv_to_fund(Num --> Num);9 has method &.cv_from_fund(Num --> Num);10 11 multi submethod BUILD(Num :%def --> ) {7 has Num %.input_units; 8 has Method &.cv_to_fund:(Num --> Num); 9 has Method &.cv_from_fund:(Num --> Num); 10 11 multi submethod BUILD(Num :%def --> Void) { 12 12 %.fund_units = $.defreduce(%def); 13 13 $.is_linear = True; 14 14 } 15 15 16 multi submethod BUILD(Num :$num --> ) {16 multi submethod BUILD(Num :$num --> Void) { 17 17 %.fund_units = { :factor($num) }; 18 18 $.is_linear = True; … … 20 20 21 21 multi submethod BUILD(Num :%def, Num :%input, 22 Code :&to_fund:(Num --> Num), Code :&from_fund:(Num --> Num) --> ) {22 Code :&to_fund:(Num --> Num), Code :&from_fund:(Num --> Num) --> Void) { 23 23 24 24 $.is_linear = False; 25 25 %.fund_units = $.defreduce(%def); 26 26 %.input_units = $.defreduce(%input); 27 &.cv_to_fund := method(Num $x --> Num) {27 &.cv_to_fund := method :(Num $x --> Num) { 28 28 to_fund($x); 29 29 }; 30 &.cv_from_fund := method (Num $x --> Num) {30 &.cv_from_fund := method :(Num $x --> Num) { 31 31 from_fund($x); 32 32 }; … … 35 35 36 36 class StrUnitdef is Unitdef { 37 has method &.cv_to_fund(Str, Num --> Num);38 has method &.cv_from_fund(Str, Num --> Num);39 40 multi submethod BUILD(Num :%def --> ) {37 has Method &.cv_to_fund:(Str, Num --> Num); 38 has Method &.cv_from_fund:(Str, Num --> Num); 39 40 multi submethod BUILD(Num :%def --> Void) { 41 41 %.fund_units = $.defreduce(%def); 42 42 $.is_linear = True; 43 43 } 44 44 45 multi submethod BUILD(Num :$num --> ) {45 multi submethod BUILD(Num :$num --> Void) { 46 46 %.fund_units = { :factor($num) }; 47 47 $.is_linear = True; … … 49 49 50 50 multi submethod BUILD(Num :%def, Num :%input, 51 Code :&to_fund:(Str, Num --> Num), Code :&from_fund:(Str, Num --> Num) --> ) {51 Code :&to_fund:(Str, Num --> Num), Code :&from_fund:(Str, Num --> Num) --> Void) { 52 52 53 53 $.is_linear = False; 54 54 %.fund_units = $.defreduce(%def); 55 55 %.input_units = $.defreduce(%input); 56 &.cv_to_fund := method(Str $s, Num $x --> Num) {56 &.cv_to_fund := method :(Str $s, Num $x --> Num) { 57 57 to_fund($s, $x); 58 58 }; 59 &.cv_from_fund := method (Str $s, Num $x --> Num) {59 &.cv_from_fund := method :(Str $s, Num $x --> Num) { 60 60 from_fund($s, $x); 61 61 }; … … 89 89 90 90 token float { 91 $<mantissa> := [ '-'? \d+ [ '.' \d+ ]? ]92 [ e $<exp> := [ '-'? \d+ ] ]?91 $<mantissa> = [ '-'? \d+ [ '.' \d+ ]? ] 92 [ e $<exp> = [ '-'? \d+ ] ]? 93 93 { $<num> = $<mantissa> * 10 ** $<exp> } 94 94 } … … 108 108 109 109 rule basicnumber { 110 [ $<basicnumber> := <fraction>111 | $<basicnumber> := <float>112 | $<basicnumber> := <builtin_func>110 [ <basicnumber=fraction> 111 | <basicnumber=float> 112 | <basicnumber=builtin_func> 113 113 ] 114 114 { $<num> := $<basicnumber><num> } … … 121 121 122 122 rule number_pow { 123 [ $<lhs> := <basicnumber>124 | $<lhs> := <number_paren>123 [ <lhs=basicnumber> 124 | <lhs=number_paren> 125 125 ] 126 126 <?p> 127 [ $<rhs> := <basicnumber>128 | $<rhs> := <number_paren>127 [ <rhs=basicnumber> 128 | <rhs=number_paren> 129 129 # right assoc 130 | $<rhs> := <number_pow>130 | <rhs=number_pow> 131 131 ] 132 132 { $<num> = $<lhs><num> ** $<rhs><num> } … … 135 135 rule number_mult(Bool :$flip = False) { 136 136 { my Int $sign = $flip ?? -1 !! 1 } <!{0}>#XXX !! confuses perl6.vim 137 [ $<lhs> := <basicnumber>138 | $<lhs> := <number_paren>139 | $<lhs> := <number_pow>140 ] 141 [ <?m> [ $<rhs> := <basicnumber>142 | $<rhs> := <number_paren>143 | $<rhs> := <number_pow>137 [ <lhs=basicnumber> 138 | <lhs=number_paren> 139 | <lhs=number_pow> 140 ] 141 [ <?m> [ <rhs=basicnumber> 142 | <rhs=number_paren> 143 | <rhs=number_pow> 144 144 # really left assoc 145 | $<rhs> := <number_mult>145 | <rhs=number_mult> 146 146 ] 147 147 { $<num> = $<lhs><num> * $<rhs><num> ** $sign } 148 | '/' [ $<rhs> := <basicnumber>149 | $<rhs> := <number_paren>150 | $<rhs> := <number_pow>148 | '/' [ <rhs=basicnumber> 149 | <rhs=number_paren> 150 | <rhs=number_pow> 151 151 # really left assoc - flip the next one to fix 152 | $<rhs> := <number_mult(:flip)>152 | <rhs=number_mult(:flip)> 153 153 ] 154 154 { $<num> = $<lhs><num> / $<rhs><num> ** $sign } … … 158 158 rule number_add(Bool :$flip = False) { 159 159 { my Int $sign = $flip ?? -1 !! 1 } <!{0}>#XXX !! confuses perl6.vim 160 [ $<lhs> := <basicnumber>161 | $<lhs> := <number_paren>162 | $<lhs> := <number_pow>163 | $<lhs> := <number_mult>164 ] 165 [ '+' [ $<rhs> := <basicnumber>166 | $<rhs> := <number_paren>167 | $<rhs> := <number_pow>168 | $<rhs> := <number_mult>160 [ <lhs=basicnumber> 161 | <lhs=number_paren> 162 | <lhs=number_pow> 163 | <lhs=number_mult> 164 ] 165 [ '+' [ <rhs=basicnumber> 166 | <rhs=number_paren> 167 | <rhs=number_pow> 168 | <rhs=number_mult> 169 169 # really left assoc 170 | $<rhs> := <number_add>170 | <rhs=number_add> 171 171 ] 172 172 { $<num> = $<lhs><num> + $<rhs><num> * $sign } 173 | '-' [ $<rhs> := <basicnumber>174 | $<rhs> := <number_paren>175 | $<rhs> := <number_pow>176 | $<rhs> := <number_mult>173 | '-' [ <rhs=basicnumber> 174 | <rhs=number_paren> 175 | <rhs=number_pow> 176 | <rhs=number_mult> 177 177 # really left assoc - flip the next one to fix 178 | $<rhs> := <number_add(:flip)>178 | <rhs=number_add(:flip)> 179 179 ] 180 180 { $<num> = $<lhs><num> - $<rhs><num> * $sign } … … 183 183 184 184 rule number { 185 [ $<number> := <basicnumber>186 | $<number> := <number_paren>187 | $<number> := <number_pow>188 | $<number> := <number_mult>189 | $<number> := <number_add>185 [ <number=basicnumber> 186 | <number=number_paren> 187 | <number=number_pow> 188 | <number=number_mult> 189 | <number=number_add> 190 190 ] 191 191 { $<num> := $<number><num> } … … 194 194 token unitname { 195 195 { $<factor> = 1; my Int $n = 0; } 196 [ @<prefix> := [ | @.prefixes ]196 [ @<prefix> = [ | @.prefixes ] 197 197 { $<factor> *= %.unitsdef{@<prefix>[$n++]}.fund_units<factor> } 198 198 ]* 199 $<name> := [ | @.units ] s?199 $<name> = [ | @.units ] s? 200 200 } 201 201 … … 222 222 rule unitdef_mult(Bool :$flip = False) { 223 223 { my Int $sign = $flip ?? -1 !! 1 } <!{0}>#XXX !! confuses perl6.vim 224 [ $<lhs> := <basicunitdef>225 | $<lhs> := <unitdef_paren>226 ] 227 [ <?m> [ $<rhs> := <basicunitdef>228 | $<rhs> := <unitdef_paren>224 [ <lhs=basicunitdef> 225 | <lhs=unitdef_paren> 226 ] 227 [ <?m> [ <rhs=basicunitdef> 228 | <rhs=unitdef_paren> 229 229 # really left assoc 230 | $<rhs> := <unitdef_mult>230 | <rhs=unitdef_mult> 231 231 ] 232 232 { $<def> = $.multdef($<lhs><def>, $<rhs><def>, $sign) } 233 | '/' [ $<rhs> := <basicunitdef>234 | $<rhs> := <unitdef_paren>233 | '/' [ <rhs=basicunitdef> 234 | <rhs=unitdef_paren> 235 235 # really left assoc - flip the next one to fix 236 | $<rhs> := <unitdef_mult(:flip)>236 | <rhs=unitdef_mult(:flip)> 237 237 ] 238 238 { $<def> = $.multdef($<lhs><def>, $<rhs><def>, -$sign) } … … 242 242 rule unitdef_add(Bool :$flip = False) { 243 243 { my Int $sign = $flip ?? -1 !! 1 } <!{0}>#XXX !! confuses perl6.vim 244 [ $<lhs> := <basicunitdef>245 | $<lhs> := <unitdef_paren>246 | $<lhs> := <unitdef_mult>247 ] 248 [ '+' [ $<rhs> := <basicunitdef>249 | $<rhs> := <unitdef_paren>250 | $<rhs> := <unitdef_mult>244 [ <lhs=basicunitdef> 245 | <lhs=unitdef_paren> 246 | <lhs=unitdef_mult> 247 ] 248 [ '+' [ <rhs=basicunitdef> 249 | <rhs=unitdef_paren> 250 | <rhs=unitdef_mult> 251 251 # really left assoc 252 | $<rhs> := <unitdef_add>252 | <rhs=unitdef_add> 253 253 ] 254 254 { $<def> = $.adddef($<lhs><def>, $<rhs><def>, $sign) } 255 | '-' [ $<rhs> := <basicunitdef>256 | $<rhs> := <unitdef_paren>257 | $<rhs> := <unitdef_mult>255 | '-' [ <rhs=basicunitdef> 256 | <rhs=unitdef_paren> 257 | <rhs=unitdef_mult> 258 258 # really left assoc - flip the next one to fix 259 | $<rhs> := <unitdef_add(:flip)>259 | <rhs=unitdef_add(:flip)> 260 260 ] 261 261 { $<def> = $.adddef($<lhs><def>, $<rhs><def>, -$sign) } … … 266 266 | '(' <unitdef> ')' 267 267 { $<def> = $<unitdef><def> } 268 | $<name> := [ | @.nl_units ] '(' <unitdef> ')' {268 | $<name> = [ | @.nl_units ] '(' <unitdef> ')' { 269 269 my Unitdef $u := %.unitsdef{$<name>}; 270 270 die "Nonlinear input unit: { $<unitdef><def> } should be: { $u.input_units }\n" … … 273 273 $<def><factor> = $u.cv_to_fund($<def><factor>); 274 274 } 275 | '~' $<name> := [ | @.nl_units ] '(' <unitdef> ')' {275 | '~' $<name> = [ | @.nl_units ] '(' <unitdef> ')' { 276 276 my Unitdef $u := %.unitsdef{$<name>}; 277 277 die "Nonlinear input unit: { $<unitdef><def> } should be: { $u.fund_units }\n" … … 283 283 284 284 rule unitdef { 285 [ $<unitdef> := <basicunitdef>286 | $<unitdef> := <unitdef_paren>287 | $<unitdef> := <unitdef_mult>288 | $<unitdef> := <unitdef_add>285 [ <unitdef=basicunitdef> 286 | <unitdef=unitdef_paren> 287 | <unitdef=unitdef_mult> 288 | <unitdef=unitdef_add> 289 289 ] 290 290 { $<def> = $<unitdef><def> } … … 299 299 300 300 rule nl_pow(Str $var, Num %def) { 301 [ $<lhs> := <nl_atom($var, %def)>302 | $<lhs> := <nl_paren($var, %def)>301 [ <lhs=nl_atom($var, %def)> 302 | <lhs=nl_paren($var, %def)> 303 303 ] 304 304 <?p> 305 [ $<rhs> := <nl_atom($var, %def)>306 | $<rhs> := <nl_paren($var, %def)>305 [ <rhs=nl_atom($var, %def)> 306 | <rhs=nl_paren($var, %def)> 307 307 # right assoc 308 | $<rhs> := <nl_pow($var, %def)>308 | <rhs=nl_pow($var, %def)> 309 309 ] { 310 310 die "Non-unitless exponent { $<rhs><def> }\n" 311 311 unless all($<rhs><def>.k) eq any('factor', @.fund_unitless); 312 312 $<def> = $<lhs><def>; 313 for $<rhs><def>.kv -> my Str $u, myNum $p {313 for $<rhs><def>.kv -> Str $u, Num $p { 314 314 next if $u eq 'factor'; 315 315 $<def>{$u} += $p; 316 316 } 317 $<def>.v »*=» $<rhs><def><factor>;317 $<def>.values »*=» $<rhs><def><factor>; 318 318 $<closure> := sub (Num $x --> Num) { 319 319 $<lhs><closure>.($x) ** $<rhs><closure>.($x); … … 324 324 rule nl_mult(Str $var, Num %def, Bool :$flip = False) { 325 325 { my Int $sign = $flip ?? -1 !! 1 } <!{0}>#XXX !! confuses perl6.vim 326 [ $<lhs> := <nl_atom($var, %def)>327 | $<lhs> := <nl_paren($var, %def)>328 | $<lhs> := <nl_pow($var, %def)>329 ] 330 [ <?m> [ $<rhs> := <nl_atom($var, %def)>331 | $<rhs> := <nl_paren($var, %def)>332 | $<rhs> := <nl_pow($var, %def)>326 [ <lhs=nl_atom($var, %def)> 327 | <lhs=nl_paren($var, %def)> 328 | <lhs=nl_pow($var, %def)> 329 ] 330 [ <?m> [ <rhs=nl_atom($var, %def)> 331 | <rhs=nl_paren($var, %def)> 332 | <rhs=nl_pow($var, %def)> 333 333 # really left assoc 334 | $<rhs> := <nl_mult($var, %def)>334 | <rhs=nl_mult($var, %def)> 335 335 ] { 336 336 $<def> := $.multdef($<lhs><def>, $<rhs><def>, $sign); … … 339 339 } 340 340 } 341 | '/' [ $<rhs> := <nl_atom($var, %def)>342 | $<rhs> := <nl_paren($var, %def)>343 | $<rhs> := <nl_pow($var, %def)>341 | '/' [ <rhs=nl_atom($var, %def)> 342 | <rhs=nl_paren($var, %def)> 343 | <rhs=nl_pow($var, %def)> 344 344 # really left assoc - flip the next one to fix 345 | $<rhs> := <nl_mult($var, %def, :flip)>345 | <rhs=nl_mult($var, %def, :flip)> 346 346 ] { 347 347 $<def> := $.multdef($<lhs><def>, $<rhs><def>, -$sign); … … 355 355 rule nl_add(Str $var, Num %def, Bool :$flip = False) { 356 356 { my Int $sign = $flip ?? -1 !! 1 } <!{0}>#XXX !! confuses perl6.vim 357 [ $<lhs> := <nl_atom($var, %def)>358 | $<lhs> := <nl_paren($var, %def)>359 | $<lhs> := <nl_pow($var, %def)>360 | $<lhs> := <nl_mult($var, %def)>361 ] 362 [ '+' [ $<rhs> := <nl_atom($var, %def)>363 | $<rhs> := <nl_paren($var, %def)>364 | $<rhs> := <nl_pow($var, %def)>365 | $<rhs> := <nl_mult($var, %def)>357 [ <lhs=nl_atom($var, %def)> 358 | <lhs=nl_paren($var, %def)> 359 | <lhs=nl_pow($var, %def)> 360 | <lhs=nl_mult($var, %def)> 361 ] 362 [ '+' [ <rhs=nl_atom($var, %def)> 363 | <rhs=nl_paren($var, %def)> 364 | <rhs=nl_pow($var, %def)> 365 | <rhs=nl_mult($var, %def)> 366 366 # really left assoc 367 | $<rhs> := <nl_add($var, %def)>367 | <rhs=nl_add($var, %def)> 368 368 ] { 369 369 $<def> := $.adddef($<lhs><def>, $<rhs><def>, $sign); … … 372 372 } 373 373 } 374 | '-' [ $<rhs> := <nl_atom($var, %def)>375 | $<rhs> := <nl_paren($var, %def)>376 | $<rhs> := <nl_pow($var, %def)>377 | $<rhs> := <nl_mult($var, %def)>374 | '-' [ <rhs=nl_atom($var, %def)> 375 | <rhs=nl_paren($var, %def)> 376 | <rhs=nl_pow($var, %def)> 377 | <rhs=nl_mult($var, %def)> 378 378 # really left assoc - flip the next one to fix 379 | $<rhs> := <nl_add($var, %def, :flip)>379 | <rhs=nl_add($var, %def, :flip)> 380 380 ] { 381 381 $<def> := $.adddef($<lhs><def>, $<rhs><def>, -$sign); … … 388 388 389 389 rule nl_expr(Str $var, Num %def) { 390 [ $<nl> := <nl_atom($var, %def)>391 | $<nl> := <nl_paren($var, %def)>392 | $<nl> := <nl_pow($var, %def)>393 | $<nl> := <nl_mult($var, %def)>394 | $<nl> := <nl_add($var, %def)>390 [ <nl=nl_atom($var, %def)> 391 | <nl=nl_paren($var, %def)> 392 | <nl=nl_pow($var, %def)> 393 | <nl=nl_mult($var, %def)> 394 | <nl=nl_add($var, %def)> 395 395 ] { 396 396 $<closure> := $<nl><closure>; … … 400 400 401 401 rule nl_func(Str $var, Num %def) { 402 | $<name> := [ | @.nl_units ]403 $<inner> := <nl_paren($var, %def)>402 | $<name> = [ | @.nl_units ] 403 <inner=nl_paren($var, %def)> 404 404 { 405 My Unitdef $u := %.unitsdef{$<name>};405 my Unitdef $u := %.unitsdef{$<name>}; 406 406 die "Nonlinear input unit: { $<inner><def> } should be: { $u.input_units }\n" 407 407 if !$.defeqv($<inner><def>, $u.input_units); … … 412 412 } 413 413 # ~nlfunc(...) means the inverse conversion function 414 | '~' $<name> := [ | @.nl_units ]415 $<inner> := <nl_paren($var, %def)>414 | '~' $<name> = [ | @.nl_units ] 415 <inner=nl_paren($var, %def)> 416 416 { 417 My Unitdef $u := %.unitsdef{$<name>};417 my Unitdef $u := %.unitsdef{$<name>}; 418 418 die "Nonlinear input unit: { $<inner><def> } should be: { $u.fund_units }\n" 419 419 if !$.defeqv($<inner><def>, $u.fund_units); … … 426 426 427 427 token nl_atom(Str $var, Num %def) { 428 [ $<nl> := <nl_unitdef>429 | $<nl> := <var($var, %def)>430 | $<nl> := <nl_func($var, %def)>428 [ <nl=nl_unitdef> 429 | <nl=var($var, %def)> 430 | <nl=nl_func($var, %def)> 431 431 ] { 432 432 $<closure> := $<nl><closure>; … …
