
// This is a fake class to store GC objects as a `ptr` but still have it tracked by the GC 
// E.g.

// class MyClass {
//     tracked: GcPtr
// }
// let ob = MyClass {
//     tracked: mybool ? (classA.@cast(GcPtr)) : (classB.@cast(GcPtr))
// }

class GcPtr {
    data: uint (0)

    + fn to_ptr() ptr $to {
        return this.@cast(ptr)
    }
    + fn add(v: uint) ptr $add {
        return this.@cast(ptr) + v
    }
    + fn offset(v: int) ptr {
        return @offset(this.@cast(ptr), u8, v)
    }
}
