var z; var resurrect = true; class foo { public var a, b; public proc create(x) { a = @x; b = x; "foo.create - returning ", self, '\n'; } public proc destroy() { "", self, ".destroy() {\n"; " self.readonly() = ", self.readonly(), '\n'; " oadl::deleted(self) = ", oadl::deleted(self), '\n'; " dynamic copy ", a, " vs static ref ", b, '\n'; "}\n"; if (resurrect) z = self; } } proc main() { var a = new foo("foo"); a = nil; oadl::gc(); // Set z.b to a dynamic copy of the string - it will get deleted // next time around z.b = @z.b; "Examining resurrected zombie ", z, '\n'; "z.b = ", z.b, '\n'; "oadl::deleted(z) = ", oadl::deleted(z), '\n'; resurrect = false; z = nil; oadl::gc(); }