anchor.diff:        EBufCreate (Eternal, translate_expr env init, EConstant (UInt32, "1"))
   
     | MLE_App ({ expr = MLE_TApp({ expr = MLE_Name p }, _) }, [ _e0; e1; e2 ])
  -    when (string_of_mlpath p = "FStar.Buffer.rcreate" || string_of_mlpath p = "LowStar.Buffer.rcreate") ->
  +    when (string_of_mlpath p = "FStar.Buffer.rcreate" || string_of_mlpath p = "LowStar.Buffer.gcmalloc") ->
         EBufCreate (Eternal, translate_expr env e1, translate_expr env e2)
   
     | MLE_App ({ expr = MLE_TApp({ expr = MLE_Name p }, _) } , [ _rid; init ])
  
positive.code:   (* All the distinguished combinators that correspond to allocation, either on
     * the stack, on the heap (GC'd or manually-managed). *)
    | MLE_App ({ expr = MLE_TApp({ expr = MLE_Name p }, _) } , [ e1; e2 ])
      when (string_of_mlpath p = "FStar.Buffer.create" || string_of_mlpath p = "LowStar.Buffer.create") ->
        EBufCreate (Stack, translate_expr env e1, translate_expr env e2)
  
    | MLE_App ({ expr = MLE_TApp({ expr = MLE_Name p }, _) } , [ init ])
  
negative.code:       EBufCreate (ManuallyManaged, translate_expr env init, EConstant (UInt32, "1"))
  
    | MLE_App ({ expr = MLE_TApp({ expr = MLE_Name p }, _) }, [ _e0; e1; e2 ])
      when (string_of_mlpath p = "FStar.Buffer.rcreate_mm" || string_of_mlpath p = "LowStar.Buffer.malloc") ->
        EBufCreate (ManuallyManaged, translate_expr env e1, translate_expr env e2)
  
    (* 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") ->
        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.Buffer.free") ->
        EBufFree (translate_expr env e2)
  
    (* Generic buffer operations. *)
  