OLD | NEW |
---|---|
1 This file describes the binary format of Dart Kernel. | 1 This file describes the binary format of Dart Kernel. |
2 | 2 |
3 Notation | 3 Notation |
4 -------- | 4 -------- |
5 Bitmasks are described with the syntax: | 5 Bitmasks are described with the syntax: |
6 ```scala | 6 ```scala |
7 Byte flags (flag1, flag2, ..., flagN) | 7 Byte flags (flag1, flag2, ..., flagN) |
8 ``` | 8 ``` |
9 where 'flag<N>' is the N-th least significant bit, | 9 where 'flag<N>' is the N-th least significant bit, |
10 (so flag1 is the least significant bit). | 10 (so flag1 is the least significant bit). |
(...skipping 28 matching lines...) Expand all Loading... | |
39 Byte byte3(xxxxxxxx); | 39 Byte byte3(xxxxxxxx); |
40 Byte byte4(xxxxxxxx); // least significant byte | 40 Byte byte4(xxxxxxxx); // least significant byte |
41 } | 41 } |
42 | 42 |
43 type MagicWord = big endian 32-bit unsigned integer | 43 type MagicWord = big endian 32-bit unsigned integer |
44 | 44 |
45 type List<T> { | 45 type List<T> { |
46 UInt length; | 46 UInt length; |
47 T[length] items; | 47 T[length] items; |
48 } | 48 } |
49 ``` | |
49 | 50 |
50 type String { | 51 A string table consists of an array of end offsets and a payload array of |
51 List<Byte> utf8Bytes; | 52 strings encoded as UTF-8. The array of end offsets maps a string index to the |
52 } | 53 offset of the _next_ string in the table or the offset of the end of the array |
54 for the last string. These offsets are relative to the string payload array. | |
55 Thus, string number 0 consists of the UTF-8 encoded string stretching from | |
56 offset 0 (inclusive) to endOffset[0] (exclusive); and string number N for N > 0 | |
57 consists of the UTF-8 encoded string stretching from offset endOffset[N-1] | |
58 (inclusive) to endOffset[N] (exclusive). | |
53 | 59 |
60 ``` scala | |
54 type StringTable { | 61 type StringTable { |
55 List<String> strings; | 62 List<UInt> endOffsets; |
63 Byte[endOffsets.last] utf8Bytes; | |
56 } | 64 } |
57 | 65 |
58 type StringReference { | 66 type StringReference { |
59 UInt index; // Index into the StringTable strings. | 67 UInt index; // Index into the Program's .strings. |
asgerf
2017/04/04 09:33:36
The '.' looks out of place.
It looks like it shou
Kevin Millikin (Google)
2017/04/04 11:02:58
I'll just say Program's strings.
I was going for
| |
60 } | 68 } |
61 | 69 |
62 type Source { | 70 type Source { |
63 String source; | 71 List<Byte> utf8Bytes; |
64 // Line starts are delta-encoded (they are encoded as line lengths). The list | 72 // Line starts are delta-encoded (they are encoded as line lengths). The list |
65 // [0, 10, 25, 32, 42] is encoded as [0, 10, 15, 7, 10]. | 73 // [0, 10, 25, 32, 42] is encoded as [0, 10, 15, 7, 10]. |
66 List<Uint> lineStarts; | 74 List<Uint> lineStarts; |
67 } | 75 } |
68 | 76 |
69 type UriSource { | 77 type UriSource { |
70 List<String> uris; | 78 StringTable uris; |
71 Source[uris.length] source; | 79 Source[uris.endOffsets.length] source; |
72 } | 80 } |
73 | 81 |
74 type UriReference { | 82 type UriReference { |
75 UInt index; // Index into the UriSource uris. | 83 UInt index; // Index into the UriSource uris. |
76 } | 84 } |
77 | 85 |
78 type FileOffset { | 86 type FileOffset { |
79 // Encoded as offset + 1 to accommodate -1 indicating no offset. | 87 // Encoded as offset + 1 to accommodate -1 indicating no offset. |
80 UInt fileOffset; | 88 UInt fileOffset; |
81 } | 89 } |
(...skipping 865 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
947 Byte tag = 88; | 955 Byte tag = 88; |
948 } | 956 } |
949 | 957 |
950 type TypeParameter { | 958 type TypeParameter { |
951 // Note: there is no tag on TypeParameter | 959 // Note: there is no tag on TypeParameter |
952 StringReference name; // Cosmetic, may be empty, not unique. | 960 StringReference name; // Cosmetic, may be empty, not unique. |
953 DartType bound; // 'dynamic' if no explicit bound was given. | 961 DartType bound; // 'dynamic' if no explicit bound was given. |
954 } | 962 } |
955 | 963 |
956 ``` | 964 ``` |
OLD | NEW |