anchor.diff:  
   %% -- nif c++ code -----------------------------------------------------
   
  -format_nif_cc(Mod, Defs, Opts) ->
  +format_nif_cc(Mod, Defs, Opts, AnRes) ->
       [format_nif_cc_includes(Mod, Defs, Opts),
        format_nif_cc_local_function_decls(Mod, Defs, Opts),
        format_nif_cc_mk_atoms(Mod, Defs, Opts),
  +     format_nif_cc_utf8_conversion(Mod, Defs, AnRes, Opts),
        format_nif_cc_decoders(Mod, Defs, Opts),
        format_nif_cc_unpackers(Mod, Defs, Opts),
        format_nif_cc_foot(Mod, Defs, Opts)].
  
positive.code:                    [f("    default: ~s = aa_undefined;\n", [DestVar])] ++
                     [f("}\n")];
             string ->
                 %% FIXME: utf-8 unpack!!
                 [f("~s = enif_make_string_len(\n", [DestVar]),
                  f("            env,\n"),
                  f("            ~s->~s().data(),\n",[MsgVar, LCFName]),
                  f("            ~s->~s().size(),\n",[MsgVar, LCFName]),
                  f("            ERL_NIF_LATIN1);\n")];
             bytes ->
                 [f("{\n"),
                  f("    unsigned char *data;\n"),
  
negative.code:                    [f("    default: relem[i] = aa_undefined;\n")] ++
                     [f("}\n")];
             string ->
                 [f("{\n"),
                  f("    const char    *sData = ~s->~s(i).data();\n",
                    [    MsgVar, LCFName]),
                  f("    unsigned int   sSize = ~s->~s(i).size();\n",
                    [    MsgVar, LCFName]),
                  f("    relem[i] = utf8_to_erl_string(env, sData, sSize);\n"),
                  f("}\n")];
             bytes ->
                 [f("{\n"),
                  f("    unsigned char *data;\n"),
  