Sha256: 8bf2f856955f067aed180cf50e3981c3453112c23a0933598df2f6f488432377
Contents?: true
Size: 1.13 KB
Versions: 1
Compression:
Stored size: 1.13 KB
Contents
#include "cruby.h" static inline VALUE vm_getivar(VALUE obj, ID id, IC ic) { if (LIKELY(RB_TYPE_P(obj, T_OBJECT))) { VALUE val = Qundef; if (LIKELY(ic->ic_serial == RCLASS_SERIAL(RBASIC(obj)->klass))) { st_index_t index = ic->ic_value.index; if (LIKELY(index < ROBJECT_NUMIV(obj))) { val = ROBJECT_IVPTR(obj)[index]; } undef_check: if (UNLIKELY(val == Qundef)) { if (RTEST(ruby_verbose)) rb_warning("instance variable %"PRIsVALUE" not initialized", QUOTE_ID(id)); val = Qnil; } return val; } else { st_data_t index; struct st_table *iv_index_tbl = ROBJECT_IV_INDEX_TBL(obj); if (iv_index_tbl) { if (st_lookup(iv_index_tbl, id, &index)) { if (index < ROBJECT_NUMIV(obj)) { val = ROBJECT_IVPTR(obj)[index]; } ic->ic_value.index = index; ic->ic_serial = RCLASS_SERIAL(RBASIC(obj)->klass); } } goto undef_check; } } return rb_ivar_get(obj, id); } VALUE llrb_insn_getinstancevariable(VALUE obj, ID id, VALUE ic_v) { return vm_getivar(obj, id, (IC)ic_v); }
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
llrb-0.0.1 | ext/llrb_insn_getinstancevariable.c |