pub(crate) fn rewrite_mul_balanced(src: &str) -> StringExpand description
mul(a, b) → (a) * (b). Paren-balanced on both arguments — needed
because real shaders write mul(rotation_matrix(theta), uv). The
outermost , at depth 0 splits the two arguments.