anchor.diff:  format_nif_cc_field_unpacker_single(DestVar, MsgVar, Field, Defs) ->
       #field{name=FName, type=FType} = Field,
       LCFName = to_lower(FName),
  -    [f("    if (!~s->has_~s())\n", [MsgVar, LCFName]),
  -     f("        ~s = aa_undefined;\n", [DestVar]),
  -     f("    else\n"),
  +    [?f("    if (!~s->has_~s())\n", [MsgVar, LCFName]),
  +     ?f("        ~s = aa_undefined;\n", [DestVar]),
  +     ?f("    else\n"),
        indent_lines(
          8,
          case FType of
              float ->
  -               [f("~s = enif_make_double(env, (double)~s->~s());\n",
  -                  [DestVar, MsgVar, LCFName])];
  +               [?f("~s = enif_make_double(env, (double)~s->~s());\n",
  +                   [DestVar, MsgVar, LCFName])];
              double ->
  -               [f("~s = enif_make_double(env, ~s->~s());\n",
  -                  [DestVar, MsgVar, LCFName])];
  +               [?f("~s = enif_make_double(env, ~s->~s());\n",
  +                   [DestVar, MsgVar, LCFName])];
              _S32 when FType == sint32;
                        FType == int32;
                        FType == sfixed32 ->
  -               [f("~s = enif_make_int(env, ~s->~s());\n",
  -                  [DestVar, MsgVar, LCFName])];
  +               [?f("~s = enif_make_int(env, ~s->~s());\n",
  +                   [DestVar, MsgVar, LCFName])];
              _S64 when FType == sint64;
                        FType == int64;
                        FType == sfixed64 ->
  -               [f("~s = enif_make_int64(env, (ErlNifSInt64)~s->~s());\n",
  -                  [DestVar, MsgVar, LCFName])];
  +               [?f("~s = enif_make_int64(env, (ErlNifSInt64)~s->~s());\n",
  +                   [DestVar, MsgVar, LCFName])];
              _U32 when FType == uint32;
                        FType == fixed32 ->
  -               [f("~s = enif_make_uint(env, ~s->~s());\n",
  -                  [DestVar, MsgVar, LCFName])];
  +               [?f("~s = enif_make_uint(env, ~s->~s());\n",
  +                   [DestVar, MsgVar, LCFName])];
              _U64 when FType == uint64;
                        FType == fixed64 ->
  -               [f("~s = enif_make_uint64(env, (ErlNifUInt64)~s->~s());\n",
  -                  [DestVar, MsgVar, LCFName])];
  +               [?f("~s = enif_make_uint64(env, (ErlNifUInt64)~s->~s());\n",
  +                   [DestVar, MsgVar, LCFName])];
              bool ->
  -               [f("if (~s->~s())\n", [MsgVar, LCFName]),
  -                f("    ~s = aa_true;\n", [DestVar]),
  -                f("else\n"),
  -                f("    ~s = aa_false;\n", [DestVar])];
  +               [?f("if (~s->~s())\n", [MsgVar, LCFName]),
  +                ?f("    ~s = aa_true;\n", [DestVar]),
  +                ?f("else\n"),
  +                ?f("    ~s = aa_false;\n", [DestVar])];
              {enum, EnumName} ->
                  {value, {{enum,EnumName}, Enumerations}} =
                      lists:keysearch({enum,EnumName}, 1, Defs),
                  [] ++
  -                   [f("switch (~s->~s()) {\n", [MsgVar, LCFName])] ++
  -                   [f("    case ~w: ~s = ~s; break;\n",
  -                      [Value, DestVar, mk_c_var(aa_, Sym)])
  +                   [?f("switch (~s->~s()) {\n", [MsgVar, LCFName])] ++
  +                   [?f("    case ~w: ~s = ~s; break;\n",
  +                       [Value, DestVar, mk_c_var(aa_, Sym)])
                       || {Sym, Value} <- Enumerations] ++
  -                   [f("    default: ~s = aa_undefined;\n", [DestVar])] ++
  -                   [f("}\n")];
  +                   [?f("    default: ~s = aa_undefined;\n", [DestVar])] ++
  +                   [?f("}\n")];
              string ->
  -               [f("{\n"),
  -                f("    const char    *sData = ~s->~s().data();\n",
  -                  [    MsgVar, LCFName]),
  -                f("    unsigned int   sSize = ~s->~s().size();\n",
  -                  [    MsgVar, LCFName]),
  -                f("    ~s = utf8_to_erl_string(env, sData, sSize);\n",
  -                  [    DestVar]),
  -                f("}\n")];
  +               [?f("{\n"),
  +                ?f("    const char    *sData = ~s->~s().data();\n",
  +                   [    MsgVar, LCFName]),
  +                ?f("    unsigned int   sSize = ~s->~s().size();\n",
  +                   [    MsgVar, LCFName]),
  +                ?f("    ~s = utf8_to_erl_string(env, sData, sSize);\n",
  +                   [    DestVar]),
  +                ?f("}\n")];
              bytes ->
  -               [f("{\n"),
  -                f("    unsigned char *data;\n"),
  -                f("    unsigned int   bSize = ~s->~s().size();\n",
  -                  [    MsgVar, LCFName]),
  -                f("    const char    *bData = ~s->~s().data();\n",
  -                  [    MsgVar, LCFName]),
  -                f("    data = enif_make_new_binary(\n"), %% can data be NULL??
  -                f("               env,\n"),
  -                f("               bSize,\n"),
  -                f("               &~s);\n", [DestVar]),
  -                f("    memmove(data, bData, bSize);\n"),
  -                f("}\n")];
  +               [?f("{\n"),
  +                ?f("    unsigned char *data;\n"),
  +                ?f("    unsigned int   bSize = ~s->~s().size();\n",
  +                   [    MsgVar, LCFName]),
  +                ?f("    const char    *bData = ~s->~s().data();\n",
  +                   [    MsgVar, LCFName]),
  +                ?f("    data = enif_make_new_binary(\n"), %% can data be NULL??
  +                ?f("               env,\n"),
  +                ?f("               bSize,\n"),
  +                ?f("               &~s);\n", [DestVar]),
  +                ?f("    memmove(data, bData, bSize);\n"),
  +                ?f("}\n")];
              {msg, Msg2Name} ->
                  UnpackFnName = mk_c_fn(u_msg_, Msg2Name),
  -               [f("~s = ~s(env, &~s->~s());\n",
  -                  [DestVar, UnpackFnName, MsgVar, LCFName])]
  +               [?f("~s = ~s(env, &~s->~s());\n",
  +                   [DestVar, UnpackFnName, MsgVar, LCFName])]
          end),
        "\n"].
   
   format_nif_cc_field_unpacker_repeated(DestVar, MsgVar, Field, Defs) ->
       #field{name=FName, type=FType} = Field,
       LCFName = to_lower(FName),
  -    [f("    {\n"),
  -     f("        unsigned int numElems = ~s->~s_size();\n", [MsgVar, LCFName]),
  -     f("        ERL_NIF_TERM relem[numElems];\n"),
  -     f("        unsigned int i;\n"),
  -     "\n",
  -     f("        for (i = 0; i < numElems; i++)\n"),
  +    [?f("    {\n"),
  +     ?f("        unsigned int numElems = ~s->~s_size();\n", [MsgVar, LCFName]),
  +     ?f("        ERL_NIF_TERM relem[numElems];\n"),
  +     ?f("        unsigned int i;\n"),
  +     "\n",
  +     ?f("        for (i = 0; i < numElems; i++)\n"),
        indent_lines(
          12,
          case FType of
              float ->
  -               [f("relem[i] = enif_make_double(env, (double)~s->~s(i));\n",
  -                  [MsgVar, LCFName])];
  +               [?f("relem[i] = enif_make_double(env, (double)~s->~s(i));\n",
  +                   [MsgVar, LCFName])];
              double ->
  -               [f("relem[i] = enif_make_double(env, ~s->~s(i));\n",
  -                  [MsgVar, LCFName])];
  +               [?f("relem[i] = enif_make_double(env, ~s->~s(i));\n",
  +                   [MsgVar, LCFName])];
              _S32 when FType == sint32;
                        FType == int32;
                        FType == sfixed32 ->
  -               [f("relem[i] = enif_make_int(env, ~s->~s(i));\n",
  -                  [MsgVar, LCFName])];
  +               [?f("relem[i] = enif_make_int(env, ~s->~s(i));\n",
  +                   [MsgVar, LCFName])];
              _S64 when FType == sint64;
                        FType == int64;
                        FType == sfixed64 ->
  -               [f("relem[i] = enif_make_int64(env, (ErlNifSInt64)~s->~s(i));\n",
  -                  [MsgVar, LCFName])];
  +               [?f("relem[i] = enif_make_int64(env, (ErlNifSInt64)~s->~s(i));\n",
  +                   [MsgVar, LCFName])];
              _U32 when FType == uint32;
                        FType == fixed32 ->
  -               [f("relem[i] = enif_make_uint(env, ~s->~s(i));\n",
  -                  [MsgVar, LCFName])];
  +               [?f("relem[i] = enif_make_uint(env, ~s->~s(i));\n",
  +                   [MsgVar, LCFName])];
              _U64 when FType == uint64;
                        FType == fixed64 ->
  -               [f("relem[i] = enif_make_uint64(env,\n"
  -                  "                            (ErlNifUInt64)~s->~s(i));\n",
  -                  [MsgVar, LCFName])];
  +               [?f("relem[i] = enif_make_uint64(env,\n"
  +                   "                            (ErlNifUInt64)~s->~s(i));\n",
  +                   [MsgVar, LCFName])];
              bool ->
  -               [f("if (~s->~s(i))\n", [MsgVar, LCFName]),
  -                f("    relem[i] = aa_true;\n"),
  -                f("else\n"),
  -                f("    relem[i] = aa_false;\n")];
  +               [?f("if (~s->~s(i))\n", [MsgVar, LCFName]),
  +                ?f("    relem[i] = aa_true;\n"),
  +                ?f("else\n"),
  +                ?f("    relem[i] = aa_false;\n")];
              {enum, EnumName} ->
                  {value, {{enum,EnumName}, Enumerations}} =
                      lists:keysearch({enum,EnumName}, 1, Defs),
                  [] ++
  -                   [f("switch (~s->~s(i)) {\n", [MsgVar, LCFName])] ++
  -                   [f("    case ~w: relem[i] = ~s; break;\n",
  -                      [Value, mk_c_var(aa_, Sym)])
  +                   [?f("switch (~s->~s(i)) {\n", [MsgVar, LCFName])] ++
  +                   [?f("    case ~w: relem[i] = ~s; break;\n",
  +                       [Value, mk_c_var(aa_, Sym)])
                       || {Sym, Value} <- Enumerations] ++
  -                   [f("    default: relem[i] = aa_undefined;\n")] ++
  -                   [f("}\n")];
  +                   [?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")];
  +               [?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"),
  -                f("    unsigned int   bSize = ~s->~s(i).size();\n",
  -                  [    MsgVar, LCFName]),
  -                f("    const char    *bData = ~s->~s(i).data();\n",
  -                  [    MsgVar, LCFName]),
  -                f("    data = enif_make_new_binary(\n"), %% can data be NULL??
  -                f("               env,\n"),
  -                f("               bSize,\n"),
  -                f("               &relem[i]);\n"),
  -                f("    memmove(data, bData, bSize);\n"),
  -                f("}\n")];
  +               [?f("{\n"),
  +                ?f("    unsigned char *data;\n"),
  +                ?f("    unsigned int   bSize = ~s->~s(i).size();\n",
  +                   [    MsgVar, LCFName]),
  +                ?f("    const char    *bData = ~s->~s(i).data();\n",
  +                   [    MsgVar, LCFName]),
  +                ?f("    data = enif_make_new_binary(\n"), %% can data be NULL??
  +                ?f("               env,\n"),
  +                ?f("               bSize,\n"),
  +                ?f("               &relem[i]);\n"),
  +                ?f("    memmove(data, bData, bSize);\n"),
  +                ?f("}\n")];
              {msg, Msg2Name} ->
                  UnpackFnName = mk_c_fn(u_msg_, Msg2Name),
  -               [f("relem[i] = ~s(env, &~s->~s(i));\n",
  -                  [UnpackFnName, MsgVar, LCFName])]
  +               [?f("relem[i] = ~s(env, &~s->~s(i));\n",
  +                   [UnpackFnName, MsgVar, LCFName])]
          end),
  -     f("        ~s = enif_make_list_from_array(env, relem, numElems);\n",
  -       [DestVar]),
  +     ?f("        ~s = enif_make_list_from_array(env, relem, numElems);\n",
  +        [DestVar]),
        "    }\n",
        "\n"].
   
  
positive.code:                                          %%            pass_as_params
          }).
  
  -define(ff(Fmt, Args), lists:flatten(io_lib:format(Fmt, Args))).
  
  %% @spec file(File) -> ok | {error, Reason}
  
negative.code:           CFnName = mk_c_fn(d_msg_, MsgName),
            IsLast = I == length(Defs),
            Comma = ["," || not IsLast],
            ?f("    {\"~s\", 1, ~s}~s\n", [FnName, CFnName, Comma])
        end
        || {I, {{msg, MsgName}, _MsgFields}} <- index_seq(Defs)],
       "\n",
       "};\n",
       "\n",
       ?f("ERL_NIF_INIT(~s, nif_funcs, load, reload, upgrade, unload)\n",
          [Mod])].
  
  format_nif_cc_decoders(Mod, Defs, Opts) ->
      CPkg = get_cc_pkg(Defs),
  