1#!perl 2 3BEGIN { 4 unshift @INC, 't'; 5 require Config; 6 if (($Config::Config{'extensions'} !~ /\bB\b/) ){ 7 print "1..0 # Skip -- Perl configured without B module\n"; 8 exit 0; 9 } 10} 11use OptreeCheck; 12use Config; 13plan tests => 18; 14 15SKIP: { 16skip "no perlio in this build", 4 unless $Config::Config{useperlio}; 17 18# The regression this was testing is that the first aelemfast, derived 19# from a lexical array, is supposed to be a BASEOP "<0>", while the 20# second, from a global, is an SVOP "<$>" or a PADOP "<#>" depending 21# on threading. In buggy versions, both showed up as SVOPs/PADOPs. See 22# B.xs:cc_opclass() for the relevant code. 23 24# All this is much simpler, now that aelemfast_lex has been broken out from 25# aelemfast 26checkOptree ( name => 'OP_AELEMFAST opclass', 27 code => sub { my @x; our @y; $x[127] + $y[-128]}, 28 strip_open_hints => 1, 29 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); 30# a <1> leavesub[1 ref] K/REFC,1 ->(end) 31# - <@> lineseq KP ->a 32# 1 <;> nextstate(main 634 optree_misc.t:25) v:>,<,% ->2 33# 2 <0> padav[@x:634,636] vM/LVINTRO ->3 34# 3 <;> nextstate(main 635 optree_misc.t:25) v:>,<,% ->4 35# 5 <1> rv2av[t4] vK/OURINTR,1 ->6 36# 4 <#> gv[*y] s ->5 37# 6 <;> nextstate(main 636 optree_misc.t:25) v:>,<,%,{ ->7 38# 9 <2> add[t6] sK/2 ->a 39# - <1> ex-aelem sK/2 ->8 40# 7 <0> aelemfast_lex[@x:634,636] sR/127 ->8 41# - <0> ex-const s ->- 42# - <1> ex-aelem sK/2 ->9 43# - <1> ex-rv2av sKR/1 ->- 44# 8 <#> aelemfast[*y] s/128 ->9 45# - <0> ex-const s/FOLD ->- 46EOT_EOT 47# a <1> leavesub[1 ref] K/REFC,1 ->(end) 48# - <@> lineseq KP ->a 49# 1 <;> nextstate(main 634 optree_misc.t:27) v:>,<,% ->2 50# 2 <0> padav[@x:634,636] vM/LVINTRO ->3 51# 3 <;> nextstate(main 635 optree_misc.t:27) v:>,<,% ->4 52# 5 <1> rv2av[t3] vK/OURINTR,1 ->6 53# 4 <$> gv(*y) s ->5 54# 6 <;> nextstate(main 636 optree_misc.t:27) v:>,<,%,{ ->7 55# 9 <2> add[t4] sK/2 ->a 56# - <1> ex-aelem sK/2 ->8 57# 7 <0> aelemfast_lex[@x:634,636] sR/127 ->8 58# - <0> ex-const s ->- 59# - <1> ex-aelem sK/2 ->9 60# - <1> ex-rv2av sKR/1 ->- 61# 8 <$> aelemfast(*y) s/128 ->9 62# - <0> ex-const s/FOLD ->- 63EONT_EONT 64 65checkOptree ( name => 'PMOP children', 66 code => sub { $foo =~ s/(a)/$1/ }, 67 strip_open_hints => 1, 68 ( $] < 5.017002 69 ? (expect => <<'EOT_EOT16', expect_nt => <<'EONT_EONT16') 70# 6 <1> leavesub[1 ref] K/REFC,1 ->(end) 71# - <@> lineseq KP ->6 72# 1 <;> nextstate(main 1 -e:1) v:>,<,%,{ ->2 73# 3 </> subst(/"(a)"/ replstart->4) KS ->6 74# - <1> ex-rv2sv sKRM/1 ->3 75# 2 <#> gvsv[*foo] s ->3 76# 5 <|> substcont(other->3) sK/1 ->(end) 77# - <1> ex-rv2sv sK/1 ->5 78# 4 <#> gvsv[*1] s ->5 79EOT_EOT16 80# 6 <1> leavesub[1 ref] K/REFC,1 ->(end) 81# - <@> lineseq KP ->6 82# 1 <;> nextstate(main 1 -e:1) v:>,<,%,{ ->2 83# 3 </> subst(/"(a)"/ replstart->4) KS ->6 84# - <1> ex-rv2sv sKRM/1 ->3 85# 2 <$> gvsv(*foo) s ->3 86# 5 <|> substcont(other->3) sK/1 ->(end) 87# - <1> ex-rv2sv sK/1 ->5 88# 4 <$> gvsv(*1) s ->5 89EONT_EONT16 90 91 : (expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'))); 92# 5 <1> leavesub[1 ref] K/REFC,1 ->(end) 93# - <@> lineseq KP ->5 94# 1 <;> nextstate(main 1 -e:1) v:>,<,%,{ ->2 95# 4 </> subst(/"(a)"/) KS ->5 96# - <1> ex-rv2sv sKRM/1 ->3 97# 2 <#> gvsv[*foo] s ->3 98# - <1> ex-rv2sv sK/1 ->4 99# 3 <#> gvsv[*1] s ->4 100EOT_EOT 101# 5 <1> leavesub[1 ref] K/REFC,1 ->(end) 102# - <@> lineseq KP ->5 103# 1 <;> nextstate(main 1 -e:1) v:>,<,%,{ ->2 104# 4 </> subst(/"(a)"/) KS ->5 105# - <1> ex-rv2sv sKRM/1 ->3 106# 2 <$> gvsv(*foo) s ->3 107# - <1> ex-rv2sv sK/1 ->4 108# 3 <$> gvsv(*1) s ->4 109EONT_EONT 110 111} #skip 112 113my $t = <<'EOT_EOT'; 114# 8 <@> leave[1 ref] vKP/REFC ->(end) 115# 1 <0> enter ->2 116# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3 117# 7 <2> sassign vKS/2 ->8 118# 5 <@> index[t2] sK/2 ->6 119# - <0> ex-pushmark s ->3 120# 3 <$> const[PV "foo"] s ->4 121# 4 <$> const[PVMG "foo"] s ->5 122# - <1> ex-rv2sv sKRM*/1 ->7 123# 6 <#> gvsv[*_] s ->7 124EOT_EOT 125my $nt = <<'EONT_EONT'; 126# 8 <@> leave[1 ref] vKP/REFC ->(end) 127# 1 <0> enter ->2 128# 2 <;> nextstate(main 1 -e:1) v:>,<,%,{ ->3 129# 7 <2> sassign vKS/2 ->8 130# 5 <@> index[t1] sK/2 ->6 131# - <0> ex-pushmark s ->3 132# 3 <$> const(PV "foo") s ->4 133# 4 <$> const(PVMG "foo") s ->5 134# - <1> ex-rv2sv sKRM*/1 ->7 135# 6 <$> gvsv(*_) s ->7 136EONT_EONT 137 138checkOptree ( name => 'index and PVBM', 139 prog => '$_ = index q(foo), q(foo)', 140 strip_open_hints => 1, 141 expect => $t, expect_nt => $nt); 142 143my $tmpfile = tempfile(); 144open my $fh, '>', $tmpfile or die "Cannot open $tmpfile: $!"; 145print $fh "no warnings;format =\n@<<<\n\$a\n@>>>\n\@b\n."; 146close $fh; 147 148checkOptree ( name => 'formats', 149 bcopts => 'STDOUT', 150 progfile => $tmpfile, 151 strip_open_hints => 1, 152 skip => ($] < 5.017003), 153 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); 154# main::STDOUT (FORMAT): 155# c <1> leavewrite[1 ref] K/REFC,1 ->(end) 156# - <@> lineseq KP ->c 157# 1 <;> nextstate(main 1 -:4) v:>,<,% ->2 158# 5 <@> formline vK/2 ->6 159# 2 <0> pushmark s ->3 160# 3 <$> const[PV "@<<<\n"] s ->4 161# - <@> lineseq lK ->5 162# - <0> ex-nextstate v ->4 163# - <1> ex-rv2sv sK/1 ->- 164# 4 <#> gvsv[*a] s ->5 165# 6 <;> nextstate(main 1 -:6) v:>,<,% ->7 166# b <@> formline sK/2 ->c 167# 7 <0> pushmark s ->8 168# 8 <$> const[PV "@>>>\n"] s ->9 169# - <@> lineseq lK ->b 170# - <0> ex-nextstate v ->9 171# a <1> rv2av[t3] lK/1 ->b 172# 9 <#> gv[*b] s ->a 173EOT_EOT 174# main::STDOUT (FORMAT): 175# c <1> leavewrite[1 ref] K/REFC,1 ->(end) 176# - <@> lineseq KP ->c 177# 1 <;> nextstate(main 1 -:4) v:>,<,% ->2 178# 5 <@> formline vK/2 ->6 179# 2 <0> pushmark s ->3 180# 3 <$> const(PV "@<<<\n") s ->4 181# - <@> lineseq lK ->5 182# - <0> ex-nextstate v ->4 183# - <1> ex-rv2sv sK/1 ->- 184# 4 <$> gvsv(*a) s ->5 185# 6 <;> nextstate(main 1 -:6) v:>,<,% ->7 186# b <@> formline sK/2 ->c 187# 7 <0> pushmark s ->8 188# 8 <$> const(PV "@>>>\n") s ->9 189# - <@> lineseq lK ->b 190# - <0> ex-nextstate v ->9 191# a <1> rv2av[t3] lK/1 ->b 192# 9 <$> gv(*b) s ->a 193EONT_EONT 194 195checkOptree ( name => 'padrange', 196 code => sub { my ($x,$y); @a = ($x,$y); ($x,$y) = @a }, 197 strip_open_hints => 1, 198 skip => ($] < 5.017006), 199 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); 200# f <1> leavesub[1 ref] K/REFC,1 ->(end) 201# - <@> lineseq KP ->f 202# 1 <;> nextstate(main 1 -e:1) v:>,<,% ->2 203# - <@> list vKP ->3 204# 2 <0> padrange[$x:1,2; $y:1,2] vM/LVINTRO,2 ->3 205# - <0> padsv[$x:1,2] vM/LVINTRO ->- 206# - <0> padsv[$y:1,2] vM/LVINTRO ->- 207# 3 <;> nextstate(main 2 -e:1) v:>,<,% ->4 208# 8 <2> aassign[t4] vKS ->9 209# - <1> ex-list lKP ->5 210# 4 <0> padrange[$x:1,2; $y:1,2] l/2 ->5 211# - <0> padsv[$x:1,2] l ->- 212# - <0> padsv[$y:1,2] l ->- 213# - <1> ex-list lK ->8 214# 5 <0> pushmark s ->6 215# 7 <1> rv2av[t3] lKRM*/1 ->8 216# 6 <#> gv[*a] s ->7 217# 9 <;> nextstate(main 2 -e:1) v:>,<,%,{ ->a 218# e <2> aassign[t6] KS ->f 219# - <1> ex-list lK ->d 220# a <0> pushmark s ->b 221# c <1> rv2av[t5] lK/1 ->d 222# b <#> gv[*a] s ->c 223# - <1> ex-list lKPRM* ->e 224# d <0> padrange[$x:1,2; $y:1,2] lRM/2 ->e 225# - <0> padsv[$x:1,2] lRM* ->- 226# - <0> padsv[$y:1,2] lRM* ->- 227EOT_EOT 228# f <1> leavesub[1 ref] K/REFC,1 ->(end) 229# - <@> lineseq KP ->f 230# 1 <;> nextstate(main 1 -e:1) v:>,<,% ->2 231# - <@> list vKP ->3 232# 2 <0> padrange[$x:1,2; $y:1,2] vM/LVINTRO,2 ->3 233# - <0> padsv[$x:1,2] vM/LVINTRO ->- 234# - <0> padsv[$y:1,2] vM/LVINTRO ->- 235# 3 <;> nextstate(main 2 -e:1) v:>,<,% ->4 236# 8 <2> aassign[t4] vKS ->9 237# - <1> ex-list lKP ->5 238# 4 <0> padrange[$x:1,2; $y:1,2] l/2 ->5 239# - <0> padsv[$x:1,2] l ->- 240# - <0> padsv[$y:1,2] l ->- 241# - <1> ex-list lK ->8 242# 5 <0> pushmark s ->6 243# 7 <1> rv2av[t3] lKRM*/1 ->8 244# 6 <$> gv(*a) s ->7 245# 9 <;> nextstate(main 2 -e:1) v:>,<,%,{ ->a 246# e <2> aassign[t6] KS ->f 247# - <1> ex-list lK ->d 248# a <0> pushmark s ->b 249# c <1> rv2av[t5] lK/1 ->d 250# b <$> gv(*a) s ->c 251# - <1> ex-list lKPRM* ->e 252# d <0> padrange[$x:1,2; $y:1,2] lRM/2 ->e 253# - <0> padsv[$x:1,2] lRM* ->- 254# - <0> padsv[$y:1,2] lRM* ->- 255EONT_EONT 256 257checkOptree ( name => 'padrange and @_', 258 code => sub { my ($a,$b) = @_; 259 my ($c,$d) = @X::_; 260 package Y; 261 my ($e,$f) = @_; 262 }, 263 strip_open_hints => 1, 264 skip => ($] < 5.017006), 265 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); 266# d <1> leavesub[1 ref] K/REFC,1 ->(end) 267# - <@> lineseq KP ->d 268# 1 <;> nextstate(main 1 p3:1) v:>,<,% ->2 269# 3 <2> aassign[t5] vKS ->4 270# - <1> ex-list lK ->- 271# 2 <0> padrange[$a:1,4; $b:1,4] l*/LVINTRO,2 ->3 272# - <1> rv2av[t4] lK/1 ->- 273# - <#> gv[*_] s ->- 274# - <1> ex-list lKPRM* ->3 275# - <0> pushmark sRM*/LVINTRO ->- 276# - <0> padsv[$a:1,4] lRM*/LVINTRO ->- 277# - <0> padsv[$b:1,4] lRM*/LVINTRO ->- 278# 4 <;> nextstate(main 2 p3:2) v:>,<,% ->5 279# 9 <2> aassign[t10] vKS ->a 280# - <1> ex-list lK ->8 281# 5 <0> pushmark s ->6 282# 7 <1> rv2av[t9] lK/1 ->8 283# 6 <#> gv[*X::_] s ->7 284# - <1> ex-list lKPRM* ->9 285# 8 <0> padrange[$c:2,4; $d:2,4] lRM/LVINTRO,2 ->9 286# - <0> padsv[$c:2,4] lRM*/LVINTRO ->- 287# - <0> padsv[$d:2,4] lRM*/LVINTRO ->- 288# a <;> nextstate(Y 3 p3:4) v:>,<,%,{ ->b 289# c <2> aassign[t15] KS ->d 290# - <1> ex-list lK ->- 291# b <0> padrange[$e:3,4; $f:3,4] l*/LVINTRO,2 ->c 292# - <1> rv2av[t14] lK/1 ->- 293# - <#> gv[*_] s ->- 294# - <1> ex-list lKPRM* ->c 295# - <0> pushmark sRM*/LVINTRO ->- 296# - <0> padsv[$e:3,4] lRM*/LVINTRO ->- 297# - <0> padsv[$f:3,4] lRM*/LVINTRO ->- 298EOT_EOT 299# d <1> leavesub[1 ref] K/REFC,1 ->(end) 300# - <@> lineseq KP ->d 301# 1 <;> nextstate(main 1 p3:1) v:>,<,% ->2 302# 3 <2> aassign[t5] vKS ->4 303# - <1> ex-list lK ->- 304# 2 <0> padrange[$a:1,4; $b:1,4] l*/LVINTRO,2 ->3 305# - <1> rv2av[t4] lK/1 ->- 306# - <$> gv(*_) s ->- 307# - <1> ex-list lKPRM* ->3 308# - <0> pushmark sRM*/LVINTRO ->- 309# - <0> padsv[$a:1,4] lRM*/LVINTRO ->- 310# - <0> padsv[$b:1,4] lRM*/LVINTRO ->- 311# 4 <;> nextstate(main 2 p3:2) v:>,<,% ->5 312# 9 <2> aassign[t10] vKS ->a 313# - <1> ex-list lK ->8 314# 5 <0> pushmark s ->6 315# 7 <1> rv2av[t9] lK/1 ->8 316# 6 <$> gv(*X::_) s ->7 317# - <1> ex-list lKPRM* ->9 318# 8 <0> padrange[$c:2,4; $d:2,4] lRM/LVINTRO,2 ->9 319# - <0> padsv[$c:2,4] lRM*/LVINTRO ->- 320# - <0> padsv[$d:2,4] lRM*/LVINTRO ->- 321# a <;> nextstate(Y 3 p3:4) v:>,<,%,{ ->b 322# c <2> aassign[t15] KS ->d 323# - <1> ex-list lK ->- 324# b <0> padrange[$e:3,4; $f:3,4] l*/LVINTRO,2 ->c 325# - <1> rv2av[t14] lK/1 ->- 326# - <$> gv(*_) s ->- 327# - <1> ex-list lKPRM* ->c 328# - <0> pushmark sRM*/LVINTRO ->- 329# - <0> padsv[$e:3,4] lRM*/LVINTRO ->- 330# - <0> padsv[$f:3,4] lRM*/LVINTRO ->- 331EONT_EONT 332 333checkOptree ( name => 'consolidate padranges', 334 code => sub { my ($a,$b); my ($c,$d); 1 }, 335 strip_open_hints => 1, 336 skip => ($] < 5.017006), 337 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); 338# 5 <1> leavesub[1 ref] K/REFC,1 ->(end) 339# - <@> lineseq KP ->5 340# 1 <;> nextstate(main 900 optree_misc.t:334) v:>,<,% ->2 341# - <@> list vKP ->- 342# 2 <0> padrange[$a:900,902; $b:900,902; $c:901,902; $d:901,902] vM/LVINTRO,4 ->3 343# - <0> padsv[$a:900,902] vM/LVINTRO ->- 344# - <0> padsv[$b:900,902] vM/LVINTRO ->- 345# - <;> nextstate(main 901 optree_misc.t:334) v:>,<,% ->- 346# - <@> list vKP ->3 347# - <0> pushmark vM/LVINTRO ->- 348# - <0> padsv[$c:901,902] vM/LVINTRO ->- 349# - <0> padsv[$d:901,902] vM/LVINTRO ->- 350# 3 <;> nextstate(main 902 optree_misc.t:334) v:>,<,%,{ ->4 351# 4 <$> const[IV 1] s ->5 352EOT_EOT 353# 5 <1> leavesub[1 ref] K/REFC,1 ->(end) 354# - <@> lineseq KP ->5 355# 1 <;> nextstate(main 900 optree_misc.t:334) v:>,<,% ->2 356# - <@> list vKP ->- 357# 2 <0> padrange[$a:900,902; $b:900,902; $c:901,902; $d:901,902] vM/LVINTRO,4 ->3 358# - <0> padsv[$a:900,902] vM/LVINTRO ->- 359# - <0> padsv[$b:900,902] vM/LVINTRO ->- 360# - <;> nextstate(main 901 optree_misc.t:334) v:>,<,% ->- 361# - <@> list vKP ->3 362# - <0> pushmark vM/LVINTRO ->- 363# - <0> padsv[$c:901,902] vM/LVINTRO ->- 364# - <0> padsv[$d:901,902] vM/LVINTRO ->- 365# 3 <;> nextstate(main 902 optree_misc.t:334) v:>,<,%,{ ->4 366# 4 <$> const(IV 1) s ->5 367EONT_EONT 368 369 370checkOptree ( name => 'consolidate padranges and singletons', 371 code => sub { my ($a,$b); my $c; my ($d,$e); 372 my @f; my $g; my ($h,$i); my %j; 1 }, 373 strip_open_hints => 1, 374 skip => ($] < 5.017006), 375 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); 376# 5 <1> leavesub[1 ref] K/REFC,1 ->(end) 377# - <@> lineseq KP ->5 378# 1 <;> nextstate(main 903 optree_misc.t:371) v:>,<,% ->2 379# - <@> list vKP ->- 380# 2 <0> padrange[$a:903,910; $b:903,910; $c:904,910; $d:905,910; $e:905,910; @f:906,910; $g:907,910; $h:908,910; $i:908,910; %j:909,910] vM/LVINTRO,10 ->3 381# - <0> padsv[$a:903,910] vM/LVINTRO ->- 382# - <0> padsv[$b:903,910] vM/LVINTRO ->- 383# - <;> nextstate(main 904 optree_misc.t:371) v:>,<,% ->- 384# - <0> padsv[$c:904,910] vM/LVINTRO ->- 385# - <;> nextstate(main 905 optree_misc.t:371) v:>,<,%,{ ->- 386# - <@> list vKP ->- 387# - <0> pushmark vM/LVINTRO ->- 388# - <0> padsv[$d:905,910] vM/LVINTRO ->- 389# - <0> padsv[$e:905,910] vM/LVINTRO ->- 390# - <;> nextstate(main 906 optree_misc.t:372) v:>,<,%,{ ->- 391# - <0> padav[@f:906,910] vM/LVINTRO ->- 392# - <;> nextstate(main 907 optree_misc.t:372) v:>,<,%,{ ->- 393# - <0> padsv[$g:907,910] vM/LVINTRO ->- 394# - <;> nextstate(main 908 optree_misc.t:372) v:>,<,%,{ ->- 395# - <@> list vKP ->- 396# - <0> pushmark vM/LVINTRO ->- 397# - <0> padsv[$h:908,910] vM/LVINTRO ->- 398# - <0> padsv[$i:908,910] vM/LVINTRO ->- 399# - <;> nextstate(main 909 optree_misc.t:372) v:>,<,%,{ ->- 400# - <0> padhv[%j:909,910] vM/LVINTRO ->3 401# 3 <;> nextstate(main 910 optree_misc.t:372) v:>,<,%,{ ->4 402# 4 <$> const[IV 1] s ->5 403EOT_EOT 404# 5 <1> leavesub[1 ref] K/REFC,1 ->(end) 405# - <@> lineseq KP ->5 406# 1 <;> nextstate(main 903 optree_misc.t:371) v:>,<,% ->2 407# - <@> list vKP ->- 408# 2 <0> padrange[$a:903,910; $b:903,910; $c:904,910; $d:905,910; $e:905,910; @f:906,910; $g:907,910; $h:908,910; $i:908,910; %j:909,910] vM/LVINTRO,10 ->3 409# - <0> padsv[$a:903,910] vM/LVINTRO ->- 410# - <0> padsv[$b:903,910] vM/LVINTRO ->- 411# - <;> nextstate(main 904 optree_misc.t:371) v:>,<,% ->- 412# - <0> padsv[$c:904,910] vM/LVINTRO ->- 413# - <;> nextstate(main 905 optree_misc.t:371) v:>,<,%,{ ->- 414# - <@> list vKP ->- 415# - <0> pushmark vM/LVINTRO ->- 416# - <0> padsv[$d:905,910] vM/LVINTRO ->- 417# - <0> padsv[$e:905,910] vM/LVINTRO ->- 418# - <;> nextstate(main 906 optree_misc.t:372) v:>,<,%,{ ->- 419# - <0> padav[@f:906,910] vM/LVINTRO ->- 420# - <;> nextstate(main 907 optree_misc.t:372) v:>,<,%,{ ->- 421# - <0> padsv[$g:907,910] vM/LVINTRO ->- 422# - <;> nextstate(main 908 optree_misc.t:372) v:>,<,%,{ ->- 423# - <@> list vKP ->- 424# - <0> pushmark vM/LVINTRO ->- 425# - <0> padsv[$h:908,910] vM/LVINTRO ->- 426# - <0> padsv[$i:908,910] vM/LVINTRO ->- 427# - <;> nextstate(main 909 optree_misc.t:372) v:>,<,%,{ ->- 428# - <0> padhv[%j:909,910] vM/LVINTRO ->3 429# 3 <;> nextstate(main 910 optree_misc.t:372) v:>,<,%,{ ->4 430# 4 <$> const(IV 1) s ->5 431EONT_EONT 432 433 434checkOptree ( name => 'm?x?', 435 code => sub { m?x?; }, 436 strip_open_hints => 1, 437 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); 438# 3 <1> leavesub[1 ref] K/REFC,1 ->(end) 439# - <@> lineseq KP ->3 440# 1 <;> nextstate(main 914 optree_misc.t:434) v:>,<,%,{ ->2 441# 2 </> match(/"x"/) /RTIME ->3 442EOT_EOT 443# 3 <1> leavesub[1 ref] K/REFC,1 ->(end) 444# - <@> lineseq KP ->3 445# 1 <;> nextstate(main 914 optree_misc.t:434) v:>,<,%,{ ->2 446# 2 </> match(/"x"/) /RTIME ->3 447EONT_EONT 448 449 450unlink $tmpfile; 451