Fixed allSelectorsSent because a simpler implementation was overriding the original.
[cslatevm.git] / doc / object-format.txt
blob8036f20ee12e718c0b056adfcf7ebad52c560cd7
3 Object format (each line is a word): 
5 (object type = 0, object)
7 [object header]
8 [object size in words]
9 [payload size in bytes]
10 [pointer to map]
11 <<slots (if any) which are pointers to other objects>>
13 (object type = 1, oop array)
15 [object header]
16 [object size in words]
17 [payload size in bytes]
18 [pointer to map]
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)
24 [object header]
25 [object size in words]
26 [payload size in bytes]
27 [pointer to map]
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,
35 and map.
38 Object header:
40 header & 1                    -> is it marked?
41 (header>>1) & 0x7FFFFF        -> object hash
42 (header>>30) & 0x3            -> object type
46 Object types:
48 0=object
49 1=oop array
50 2=byte array
54 Pointers:
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.