[bitc-dev] ref to union contents
Eric Northup
digitale at digitaleric.net
Mon Mar 7 16:26:01 EST 2005
Hi,
It has occurred to me that the ability to take references to objects combined with the BitC's tagged unions might be dangerous. Can we take references to the contents of a union? It would be nice if we could, safely. On the other hand, if the union is mutable, it is important that programs not be able to keep references to the contents of the union past the assignment. Because the assignment might change which leg of the union is being used.
The following program probably isn't correct BitC 0.6, but I hope it conveys the hypothetical problem scenario.
(defunion foo
(a int32)
(b . . .))
(define x:(mutable foo)
(a 10))
(define myfunc
(case x
((a int_from_a)
(let (r (ref int_from_a))
(begin
(set! x (b (. . .)))
(do_something r))))
((b ...)
(...))
)
))
do_something gets a reference to int_from_a, even though x is no longer in the 'a' branch of the union.
Reading the 0.6 BitC spec, I don't anything making this illegal. And it doesn't seem that the (let (r (ref int_from_a))) does a copy of int_from_a. So the above code should be illegal. Have I missed something?
--Eric
More information about the bitc-dev
mailing list