# New Ticket Created by Allison Randal # Please include the string: [perl #38406] # in the subject line of all future correspondence about this issue. # <URL: https://rt.perl.org/rt3/Ticket/Display.html?id=38406 >
I've spent too much time on this error, so I'm routing around it, but I'd love to figure out what's causing it. In my local version of Punie I get this error when I run 'make test': t/io_print.....ok 5/8 # Failed test (t/io_print.t at line 29) # got: 'error:imcc:syntax error, unexpected $undefined, expecting '\n' # in file 'EVAL_8' line 67 # ' # expected: 'ok 1 # ok 2 # ' # './parrot languages/punie/punie.pbc /Volumes/lilalUFS/projects/svk/ parrot/languages/punie/t/io_print_6.p1' failed with exit code 18 (The error comes from line 3892 or 3897 of compilers/imcc/imcparser.c.) Obviously it's a syntax error in some PIR code, and I thought it was in the PIR code output by Punie. It turns out it's actually the PIR code output by PGE for TGE's grammar parser. (I discovered this with TEST_PROG_ARGS="-D20".) For some reason, the generated PIR code for the 'skip' rule is truncated part-way through the 67th line. (The rule is defined in compilers/tge/TGE/Parser.pir on line 32.) The truncated rule code occurs when I run the test code through the bytecode version of the Punie compiler, punie.pbc (running 'make test' or 'perl t/io_print.t' or 'parrot languages/punie/punie.pbc languages/punie/t/io_print_6.p1'). But, if I run t/io_print_6.p1 through punie.pir instead of the bytecode version, the rule code is fully generated and I get no errors. (I recompiled several times just to make sure they were simply compiled and source versions the same code.) Also, if I modify the Punie compiler to dump out generated PIR to a file before it executes it, I get no errors even on the bytecode version. Here are the relevant lines from the truncated rule code (the last 3 lines in the generated code): 65 R: ## 62 66 67 R62: # And the corresponding lines from the fully generated rule code, and several lines following: 65 R: ## 62 66 67 R62: # \s {0..2147483647} 68 $I0 = find_not_cclass 32, target, pos, lastpos 69 rep = $I0 - pos 70 if rep < 0 goto fail 71 if rep <= 2147483647 goto R62_1 72 rep = 2147483647 73 R62_1: ... (Oh, the change that started the error was adding a single rule to Punie's PGE grammar. It doesn't matter if the new rule gets called from any other rule, or if the rule even has any content. The name of the rule also doesn't impact the error (I had a problem before defining a PGE rule named 'print', so I had to check).) That's as far as I've debugged it so far. I'd welcome any thoughts on the cause, or suggestions on ways to debug it further. Thanks, Allison