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();
}