id,summary,reporter,owner,description,type,status,priority,milestone,component,version,severity,resolution,keywords,cc,lang,patch,platform
556,setref on derived pmc aggregate class loses data on return,bsdz,kjs,"When deriving from PMC aggregate, data appears to be lost on return from sub after using setref opcode.

Here is an example code: -
{{{
.include 'library/dumper.pir'

.namespace [ 'MyRPA' ]
.sub '__dump' :method
    .param pmc dumper
    .param pmc label
    dumper.'genericArray'(label, self)
.end

.namespace []
.sub '' :main

    $P0 = subclass 'ResizablePMCArray', 'MyRPA'

    $P1 = new 'ResizablePMCArray'
    'pass_by_ref'($P1)
    _dumper($P1, 'RPA after')
    
    $P2 = new 'MyRPA'
    'pass_by_ref'($P2)
    _dumper($P2, 'MyRPA after') 
    
.end

.sub 'pass_by_ref'
    .param pmc p
    p[0] = 'hello'
    _dumper(p, 'before setref')
    setref p, p   
.end
}}}

The output is as follow: -

{{{
""before setref"" => ResizablePMCArray (size:1) [
    ""hello""
]
""RPA after"" => ResizablePMCArray (size:1) [
    ""hello""
]
""before setref"" => PMC 'MyRPA' MyRPA (size:1) [
    ""hello""
]
""MyRPA after"" => PMC 'MyRPA' MyRPA (size:1) [
    null
]
}}}

The expected outcome should really be : -


{{{
""before setref"" => ResizablePMCArray (size:1) [
    ""hello""
]
""RPA after"" => ResizablePMCArray (size:1) [
    ""hello""
]
""before setref"" => PMC 'MyRPA' MyRPA (size:1) [
    ""hello""
]
""MyRPA after"" => PMC 'MyRPA' MyRPA (size:1) [
    ""hello""
]
}}}
",bug,closed,major,,core,trunk,high,invalid,,,,,all
