From fa4476907f92bbfed5868fb33305b4d78bb42607 Mon Sep 17 00:00:00 2001 From: akr Date: Sat, 8 Sep 2007 15:07:18 +0000 Subject: * eval_method.ci (rb_get_alloc_func): new function to get allocation function. * include/ruby/intern.h (rb_alloc_func_t): declared. (rb_define_alloc_func): declared. (rb_marshal_define_compat): declared. * range.c: use T_STRUCT for Range. * inits.c: move Init_marshal() prior to Init_Range() because Init_Range calls rb_marshal_define_compat which needs marshal's compat_allocator_tbl initialized. * marshal.c: support marshal format compatibility layer designed for marshaling T_STRUCT Range using T_OBJECT format. (rb_marshal_define_compat): defined. [ruby-dev:31710] git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@13413 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- eval_method.ci | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'eval_method.ci') diff --git a/eval_method.ci b/eval_method.ci index 5a3059619..08ba95337 100644 --- a/eval_method.ci +++ b/eval_method.ci @@ -192,6 +192,19 @@ rb_undef_alloc_func(VALUE klass) rb_add_method(CLASS_OF(klass), ID_ALLOCATOR, 0, NOEX_UNDEF); } +rb_alloc_func_t +rb_get_alloc_func(VALUE klass) +{ + NODE *n; + Check_Type(klass, T_CLASS); + n = rb_method_node(CLASS_OF(klass), ID_ALLOCATOR); + if (!n) return 0; + if (nd_type(n) != NODE_METHOD) return 0; + n = n->nd_body; + if (nd_type(n) != NODE_CFUNC) return 0; + return n->nd_cfnc; +} + static NODE * search_method(VALUE klass, ID id, VALUE *klassp) { -- cgit