Sha256: 6526056a0710cb24d48666d4036f272613de8cf64c6493e45648aca0f26905df

Contents?: true

Size: 1.93 KB

Versions: 4

Compression:

Stored size: 1.93 KB

Contents

#include "internal/node/ruby_internal_node.h"
#include "internal/node/nodeinfo.h"
#include <ruby.h>

#ifdef RUBY_VM

#include "vm_core.h"

/*
 * call-seq:
 *   inline_cache.class => nil
 *
 * Currently returns nil, because returning the real class can cause the
 * interpreter to crash.
 */
static VALUE inline_cache_klass(VALUE self)
{
  /* TODO: returning the real value can crash the interpreter */
  return Qnil;
}

/*
 * call-seq:
 *   inline_cache.value => Object
 *
 * Returns the ic_cache member of the inline cache.
 */
static VALUE inline_cache_value(VALUE self)
{
  IC inline_cache = unwrap_node(self);
  return inline_cache->ic_value;
}

/*
 * call-seq:
 *   inline_cache.vmstat => object
 *
 * Returns the ic_vmstat member of the inline cache.
 */
static VALUE inline_cache_vmstat(VALUE self)
{
  IC inline_cache = unwrap_node(self);
  return INT2NUM(inline_cache->ic_vmstat);
}

#endif

void Init_inline_cache(void)
{
#ifdef RUBY_VM
  VALUE rb_cNode;
  VALUE rb_cRubyVM;

  rb_require("internal/node/node");

  rb_cNode = rb_define_class("Node", rb_cObject);

  if(!rb_const_defined(rb_cObject, rb_intern("RubyVM")))
  {
    rb_define_const(
        rb_cObject,
        "RubyVM",
        rb_const_get(rb_cObject, rb_intern("VM")));
  }

  rb_cRubyVM = rb_define_class("RubyVM", rb_cObject);
  VALUE rb_cInlineCache = rb_define_class_under(rb_cRubyVM, "InlineCache", rb_cNode);
  rb_define_method(rb_cInlineCache, "klass", inline_cache_klass, 0);
  rb_define_method(rb_cInlineCache, "value", inline_cache_value, 0);
  rb_define_method(rb_cInlineCache, "vmstat", inline_cache_vmstat, 0);
  VALUE inline_cache_members = rb_ary_new();
  rb_ary_push(inline_cache_members, rb_str_new2("klass"));
  rb_ary_push(inline_cache_members, rb_str_new2("value"));
  rb_ary_push(inline_cache_members, rb_str_new2("vmstat"));
  rb_iv_set(rb_cInlineCache, "__member__", inline_cache_members);
  rb_define_singleton_method(rb_cInlineCache, "members", node_s_members, 0);
#endif
}

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
ruby-internal-0.7.2 ext/internal/vm/inline_cache/inline_cache.c
ruby-internal-0.7.1 ext/internal/vm/inline_cache/inline_cache.c
ruby-internal-0.7.0 ext/internal/vm/inline_cache/inline_cache.c
ruby-internal-0.6.0 ext/internal/vm/inline_cache/inline_cache.c