# New Ticket Created by Alex Gutteridge
# Please include the string: [perl #29509]
# in the subject line of all future correspondence about this issue.
# <URL: http://rt.perl.org:80/rt3/Ticket/Display.html?id=29509 >
Hi,
The example Perl6 'Game of Life' program
(parrot/languages/perl6/examples/life.p6) is broken. As it stands it
doesn't parse correctly but this is easily fixed by adding the correct
string concatenation operator '~':
--- ../../parrot_cvs/parrot/languages/perl6/examples/life.p6 Tue
Oct 8 08:27:32 2002
+++ examples/life.p6 Tue May 11 15:46:46 2004
@@ -57,21 +57,21 @@
sub main() {
my $world =
- " " _
- " * " _
- " * " _
- "*** " _
- " " _
- " " _
- " " _
- " " _
- " " _
- " " _
- " " _
- " " _
- " * " _
- " * " _
- " *** " _
+ " " ~
+ " * " ~
+ " * " ~
+ "*** " ~
+ " " ~
+ " " ~
+ " " ~
+ " " ~
+ " " ~
+ " " ~
+ " " ~
+ " " ~
+ " * " ~
+ " * " ~
+ " *** " ~
" "
;
However, now parrot crashes with a segfault somewhere in the Generate
subroutine:
Error: '/tmp_mnt/nfs6/vol_vol1_homes/alexg/parrot_cvs/parrot/parrot -r
languages/perl6/examples/life.imc ' failed
died with signal 11 (SIGSEGV)
and dumped core
Stopped at languages/perl6/perl6 line 346
main::mydie(139,
'/tmp_mnt/nfs6/vol_vol1_homes/alexg/parrot_cvs/parrot/parrot -r l...')
called at languages/perl6/perl6 line 829
main::pass4('languages/perl6/examples/life.imc',
'languages/perl6/examples/life.warn') called at languages/perl6/perl6
line 751
main::pass2('languages/perl6/examples/life.imc',
'languages/perl6/examples/life.warn') called at languages/perl6/perl6
line 444
main::output_tree('P6C::prog=ARRAY(0x8e639fc)',
'languages/perl6/examples/life.p6',
'languages/perl6/examples/life.warn') called at languages/perl6/perl6
line 509
main::pass1('Parse::RecDescent=HASH(0x8e9dac4)',
'languages/perl6/examples/life.p6',
'languages/perl6/examples/life.warn', undef) called at
languages/perl6/perl6 line 571
main::run() called at languages/perl6/perl6 line 226
I've had a look at the generated (and attached) imc file, and can't see
anything obviously crazy. I'm not sure how to go about debugging this
further.
This is using a fresh cvs checkout: (May 11 2004 15:54 GMT) running on
Linux 2.4.22 i686
--
Alex Gutteridge
European Bioinformatics Institute
Cambridge UK
Tel: 01223 492537
Email: [EMAIL PROTECTED]
.sub __main
new_pad 0
call __setup
.local Sub map_sub
newsub map_sub, .Sub, _map
store_lex -1, "&map", map_sub
.local Sub length_sub
newsub length_sub, .Sub, _length
store_lex -1, "&length", length_sub
.local Sub join_sub
newsub join_sub, .Sub, _join
store_lex -1, "&join", join_sub
.local Sub Print_sub
newsub Print_sub, .Sub, _Print
store_lex -1, "&Print", Print_sub
.local Sub index_sub
newsub index_sub, .Sub, _index
store_lex -1, "&index", index_sub
.local Sub print1_sub
newsub print1_sub, .Sub, _print1
store_lex -1, "&print1", print1_sub
.local Sub main_sub
newsub main_sub, .Sub, _main
store_lex -1, "&main", main_sub
.local Sub print_sub
newsub print_sub, .Sub, _print
store_lex -1, "&print", print_sub
.local Sub install_catch_sub
newsub install_catch_sub, .Sub, _install_catch
store_lex -1, "&install_catch", install_catch_sub
.local Sub reverse_sub
newsub reverse_sub, .Sub, _reverse
store_lex -1, "&reverse", reverse_sub
.local Sub time_sub
newsub time_sub, .Sub, _time
store_lex -1, "&time", time_sub
.local Sub sleep_sub
newsub sleep_sub, .Sub, _sleep
store_lex -1, "&sleep", sleep_sub
.local Sub Generate_sub
newsub Generate_sub, .Sub, _Generate
store_lex -1, "&Generate", Generate_sub
.local Sub grep_sub
newsub grep_sub, .Sub, _grep
store_lex -1, "&grep", grep_sub
.local Sub substr_sub
newsub substr_sub, .Sub, _substr
store_lex -1, "&substr", substr_sub
.local Sub die_sub
newsub die_sub, .Sub, _die
store_lex -1, "&die", die_sub
.local Sub pop_catch_sub
newsub pop_catch_sub, .Sub, _pop_catch
store_lex -1, "&pop_catch", pop_catch_sub
.local Sub warn_sub
newsub warn_sub, .Sub, _warn
store_lex -1, "&warn", warn_sub
.local Sub exit_sub
newsub exit_sub, .Sub, _exit
store_lex -1, "&exit", exit_sub
main_sub(P5)
pop_pad
end
.end
.sub _Print prototyped
.param PerlHash Sunknown_named3 # named args
.param PerlUndef _SV_world # Positional param $world
# Argument handling
if I0 goto L_got_params182
if I1 >= 2 goto L_skip_param__SV_world183
exists $I466, Sunknown_named3["world"]
unless $I466 goto L_skip_param__SV_world183
_SV_world = Sunknown_named3["world"]
delete Sunknown_named3["world"]
L_skip_param__SV_world183:
L_got_params182:
# Named locals:
.local PerlUndef _SV_i1
_SV_i1 = new PerlUndef
# constructed from "sub" or "rule"
# source: tree
_SV_i1 = 0
goto L_loop139
L_loop138:
L_141:
find_lex $P306, "&print1"
$P307 = new PerlHash # dynamically-named args
# Computing value of arg 0 (bound to param PerlUndef $a)
find_lex $P308, "&substr"
$P309 = new PerlArray # slurpy array arg
$P310 = new PerlHash # dynamically-named args
# Computing value of arg 0 (bound to param PerlArray @params)
$P311 = new PerlArray
# scalar_in_context(array) from P6C::variable::val_in_context START
$P311 = 1
$P311[0] = _SV_world
# scalar_in_context(array) from P6C::variable::val_in_context END
$P313 = new PerlUndef
# append $P311 to the end of $P309 ('push @P309, [EMAIL PROTECTED]')
$I314 = 0
$I312 = $P311
L_append_loop_top144:
if $I314 >= $I312 goto L_append_loop_end145
$P313 = $P311[$I314]
push $P309, $P313
inc $I314
goto L_append_loop_top144
L_append_loop_end145:
# Computing value of arg 1 (bound to param PerlArray @params)
$P315 = new PerlUndef
$P315 = 16 # primitive_in_context from P6C::sv_literal::val
$P316 = new PerlUndef
$P316 = _SV_i1 * $P315
$P317 = new PerlArray
# scalar_in_context(array) from P6C::Binop::val START
$P317 = 1
$P317[0] = $P316
# scalar_in_context(array) from P6C::Binop::val END
$P319 = new PerlUndef
# append $P317 to the end of $P309 ('push @P309, [EMAIL PROTECTED]')
$I320 = 0
$I318 = $P317
L_append_loop_top146:
if $I320 >= $I318 goto L_append_loop_end147
$P319 = $P317[$I320]
push $P309, $P319
inc $I320
goto L_append_loop_top146
L_append_loop_end147:
# Computing value of arg 2 (bound to param PerlArray @params)
$P321 = new PerlUndef
$P321 = 16 # primitive_in_context from P6C::sv_literal::val
$P322 = new PerlArray
# scalar_in_context(array) from P6C::IMCC::primitive_in_context START
$P322 = 1
$P322[0] = $P321
# scalar_in_context(array) from P6C::IMCC::primitive_in_context END
$P324 = new PerlUndef
# append $P322 to the end of $P309 ('push @P309, [EMAIL PROTECTED]')
$I325 = 0
$I323 = $P322
L_append_loop_top148:
if $I325 >= $I323 goto L_append_loop_end149
$P324 = $P322[$I325]
push $P309, $P324
inc $I325
goto L_append_loop_top148
L_append_loop_end149:
$P326 = new PerlUndef
$P327 = $P308($P309)
$P328 = new PerlUndef
$P306($P327)
L_140:
L_143:
_SV_i1 = clone _SV_i1
inc _SV_i1
L_loop139:
$P330 = new PerlUndef
$I329 = 0
$N331 = _SV_i1
$P333 = new PerlUndef
$P333 = 16 # primitive_in_context from P6C::sv_literal::val
$N332 = $P333
if $N331 < $N332 goto L_153
goto L_comparison152
L_153:
$I329 = 1
L_comparison152:
$P330 = $I329
if $P330 goto L_loop138
L_142:
find_lex $P334, "&print"
$P335 = new PerlArray # slurpy array arg
$P336 = new PerlHash # dynamically-named args
# Computing value of arg 0 (bound to param PerlArray @params)
$P337 = new PerlUndef
$P337 = "----------------\n" # primitive_in_context from P6C::sv_literal::val
$P338 = new PerlArray
# scalar_in_context(array) from P6C::IMCC::primitive_in_context START
$P338 = 1
$P338[0] = $P337
# scalar_in_context(array) from P6C::IMCC::primitive_in_context END
$P340 = new PerlUndef
# append $P338 to the end of $P335 ('push @P335, [EMAIL PROTECTED]')
$I341 = 0
$I339 = $P338
L_append_loop_top154:
if $I341 >= $I339 goto L_append_loop_end155
$P340 = $P338[$I341]
push $P335, $P340
inc $I341
goto L_append_loop_top154
L_append_loop_end155:
$P342 = new PerlUndef
$P334($P335)
$P343 = new PerlArray
$P343 = 0
.pcc_begin_return
.return $P343 # regular (non-rule) return
.pcc_end_return
L_137:
.pcc_begin_return # fallback
.pcc_end_return
.end
.sub _main prototyped
.param PerlArray _AV_ARGS # Positional param @ARGS
# Named locals:
.local PerlUndef _SV_te2
.local PerlUndef _SV_world1
.local PerlUndef _SV_j1
.local PerlUndef _SV_ts1
.local PerlUndef _SV_gen1
_SV_te2 = new PerlUndef
_SV_world1 = new PerlUndef
_SV_j1 = new PerlUndef
_SV_ts1 = new PerlUndef
_SV_gen1 = new PerlUndef
# constructed from "sub" or "rule"
$S387 = " "
$S388 = " * "
$S389 = $S387 . $S388
$P390 = new PerlUndef
$P390 = $S389 # primitive_in_context from P6C::IMCC::Binop::do_concat
$S384 = $P390
$S385 = " * "
$S386 = $S384 . $S385
$P391 = new PerlUndef
$P391 = $S386 # primitive_in_context from P6C::IMCC::Binop::do_concat
$S381 = $P391
$S382 = "*** "
$S383 = $S381 . $S382
$P392 = new PerlUndef
$P392 = $S383 # primitive_in_context from P6C::IMCC::Binop::do_concat
$S378 = $P392
$S379 = " "
$S380 = $S378 . $S379
$P393 = new PerlUndef
$P393 = $S380 # primitive_in_context from P6C::IMCC::Binop::do_concat
$S375 = $P393
$S376 = " "
$S377 = $S375 . $S376
$P394 = new PerlUndef
$P394 = $S377 # primitive_in_context from P6C::IMCC::Binop::do_concat
$S372 = $P394
$S373 = " "
$S374 = $S372 . $S373
$P395 = new PerlUndef
$P395 = $S374 # primitive_in_context from P6C::IMCC::Binop::do_concat
$S369 = $P395
$S370 = " "
$S371 = $S369 . $S370
$P396 = new PerlUndef
$P396 = $S371 # primitive_in_context from P6C::IMCC::Binop::do_concat
$S366 = $P396
$S367 = " "
$S368 = $S366 . $S367
$P397 = new PerlUndef
$P397 = $S368 # primitive_in_context from P6C::IMCC::Binop::do_concat
$S363 = $P397
$S364 = " "
$S365 = $S363 . $S364
$P398 = new PerlUndef
$P398 = $S365 # primitive_in_context from P6C::IMCC::Binop::do_concat
$S360 = $P398
$S361 = " "
$S362 = $S360 . $S361
$P399 = new PerlUndef
$P399 = $S362 # primitive_in_context from P6C::IMCC::Binop::do_concat
$S357 = $P399
$S358 = " "
$S359 = $S357 . $S358
$P400 = new PerlUndef
$P400 = $S359 # primitive_in_context from P6C::IMCC::Binop::do_concat
$S354 = $P400
$S355 = " * "
$S356 = $S354 . $S355
$P401 = new PerlUndef
$P401 = $S356 # primitive_in_context from P6C::IMCC::Binop::do_concat
$S351 = $P401
$S352 = " * "
$S353 = $S351 . $S352
$P402 = new PerlUndef
$P402 = $S353 # primitive_in_context from P6C::IMCC::Binop::do_concat
$S348 = $P402
$S349 = " *** "
$S350 = $S348 . $S349
$P403 = new PerlUndef
$P403 = $S350 # primitive_in_context from P6C::IMCC::Binop::do_concat
$S345 = $P403
$S346 = " "
$S347 = $S345 . $S346
$P404 = new PerlUndef
$P404 = $S347 # primitive_in_context from P6C::IMCC::Binop::do_concat
# ASSIGN TO $world
_SV_world1 = clone $P404
# source: tree
# Base for indexing
$P406 = global "_AV_ARGS"
# done; result in $P406
# Indexing expression
# done; result in 0
$I408 = 0
$P407 = $P406[$I408]
# LOGICAL OR
$P405 = $P407
if $P405 goto L_logical_or158
$P409 = new PerlUndef
$P409 = 100 # primitive_in_context from P6C::sv_literal::val
$P405 = $P409
# END_LOGICAL_OR
L_logical_or158:
# ASSIGN TO $gen
_SV_gen1 = clone $P405
find_lex $P410, "&print"
$P411 = new PerlArray # slurpy array arg
$P412 = new PerlHash # dynamically-named args
# Computing value of arg 0 (bound to param PerlArray @params)
# ValueList in array context
$P413 = new PerlArray
# START array flattening.
$I415 = 0
$P413[$I415] = "Running "
inc $I415
$P418 = new PerlArray
# scalar_in_context(array) from P6C::variable::val_in_context START
$P418 = 1
$P418[0] = _SV_gen1
# scalar_in_context(array) from P6C::variable::val_in_context END
$I414 = $P418
goto L_160
L_159:
dec $I414
$P417 = $P418[$I414]
$I416 = $I415 + $I414
$P413[$I416] = $P417
L_160:
if $I414 != 0 goto L_159
$I414 = $P418
$I415 = $I415 + $I414
$P413[$I415] = " generations\n"
inc $I415
# END array flattening
$P420 = new PerlUndef
# append $P413 to the end of $P411 ('push @P411, [EMAIL PROTECTED]')
$I421 = 0
$I419 = $P413
L_append_loop_top161:
if $I421 >= $I419 goto L_append_loop_end162
$P420 = $P413[$I421]
push $P411, $P420
inc $I421
goto L_append_loop_top161
L_append_loop_end162:
$P422 = new PerlUndef
$P410($P411)
find_lex $P423, "&Print"
$P424 = new PerlHash # dynamically-named args
# Computing value of arg 0 (bound to param PerlUndef $world)
$P425 = new PerlUndef
$P426 = $P423($P424, _SV_world1)
find_lex $P427, "&time"
$P428 = new PerlHash # dynamically-named args
$P429 = new PerlUndef
$P430 = $P427()
# ASSIGN TO $ts
_SV_ts1 = clone $P430
_SV_j1 = 0
goto L_loop167
L_loop166:
L_169:
# Base for indexing
find_lex $P431, "&Generate"
$P432 = new PerlHash # dynamically-named args
# Computing value of arg 0 (bound to param PerlUndef $input)
$P433 = new PerlUndef
$P434 = $P431($P432, _SV_world1)
# done; result in $P434
# Indexing expression
# done; result in 0
$I436 = 0
$P435 = $P434[$I436]
# ASSIGN TO $world
_SV_world1 = clone $P435
L_168:
L_171:
_SV_j1 = clone _SV_j1
inc _SV_j1
L_loop167:
$P438 = new PerlUndef
$I437 = 0
$N439 = _SV_j1
$N440 = _SV_gen1
if $N439 < $N440 goto L_174
goto L_comparison173
L_174:
$I437 = 1
L_comparison173:
$P438 = $I437
if $P438 goto L_loop166
L_170:
find_lex $P441, "&time"
$P442 = new PerlHash # dynamically-named args
$P443 = new PerlUndef
$P444 = $P441()
# ASSIGN TO $te
_SV_te2 = clone $P444
find_lex $P445, "&Print"
$P446 = new PerlHash # dynamically-named args
# Computing value of arg 0 (bound to param PerlUndef $world)
$P447 = new PerlUndef
$P448 = $P445($P446, _SV_world1)
find_lex $P449, "&print"
$P450 = new PerlArray # slurpy array arg
$P451 = new PerlHash # dynamically-named args
# Computing value of arg 0 (bound to param PerlArray @params)
# ValueList in array context
$P452 = new PerlArray
# START array flattening.
$I454 = 0
$P452[$I454] = "Gens/s "
inc $I454
$P457 = new PerlUndef
$P457 = _SV_te2 - _SV_ts1
$P458 = new PerlUndef
$P458 = _SV_gen1 / $P457
$P459 = new PerlArray
# scalar_in_context(array) from P6C::Binop::val START
$P459 = 1
$P459[0] = $P458
# scalar_in_context(array) from P6C::Binop::val END
$I453 = $P459
goto L_178
L_177:
dec $I453
$P456 = $P459[$I453]
$I455 = $I454 + $I453
$P452[$I455] = $P456
L_178:
if $I453 != 0 goto L_177
$I453 = $P459
$I454 = $I454 + $I453
$P452[$I454] = "\n"
inc $I454
# END array flattening
$P461 = new PerlUndef
# append $P452 to the end of $P450 ('push @P450, [EMAIL PROTECTED]')
$I462 = 0
$I460 = $P452
L_append_loop_top179:
if $I462 >= $I460 goto L_append_loop_end180
$P461 = $P452[$I462]
push $P450, $P461
inc $I462
goto L_append_loop_top179
L_append_loop_end180:
$P463 = new PerlUndef
$P449($P450)
$P464 = new PerlArray
$P464 = 0
.pcc_begin_return
.return $P464 # regular (non-rule) return
.pcc_end_return
L_157:
.pcc_begin_return # fallback
.pcc_end_return
.end
.sub _Generate prototyped
.param PerlHash Sunknown_named9 # named args
.param PerlUndef _SV_input # Positional param $input
# Argument handling
if I0 goto L_got_params185
if I1 >= 2 goto L_skip_param__SV_input186
exists $I468, Sunknown_named9["input"]
unless $I468 goto L_skip_param__SV_input186
_SV_input = Sunknown_named9["input"]
delete Sunknown_named9["input"]
L_skip_param__SV_input186:
L_got_params185:
# Named locals:
.local PerlUndef _SV_n3
.local PerlUndef _SV_cell1
.local PerlUndef _SV_output1
.local PerlUndef _SV_death1
.local PerlUndef _SV_i1
.local PerlUndef _SV_len1
.local PerlUndef _SV_offset1
.local PerlUndef _SV_neighbours1
.local PerlUndef _SV_pos1
_SV_n3 = new PerlUndef
_SV_cell1 = new PerlUndef
_SV_output1 = new PerlUndef
_SV_death1 = new PerlUndef
_SV_i1 = new PerlUndef
_SV_len1 = new PerlUndef
_SV_offset1 = new PerlUndef
_SV_neighbours1 = new PerlUndef
_SV_pos1 = new PerlUndef
# constructed from "sub" or "rule"
# source: tree
_SV_len1 = 256
# source: tree
_SV_death1 = " ** "
# ASSIGN TO $output
_SV_output1 = clone _SV_input
_SV_cell1 = 0
goto L_loop3
L_loop2:
L_5:
_SV_neighbours1 = 0
$P1 = new PerlUndef
$P1 = _SV_cell1 + _SV_len1
# ASSIGN TO $i
_SV_i1 = clone $P1
$P3 = new PerlUndef
$I2 = 0
find_lex $P4, "&substr"
$P5 = new PerlArray # slurpy array arg
$P6 = new PerlHash # dynamically-named args
# Computing value of arg 0 (bound to param PerlArray @params)
$P7 = new PerlArray
# scalar_in_context(array) from P6C::variable::val_in_context START
$P7 = 1
$P7[0] = _SV_input
# scalar_in_context(array) from P6C::variable::val_in_context END
$P9 = new PerlUndef
# append $P7 to the end of $P5 ('push @P5, [EMAIL PROTECTED]')
$I10 = 0
$I8 = $P7
L_append_loop_top9:
if $I10 >= $I8 goto L_append_loop_end10
$P9 = $P7[$I10]
push $P5, $P9
inc $I10
goto L_append_loop_top9
L_append_loop_end10:
# Computing value of arg 1 (bound to param PerlArray @params)
$P11 = new PerlUndef
$P11 = 1 # primitive_in_context from P6C::sv_literal::val
$P12 = new PerlUndef
$P12 = _SV_i1 - $P11
$P13 = new PerlUndef
$P13 = $P12 % _SV_len1
$P14 = new PerlArray
# scalar_in_context(array) from P6C::Binop::val START
$P14 = 1
$P14[0] = $P13
# scalar_in_context(array) from P6C::Binop::val END
$P16 = new PerlUndef
# append $P14 to the end of $P5 ('push @P5, [EMAIL PROTECTED]')
$I17 = 0
$I15 = $P14
L_append_loop_top11:
if $I17 >= $I15 goto L_append_loop_end12
$P16 = $P14[$I17]
push $P5, $P16
inc $I17
goto L_append_loop_top11
L_append_loop_end12:
# Computing value of arg 2 (bound to param PerlArray @params)
$P18 = new PerlUndef
$P18 = 1 # primitive_in_context from P6C::sv_literal::val
$P19 = new PerlArray
# scalar_in_context(array) from P6C::IMCC::primitive_in_context START
$P19 = 1
$P19[0] = $P18
# scalar_in_context(array) from P6C::IMCC::primitive_in_context END
$P21 = new PerlUndef
# append $P19 to the end of $P5 ('push @P5, [EMAIL PROTECTED]')
$I22 = 0
$I20 = $P19
L_append_loop_top13:
if $I22 >= $I20 goto L_append_loop_end14
$P21 = $P19[$I22]
push $P5, $P21
inc $I22
goto L_append_loop_top13
L_append_loop_end14:
$P23 = new PerlUndef
$P24 = $P4($P5)
$S25 = $P24
$P27 = new PerlUndef
$P27 = "*" # primitive_in_context from P6C::sv_literal::val
$S26 = $P27
if $S25 == $S26 goto L_16
goto L_comparison8
L_16:
$I2 = 1
L_comparison8:
$P3 = $I2
unless $P3 goto L_guard_if17
_SV_neighbours1 = clone _SV_neighbours1
inc _SV_neighbours1
L_guard_if17:
$P29 = new PerlUndef
$I28 = 0
find_lex $P30, "&substr"
$P31 = new PerlArray # slurpy array arg
$P32 = new PerlHash # dynamically-named args
# Computing value of arg 0 (bound to param PerlArray @params)
$P33 = new PerlArray
# scalar_in_context(array) from P6C::variable::val_in_context START
$P33 = 1
$P33[0] = _SV_input
# scalar_in_context(array) from P6C::variable::val_in_context END
$P35 = new PerlUndef
# append $P33 to the end of $P31 ('push @P31, [EMAIL PROTECTED]')
$I36 = 0
$I34 = $P33
L_append_loop_top20:
if $I36 >= $I34 goto L_append_loop_end21
$P35 = $P33[$I36]
push $P31, $P35
inc $I36
goto L_append_loop_top20
L_append_loop_end21:
# Computing value of arg 1 (bound to param PerlArray @params)
$P37 = new PerlUndef
$P37 = 1 # primitive_in_context from P6C::sv_literal::val
$P38 = new PerlUndef
$P38 = _SV_i1 + $P37
$P39 = new PerlUndef
$P39 = $P38 % _SV_len1
$P40 = new PerlArray
# scalar_in_context(array) from P6C::Binop::val START
$P40 = 1
$P40[0] = $P39
# scalar_in_context(array) from P6C::Binop::val END
$P42 = new PerlUndef
# append $P40 to the end of $P31 ('push @P31, [EMAIL PROTECTED]')
$I43 = 0
$I41 = $P40
L_append_loop_top22:
if $I43 >= $I41 goto L_append_loop_end23
$P42 = $P40[$I43]
push $P31, $P42
inc $I43
goto L_append_loop_top22
L_append_loop_end23:
# Computing value of arg 2 (bound to param PerlArray @params)
$P44 = new PerlUndef
$P44 = 1 # primitive_in_context from P6C::sv_literal::val
$P45 = new PerlArray
# scalar_in_context(array) from P6C::IMCC::primitive_in_context START
$P45 = 1
$P45[0] = $P44
# scalar_in_context(array) from P6C::IMCC::primitive_in_context END
$P47 = new PerlUndef
# append $P45 to the end of $P31 ('push @P31, [EMAIL PROTECTED]')
$I48 = 0
$I46 = $P45
L_append_loop_top24:
if $I48 >= $I46 goto L_append_loop_end25
$P47 = $P45[$I48]
push $P31, $P47
inc $I48
goto L_append_loop_top24
L_append_loop_end25:
$P49 = new PerlUndef
$P50 = $P30($P31)
$S51 = $P50
$P53 = new PerlUndef
$P53 = "*" # primitive_in_context from P6C::sv_literal::val
$S52 = $P53
if $S51 == $S52 goto L_27
goto L_comparison19
L_27:
$I28 = 1
L_comparison19:
$P29 = $I28
unless $P29 goto L_guard_if28
_SV_neighbours1 = clone _SV_neighbours1
inc _SV_neighbours1
L_guard_if28:
$P55 = new PerlUndef
$I54 = 0
find_lex $P56, "&substr"
$P57 = new PerlArray # slurpy array arg
$P58 = new PerlHash # dynamically-named args
# Computing value of arg 0 (bound to param PerlArray @params)
$P59 = new PerlArray
# scalar_in_context(array) from P6C::variable::val_in_context START
$P59 = 1
$P59[0] = _SV_input
# scalar_in_context(array) from P6C::variable::val_in_context END
$P61 = new PerlUndef
# append $P59 to the end of $P57 ('push @P57, [EMAIL PROTECTED]')
$I62 = 0
$I60 = $P59
L_append_loop_top31:
if $I62 >= $I60 goto L_append_loop_end32
$P61 = $P59[$I62]
push $P57, $P61
inc $I62
goto L_append_loop_top31
L_append_loop_end32:
# Computing value of arg 1 (bound to param PerlArray @params)
$P63 = new PerlUndef
$P63 = 17 # primitive_in_context from P6C::sv_literal::val
$P64 = new PerlUndef
$P64 = _SV_i1 - $P63
$P65 = new PerlUndef
$P65 = $P64 % _SV_len1
$P66 = new PerlArray
# scalar_in_context(array) from P6C::Binop::val START
$P66 = 1
$P66[0] = $P65
# scalar_in_context(array) from P6C::Binop::val END
$P68 = new PerlUndef
# append $P66 to the end of $P57 ('push @P57, [EMAIL PROTECTED]')
$I69 = 0
$I67 = $P66
L_append_loop_top33:
if $I69 >= $I67 goto L_append_loop_end34
$P68 = $P66[$I69]
push $P57, $P68
inc $I69
goto L_append_loop_top33
L_append_loop_end34:
# Computing value of arg 2 (bound to param PerlArray @params)
$P70 = new PerlUndef
$P70 = 1 # primitive_in_context from P6C::sv_literal::val
$P71 = new PerlArray
# scalar_in_context(array) from P6C::IMCC::primitive_in_context START
$P71 = 1
$P71[0] = $P70
# scalar_in_context(array) from P6C::IMCC::primitive_in_context END
$P73 = new PerlUndef
# append $P71 to the end of $P57 ('push @P57, [EMAIL PROTECTED]')
$I74 = 0
$I72 = $P71
L_append_loop_top35:
if $I74 >= $I72 goto L_append_loop_end36
$P73 = $P71[$I74]
push $P57, $P73
inc $I74
goto L_append_loop_top35
L_append_loop_end36:
$P75 = new PerlUndef
$P76 = $P56($P57)
$S77 = $P76
$P79 = new PerlUndef
$P79 = "*" # primitive_in_context from P6C::sv_literal::val
$S78 = $P79
if $S77 == $S78 goto L_38
goto L_comparison30
L_38:
$I54 = 1
L_comparison30:
$P55 = $I54
unless $P55 goto L_guard_if39
_SV_neighbours1 = clone _SV_neighbours1
inc _SV_neighbours1
L_guard_if39:
$P81 = new PerlUndef
$I80 = 0
find_lex $P82, "&substr"
$P83 = new PerlArray # slurpy array arg
$P84 = new PerlHash # dynamically-named args
# Computing value of arg 0 (bound to param PerlArray @params)
$P85 = new PerlArray
# scalar_in_context(array) from P6C::variable::val_in_context START
$P85 = 1
$P85[0] = _SV_input
# scalar_in_context(array) from P6C::variable::val_in_context END
$P87 = new PerlUndef
# append $P85 to the end of $P83 ('push @P83, [EMAIL PROTECTED]')
$I88 = 0
$I86 = $P85
L_append_loop_top42:
if $I88 >= $I86 goto L_append_loop_end43
$P87 = $P85[$I88]
push $P83, $P87
inc $I88
goto L_append_loop_top42
L_append_loop_end43:
# Computing value of arg 1 (bound to param PerlArray @params)
$P89 = new PerlUndef
$P89 = 17 # primitive_in_context from P6C::sv_literal::val
$P90 = new PerlUndef
$P90 = _SV_i1 + $P89
$P91 = new PerlUndef
$P91 = $P90 % _SV_len1
$P92 = new PerlArray
# scalar_in_context(array) from P6C::Binop::val START
$P92 = 1
$P92[0] = $P91
# scalar_in_context(array) from P6C::Binop::val END
$P94 = new PerlUndef
# append $P92 to the end of $P83 ('push @P83, [EMAIL PROTECTED]')
$I95 = 0
$I93 = $P92
L_append_loop_top44:
if $I95 >= $I93 goto L_append_loop_end45
$P94 = $P92[$I95]
push $P83, $P94
inc $I95
goto L_append_loop_top44
L_append_loop_end45:
# Computing value of arg 2 (bound to param PerlArray @params)
$P96 = new PerlUndef
$P96 = 1 # primitive_in_context from P6C::sv_literal::val
$P97 = new PerlArray
# scalar_in_context(array) from P6C::IMCC::primitive_in_context START
$P97 = 1
$P97[0] = $P96
# scalar_in_context(array) from P6C::IMCC::primitive_in_context END
$P99 = new PerlUndef
# append $P97 to the end of $P83 ('push @P83, [EMAIL PROTECTED]')
$I100 = 0
$I98 = $P97
L_append_loop_top46:
if $I100 >= $I98 goto L_append_loop_end47
$P99 = $P97[$I100]
push $P83, $P99
inc $I100
goto L_append_loop_top46
L_append_loop_end47:
$P101 = new PerlUndef
$P102 = $P82($P83)
$S103 = $P102
$P105 = new PerlUndef
$P105 = "*" # primitive_in_context from P6C::sv_literal::val
$S104 = $P105
if $S103 == $S104 goto L_49
goto L_comparison41
L_49:
$I80 = 1
L_comparison41:
$P81 = $I80
unless $P81 goto L_guard_if50
_SV_neighbours1 = clone _SV_neighbours1
inc _SV_neighbours1
L_guard_if50:
$P107 = new PerlUndef
$I106 = 0
find_lex $P108, "&substr"
$P109 = new PerlArray # slurpy array arg
$P110 = new PerlHash # dynamically-named args
# Computing value of arg 0 (bound to param PerlArray @params)
$P111 = new PerlArray
# scalar_in_context(array) from P6C::variable::val_in_context START
$P111 = 1
$P111[0] = _SV_input
# scalar_in_context(array) from P6C::variable::val_in_context END
$P113 = new PerlUndef
# append $P111 to the end of $P109 ('push @P109, [EMAIL PROTECTED]')
$I114 = 0
$I112 = $P111
L_append_loop_top53:
if $I114 >= $I112 goto L_append_loop_end54
$P113 = $P111[$I114]
push $P109, $P113
inc $I114
goto L_append_loop_top53
L_append_loop_end54:
# Computing value of arg 1 (bound to param PerlArray @params)
$P115 = new PerlUndef
$P115 = 16 # primitive_in_context from P6C::sv_literal::val
$P116 = new PerlUndef
$P116 = _SV_i1 - $P115
$P117 = new PerlUndef
$P117 = $P116 % _SV_len1
$P118 = new PerlArray
# scalar_in_context(array) from P6C::Binop::val START
$P118 = 1
$P118[0] = $P117
# scalar_in_context(array) from P6C::Binop::val END
$P120 = new PerlUndef
# append $P118 to the end of $P109 ('push @P109, [EMAIL PROTECTED]')
$I121 = 0
$I119 = $P118
L_append_loop_top55:
if $I121 >= $I119 goto L_append_loop_end56
$P120 = $P118[$I121]
push $P109, $P120
inc $I121
goto L_append_loop_top55
L_append_loop_end56:
# Computing value of arg 2 (bound to param PerlArray @params)
$P122 = new PerlUndef
$P122 = 1 # primitive_in_context from P6C::sv_literal::val
$P123 = new PerlArray
# scalar_in_context(array) from P6C::IMCC::primitive_in_context START
$P123 = 1
$P123[0] = $P122
# scalar_in_context(array) from P6C::IMCC::primitive_in_context END
$P125 = new PerlUndef
# append $P123 to the end of $P109 ('push @P109, [EMAIL PROTECTED]')
$I126 = 0
$I124 = $P123
L_append_loop_top57:
if $I126 >= $I124 goto L_append_loop_end58
$P125 = $P123[$I126]
push $P109, $P125
inc $I126
goto L_append_loop_top57
L_append_loop_end58:
$P127 = new PerlUndef
$P128 = $P108($P109)
$S129 = $P128
$P131 = new PerlUndef
$P131 = "*" # primitive_in_context from P6C::sv_literal::val
$S130 = $P131
if $S129 == $S130 goto L_60
goto L_comparison52
L_60:
$I106 = 1
L_comparison52:
$P107 = $I106
unless $P107 goto L_guard_if61
_SV_neighbours1 = clone _SV_neighbours1
inc _SV_neighbours1
L_guard_if61:
$P133 = new PerlUndef
$I132 = 0
find_lex $P134, "&substr"
$P135 = new PerlArray # slurpy array arg
$P136 = new PerlHash # dynamically-named args
# Computing value of arg 0 (bound to param PerlArray @params)
$P137 = new PerlArray
# scalar_in_context(array) from P6C::variable::val_in_context START
$P137 = 1
$P137[0] = _SV_input
# scalar_in_context(array) from P6C::variable::val_in_context END
$P139 = new PerlUndef
# append $P137 to the end of $P135 ('push @P135, [EMAIL PROTECTED]')
$I140 = 0
$I138 = $P137
L_append_loop_top64:
if $I140 >= $I138 goto L_append_loop_end65
$P139 = $P137[$I140]
push $P135, $P139
inc $I140
goto L_append_loop_top64
L_append_loop_end65:
# Computing value of arg 1 (bound to param PerlArray @params)
$P141 = new PerlUndef
$P141 = 16 # primitive_in_context from P6C::sv_literal::val
$P142 = new PerlUndef
$P142 = _SV_i1 + $P141
$P143 = new PerlUndef
$P143 = $P142 % _SV_len1
$P144 = new PerlArray
# scalar_in_context(array) from P6C::Binop::val START
$P144 = 1
$P144[0] = $P143
# scalar_in_context(array) from P6C::Binop::val END
$P146 = new PerlUndef
# append $P144 to the end of $P135 ('push @P135, [EMAIL PROTECTED]')
$I147 = 0
$I145 = $P144
L_append_loop_top66:
if $I147 >= $I145 goto L_append_loop_end67
$P146 = $P144[$I147]
push $P135, $P146
inc $I147
goto L_append_loop_top66
L_append_loop_end67:
# Computing value of arg 2 (bound to param PerlArray @params)
$P148 = new PerlUndef
$P148 = 1 # primitive_in_context from P6C::sv_literal::val
$P149 = new PerlArray
# scalar_in_context(array) from P6C::IMCC::primitive_in_context START
$P149 = 1
$P149[0] = $P148
# scalar_in_context(array) from P6C::IMCC::primitive_in_context END
$P151 = new PerlUndef
# append $P149 to the end of $P135 ('push @P135, [EMAIL PROTECTED]')
$I152 = 0
$I150 = $P149
L_append_loop_top68:
if $I152 >= $I150 goto L_append_loop_end69
$P151 = $P149[$I152]
push $P135, $P151
inc $I152
goto L_append_loop_top68
L_append_loop_end69:
$P153 = new PerlUndef
$P154 = $P134($P135)
$S155 = $P154
$P157 = new PerlUndef
$P157 = "*" # primitive_in_context from P6C::sv_literal::val
$S156 = $P157
if $S155 == $S156 goto L_71
goto L_comparison63
L_71:
$I132 = 1
L_comparison63:
$P133 = $I132
unless $P133 goto L_guard_if72
_SV_neighbours1 = clone _SV_neighbours1
inc _SV_neighbours1
L_guard_if72:
$P159 = new PerlUndef
$I158 = 0
find_lex $P160, "&substr"
$P161 = new PerlArray # slurpy array arg
$P162 = new PerlHash # dynamically-named args
# Computing value of arg 0 (bound to param PerlArray @params)
$P163 = new PerlArray
# scalar_in_context(array) from P6C::variable::val_in_context START
$P163 = 1
$P163[0] = _SV_input
# scalar_in_context(array) from P6C::variable::val_in_context END
$P165 = new PerlUndef
# append $P163 to the end of $P161 ('push @P161, [EMAIL PROTECTED]')
$I166 = 0
$I164 = $P163
L_append_loop_top75:
if $I166 >= $I164 goto L_append_loop_end76
$P165 = $P163[$I166]
push $P161, $P165
inc $I166
goto L_append_loop_top75
L_append_loop_end76:
# Computing value of arg 1 (bound to param PerlArray @params)
$P167 = new PerlUndef
$P167 = 15 # primitive_in_context from P6C::sv_literal::val
$P168 = new PerlUndef
$P168 = _SV_i1 - $P167
$P169 = new PerlUndef
$P169 = $P168 % _SV_len1
$P170 = new PerlArray
# scalar_in_context(array) from P6C::Binop::val START
$P170 = 1
$P170[0] = $P169
# scalar_in_context(array) from P6C::Binop::val END
$P172 = new PerlUndef
# append $P170 to the end of $P161 ('push @P161, [EMAIL PROTECTED]')
$I173 = 0
$I171 = $P170
L_append_loop_top77:
if $I173 >= $I171 goto L_append_loop_end78
$P172 = $P170[$I173]
push $P161, $P172
inc $I173
goto L_append_loop_top77
L_append_loop_end78:
# Computing value of arg 2 (bound to param PerlArray @params)
$P174 = new PerlUndef
$P174 = 1 # primitive_in_context from P6C::sv_literal::val
$P175 = new PerlArray
# scalar_in_context(array) from P6C::IMCC::primitive_in_context START
$P175 = 1
$P175[0] = $P174
# scalar_in_context(array) from P6C::IMCC::primitive_in_context END
$P177 = new PerlUndef
# append $P175 to the end of $P161 ('push @P161, [EMAIL PROTECTED]')
$I178 = 0
$I176 = $P175
L_append_loop_top79:
if $I178 >= $I176 goto L_append_loop_end80
$P177 = $P175[$I178]
push $P161, $P177
inc $I178
goto L_append_loop_top79
L_append_loop_end80:
$P179 = new PerlUndef
$P180 = $P160($P161)
$S181 = $P180
$P183 = new PerlUndef
$P183 = "*" # primitive_in_context from P6C::sv_literal::val
$S182 = $P183
if $S181 == $S182 goto L_82
goto L_comparison74
L_82:
$I158 = 1
L_comparison74:
$P159 = $I158
unless $P159 goto L_guard_if83
_SV_neighbours1 = clone _SV_neighbours1
inc _SV_neighbours1
L_guard_if83:
$P185 = new PerlUndef
$I184 = 0
find_lex $P186, "&substr"
$P187 = new PerlArray # slurpy array arg
$P188 = new PerlHash # dynamically-named args
# Computing value of arg 0 (bound to param PerlArray @params)
$P189 = new PerlArray
# scalar_in_context(array) from P6C::variable::val_in_context START
$P189 = 1
$P189[0] = _SV_input
# scalar_in_context(array) from P6C::variable::val_in_context END
$P191 = new PerlUndef
# append $P189 to the end of $P187 ('push @P187, [EMAIL PROTECTED]')
$I192 = 0
$I190 = $P189
L_append_loop_top86:
if $I192 >= $I190 goto L_append_loop_end87
$P191 = $P189[$I192]
push $P187, $P191
inc $I192
goto L_append_loop_top86
L_append_loop_end87:
# Computing value of arg 1 (bound to param PerlArray @params)
$P193 = new PerlUndef
$P193 = 15 # primitive_in_context from P6C::sv_literal::val
$P194 = new PerlUndef
$P194 = _SV_i1 + $P193
$P195 = new PerlUndef
$P195 = $P194 % _SV_len1
$P196 = new PerlArray
# scalar_in_context(array) from P6C::Binop::val START
$P196 = 1
$P196[0] = $P195
# scalar_in_context(array) from P6C::Binop::val END
$P198 = new PerlUndef
# append $P196 to the end of $P187 ('push @P187, [EMAIL PROTECTED]')
$I199 = 0
$I197 = $P196
L_append_loop_top88:
if $I199 >= $I197 goto L_append_loop_end89
$P198 = $P196[$I199]
push $P187, $P198
inc $I199
goto L_append_loop_top88
L_append_loop_end89:
# Computing value of arg 2 (bound to param PerlArray @params)
$P200 = new PerlUndef
$P200 = 1 # primitive_in_context from P6C::sv_literal::val
$P201 = new PerlArray
# scalar_in_context(array) from P6C::IMCC::primitive_in_context START
$P201 = 1
$P201[0] = $P200
# scalar_in_context(array) from P6C::IMCC::primitive_in_context END
$P203 = new PerlUndef
# append $P201 to the end of $P187 ('push @P187, [EMAIL PROTECTED]')
$I204 = 0
$I202 = $P201
L_append_loop_top90:
if $I204 >= $I202 goto L_append_loop_end91
$P203 = $P201[$I204]
push $P187, $P203
inc $I204
goto L_append_loop_top90
L_append_loop_end91:
$P205 = new PerlUndef
$P206 = $P186($P187)
$S207 = $P206
$P209 = new PerlUndef
$P209 = "*" # primitive_in_context from P6C::sv_literal::val
$S208 = $P209
if $S207 == $S208 goto L_93
goto L_comparison85
L_93:
$I184 = 1
L_comparison85:
$P185 = $I184
unless $P185 goto L_guard_if94
_SV_neighbours1 = clone _SV_neighbours1
inc _SV_neighbours1
L_guard_if94:
$P211 = new PerlUndef
$I210 = 0
find_lex $P212, "&substr"
$P213 = new PerlArray # slurpy array arg
$P214 = new PerlHash # dynamically-named args
# Computing value of arg 0 (bound to param PerlArray @params)
$P215 = new PerlArray
# scalar_in_context(array) from P6C::variable::val_in_context START
$P215 = 1
$P215[0] = _SV_input
# scalar_in_context(array) from P6C::variable::val_in_context END
$P217 = new PerlUndef
# append $P215 to the end of $P213 ('push @P213, [EMAIL PROTECTED]')
$I218 = 0
$I216 = $P215
L_append_loop_top99:
if $I218 >= $I216 goto L_append_loop_end100
$P217 = $P215[$I218]
push $P213, $P217
inc $I218
goto L_append_loop_top99
L_append_loop_end100:
# Computing value of arg 1 (bound to param PerlArray @params)
$P219 = new PerlArray
# scalar_in_context(array) from P6C::variable::val_in_context START
$P219 = 1
$P219[0] = _SV_cell1
# scalar_in_context(array) from P6C::variable::val_in_context END
$P221 = new PerlUndef
# append $P219 to the end of $P213 ('push @P213, [EMAIL PROTECTED]')
$I222 = 0
$I220 = $P219
L_append_loop_top101:
if $I222 >= $I220 goto L_append_loop_end102
$P221 = $P219[$I222]
push $P213, $P221
inc $I222
goto L_append_loop_top101
L_append_loop_end102:
# Computing value of arg 2 (bound to param PerlArray @params)
$P223 = new PerlUndef
$P223 = 1 # primitive_in_context from P6C::sv_literal::val
$P224 = new PerlArray
# scalar_in_context(array) from P6C::IMCC::primitive_in_context START
$P224 = 1
$P224[0] = $P223
# scalar_in_context(array) from P6C::IMCC::primitive_in_context END
$P226 = new PerlUndef
# append $P224 to the end of $P213 ('push @P213, [EMAIL PROTECTED]')
$I227 = 0
$I225 = $P224
L_append_loop_top103:
if $I227 >= $I225 goto L_append_loop_end104
$P226 = $P224[$I227]
push $P213, $P226
inc $I227
goto L_append_loop_top103
L_append_loop_end104:
$P228 = new PerlUndef
$P229 = $P212($P213)
$S230 = $P229
$P232 = new PerlUndef
$P232 = "*" # primitive_in_context from P6C::sv_literal::val
$S231 = $P232
if $S230 == $S231 goto L_106
goto L_comparison98
L_106:
$I210 = 1
L_comparison98:
$P211 = $I210
unless $P211 goto L_if97
find_lex $P233, "&substr"
$P234 = new PerlArray # slurpy array arg
$P235 = new PerlHash # dynamically-named args
# Computing value of arg 0 (bound to param PerlArray @params)
$P236 = new PerlArray
# scalar_in_context(array) from P6C::variable::val_in_context START
$P236 = 1
$P236[0] = _SV_death1
# scalar_in_context(array) from P6C::variable::val_in_context END
$P238 = new PerlUndef
# append $P236 to the end of $P234 ('push @P234, [EMAIL PROTECTED]')
$I239 = 0
$I237 = $P236
L_append_loop_top107:
if $I239 >= $I237 goto L_append_loop_end108
$P238 = $P236[$I239]
push $P234, $P238
inc $I239
goto L_append_loop_top107
L_append_loop_end108:
# Computing value of arg 1 (bound to param PerlArray @params)
$P240 = new PerlArray
# scalar_in_context(array) from P6C::variable::val_in_context START
$P240 = 1
$P240[0] = _SV_neighbours1
# scalar_in_context(array) from P6C::variable::val_in_context END
$P242 = new PerlUndef
# append $P240 to the end of $P234 ('push @P234, [EMAIL PROTECTED]')
$I243 = 0
$I241 = $P240
L_append_loop_top109:
if $I243 >= $I241 goto L_append_loop_end110
$P242 = $P240[$I243]
push $P234, $P242
inc $I243
goto L_append_loop_top109
L_append_loop_end110:
# Computing value of arg 2 (bound to param PerlArray @params)
$P244 = new PerlUndef
$P244 = 1 # primitive_in_context from P6C::sv_literal::val
$P245 = new PerlArray
# scalar_in_context(array) from P6C::IMCC::primitive_in_context START
$P245 = 1
$P245[0] = $P244
# scalar_in_context(array) from P6C::IMCC::primitive_in_context END
$P247 = new PerlUndef
# append $P245 to the end of $P234 ('push @P234, [EMAIL PROTECTED]')
$I248 = 0
$I246 = $P245
L_append_loop_top111:
if $I248 >= $I246 goto L_append_loop_end112
$P247 = $P245[$I248]
push $P234, $P247
inc $I248
goto L_append_loop_top111
L_append_loop_end112:
$P249 = new PerlUndef
$P250 = $P233($P234)
# ASSIGN TO $n
_SV_n3 = clone $P250
find_lex $P251, "&substr"
$P252 = new PerlArray # slurpy array arg
$P253 = new PerlHash # dynamically-named args
# Computing value of arg 0 (bound to param PerlArray @params)
$P254 = new PerlArray
# scalar_in_context(array) from P6C::variable::val_in_context START
$P254 = 1
$P254[0] = _SV_output1
# scalar_in_context(array) from P6C::variable::val_in_context END
$P256 = new PerlUndef
# append $P254 to the end of $P252 ('push @P252, [EMAIL PROTECTED]')
$I257 = 0
$I255 = $P254
L_append_loop_top114:
if $I257 >= $I255 goto L_append_loop_end115
$P256 = $P254[$I257]
push $P252, $P256
inc $I257
goto L_append_loop_top114
L_append_loop_end115:
# Computing value of arg 1 (bound to param PerlArray @params)
$P258 = new PerlArray
# scalar_in_context(array) from P6C::variable::val_in_context START
$P258 = 1
$P258[0] = _SV_cell1
# scalar_in_context(array) from P6C::variable::val_in_context END
$P260 = new PerlUndef
# append $P258 to the end of $P252 ('push @P252, [EMAIL PROTECTED]')
$I261 = 0
$I259 = $P258
L_append_loop_top116:
if $I261 >= $I259 goto L_append_loop_end117
$P260 = $P258[$I261]
push $P252, $P260
inc $I261
goto L_append_loop_top116
L_append_loop_end117:
# Computing value of arg 2 (bound to param PerlArray @params)
$P262 = new PerlUndef
$P262 = 1 # primitive_in_context from P6C::sv_literal::val
$P263 = new PerlArray
# scalar_in_context(array) from P6C::IMCC::primitive_in_context START
$P263 = 1
$P263[0] = $P262
# scalar_in_context(array) from P6C::IMCC::primitive_in_context END
$P265 = new PerlUndef
# append $P263 to the end of $P252 ('push @P252, [EMAIL PROTECTED]')
$I266 = 0
$I264 = $P263
L_append_loop_top118:
if $I266 >= $I264 goto L_append_loop_end119
$P265 = $P263[$I266]
push $P252, $P265
inc $I266
goto L_append_loop_top118
L_append_loop_end119:
# Computing value of arg 3 (bound to param PerlArray @params)
$P267 = new PerlArray
# scalar_in_context(array) from P6C::variable::val_in_context START
$P267 = 1
$P267[0] = _SV_n3
# scalar_in_context(array) from P6C::variable::val_in_context END
$P269 = new PerlUndef
# append $P267 to the end of $P252 ('push @P252, [EMAIL PROTECTED]')
$I270 = 0
$I268 = $P267
L_append_loop_top120:
if $I270 >= $I268 goto L_append_loop_end121
$P269 = $P267[$I270]
push $P252, $P269
inc $I270
goto L_append_loop_top120
L_append_loop_end121:
$P271 = new PerlUndef
$P272 = $P251($P252)
# noreturn
# IF
goto L_endif96
L_if97:
$P274 = new PerlUndef
$I273 = 0
$N275 = _SV_neighbours1
$P277 = new PerlUndef
$P277 = 3 # primitive_in_context from P6C::sv_literal::val
$N276 = $P277
if $N275 == $N276 goto L_125
goto L_comparison124
L_125:
$I273 = 1
L_comparison124:
$P274 = $I273
unless $P274 goto L_if123
find_lex $P278, "&substr"
$P279 = new PerlArray # slurpy array arg
$P280 = new PerlHash # dynamically-named args
# Computing value of arg 0 (bound to param PerlArray @params)
$P281 = new PerlArray
# scalar_in_context(array) from P6C::variable::val_in_context START
$P281 = 1
$P281[0] = _SV_output1
# scalar_in_context(array) from P6C::variable::val_in_context END
$P283 = new PerlUndef
# append $P281 to the end of $P279 ('push @P279, [EMAIL PROTECTED]')
$I284 = 0
$I282 = $P281
L_append_loop_top126:
if $I284 >= $I282 goto L_append_loop_end127
$P283 = $P281[$I284]
push $P279, $P283
inc $I284
goto L_append_loop_top126
L_append_loop_end127:
# Computing value of arg 1 (bound to param PerlArray @params)
$P285 = new PerlArray
# scalar_in_context(array) from P6C::variable::val_in_context START
$P285 = 1
$P285[0] = _SV_cell1
# scalar_in_context(array) from P6C::variable::val_in_context END
$P287 = new PerlUndef
# append $P285 to the end of $P279 ('push @P279, [EMAIL PROTECTED]')
$I288 = 0
$I286 = $P285
L_append_loop_top128:
if $I288 >= $I286 goto L_append_loop_end129
$P287 = $P285[$I288]
push $P279, $P287
inc $I288
goto L_append_loop_top128
L_append_loop_end129:
# Computing value of arg 2 (bound to param PerlArray @params)
$P289 = new PerlUndef
$P289 = 1 # primitive_in_context from P6C::sv_literal::val
$P290 = new PerlArray
# scalar_in_context(array) from P6C::IMCC::primitive_in_context START
$P290 = 1
$P290[0] = $P289
# scalar_in_context(array) from P6C::IMCC::primitive_in_context END
$P292 = new PerlUndef
# append $P290 to the end of $P279 ('push @P279, [EMAIL PROTECTED]')
$I293 = 0
$I291 = $P290
L_append_loop_top130:
if $I293 >= $I291 goto L_append_loop_end131
$P292 = $P290[$I293]
push $P279, $P292
inc $I293
goto L_append_loop_top130
L_append_loop_end131:
# Computing value of arg 3 (bound to param PerlArray @params)
$P294 = new PerlUndef
$P294 = "*" # primitive_in_context from P6C::sv_literal::val
$P295 = new PerlArray
# scalar_in_context(array) from P6C::IMCC::primitive_in_context START
$P295 = 1
$P295[0] = $P294
# scalar_in_context(array) from P6C::IMCC::primitive_in_context END
$P297 = new PerlUndef
# append $P295 to the end of $P279 ('push @P279, [EMAIL PROTECTED]')
$I298 = 0
$I296 = $P295
L_append_loop_top132:
if $I298 >= $I296 goto L_append_loop_end133
$P297 = $P295[$I298]
push $P279, $P297
inc $I298
goto L_append_loop_top132
L_append_loop_end133:
$P299 = new PerlUndef
$P300 = $P278($P279)
# noreturn
# IF
goto L_endif96
L_if123:
L_endif96: # END OF if
L_4:
L_7:
_SV_cell1 = clone _SV_cell1
inc _SV_cell1
L_loop3:
$P302 = new PerlUndef
$I301 = 0
$N303 = _SV_cell1
$N304 = _SV_len1
if $N303 < $N304 goto L_136
goto L_comparison135
L_136:
$I301 = 1
L_comparison135:
$P302 = $I301
if $P302 goto L_loop2
L_6:
$P305 = new PerlArray
# scalar_in_context(array) from P6C::variable::val_in_context START
$P305 = 1
$P305[0] = _SV_output1
# scalar_in_context(array) from P6C::variable::val_in_context END
.return $P305
goto L_1
.pcc_begin_return
.return $P305 # regular (non-rule) return
.pcc_end_return
L_1:
.pcc_begin_return # fallback
.pcc_end_return
.end
.sub _substr non_prototyped
.param pmc params
$P0 = params
# n paras
$I0 = params
$S0 = params[0]
$I1 = params[1]
if $I0 == 2 goto substr_2
$I2 = params[2]
if $I0 > 4 goto substr_die
if $I0 < 2 goto substr_die
length $I3, $S0
$I4 = $I3
if $I2 >= 0 goto substr_34
# len negative, leave -len of string
$I3 = $I3 - $I1
$I3 = $I3 + $I2
$I2 = $I3
substr_34:
$S1 = ""
# # offset >= len?
if $I1 >= $I4 goto substr_ret
if $I0 == 4 goto substr_4
substr_3:
substr $S1, $S0, $I1, $I2
substr_ret:
$P1 = new PerlString
$P1 = $S1
.pcc_begin_return
.return $P1
.pcc_end_return
substr_4:
$S2 = params[3]
substr $S1, $S0, $I1, $I2, $S2
params[2] = $S1
goto substr_ret
substr_2:
length $I2, $S0
sub $I2, $I2, $I1
goto substr_3
substr_die:
set $S0, "wrong number of args for substr"
$P0 = new PerlArray
$P0[0] = $S0
_die($P0)
goto substr_ret
end
.end
.sub _length non_prototyped
.param pmc s
$S0 = s
length $I0, $S0
$P1 = new PerlInt
set $P1, $I0
.pcc_begin_return
.return $P1
.pcc_end_return
end
.end
.sub _reverse non_prototyped
.param pmc orig_array
$I0 = orig_array
dec $I0
$I1 = 0
$P1 = new PerlArray
reverse_loopstart:
$P2 = orig_array[$I0]
$P1[$I1] = $P2
inc $I1
dec $I0
if 0 <= $I0 goto reverse_loopstart
.pcc_begin_return
.return $P1
.pcc_end_return
end
.end
.sub _join non_prototyped
.param pmc params
.local int num_params
num_params = params
if num_params > 1 goto join_next
# Empty args:
$S0 = ""
goto join_ret
# At least one arg:
join_next:
.local string separator
separator = params[0] # separator
$S0 = params[1] # accumulated string
.local int counter
counter = 2 # arg number
goto join_test
join_loopstart:
$S2 = params[counter]
concat $S0, separator
concat $S0, $S2
inc counter
join_test:
if num_params != counter goto join_loopstart
join_ret:
$P2 = new PerlString
$P2 = $S0
.pcc_begin_return
.return $P2
.pcc_end_return
end
.end
.sub _index non_prototyped
.param pmc params
$I2 = params
if $I2 < 2 goto index_numarg_error
$S0 = params[0]
$S1 = params[1]
$I0 = 0
$P1 = new PerlInt
$P1 = $I0
if $I3 < 3 goto index_2_arg
index $I0, $S0, $S1
$P1 = $I0
goto index_end
index_2_arg:
$I1 = params[2]
index $I0, $S0, $S1, $I1
$P1 = $I0
index_end:
.pcc_begin_return
.return $P1
.pcc_end_return
end
index_numarg_error:
$S0 = "wrong number of args for index"
$P0 = new PerlArray
$P0[0] = $S0
_die($P0)
goto index_end
.end
.sub _time non_prototyped
$P1 = new PerlNum
time $N1
set $P1, $N1
.pcc_begin_return
.return $P1
.pcc_end_return
.end
.sub _sleep non_prototyped
.param pmc wait
$I0 = wait
sleep $I0
.end
.sub _print1 non_prototyped
.param object p
print p
print "\n"
.end
.sub _print non_prototyped
.param pmc params
.local int num_elem
.local int counter
num_elem = params
counter = 0
print_loopstart:
if counter == num_elem goto print_loopend
$P0 = params[counter]
print $P0
inc counter
goto print_loopstart
print_loopend:
.end
.sub _exit non_prototyped
.param object message
print message
print "\n"
end
.end
.sub _die non_prototyped
.param object params
# setup $!: ####################
.local object dollar_bang
dollar_bang = new PerlString
.local int num_params
num_params = params
if num_params == 0 goto die_unknown
$P1 = new PerlString
.local int counter
counter = 0
die_loopstart:
if num_params == counter goto die_loopend
$P1 = params[counter]
dollar_bang = dollar_bang . $P1
inc counter
goto die_loopstart
die_unknown:
dollar_bang = "Unknown error."
die_loopend:
store_global "_SV__BANG_", dollar_bang
# Look for a CATCH handler: ###
.local object try_stack
find_global try_stack, "_AV_catchers"
$I0 = try_stack
if $I0 == 0 goto die_nohandler
# Remove top catch handler
dec $I0
$P0 = try_stack[$I0]
try_stack = $I0
store_global "_AV_catchers", try_stack
invoke $P0
die_nohandler:
print dollar_bang
print "\nDied (no handler).\n"
end
.end
.sub _warn non_prototyped
.param object params
$P1 = _print(params)
.pcc_begin_return
.return $P1
.pcc_end_return
.end
.sub _grep non_prototyped
.param Sub condition
.param pmc params
.local int tmp
.local PerlArray result_list
.local int ii
.local pmc comparison_result
.local pmc element
result_list = new PerlArray
set tmp, params
lt tmp, 2, __grep_die_numargs
shift condition, params
typeof S0, condition
ne S0, "Sub", __grep_die_arg1
ii = 0
__grep_loop_top:
tmp = params
ge ii, tmp, __grep_loop_end
element = params[ii]
comparison_result = condition(element)
unless comparison_result, __grep_next
push result_list, element
__grep_next:
inc ii
branch __grep_loop_top
__grep_loop_end:
.pcc_begin_return
.return result_list
.pcc_end_return
__grep_die_numargs:
set S0, "wrong number of args for grep"
condition = new PerlArray
set condition[0], S0
_die(condition)
branch __grep_loop_end
__grep_die_arg1:
set S0, "First argument to grep must be a closure"
condition = new PerlArray
set condition[0], S0
_die(condition)
branch __grep_loop_end
.end
.sub _map non_prototyped
.param pmc params
$P2 = new PerlArray
set $I3, params
lt $I3, 2, __map_die_numargs
set $P0, params[0]
typeof S0, $P0
ne S0, "Sub", __map_die_arg1
set I0, 1
set I1, 0
set I2, params
__map_loop_start:
# call closure with current array value as arg
save $P0
set $P3, params[I0]
$P5 = new PerlArray
set $P5, 1
set $P5[0], $P3
__map_closure($P5)
### restore $P4
set $I3, $P4
lt $I3, 1, __map_check_end
dec $I3
set $P6, $P4[$I3]
__map_return_check:
if $P6, __map_match_ok
branch __map_check_end
__map_match_ok:
set $P2[I1], $P6
inc I1
__map_check_end:
inc I0
eq I0, I2, __map_loop_end
branch __map_loop_start
__map_loop_end:
.pcc_begin_return
.return $P2
.pcc_end_return
__map_die_numargs:
set S0, "wrong number of args for map"
$P0 = new PerlArray
set $P0[0], S0
_die($P0)
branch __map_loop_end
__map_die_arg1:
set S0, "First argument to map must be a closure"
$P0 = new PerlArray
set $P0[0], S0
_die($P0)
branch __map_loop_end
__map_closure:
pushp
save $P1
invoke
.pcc_begin_return
.pcc_end_return
.end
.sub __setup
# P5 is array of commandline args
# -lt: should we really preserve any registers here?
$P1 = new PerlArray
$P2 = new PerlString
set I0, P5
# $0 / $$PROGRAM_NAME
set $P2, P5[0]
store_global "_SV_0", $P2
store_global "_SV_$PROGRAM_NAME", $P2
# @ARGS == @[EMAIL PROTECTED]
set I1, 0
set I2, 1
dec I0
set $P1, I0
branch __setup_arg_end
__setup_arg:
set S0, P5[I2]
set $P1[I1], S0
inc I1
inc I2
__setup_arg_end:
lt I1, I0, __setup_arg
store_global "_AV_ARGS", $P1
# %ENV
$P1 = new PerlEnv
store_global "_HV_ENV", $P1
# exception handling:
$P0 = new PerlArray
store_global "_AV_catchers", $P0
$P0 = new PerlUndef
store_global "_SV__BANG_", $P0
ret # Only called from top level
.end
.sub _install_catch non_prototyped
.param pmc continuation
.local pmc try_stack
find_global try_stack, "_AV_catchers"
$I1 = try_stack
try_stack[$I1] = continuation
store_global "_AV_catchers", try_stack
.end
.sub _pop_catch non_prototyped
.local pmc try_stack
find_global try_stack, "_AV_catchers"
$I1 = try_stack
dec $I1
try_stack = $I1
store_global "_AV_catchers", try_stack
.end