8ceca622b9
A table constructor sizes its hash part to exactly the keys given, so every field the wrapper added afterwards could rehash the spec -- twice for the small ones. type and interactive are now arguments, which also keeps the tree ignorant of what names handlers go by, and ui.label no longer writes w and h: tree.create already measures the same text, font and style to size a text node, so Lua was measuring the string twice to say what C derives. Press styles are keyed by exception rather than one entry per node, which on a full screen was an array part recording that almost nothing opts out. Measured in the emulator, 12 sensors / 131 nodes, against the previous commit: build 74ms -> 52ms, Lua transient +12.0kB -> +5.7kB, free heap at build end 27936 -> 36140. Tree footprint is byte-identical throughout. Two behaviour changes fall out. ui.label used to overwrite an explicit w with the measured text width, so optionlist's fixed 10px marker gutter was silently variable and is now the width it asks for. tree.create measured a label in styleNormal while the painter draws it in the node's textStyle, so a styled label was sized too narrow; it now measures in the style it paints.