anchor.diff:        EBufCreate (ManuallyManaged, translate_expr env init, EConstant (UInt32, "1"))
   
     | MLE_App ({ expr = MLE_TApp({ expr = MLE_Name p }, _) } , [ init ])
  -    when (string_of_mlpath p = "Steel.Reference.malloc") ->
  +    when (string_of_mlpath p = "Steel.Reference.malloc" ||
  +          string_of_mlpath p = "Steel.ST.Reference.alloc") ->
         EBufCreate (ManuallyManaged, translate_expr env init, EConstant (UInt32, "1"))
   
     | MLE_App ({ expr = MLE_TApp({ expr = MLE_Name p }, _) }, [ _e0; e1; e2 ])
  
positive.code: 
    (* Only manually-managed references and buffers can be freed. *)
    | MLE_App ({ expr = MLE_TApp({ expr = MLE_Name p }, _) }, [ e2 ]) when
        (string_of_mlpath p = "FStar.HyperStack.ST.rfree" || string_of_mlpath p = "Steel.Reference.free") ->
        EBufFree (translate_expr env e2)
  
    | MLE_App ({ expr = MLE_TApp({ expr = MLE_Name p }, _) }, [ e2 ])
      when (string_of_mlpath p = "FStar.Buffer.rfree" ||
            string_of_mlpath p = "LowStar.Monotonic.Buffer.free" ||
            string_of_mlpath p = "Steel.Array.free") ->
        EBufFree (translate_expr env e2)
  
    (* Generic buffer operations. *)
  
negative.code:         EApp (EQualified ([ "FStar"; "Int"; "Cast" ], c), [ translate_expr env arg ])
  
    | MLE_App ({expr=MLE_TApp ({expr=MLE_Name p}, _)}, [_; _; e])
      when string_of_mlpath p = "Steel.Effect.Atomic.return" ||
           string_of_mlpath p = "Steel.ST.Util.return" ->
      translate_expr env e
  
    | MLE_App (head, args) ->
  