anchor.diff:          yield! lvs |> Map.toSeq 
             |> Seq.map 
               (fun (lv, {mut=mut;ty=ty;initExpression=init}) ->
  +              let init = if unsafe && init.StartsWith("unsafe ") then init.Substring("unsafe ".Length) else init
                 let muts=if mut then "mut " else ""
                 let lvtype=": "+(rustTypeToString ty)
                 let inits=if System.String.IsNullOrEmpty init then ";" else " = "+init+";"
  
positive.code:   let ftext=
      System.String.Format(
        @"
  pub {0} {{
  {1}
    let hr=unsafe {{ {2} }};
    {3}
  }}
  "       ,signature,
          lvAndInit,
          nativeInvocation,
          rval)
    (ftext, signature)
  
  //-------------------------------------------------------------------------------------
  
negative.code:           ("("+System.String.Join(", ", List.map fst mrv)+")", RType("("+System.String.Join(", ", List.map (snd >> rustTypeToString) mrv)+")"))
          match nrty with
          |Ptr(Const(uty)) ->
            ("_hr", RConstPtr(RType(tyToRust uty)))
          |TypedefRef "HRESULT" ->
            match !returnVals |> Set.toList with
            |[] ->
              ("hr2ret(_hr,_hr)",RType "HResult<HRESULT>")
            |[(ex,t)] ->
              ("hr2ret(_hr,"+ex+")", RType ("HResult<"+(rustTypeToString t)+">"))
            |mrv ->
              let (ex,t)=mrv2tuple mrv
              ("hr2ret(_hr,"+ex+")", RType ("HResult<"+(rustTypeToString t)+">"))
          |StructRef sname |TypedefRef sname |EnumRef sname ->
            match !returnVals |> Set.toList with
            |[] ->
              ("_hr",RType sname)
            |[(ex,t)] ->
              ("(_hr,"+ex+")", RType ("("+sname+", "+(rustTypeToString t)+")"))
            |mrv ->
              let (ex,t)=mrv2tuple (("hr", RType sname) :: mrv)
              ("hr2ret(_hr,"+ex+")", RType ("HResult<"+(rustTypeToString t)+">"))
          |Primitive Void ->
            match !returnVals |> Set.toList with
            |[] ->
  