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?
In particular, attempting to do
$P3 = new $P2
causes "Null PMC access in isa()" if $P2 is PMCNULL, but causes
a segmentation fault if $P2 is the mysterious (null) value.
Generating the "Null PMC access" exception is acceptable,
generating the segfault likely is not. :-)
Thanks!
Pm