add VM_ENV_NAMESPACED_P to unify/simplify/correct when SPECVAL has a namespace

This commit is contained in:
Satoshi Tagomori 2025-08-12 10:08:20 +09:00 committed by Satoshi Tagomori
parent 228d2c39f0
commit bff625d2a6
2 changed files with 11 additions and 5 deletions

6
vm.c
View File

@ -142,10 +142,10 @@ static inline VALUE
VM_CF_BLOCK_HANDLER(const rb_control_frame_t * const cfp)
{
const VALUE *ep;
if (VM_FRAME_TYPE(cfp) == VM_FRAME_MAGIC_TOP) {
if (VM_ENV_NAMESPACED_P(cfp->ep)) {
VM_ASSERT(VM_ENV_LOCAL_P(cfp->ep));
/* Never set black_handler for VM_FRAME_MAGIC_TOP
* and the specval is used for namespace (rb_namespace_t) in the case
/* Never set black_handler for VM_FRAME_MAGIC_TOP or VM_FRAME_MAGIC_CLASS
* and the specval is used for namespace (rb_namespace_t) in these case
*/
return VM_BLOCK_HANDLER_NONE;
}

View File

@ -1559,10 +1559,16 @@ VM_ENV_PREV_EP(const VALUE *ep)
return VM_ENV_PREV_EP_UNCHECKED(ep);
}
static inline bool
VM_ENV_NAMESPACED_P(const VALUE *ep)
{
return VM_ENV_FRAME_TYPE_P(ep, VM_FRAME_MAGIC_CLASS) || VM_ENV_FRAME_TYPE_P(ep, VM_FRAME_MAGIC_TOP);
}
static inline VALUE
VM_ENV_BLOCK_HANDLER(const VALUE *ep)
{
if (VM_ENV_FRAME_TYPE_P(ep, VM_FRAME_MAGIC_CLASS) || VM_ENV_FRAME_TYPE_P(ep, VM_FRAME_MAGIC_TOP)) {
if (VM_ENV_NAMESPACED_P(ep)) {
VM_ASSERT(VM_ENV_LOCAL_P(ep));
return VM_BLOCK_HANDLER_NONE;
}
@ -1574,7 +1580,7 @@ VM_ENV_BLOCK_HANDLER(const VALUE *ep)
static inline const rb_namespace_t *
VM_ENV_NAMESPACE(const VALUE *ep)
{
VM_ASSERT(VM_ENV_FRAME_TYPE_P(ep, VM_FRAME_MAGIC_CLASS) || VM_ENV_FRAME_TYPE_P(ep, VM_FRAME_MAGIC_TOP));
VM_ASSERT(VM_ENV_NAMESPACED_P(ep));
VM_ASSERT(VM_ENV_LOCAL_P(ep));
return (const rb_namespace_t *)GC_GUARDED_PTR_REF(ep[VM_ENV_DATA_INDEX_SPECVAL]);
}