From 042e5013a3bc42a3637aa1646e9fc002436b852f Mon Sep 17 00:00:00 2001 From: nobu Date: Sat, 3 Aug 2013 00:31:02 +0000 Subject: struct.c: rb_struct_define_under * struct.c (rb_struct_define_under): new function to define Struct under the given namespace, not under Struct. [Feature #8264] * ext/etc/etc.c: use rb_struct_define_under. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42348 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- struct.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'struct.c') diff --git a/struct.c b/struct.c index 90af2d0568..ebb301701c 100644 --- a/struct.c +++ b/struct.c @@ -283,6 +283,25 @@ rb_struct_define(const char *name, ...) return setup_struct(st, ary); } +VALUE +rb_struct_define_under(VALUE outer, const char *name, ...) +{ + va_list ar; + VALUE ary; + char *mem; + + ary = rb_ary_tmp_new(0); + + va_start(ar, name); + while ((mem = va_arg(ar, char*)) != 0) { + ID slot = rb_intern(mem); + rb_ary_push(ary, ID2SYM(slot)); + } + va_end(ar); + + return setup_struct(rb_define_class_under(outer, name, rb_cStruct), ary); +} + /* * call-seq: * Struct.new([class_name] [, member_name]+>) -> StructClass -- cgit v1.2.3