generic_ivar_update: do not goto into a branch

I'm not necessarily against every goto in general, but jumping into a
branch is definitely a bad idea.  Better refactor.
This commit is contained in:
卜部昌平 2020-06-22 09:25:25 +09:00
parent 421db59c9e
commit fc45a061b9
Notes: git 2020-06-29 11:06:38 +09:00

View File

@ -949,29 +949,22 @@ iv_index_tbl_newsize(struct ivar_update *ivup)
static int
generic_ivar_update(st_data_t *k, st_data_t *v, st_data_t u, int existing)
{
VALUE obj = (VALUE)*k;
struct ivar_update *ivup = (struct ivar_update *)u;
uint32_t newsize;
int ret = ST_CONTINUE;
struct gen_ivtbl *ivtbl;
struct gen_ivtbl *ivtbl = 0;
if (existing) {
ivtbl = (struct gen_ivtbl *)*v;
if (ivup->index >= ivtbl->numiv) {
goto resize;
}
ret = ST_STOP;
}
else {
FL_SET(obj, FL_EXIVAR);
ivtbl = 0;
resize:
newsize = iv_index_tbl_newsize(ivup);
ivtbl = gen_ivtbl_resize(ivtbl, newsize);
*v = (st_data_t)ivtbl;
if (ivup->index < ivtbl->numiv) {
ivup->u.ivtbl = ivtbl;
return ST_STOP;
}
}
FL_SET((VALUE)*k, FL_EXIVAR);
uint32_t newsize = iv_index_tbl_newsize(ivup);
ivtbl = gen_ivtbl_resize(ivtbl, newsize);
*v = (st_data_t)ivtbl;
ivup->u.ivtbl = ivtbl;
return ret;
return ST_CONTINUE;
}
static VALUE