3 Object format (each line is a word):
5 (object type = 0, object)
9 [payload size in bytes]
11 <<slots (if any) which are pointers to other objects>>
13 (object type = 1, oop array)
16 [object size in words]
17 [payload size in bytes]
19 <<slots (if any) which are pointers to other objects>>
20 <<oop array items which are pointers to other objects>>
22 (object type = 2, byte array)
25 [object size in words]
26 [payload size in bytes]
28 <<slots (if any) which are pointers to other objects>>
29 <<bytes (padded to word size))>>
33 [1] Object size in words has to be a minimum of four
34 because it counts the header, obj size, obj payload,
40 header & 1 -> is it marked?
41 (header>>1) & 0x7FFFFF -> object hash
42 (header>>30) & 0x3 -> object type
56 If the least significant bit is 1, it's actually a smallint.
57 Otherwise, it points to an object.
59 The object size and payload size are not smallints because slate
60 code cannot access them directly.