On Fri, Jun 15, 2007 at 03:45:45PM -0600, Eric Hughes wrote:
> At 02:18 PM 6/15/2007, strk wrote:
> >var o = new Object;
> >o.hello = function() { trace("hello"); }
> >Function.prototype.constructor = o;
> >delete o;
> >Function.prototype.constructor.helo(); // expect a trace
>
> Two issues: the reference outward from "constructor" and the references
> toward "o".
>
> First. The reference variable for "constructor" should be able to be hold
> either a weak or a strong reference, and it would be initialized to a weak
> reference. This means that in the ordinary case where constructor
> assignment does not occur, that the incremental RC mechanism will catch it,
> eliminating an item for the GC to deal with.
>
> Second. After assignment, "constructor" (an l-value) contains a strong
> reference to the r-value of "o". At this point both the variables "o" and
> "constructor" have references. Then when the variable "o" itself goes away
> (an l-value), "constructor" still has a strong reference.
>
> This was the kind of thing I mentioned earlier about possibility and
> feasibility. To use weak references in this way requires that r-values and
> l-values be separate, and I'm just not familiar enough with the VM
> implementation to know if this is already there or, if lacking, what
> requisite effort would be resolved.
Our l-values are just strings, and r-values are as_values (possibly objects, in
which case they are ref-counted).
--strk;
_______________________________________________
Gnash-dev mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/gnash-dev