summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSatoshi Tagomori <s-tagomori@sakura.ad.jp>2025-08-12 10:08:20 +0900
committerSatoshi Tagomori <tagomoris@gmail.com>2025-09-29 01:15:38 +0900
commitbff625d2a673ea73c720cac50a9d596ab02432a8 (patch)
treed6c6e8a1299544f247e7836ccfa4ac30c8bd4c1d
parent228d2c39f05fff9c056a02647a764e164cbd729f (diff)
add VM_ENV_NAMESPACED_P to unify/simplify/correct when SPECVAL has a namespace
-rw-r--r--vm.c6
-rw-r--r--vm_core.h10
2 files changed, 11 insertions, 5 deletions
diff --git a/vm.c b/vm.c
index 1a328fb63c..6d63a5eeaf 100644
--- a/vm.c
+++ b/vm.c
@@ -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;
}
diff --git a/vm_core.h b/vm_core.h
index fab440f1fd..51898f56f9 100644
--- a/vm_core.h
+++ b/vm_core.h
@@ -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]);
}