# 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

Reply via email to