Sha256: 428be70cc2fea64cc6ba4734b8100bab332f550cb6a9a42dfd05e45c695466bc

Contents?: true

Size: 1019 Bytes

Versions: 1

Compression:

Stored size: 1019 Bytes

Contents

#ifndef ruby_internal_method__h_
#define ruby_internal_method__h_

#include <ruby.h>

#ifdef RUBY_VM
#include "method.h"
#endif

#include "internal/node/ruby_internal_node.h"

#ifndef FALSE
#define FALSE 0
#endif

#ifndef TRUE
#define TRUE (!FALSE)
#endif

struct METHOD {
    VALUE recv;
    VALUE rclass;
    ID id;
    rb_method_entry_t me;
};

static void
bm_mark(void *ptr)
{
    struct METHOD *data = ptr;
    rb_gc_mark(data->rclass);
    rb_gc_mark(data->recv);
    rb_mark_method_entry(&data->me);
}

static void
bm_free(void *ptr)
{
    struct METHOD *data = ptr;
    rb_method_definition_t *def = data->me.def;
    if (def->alias_count == 0)
	xfree(def);
    else if (def->alias_count > 0)
	def->alias_count--;
    xfree(ptr);
}

static size_t
bm_memsize(const void *ptr)
{
    return ptr ? sizeof(struct METHOD) : 0;
}

static const rb_data_type_t method_data_type = {
    "method",
    bm_mark,
    bm_free,
    bm_memsize,
};

#define METHOD_OCLASS(m) m->klass
#define METHOD_RCLASS(m) m->rclass

#endif

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ruby-internal-0.7.3 ext/internal/method/internal_method.h