Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[svn ci] Debug segment updates

0 views
Skip to first unread message

Jonathan Worthington

unread,
Oct 15, 2005, 7:56:08 PM10/15/05
to perl6-i...@perl.org
Hi,

A while back I posted an RFC about changing the PASM/PIR debug segment so it
would be able to give useful info about PBCs produced from multiple files.
Today I've done a couple of ci's that have put this change into effect, with
the small change to the original plan that filenames are not stored in the
debug segment but rather as strings in the constant segment (at leo's
suggestion).

Note that this has invalidated any existing packfiles. But that's pretty
regular these days, what with all this deprecation. ;-)

I also updated pbc_merge to take advantage of the changes.

$ type crash1.pir
.sub main
_test()
.end
$ type crash2.pir
.sub _test
_nonexistent()
.end
$ parrot -o crash1.pbc crash1.pir
$ parrot -o crash2.pbc crash2.pir
$ pbc_merge -o crash.pbc crash1.pbc crash2.pbc
$ parrot crash.pbc
Name '_nonexistent' not found
current instr.: '_test' pc 14 (crash2.pir:2)
called from Sub 'main' pc 7 (crash1.pir:2)

The important bit is the last two lines - notice how we can now report both
file names in the backtrace.

What's left? Making this work for when you .include files in PIR. Which
means monkeying with the lexer and IMCC. <shudder>

Enjoy,

Jonathan

Jonathan Worthington

unread,
Oct 20, 2005, 8:31:45 PM10/20/05
to perl6-i...@perl.org
"Jonathan Worthington" <jona...@jwcs.net> wrote:
> What's left? Making this work for when you .include files in PIR. Which
> means monkeying with the lexer and IMCC. <shudder>
>
I've done it and it's available to play with. I'll admit now that, despite
having covered quite a bit of the IMCC codebase while working out the best
way to do this, I'm still no expert on how it works so this may not be
perfect. Anyway, an example of the kinda thing that now works:-

$ cat crash1.pir
# Example
.sub main :main
_test()
.end

.include "crash2.pir"

.sub _test2
_does_not_exist()
.end
$ cat crash2.pir
.sub _test
_test2()
.end
$ parrot crash1.pir
Name '_does_not_exist' not found
current instr.: '_test2' pc 24 (crash1.pir:9)
called from Sub '_test' pc 17 (crash2.pir:2)
called from Sub 'main' pc 7 (crash1.pir:3)

Note how the correct files are named in the backtrace now; before it would
always say crash1.pir no matter what file it was in.

Also fixed some warnings, plus a bug that pre-dated my debug seg work that
meant sometimes a file didn't get a debug segment added to it..

Happy debugging,

Jonathan

0 new messages