diff options
| author | Satoshi Tagomori <s-tagomori@sakura.ad.jp> | 2025-08-12 10:08:20 +0900 |
|---|---|---|
| committer | Satoshi Tagomori <tagomoris@gmail.com> | 2025-09-29 01:15:38 +0900 |
| commit | bff625d2a673ea73c720cac50a9d596ab02432a8 (patch) | |
| tree | d6c6e8a1299544f247e7836ccfa4ac30c8bd4c1d | |
| parent | 228d2c39f05fff9c056a02647a764e164cbd729f (diff) | |
add VM_ENV_NAMESPACED_P to unify/simplify/correct when SPECVAL has a namespace
| -rw-r--r-- | vm.c | 6 | ||||
| -rw-r--r-- | vm_core.h | 10 |
2 files changed, 11 insertions, 5 deletions
@@ -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; } @@ -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]); } |
