diff options
author | Joshua Haberman <jhaberman@gmail.com> | 2018-08-21 14:18:53 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-08-21 14:18:53 -0700 |
commit | e3eae33fb5840dbec3c2bc9109fa164f6066baa8 (patch) | |
tree | 34690021d5688e2b9cd75982a0d1de2451f042d2 /upb/decode.c | |
parent | b0a6602fc8fddf71ac959d43b4cd82707e6235b9 (diff) | |
parent | 636b25be8d2744bc5fe41b44d36580460aa7b611 (diff) |
Merge pull request #114 from haberman/arenaonly
Enforced that upb_msg lives in an Arena only, and other simplifying.
Diffstat (limited to 'upb/decode.c')
-rw-r--r-- | upb/decode.c | 16 |
1 files changed, 6 insertions, 10 deletions
diff --git a/upb/decode.c b/upb/decode.c index b5033f0..ca18e95 100644 --- a/upb/decode.c +++ b/upb/decode.c @@ -172,6 +172,7 @@ static bool upb_array_grow(upb_array *arr, size_t elements) { size_t new_bytes; size_t old_bytes; void *new_data; + upb_alloc *alloc = upb_arena_alloc(arr->arena); while (new_size < needed) { new_size *= 2; @@ -179,7 +180,7 @@ static bool upb_array_grow(upb_array *arr, size_t elements) { old_bytes = arr->len * arr->element_size; new_bytes = new_size * arr->element_size; - new_data = upb_realloc(arr->alloc, arr->data, old_bytes, new_bytes); + new_data = upb_realloc(alloc, arr->data, old_bytes, new_bytes); CHK(new_data); arr->data = new_data; @@ -212,12 +213,11 @@ static upb_array *upb_getorcreatearr(upb_decstate *d, upb_array *arr = upb_getarr(frame, field); if (!arr) { - arr = upb_env_malloc(d->env, sizeof(*arr)); + upb_fieldtype_t type = upb_desctype_to_fieldtype[field->descriptortype]; + arr = upb_array_new(type, upb_env_arena(d->env)); if (!arr) { return NULL; } - upb_array_init(arr, upb_desctype_to_fieldtype[field->descriptortype], - upb_arena_alloc(upb_env_arena(d->env))); *(upb_array**)&frame->msg[field->offset] = arr; } @@ -278,10 +278,8 @@ static bool upb_decode_submsg(upb_decstate *d, UPB_ASSERT(subm); if (!submsg) { - submsg = upb_env_malloc(d->env, upb_msg_sizeof((upb_msglayout *)subm)); + submsg = upb_msg_new((upb_msglayout *)subm, upb_env_arena(d->env)); CHK(submsg); - submsg = upb_msg_init( - submsg, (upb_msglayout*)subm, upb_arena_alloc(upb_env_arena(d->env))); *(void**)submsg_slot = submsg; } @@ -460,10 +458,8 @@ static bool upb_decode_toarray(upb_decstate *d, upb_decframe *frame, subm = frame->m->submsgs[field->submsg_index]; UPB_ASSERT(subm); - submsg = upb_env_malloc(d->env, upb_msg_sizeof((upb_msglayout *)subm)); + submsg = upb_msg_new((upb_msglayout *)subm, upb_env_arena(d->env)); CHK(submsg); - submsg = upb_msg_init(submsg, (upb_msglayout*)subm, - upb_arena_alloc(upb_env_arena(d->env))); field_mem = upb_array_add(arr, 1); CHK(field_mem); |