To create a clear boundary and allow for more caching opportunities, we should convert the CSSValue types to have immutable value semantics, moving whatever remains to the style / style building system. In the end, I would like to have a type for each possible top level css value, and make CSSValue itself a type-erasing wrapper of sorts: struct CSSValue { std::variant< // Each css value type here. > value; }; We can use this opportunity to create more strongly typed results coming out of the parser, so style building does not have to do quite as much type checking or assuming.
<rdar://problem/101479589>