compile_call: 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:
parent
aa2cb7f722
commit
a8d992ac00
Notes:
git
2020-06-29 11:07:10 +09:00
19
compile.c
19
compile.c
@ -7290,16 +7290,10 @@ compile_call(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, co
|
|||||||
if (bf == NULL) {
|
if (bf == NULL) {
|
||||||
if (strcmp("cstmt!", builtin_func) == 0 ||
|
if (strcmp("cstmt!", builtin_func) == 0 ||
|
||||||
strcmp("cexpr!", builtin_func) == 0) {
|
strcmp("cexpr!", builtin_func) == 0) {
|
||||||
inlinec:;
|
// ok
|
||||||
int inline_index = GET_VM()->builtin_inline_index++;
|
|
||||||
snprintf(inline_func, 0x20, "_bi%d", inline_index);
|
|
||||||
builtin_func = inline_func;
|
|
||||||
args_node = NULL;
|
|
||||||
goto retry;
|
|
||||||
}
|
}
|
||||||
else if (strcmp("cconst!", builtin_func) == 0) {
|
else if (strcmp("cconst!", builtin_func) == 0) {
|
||||||
cconst = true;
|
cconst = true;
|
||||||
goto inlinec;
|
|
||||||
}
|
}
|
||||||
else if (strcmp("cinit!", builtin_func) == 0) {
|
else if (strcmp("cinit!", builtin_func) == 0) {
|
||||||
// ignore
|
// ignore
|
||||||
@ -7311,16 +7305,21 @@ compile_call(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, co
|
|||||||
iseq->body->builtin_inline_p = true;
|
iseq->body->builtin_inline_p = true;
|
||||||
return COMPILE_OK;
|
return COMPILE_OK;
|
||||||
}
|
}
|
||||||
|
else if (1) {
|
||||||
if (1) {
|
|
||||||
rb_bug("can't find builtin function:%s", builtin_func);
|
rb_bug("can't find builtin function:%s", builtin_func);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
COMPILE_ERROR(ERROR_ARGS "can't find builtin function:%s", builtin_func);
|
COMPILE_ERROR(ERROR_ARGS "can't find builtin function:%s", builtin_func);
|
||||||
}
|
|
||||||
return COMPILE_NG;
|
return COMPILE_NG;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int inline_index = GET_VM()->builtin_inline_index++;
|
||||||
|
snprintf(inline_func, 0x20, "_bi%d", inline_index);
|
||||||
|
builtin_func = inline_func;
|
||||||
|
args_node = NULL;
|
||||||
|
goto retry;
|
||||||
|
}
|
||||||
|
|
||||||
if (cconst) {
|
if (cconst) {
|
||||||
typedef VALUE(*builtin_func0)(void *, VALUE);
|
typedef VALUE(*builtin_func0)(void *, VALUE);
|
||||||
VALUE const_val = (*(builtin_func0)bf->func_ptr)(NULL, Qnil);
|
VALUE const_val = (*(builtin_func0)bf->func_ptr)(NULL, Qnil);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user