Some updates as of r28833,  (kubuntu 8.04, x86)

Simple ranges seem to work:

  $ ./parrot perl6.pbc -e '1..1000'       # works

  $ ./parrot perl6.pbc -e 'say 1..1000'   # works

The original test case segfaults after 214 iterations:

  $ cat x
  for 1..1000 -> $a { say $a }
  $ ./parrot perl6.pbc x
  1
  2
  3
  [...4 through 211...]
  212
  213
  214
  Segmentation fault

But it works with the -G flag:

  $ ./parrot -G perl6.pbc x
  1
  2
  3
  [...4 through 997...]
  998
  999
  1000

If we read the program via the -e flag, it segfaults after 174 iterations:

  $ ./parrot perl6.pbc -e "$(cat x)"
  1
  2
  3
  [...4 through 171...]
  172
  173
  174
  Segmentation fault

Somewhat surprisingly, both reading from a file and executing via -e
produce the exact same PIR output:

  $ ./parrot perl6.pbc --target=pir x >x.pir
  $ ./parrot perl6.pbc --target=pir -e "$(cat x)" >e.pir
  $ diff e.pir x.pir
  $

To turn the generated .pir file into standalone executable, 
add a load_bytecode 'perl6.pbc' opcode inside of the first 
sub.  This then segfaults after 352 iterations:

  $ vi x.pir
  ...
  $ head -6 x.pir
  
  .namespace
  .sub "_block11"
      load_bytecode 'perl6.pbc'
      .lex "$_", $P12
      .lex "$/", $P13
  $ ./parrot x.pir
  1
  2
  3
  [...4 through 349...]
  350
  351
  352

Hope this helps,

Pm

Reply via email to