module Bootsnap::CompileCache::Native
Public Class Methods
Source
static VALUE bs_compile_option_crc32_set(VALUE self, VALUE crc32_v) { if (!RB_TYPE_P(crc32_v, T_BIGNUM) && !RB_TYPE_P(crc32_v, T_FIXNUM)) { Check_Type(crc32_v, T_FIXNUM); } current_compile_option_crc32 = NUM2UINT(crc32_v); return Qnil; }
Bootsnap’s ruby code registers a hook that notifies us via this function when compile_option changes. These changes invalidate all existing caches.
Note that on 32-bit platforms, a CRC32 can’t be represented in a Fixnum, but can be represented by a uint.
Source
static VALUE bs_rb_coverage_running(VALUE self) { VALUE cov = rb_get_coverages(); return RTEST(cov) ? Qtrue : Qfalse; }
Source
static VALUE bs_rb_fetch(VALUE self, VALUE cachedir_v, VALUE path_v, VALUE handler, VALUE args) { FilePathValue(path_v); Check_Type(cachedir_v, T_STRING); Check_Type(path_v, T_STRING); if (RSTRING_LEN(cachedir_v) > MAX_CACHEDIR_SIZE) { rb_raise(rb_eArgError, "cachedir too long"); } char * cachedir = RSTRING_PTR(cachedir_v); char * path = RSTRING_PTR(path_v); char cache_path[MAX_CACHEPATH_SIZE]; /* generate cache path to cache_path */ bs_cache_path(cachedir, path_v, &cache_path); return bs_fetch(path, path_v, cache_path, handler, args); }
Entrypoint for Bootsnap::CompileCache::Native.fetch
. The real work is done in bs_fetch; this function just performs some basic typechecks and conversions on the ruby VALUE arguments before passing them along.
Source
static VALUE bs_rb_precompile(VALUE self, VALUE cachedir_v, VALUE path_v, VALUE handler) { FilePathValue(path_v); Check_Type(cachedir_v, T_STRING); Check_Type(path_v, T_STRING); if (RSTRING_LEN(cachedir_v) > MAX_CACHEDIR_SIZE) { rb_raise(rb_eArgError, "cachedir too long"); } char * cachedir = RSTRING_PTR(cachedir_v); char * path = RSTRING_PTR(path_v); char cache_path[MAX_CACHEPATH_SIZE]; /* generate cache path to cache_path */ bs_cache_path(cachedir, path_v, &cache_path); return bs_precompile(path, path_v, cache_path, handler); }
Entrypoint for Bootsnap::CompileCache::Native.precompile
. Similar to fetch, but it only generate the cache if missing and doesn’t return the content.
Source
static VALUE bs_readonly_set(VALUE self, VALUE enabled) { readonly = RTEST(enabled); return enabled; }