Spec-Zone.ru › Ruby 3.1

class RubyVM::YJIT::Block

Parent:
Объект

Публичные методы экземпляров

address() Показать исходный код
static VALUE
block_address(VALUE self)
{
    block_t * block;
    TypedData_Get_Struct(self, block_t, &yjit_block_type, block);
    return LONG2NUM((intptr_t)block->start_addr);
}

Получить адрес кода, связанного с YJIT::Block

code() Показать исходный код
static VALUE
block_code(VALUE self)
{
    block_t * block;
    TypedData_Get_Struct(self, block_t, &yjit_block_type, block);

    return (VALUE)rb_str_new(
        (const char*)block->start_addr,
        block->end_addr - block->start_addr
    );
}

Получить машинный код для YJIT::Block в виде двоичной строки

id → unique_id Показать исходный код
static VALUE
block_id(VALUE self)
{
    block_t * block;
    TypedData_Get_Struct(self, block_t, &yjit_block_type, block);
    return PTR2NUM(block);
}

Возвращает уникальный целочисленный идентификатор блока. Например:

blocks = blocks_for(iseq)
blocks.group_by(&:id)
iseq_end_index() Показать исходный код
static VALUE
iseq_end_index(VALUE self)
{
    block_t * block;
    TypedData_Get_Struct(self, block_t, &yjit_block_type, block);

    return INT2NUM(block->end_idx);
}

Получить конечный индекс в Последовательности Инструкций, соответствующий этому YJIT::Block

iseq_start_index() Показать исходный код
static VALUE
iseq_start_index(VALUE self)
{
    block_t * block;
    TypedData_Get_Struct(self, block_t, &yjit_block_type, block);

    return INT2NUM(block->blockid.idx);
}

Получить начальный индекс в Последовательности Инструкций, соответствующий этому YJIT::Block

outgoing_ids → список Показать исходный код
static VALUE
outgoing_ids(VALUE self)
{
    block_t * block;
    TypedData_Get_Struct(self, block_t, &yjit_block_type, block);

    VALUE ids = rb_ary_new();

    rb_darray_for(block->outgoing, branch_idx) {
        branch_t *out_branch = rb_darray_get(block->outgoing, branch_idx);

        for (size_t succ_idx = 0; succ_idx < 2; succ_idx++) {
            block_t *succ = out_branch->blocks[succ_idx];

            if (succ == NULL)
                continue;

            rb_ary_push(ids, PTR2NUM(succ));
        }

    }

    return ids;
}

Возвращает список исходящих идентификаторов для текущего блока. Этот список можно использовать в сочетании с Block#id для построения графа объектов блоков.

Ruby Core © 1993–2022 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API