let rec copy_var_def vd =
  {
    vd_ident = vd.vd_ident;
    vd_type = vd.vd_type;
    vd_lex_depth = vd.vd_lex_depth;
    vd_value = vd.vd_value;
    vd_on_the_stack = vd.vd_on_the_stack;
    vd_pos = 
     match !(vd.vd_pos) with
       | Pos_pointed v -> ref (Pos_pointed (copy_var v))
       | Pos_rec(r, k) -> ref (Pos_rec (copy_var r, k))
       | Pos_arr(a, v, n0, s) -> ref (Pos_arr (copy_var a, copy_var v, n0, s))
       | Pos_base _
       | Pos_stack _
       | Pos_label _
       | Pos_none -> vd.vd_pos
  }

(** Get a copy of a variable. *)

and copy_var v =
  {
    var_reg = v.var_reg;
    var_def = copy_var_def v.var_def;
  }