let rec sv_of_variant = function
| Variant.Null -> sv_undef ()
| Variant.String s -> sv_of_string s
| Variant.Int i -> sv_of_int i
| Variant.Float f -> sv_of_float f
| Variant.Bool b -> sv_of_bool b
| Variant.Array xs -> arrayref (av_of_sv_list (List.map sv_of_variant xs))
| Variant.Hash xs -> hashref
(let hv = hv_empty () in
List.iter (fun (k, v) -> hv_set hv k (sv_of_variant v)) xs;
hv
)