Patrick R. Michaud wrote:
Either way works for me -- PCT can generate either without much
difficulty.  It probably makes more sense to have separate .file
and .line directives.  In particular, I wouldn't want to be
repeating the .file annotation information throughout the bytecode!  :-)

Just a reminder that the central issue for PCT and other HLL's
is that the current #line, setline, setfile, etc. instructions
are currently intimately tied to lines of PIR source (RT #43269),
and they probably shouldn't be.

I agree that I don't see a strong need for setting file and
line number dynamically -- at least not at this stage.
Let me clarify a little. The current ".file" and ".line" directives are tied to PIR lines. That's fine, and I'm planning we can keep things that way. We could use such a feature now, e.g. in gen_builtins.pir, for example. It's useful when you're building PIR from other bits of PIR. But I don't expect PCT will be emitting these two directives.

Instead, I expect PCT will emit .annotate. This allows you to emit whatever annotations you wish. So you can do file and line annotations, but you can also choose to do column too if needed. We can use it to stash away the source code for a sub so we can do .perl for subs, or for stashing away the compiler version or OS we compiled under for the various $?FOO variables. When an exception is thrown, we already capture the location it was thrown from, and thus there will be a way to get which of these settings were in effect at the point that the exception was thrown. As an upshot of this, .annotate is not at all tied to PIR lines - the latest annotation under a given key takes precedence. So you can emit at the start maybe:

.annotate "file" "foo.pl"
.annotate "compiler" "rakudo-0.1"

And then per line:

.annotate "line" 42

When a new source code line starts.

And yes, I need to get this all into the PIR docs, though the storage scheme for all of this is in the bytecode PDD already. But it should give us plenty of flexibility.

Sound good?

Thanks,

Jonathan

Reply via email to