класс RubyVM
для ast.c
Модуль RubyVM существует только в MRI. RubyVM не определен в других реализациях Ruby, таких как JRuby и TruffleRuby.
Модуль RubyVM предоставляет некоторый доступ к внутренностям MRI. Этот модуль предназначен для очень ограниченных целей, таких как отладка, прототипирование и исследования. Обычные пользователи не должны его использовать. Этот модуль не переносится между реализациями Ruby.
Константы
- DEFAULT_PARAMS
-
DEFAULT_PARAMSЭта константа раскрывает значения параметров по умолчанию виртуальной машины. Обратите внимание, что изменение этих значений не влияет на выполнение виртуальной машины. Спецификация нестабильна, и вы не должны полагаться на это значение. Конечно, эта константа специфична для MRI. - INSTRUCTION_NAMES
-
INSTRUCTION_NAMESСписок имен инструкций байткода в MRI. Эта константа специфична для MRI. - OPTS
-
OPTSСписок параметров сборки виртуальной машины. Эта константа специфична для MRI.
Публичные методы класса
static VALUE
each_builtin(VALUE self)
{
st_foreach(loaded_builtin_table, each_builtin_i, 0);
return Qnil;
} static VALUE
vm_stat(int argc, VALUE *argv, VALUE self)
{
static VALUE sym_global_method_state, sym_global_constant_state, sym_class_serial;
VALUE arg = Qnil;
VALUE hash = Qnil, key = Qnil;
if (rb_check_arity(argc, 0, 1) == 1) {
arg = argv[0];
if (SYMBOL_P(arg))
key = arg;
else if (RB_TYPE_P(arg, T_HASH))
hash = arg;
else
rb_raise(rb_eTypeError, "non-hash or symbol given");
}
else {
hash = rb_hash_new();
}
if (sym_global_method_state == 0) {
#define S(s) sym_##s = ID2SYM(rb_intern_const(#s))
S(global_method_state);
S(global_constant_state);
S(class_serial);
#undef S
}
#define SET(name, attr) \
if (key == sym_##name) \
return SERIALT2NUM(attr); \
else if (hash != Qnil) \
rb_hash_aset(hash, sym_##name, SERIALT2NUM(attr));
SET(global_method_state, ruby_vm_global_method_state);
SET(global_constant_state, ruby_vm_global_constant_state);
SET(class_serial, ruby_vm_class_serial);
#undef SET
if (!NIL_P(key)) { /* matched key should return above */
rb_raise(rb_eArgError, "unknown key: %"PRIsVALUE, rb_sym2str(key));
}
return hash;
} Возвращает Hash, содержащий зависящие от реализации счетчики внутри виртуальной машины.
Этот хэш содержит информацию о порядковых номерах кэшей методов/констант:
{
:global_method_state=>251,
:global_constant_state=>481,
:class_serial=>9029
}
Содержание хэша специфично для реализации и может быть изменено в будущем.
Ожидается, что этот метод будет работать только с C Ruby.
Ruby Core © 1993–2017 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.