let new_function name args t value pos ext =
  {
    def_name = name;
    def_type = t;
    def_nature = Funct;
    def_value =
     Function (
       let p = 
         {
           func_args = args;
           func_value = value;
           func_used = false;
           func_asm_def = Asm_ir.proc_stub name (List.map (fun a -> Asm_ir.new_var_def Asm_ir.No_type (-1)) args) 0; (* TODO: globally unique name *)
           func_external = ext;
         }
       in
         List.iter2 (fun a b -> a.def_asm <- Asm_var b) args p.func_asm_def.Asm_ir.proc_args;
         
         (** An argument is considered as any other variable. *)

         value.block_env <- concat_env true (env_of_def_list args) value.block_env;
         p
     );
    def_pos = pos;
    def_coord = [];
    def_asm = Asm_none;
    def_pass_by_ref = false;
  }