Procházet zdrojové kódy

Allow encoding of improper lists

improper-lists
Paul J. Davis před 6 roky
rodič
revize
f01770755d
1 změnil soubory, kde provedl 11 přidání a 6 odebrání
  1. +11
    -6
      c_src/encoder.c

+ 11
- 6
c_src/encoder.c Zobrazit soubor

@ -632,6 +632,7 @@ encode_iter(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
ERL_NIF_TERM stack;
ERL_NIF_TERM curr;
ERL_NIF_TERM item;
ERL_NIF_TERM tmp;
const ERL_NIF_TERM* tuple;
int arity;
ErlNifSInt64 lval;
@ -689,9 +690,11 @@ encode_iter(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
}
continue;
}
if(!enif_get_list_cell(env, curr, &item, &curr)) {
ret = enc_error(e, "internal_error");
goto done;
if(!enif_get_list_cell(env, curr, &item, &tmp)) {
item = curr;
curr = enif_make_list(env, 0);
} else {
curr = tmp;
}
if(!enif_get_tuple(env, item, &arity, &tuple)) {
ret = enc_obj_error(e, "invalid_object_member", item);
@ -732,9 +735,11 @@ encode_iter(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
ret = enc_error(e, "internal_error");
goto done;
}
if(!enif_get_list_cell(env, curr, &item, &curr)) {
ret = enc_error(e, "internal_error");
goto done;
if(!enif_get_list_cell(env, curr, &item, &tmp)) {
item = curr;
curr = enif_make_list(env, 0);
} else {
curr = tmp;
}
stack = enif_make_list_cell(env, curr, stack);
stack = enif_make_list_cell(env, e->atoms->ref_array, stack);

Načítá se…
Zrušit
Uložit