let build_class_struct_map klass_data (sast_classes : Sast.class_def list) =
let klass_to_struct klass_name (aklass : Ast.class_def) =
let compare (_, n1) (_, n2) = Pervasives.compare n1 n2 in
let ivars = List.flatten (List.map snd (Klass.klass_to_variables aklass)) in
let renamed = List.map get_vdef ivars in
[(klass_name, List.sort compare renamed)] in
let struct_map = StringMap.mapi klass_to_struct klass_data.classes in
let folder map = function
| "Object" -> StringMap.add (get_tname "Object") (StringMap.find "Object" struct_map) map
| aklass ->
let parent = StringMap.find aklass klass_data.parents in
let ancestors = StringMap.find (get_tname parent) map in
let this = StringMap.find aklass struct_map in
StringMap.add (get_tname aklass) (this @ ancestors) map in
let struct_map = List.fold_left folder StringMap.empty (Klass.get_class_names klass_data) in
StringMap.map List.rev struct_map