let make_compact f max_variable_number variable_environment =
let rename_table = Array.create max_variable_number (-1) in
let variable_counter = ref 0 in
let rename n =
let m = rename_table.(n) in
if m = -1 then begin
let m = !variable_counter in
incr variable_counter;
rename_table.(n) <- m;
m
end
else
m
in
let rename_phi_function( r, t, a ) = rename r, t, Array.map rename a in
for i = 0 to Array.length f - 1 do
let phi_function = List.map rename_phi_function f.(i).phi_function in
let code = List.map (map_il rename rename) f.(i).code in
f.(i).phi_function <- phi_function;
f.(i).code <- code
done;
let new_max_variable_number = !variable_counter in
let new_variable_environment =
Array.create new_max_variable_number null_variable_attribute
in
for i = 0 to max_variable_number - 1 do
if rename_table.(i) <> -1 then
let j = rename_table.(i) in
new_variable_environment.(j) <- variable_environment.(i)
done;
new_max_variable_number, new_variable_environment