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

Reply via email to