Procházet zdrojové kódy

fixup! fixup! Use an array for the position stack rather than an Erlang list

pull/176/head
John Högberg před 6 roky
rodič
revize
598677b6cc
2 změnil soubory, kde provedl 13 přidání a 1 odebrání
  1. +5
    -1
      c_src/termstack.c
  2. +8
    -0
      test/jiffy_06_object_tests.erl

+ 5
- 1
c_src/termstack.c Zobrazit soubor

@ -15,7 +15,11 @@ termstack_push(TermStack *stack, ERL_NIF_TERM term)
size_t new_size = stack->size * 2;
if (stack->elements == &stack->__default_elements[0]) {
stack->elements = enif_alloc(new_size * sizeof(ERL_NIF_TERM));
ERL_NIF_TERM *new_elements = enif_alloc(new_size * sizeof(ERL_NIF_TERM));
memcpy(new_elements, stack->elements, stack->size * sizeof(ERL_NIF_TERM));
stack->elements = new_elements;
} else {
stack->elements = enif_realloc(stack->elements,
new_size * sizeof(ERL_NIF_TERM));

+ 8
- 0
test/jiffy_06_object_tests.erl Zobrazit soubor

@ -20,6 +20,14 @@ latin1_atom_test_() ->
Expected = <<"{\"", 195, 164, "\":\"bar\"}">>,
?_assertEqual(Expected, enc(#{ Key => <<"bar">> })).
nested_object_segv_test_() ->
Obj = nested(128),
Enc = enc(Obj),
?_assertEqual(Obj, dec(Enc)).
nested(0) -> <<"bottom">>;
nested(N) -> {[{integer_to_binary(N), nested(N - 1)}]}.
gen(ok, {J, E}) ->
gen(ok, {J, E, J});
gen(ok, {J1, E, J2}) ->

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