* method.h (METHOD_ENTRY_VISI_SET, METHOD_ENTRY_BASIC_SET),
(METHOD_ENTRY_SAFE_SET, METHOD_ENTRY_FLAGS_SET): get rid of
negative arguments, and safe leve is restricted to 1 now.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51088 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* test/ruby/test_object.rb (test_redef_method_missing): use
assert_separately to catch segfaults and show the diagnostic
reports.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51086 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* struct.c (AREF_HASH_UNIT): name a magic number, which is shared
by struct_member_pos_probe and struct_set_members.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51085 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* struct.c (AREF_HASH_THRESHOLD): make an enum not to exceed the
int range.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51084 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* struct.c (struct_set_members): hide internal back_members
object, and members object does not need to be duped as it
should be frozen and hidden.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51082 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* struct.c (struct_member_pos): revert r51080 to fix other
implicit conversions but cast the return value to fix the
previous implicit conversion.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51081 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This simplifies all the callers and makes code easier to use
and review. I was confused about the need for RB_GC_GUARD
in define_{aset,aref}_method of struct.c without reading
rb_add_method_iseq.
Likewise, do the same for rb_iseq_clone, where the GC guard
only seems neccesary iff RGenGC is disabled.
* vm_method.c (rb_add_method_iseq): add RB_GC_GUARD
* class.c (clone_method): remove RB_GC_GUARD
* struct.c (define_aref_method): ditto
(define_aset_method): ditto
* vm.c (vm_define_method):
* iseq.c (rb_iseq_clone): add RB_GC_GUARD
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51079 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
use simple custom open-addressing hash for big structs.
Original-patch-by: Sokolov Yura aka funny_falcon <funny.falcon@gmail.com>
in https://bugs.ruby-lang.org/issues/10585
* struct.c (AREF_HASH_THRESHOLD): new macro
(id_back_members): new ID
(struct_member_pos_ideal): new function
(struct_member_pos_probe): ditto
(struct_set_members): ditto
(struct_member_pos): ditto
(rb_struct_getmember): use struct_member_pos for O(1) access
(rb_struct_aref_sym): ditto
(rb_struct_aset_sym): ditto
(setup_struct): call struct_set_members
(struct_define_without_accessor): ditto
(Init_Struct): initialize __members_back__
[ruby-core:66851] [ruby-core:69705] [ruby-core:69821]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51077 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* io.c (rb_io_reopen): FilePathValue() ensures the path
NUL-terminated and frozen, so it is unnecessary to make it shared.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51074 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/file.c (rb_freopen): should free rb_w32_mbstr_to_wstr
result instead of xfree.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51072 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* io.c (rb_io_reopen): freopen(3) with OS encoding path.
[ruby-core:69780] [Bug #11320]
* win32/file.c (rb_freopen): wrapper of wchar version freopen(3).
use _wfreopen_s() if available.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51069 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This improves the bm_vm2_bighash benchmark significantly by
removing branches during insert, but slows down anything
requiring iteration with the more complex loop termination
checking.
Speedup ratio of 1.10 - 1.20 is typical for the vm2_bighash
benchmark.
v3 - st_head calculates list_head address in two steps
to avoid a bug in old gcc 4.4 (Debian 4.4.7-2)
bug which incorrectly warned with:
warning: dereferencing pointer ‘({anonymous})’ does break
strict-aliasing rules
* include/ruby/st.h (struct st_table): hide struct list_head
* st.c (struct st_table_entry): adjust struct
(head, tail): remove shortcut macros
(st_head): new wrapper function
(st_init_table_with_size): adjust to new struct and API
(st_clear): ditto
(add_direct): ditto
(unpack_entries): ditto
(rehash): ditto
(st_copy): ditto
(remove_entry): ditto
(st_shift): ditto
(st_foreach_check): ditto
(st_foreach): ditto
(get_keys): ditto
(get_values): ditto
(st_values_check): ditto
(st_reverse_foreach_check): ditto (unused)
(st_reverse_foreach): ditto (unused)
[ruby-core:69726] [Misc #10278]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51064 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* insns.def (defineclass): do not quote unprintable characters at
raising an exception.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51062 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* template/sizes.c.tmpl: extract RUBY_DEFINT to define sizes of
types checked by configure.in, and fix size of intptr_t in
universal binary.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51056 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* insns.def (defineclass): preserve encoding of name in error
messages for super class mismatch.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51055 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* insns.def (defineclass): preserve encoding of name in error
messages for non-class super.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51054 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* insns.def (defineclass): preserve encoding of name in error
messages when already defined but type mismatch.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51053 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* class.c (rb_check_inheritable): preserve encoding in an error
message when the superclass is not a class.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51050 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* class.c (rb_define_class_id_under): raise TypeError exception
same as ruby level class definition when superclass mismatch.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51048 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
when sending the port fails.
* test/net/ftp/test_ftp.rb: test for above.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51046 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This reverts commit r51044
Still getting failure notices from ko1's CI machine.
ref: g3qkqn
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51045 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
I suspect the build failures with r51034 ("st.c: use ccan linked-list")
on ko1's CI machine was due to me forgetting to update common.mk :x
Lets see what happens when I only include ccan/list/list.h
Will followup with appropriate reverts or reinstating the
rest of r51034 along with a common.mk update as I watch CI
build.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51041 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* sprintf.c (rb_str_format): rb_inspect() always returns a string.
rb_obj_as_string() has no more effect.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51040 b2dd03c8-39d4-4d8f-98ff-823fe69b080e