2018-07-18 23:49:32 +02:00
|
|
|
import "allocator/arena";
|
2018-07-19 16:15:56 +02:00
|
|
|
import "collector/itcm";
|
2018-07-18 23:49:32 +02:00
|
|
|
|
|
|
|
// a class to test with
|
|
|
|
class MyObject {
|
|
|
|
a: u32;
|
|
|
|
}
|
|
|
|
function MyObject_visit(ref: usize): void { }
|
|
|
|
|
|
|
|
// allocate a managed instance
|
2018-07-19 16:15:56 +02:00
|
|
|
var obj = changetype<MyObject>(gc.allocate(offsetof<MyObject>(), MyObject_visit));
|
2018-07-18 23:49:32 +02:00
|
|
|
obj.a = 123;
|
|
|
|
var head = changetype<usize>(obj) - 16;
|
|
|
|
|
|
|
|
// header
|
|
|
|
assert(load<u32>(head, 0) == 0); // nextWithFlags
|
|
|
|
assert(load<u32>(head, 4) == 0); // prev
|
|
|
|
assert(load<u32>(head, 8) == changetype<u32>(MyObject_visit)); // visitFn
|
|
|
|
assert(load<u32>(head, 12) == 0); // unused
|
|
|
|
// contents
|
|
|
|
assert(load<u32>(head, 16) == 123); // Obj#a
|
|
|
|
|
|
|
|
// gc.collect(); // FIXME: endless loop
|