let dispatch_var var =   
    match case_of_optimization 
    (Wp_parameters.LogicVar.get ()) (Wp_parameters.RefVar.get()) with 
      | Nothing -> Cvar 
      | Half -> 
          compute();
          if AddrTaken.mem var then Cvar else Fvar           
      | All ->
          compute();
          if is_formal_var_type var then 
            begin
              if ByValue.mem var then
                if AddrTaken.mem var then Cvar else Fvar
              else
                ( try let (n,_) = ByPReference.find var in PRpar n 
                  with Not_found ->
                    (try let (n,_) = ByAReference.find var in ARpar n
                     with Not_found -> (* impossible case *) Cvar ))
            end
          else
            begin 
              if AddrTaken.mem var then Cvar
              else 
                (if ArgAReference.mem var then ARarg 
                 else (if ArgPReference.mem var 
                       then PRarg else Fvar))
            end