diff options
Diffstat (limited to 'yjit/src/invariants.rs')
-rw-r--r-- | yjit/src/invariants.rs | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/yjit/src/invariants.rs b/yjit/src/invariants.rs index 4ed21118cc..ee79b2938a 100644 --- a/yjit/src/invariants.rs +++ b/yjit/src/invariants.rs @@ -154,6 +154,25 @@ pub fn assume_method_lookup_stable( .insert(block); } +// Checks rb_method_basic_definition_p and registers the current block for invalidation if method +// lookup changes. +// A "basic method" is one defined during VM boot, so we can use this to check assumptions based on +// default behavior. +pub fn assume_method_basic_definition( + jit: &mut JITState, + ocb: &mut OutlinedCb, + klass: VALUE, + mid: ID + ) -> bool { + if unsafe { rb_method_basic_definition_p(klass, mid) } != 0 { + let mut cme = unsafe { rb_callable_method_entry(klass, mid) }; + assume_method_lookup_stable(jit, ocb, klass, cme); + true + } else { + false + } +} + /// Tracks that a block is assuming it is operating in single-ractor mode. #[must_use] pub fn assume_single_ractor_mode(jit: &mut JITState, ocb: &mut OutlinedCb) -> bool { |