diff options
author | Alan Wu <XrXr@users.noreply.github.com> | 2021-10-18 11:30:18 -0400 |
---|---|---|
committer | Alan Wu <XrXr@users.noreply.github.com> | 2021-10-20 18:19:43 -0400 |
commit | 5906a5a7329e34a43dc46d4fc3cdf1b04cc13d0a (patch) | |
tree | 736536624015891bf6c7dceb5e1ba49362f36385 /internal | |
parent | 1e23b1a6c2614c8e3a1be0be4df6dee9202701d5 (diff) | |
download | ruby-5906a5a7329e34a43dc46d4fc3cdf1b04cc13d0a.tar.gz |
Add comments about special runtime routines YJIT calls
When YJIT make calls to routines without reconstructing interpreter
state through jit_prepare_routine_call(), it relies on the routine to
never allocate, raise, and push/pop control frames. Comment about this
on the routines that YJTI calls.
This is probably something we should dynamically verify on debug builds.
It's hard to statically verify this as it requires verifying all
functions in the call tree. Maybe something to look at in the future.
Diffstat (limited to 'internal')
-rw-r--r-- | internal/array.h | 1 | ||||
-rw-r--r-- | internal/string.h | 1 |
2 files changed, 2 insertions, 0 deletions
diff --git a/internal/array.h b/internal/array.h index 6fcb4e83f5..60f66f31bf 100644 --- a/internal/array.h +++ b/internal/array.h @@ -46,6 +46,7 @@ struct rb_execution_context_struct; VALUE rb_ec_ary_new_from_values(struct rb_execution_context_struct *ec, long n, const VALUE *elts); MJIT_SYMBOL_EXPORT_END +// YJIT needs this function to never allocate and never raise static inline VALUE rb_ary_entry_internal(VALUE ary, long offset) { diff --git a/internal/string.h b/internal/string.h index d010669ca8..18b01862f7 100644 --- a/internal/string.h +++ b/internal/string.h @@ -116,6 +116,7 @@ is_broken_string(VALUE str) } /* expect tail call optimization */ +// YJIT needs this function to never allocate and never raise static inline VALUE rb_str_eql_internal(const VALUE str1, const VALUE str2) { |