mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* variable.c (rb_obj_remove_instance_variable): raise NameError if
specified instance variable is not defined. * variable.c (generic_ivar_remove): modified to check ivar existence. * file.c (rb_file_s_extname): new method based on the proposal (and patch) from Mike Hall. [new] * eval.c (error_handle): default to 1 unless status is set. * eval.c (ruby_options): guard error_handle() with PROT_NONE. * eval.c (ruby_stop): ditto. * math.c (math_acosh): added. [new] * math.c (math_asinh): ditto. * math.c (math_atanh): ditto. * struct.c (rb_struct_each_pair): method added. [new] * class.c (rb_singleton_class): wrong condition; was creating unnecessary singleton class. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2348 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
ff0abdc55e
commit
19c42c0740
14 changed files with 209 additions and 146 deletions
18
struct.c
18
struct.c
|
@ -333,6 +333,23 @@ rb_struct_each(s)
|
|||
return s;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
rb_struct_each_pair(s)
|
||||
VALUE s;
|
||||
{
|
||||
VALUE member;
|
||||
long i;
|
||||
|
||||
member = rb_struct_iv_get(rb_obj_class(s), "__member__");
|
||||
if (NIL_P(member)) {
|
||||
rb_bug("non-initialized struct");
|
||||
}
|
||||
for (i=0; i<RSTRUCT(s)->len; i++) {
|
||||
rb_yield(rb_assoc_new(RARRAY(member)->ptr[i], RSTRUCT(s)->ptr[i]));
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
rb_struct_to_s(s)
|
||||
VALUE s;
|
||||
|
@ -584,6 +601,7 @@ Init_Struct()
|
|||
rb_define_method(rb_cStruct, "length", rb_struct_size, 0);
|
||||
|
||||
rb_define_method(rb_cStruct, "each", rb_struct_each, 0);
|
||||
rb_define_method(rb_cStruct, "each_pair", rb_struct_each_pair, 0);
|
||||
rb_define_method(rb_cStruct, "[]", rb_struct_aref, 1);
|
||||
rb_define_method(rb_cStruct, "[]=", rb_struct_aset, 2);
|
||||
rb_define_method(rb_cStruct, "select", rb_struct_select, -1);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue