Class: RubyVM
Constant Summary
-
DEFAULT_PARAMS =
# File 'vm.c', line 3014
This constant variable shows VM's default parameters. Note that changing these values does not affect VM execution. Specification is not stable and you should not depend on this value. Of course, this constant is MRI specific.
:
-
INSTRUCTION_NAMES =
# File 'vm.c', line 3006:
-
OPTS =
# File 'vm.c', line 2979
OPTS, which shows vm build options:
Class Method Summary
-
.stat ⇒ Hash
Returns a ::Hash containing implementation-dependent counters inside the VM.
- NSDR Internal use only
- SDR Internal use only
- USAGE_ANALYSIS_INSN_STOP Internal use only
- USAGE_ANALYSIS_OPERAND_STOP Internal use only
- USAGE_ANALYSIS_REGISTER_STOP Internal use only
Class Method Details
NSDR
This method is for internal use only.
[ GitHub ]
# File 'vm.c', line 2748
static VALUE
nsdr(void)
{
VALUE ary = rb_ary_new();
#if HAVE_BACKTRACE
#include <execinfo.h>
#define MAX_NATIVE_TRACE 1024
static void *trace[MAX_NATIVE_TRACE];
int n = (int)backtrace(trace, MAX_NATIVE_TRACE);
char **syms = backtrace_symbols(trace, n);
int i;
if (syms == 0) {
rb_memerror();
}
for (i=0; i<n; i++) {
rb_ary_push(ary, rb_str_new2(syms[i]));
}
free(syms); /* OK */
#endif
return ary;
}
SDR
This method is for internal use only.
[ GitHub ]
# File 'vm.c', line 2740
static VALUE
sdr(void)
{
rb_vm_bugreport(NULL);
return Qnil;
}
Returns a ::Hash containing implementation-dependent counters inside the VM.
This hash includes information about method/constant cache serials:
{
:global_method_state=>251,
:global_constant_state=>481,
:class_serial=>9029
}
The contents of the hash are implementation specific and may be changed in the future.
This method is only expected to work on C Ruby.
# File 'vm.c', line 396
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_scan_args(argc, argv, "01", &arg) == 1) {
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;
}
USAGE_ANALYSIS_INSN_STOP
This method is for internal use only.
[ GitHub ]
# File 'vm.c', line 3315
static VALUE
usage_analysis_insn_stop(VALUE self)
{
ruby_vm_collect_usage_func_insn = 0;
return Qnil;
}
USAGE_ANALYSIS_OPERAND_STOP
This method is for internal use only.
[ GitHub ]
# File 'vm.c', line 3323
static VALUE
usage_analysis_operand_stop(VALUE self)
{
ruby_vm_collect_usage_func_operand = 0;
return Qnil;
}
USAGE_ANALYSIS_REGISTER_STOP
This method is for internal use only.
[ GitHub ]
# File 'vm.c', line 3331
static VALUE
usage_analysis_register_stop(VALUE self)
{
ruby_vm_collect_usage_func_register = 0;
return Qnil;
}