Class: Object
- Inherits:
- BasicObject
- Defined in:
- lib/ytljit/util.rb
Class Method Summary collapse
Instance Method Summary collapse
Class Method Details
.method_address_of(mname) ⇒ Object
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'ext/ytljit.c', line 56
VALUE
ytl_method_address_of(VALUE klass, VALUE mname)
{
rb_method_entry_t *me;
ID mid = SYM2ID(mname);
me = search_method(klass, mid);
if (me && me->def && me->def->type == VM_METHOD_TYPE_CFUNC) {
return ULONG2NUM((uintptr_t)me->def->body.cfunc.func);
}
else {
return Qnil;
}
}
|
Instance Method Details
#address ⇒ Object
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/ytljit/util.rb', line 2 def address case self when Symbol case $ruby_platform when /x86_64/ ((((__id__ >> 1) - 4) / 10) << 8) | 0xe when /i.86/ ((((__id__ >> 1) - 4) / 5) << 8) | 0xe end when TrueClass, FalseClass __id__ when NilClass 4 else __id__ << 1 end end |
#instance_var_address_of(ivname) ⇒ Object
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'ext/ytljit.c', line 72
VALUE
ytl_instance_var_address_of(VALUE slf, VALUE ivname)
{
ID ivid = SYM2ID(ivname);
struct st_table *iv_index_tbl;
VALUE *valadd, *ptr;
long len;
st_data_t index;
len = ROBJECT_NUMIV(slf);
ptr = ROBJECT_IVPTR(slf);
iv_index_tbl = ROBJECT_IV_INDEX_TBL(slf);
if (!iv_index_tbl) return Qnil;
if (!st_lookup(iv_index_tbl, (st_data_t)ivid, &index)) return Qnil;
if (len <= (long)index) return Qnil;
valadd = &ptr[index];
return ULONG2NUM((uintptr_t)valadd);
}
|