espruino / Espruino

The Espruino JavaScript interpreter - Official Repo
http://www.espruino.com/
Other
2.73k stars 741 forks source link

ArrayBuffers use firstChild - could they use lastChild? #2443

Open gfwilliams opened 6 months ago

gfwilliams commented 6 months ago

We had issues with ArrayBuffer not fitting in 12 byte systems: https://forum.espruino.com/conversations/392509/#comment17229419

I've fixed it, but one reason is we point to the string containing the data from firstChild, but lastChild is unused:

 | Offset | Size | Name    | STRING | STR_EXT  | NAME_STR | NAME_INT | INT  | DOUBLE  | OBJ/FUNC/ARRAY | ARRAYBUFFER | NATIVE_STR | FLAT_STR |
 | 16b    |      |         |        |          |          |          |      |         |                |             | FLASH_STR  |          |
 |--------|------|---------|--------|----------|----------|----------|------|---------|----------------|-------------|------------|----------|
 | 0 - 3  | 4    | varData | data   | data     |  data    | data     | data | data    | nativePtr      | size        | ptr        | charLen  |
 | 4 - 5  | ?    | next    | data   | data     |  next    | next     |  -   | data    | argTypes       | format      | len        | -        |
 | 6 - 7  | ?    | prev    | data   | data     |  prev    | prev     |  -   | data    | argTypes       | format      | ..len      | -        |
 | 8 - 9  | ?    | first   | data   | data     |  child   | child    |  -   | data?   | first          | stringPtr   | ..len      | -        |
 | 10-11  | ?    | refs    | refs   | data     |  refs    | refs     | refs | refs    | refs           | refs        | refs       | refs     |
 | 12-13  | ?    | last    | nextPtr| nextPtr  |  nextPtr |  -       |  -   |  -      | last           | -           | -          | -        |
 | 14-15  | 2    | Flags   | Flags  | Flags    |  Flags   | Flags    | Flags| Flags   | Flags          | Flags       | Flags      | Flags    |

I think it's done because for names we use firstChild to point onwards so we can re-use the same freeing code, but if we did use lastChild it'd give us a little more room, potentially to allow >16 bit byte offsets which I know has been asked for