vm_insnhelper.c: vm_cfp_consistent_p

* vm_insnhelper.c (vm_cfp_consistent_p): extracted the conditions
  for cfp consistency.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59619 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2017-08-18 12:44:30 +00:00
Родитель a7bccb20f8
Коммит e3c42f53fb
1 изменённых файлов: 13 добавлений и 3 удалений

Просмотреть файл

@ -1833,10 +1833,20 @@ vm_profile_show_result(void)
#define VM_PROFILE_ATEXIT()
#endif
static inline int
vm_cfp_consistent_p(rb_thread_t *th, const rb_control_frame_t *reg_cfp)
{
const int ov_flags = RAISED_STACKOVERFLOW;
if (LIKELY(reg_cfp == th->ec.cfp + 1)) return TRUE;
if (rb_thread_raised_p(th, ov_flags)) {
rb_thread_raised_reset(th, ov_flags);
return TRUE;
}
return FALSE;
}
#define CHECK_CFP_CONSISTENCY(func) \
(LIKELY(reg_cfp == th->ec.cfp + 1) ? (void) 0 : \
rb_thread_raised_p(th, RAISED_STACKOVERFLOW) ? \
rb_thread_raised_reset(th, RAISED_STACKOVERFLOW) : \
(LIKELY(vm_cfp_consistent_p(th, reg_cfp)) ? (void)0 : \
rb_bug(func ": cfp consistency error (%p, %p)", reg_cfp, th->ec.cfp+1))
static inline