std :: serial::value
Macro VAL_NULL
#define VAL_NULL 0Value::kind — deliberately plain ints (see collections/map.sc's MapEntry state field for the same convention elsewhere in std) rather than SafeC's tagged-union feature: 'arr_val'/'obj_val' are same-size Vec headers regardless of what they hold, so there's no payload-size mismatch a tagged union would actually save memory on, and this keeps Value a plain flat struct — the simpler, more established shape for something meant to be pushed into Vec elements by raw memcpy.