Patrick R. Michaud wrote:
When looking at a trace output (-t1), what's the difference
between "PMCNULL" and "(null)"? For example:
$ cat y.pir
.namespace ['Foo']
.sub main :main
$P1 = get_class ['Foo']
$P2 = $P1
$P0 = get_hll_namespace ['Foo']
$P1 = get_class $P0
$P2 = $P1
.end
$ ./parrot -t1 y.pir
0 get_class P1, PC4 P1=PMCNULL PC4=Key=PMC(0x92b690)
3 set P2, P1 P2=PMCNULL P1=(null)
6 get_hll_namespace P0, PC4 P0=PMCNULL PC4=Key=PMC(0x92b690)
9 get_class P1, P0 P1=(null) P0=NameSpace=PMC(0x930e90)
12 set P2, P1 P2=(null) P1=(null)
15 end
$
Here I see both "PMCNULL" and "(null)" in the register values -- what's
the difference between them?
Hmmm... when I run the exact same code with the exact same flags (on the
pdd15oo branch) I get:
0 get_class P1, PC4 P1=PMCNULL PC4=Key=PMC(0x18e6580)
3 set P2, P1 P2=PMCNULL P1=PMCNULL
6 get_hll_namespace P0, PC4 P0=PMCNULL PC4=Key=PMC(0x18e6580)
9 get_class P1, P0 P1=PMCNULL P0=NameSpace=PMC(0x18c2e10)
12 set P2, P1 P2=PMCNULL P1=PMCNULL
15 end
There's a good chance that I fixed the bug in one of my other fixes
today. There was a problem with the return values from get_class causing
segfaults (which I fixed with better condition checking).
Allison