Граф коммитов

732 Коммитов

Автор SHA1 Сообщение Дата
hsbt 574422733d * array.c: Improve performance of Array#shift. use shared instead of
MEMMOVE if with arguments. Patch by @ksss [fix GH-537]
* test/ruby/test_array.rb: ditto.
* benchmark/bm_array_shift.rb: Added benchmark of GH-537 issue.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49114 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-01-03 02:27:50 +00:00
nobu 820e5ade8b array.c: decoration
* array.c (rb_ary_plus): inline decoration of the operator.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48683 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-12-02 06:59:25 +00:00
duerst 24f5f816ff array.c (rb_ary_plus): in documentation, added note about
inefficiency of repeated += operations. [ci skip]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48682 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-12-02 06:30:05 +00:00
akr 7cd76ab0c5 * internal.h: Include ruby.h and ruby/encoding.h to be
includable without prior inclusion.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48447 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-11-15 11:49:06 +00:00
normal eb5147779d array.c: swap volatile for RB_GC_GUARD
* array.c (ary_recycle_hash): add RB_GC_GUARD
  (rb_ary_diff): remove volatile
  [Bug #10369]

The RB_GC_GUARD seems needed for most of the ary_recycle_hash
functions anyways.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47896 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-10-12 21:53:01 +00:00
nobu 795b8b474c internal.h: optimize rb_ary_new_from_args
* internal.h (rb_ary_new_from_args): optimization by expanding
  arguments in caller to get rid of va_list if possible.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47858 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-10-09 07:53:54 +00:00
nobu 4adfbab35c array.c: fix potential memory leak
* array.c (ary_new): allocate buffer in heap after new object get
  allocated successfully, to get rid of potential memory leak at
  object allocation failure.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47855 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-10-09 04:35:12 +00:00
nobu 88cbfc0d10 array.c: GC guard
* array.c (rb_ary_splice): prevent replacing array from GC.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47683 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-09-22 08:17:24 +00:00
glass e539565d9a * array.c: use rb_equal_opt() for performance improvement.
[ruby-core:64954] [Feature #10227]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47659 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-09-21 02:23:32 +00:00
ko1 123eeb1c1a * gc.c: add incremental GC algorithm. [Feature #10137]
Please refer this ticket for details.
  This change also introduces the following changes.
  * Remove RGENGC_AGE2_PROMOTION and introduce object age (0 to 3).
    Age can be count with FL_PROMOTE0 and FL_PROMOTE1 flags in
    RBasic::flags (2 bit). Age == 3 objects become old objects.
  * WB_PROTECTED flag in RBasic to WB_UNPROTECTED bitmap.
  * LONG_LIVED bitmap to represent living objects while minor GCs
    It specifies (1) Old objects and (2) remembered shady objects.
  * Introduce rb_objspace_t::marked_objects which counts marked
    objects in current marking phase. marking count is needed to
    introduce incremental marking.
  * rename mark related function and sweep related function to
    gc_(marks|sweep)_(start|finish|step|rest|continue).
  * rename rgengc_report() to gc_report().
  * Add obj_info() function to get cstr of object details.
  * Add MEASURE_LINE() macro to measure execution time of specific line.
  * and many small fixes.
* include/ruby/ruby.h: add flag USE_RINCGC.
  Now USE_RINCGC can be set only with USE_RGENGC.
* include/ruby/ruby.h: introduce FL_PROMOTED0 and add FL_PROMOTED1
  to count object age.
* include/ruby/ruby.h: rewrite write barriers for incremental marking.
* debug.c: catch up flag name changes.
* internal.h: add rb_gc_writebarrier_remember() instead of
  rb_gc_writebarrier_remember_promoted().
* array.c (ary_memcpy0): use rb_gc_writebarrier_remember().
* array.c (rb_ary_modify): ditto.
* hash.c (rb_hash_keys): ditto.
* hash.c (rb_hash_values): ditto.
* object.c (init_copy): use rb_copy_wb_protected_attribute() because
  FL_WB_PROTECTED is moved from RBasic::flags.
* test/objspace/test_objspace.rb: catch up ObjectSpace.dump() changes.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47444 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-09-08 04:11:00 +00:00
ko1 b5e89e44f1 * array.c (rb_ary_tmp_new): added.
This function creates internal use only array (which is completely
  hided by ObjectSpace.each_object) with filling nil.
  Otherwise, it can be incldues strange VALUEs.
* internal.h: added.
* node.h: use rb_ary_tmp_new_fill() for MEMO.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47189 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-08-15 10:32:58 +00:00
nobu a6ba688db3 array.c: array may be modified in the block
* array.c (rb_ary_any_p): the array may be modified in the yielded
  block, do not access directly.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46868 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-07-18 14:24:48 +00:00
nobu d738e3e155 optimized any? methods
* array.c (rb_ary_any_p), hash.c (rb_hash_any_p): optimized
  versions.  these are bit faster than optimization in
  Enumerable#any?.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46866 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-07-18 13:16:48 +00:00
hsbt 94bbd10ea7 * array.c: Clarify documentation for Array#insert.
[ruby-core:62934] [Bug #9901]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46782 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-07-11 07:00:49 +00:00
nobu e99ee55abc constify parameters
* include/ruby/intern.h: constify `argv` parameters.

* include/ruby/ruby.h: ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46459 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-06-18 06:16:39 +00:00
nobu b654e0719a array.c: non-recursive rcombinate0
* array.c (rcombinate0): remove recursion, by looping with indexes
  stored in `p`.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46428 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-06-14 01:55:25 +00:00
nobu 4802149e44 array.c: non-recursive rpermute0
* array.c (rpermute0): remove recursion, by looping with indexes
  stored in `p`.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46427 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-06-14 01:55:07 +00:00
nobu 9d6b7aede9 array.c: non-recursive permute0
* array.c (permute0): remove recursion, by looping with indexes
  stored in `p`.  [ruby-core:63103] [Bug #9932]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46426 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-06-14 01:54:45 +00:00
nobu 02725fb682 array.c: combinate0
* array.c (combinate0): extract.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46425 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-06-14 01:54:33 +00:00
nobu 537b4a6422 array.c: combination on a shared copy
* array.c (rb_ary_combination): iterate on a shared copy, and use
  array of indexes instead of array of chosen objects.
  [ruby-core:63149] [Bug #9939]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46418 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-06-13 08:34:17 +00:00
nobu 95bac4f75e array.c: yield_indexed_values
* array.c (yield_indexed_values): extract from permute0(),
  rpermute0(), and rcombinate0().

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46417 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-06-13 08:33:58 +00:00
nobu e6f1557562 array.c: fix array size
* array.c (rb_ary_permutation): `p` is the array of size `r`, as
  commented at permute0().  since `n >= r` here, buffer overflow
  never happened, just reduce unnecessary allocation though.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46416 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-06-13 04:43:57 +00:00
zzak f1d6b82981 * array.c: [DOC] Clarify default argument for Array.new.
By @Elffers [Fixes GH-610] [ci skip]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46083 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-05-24 21:30:42 +00:00
hsbt 2091ccac88 * array.c: [DOC] Add more documents to shuffle! and shuffle.
Contributed by @JuanitoFatas [ci skip][fix GH-612]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46081 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-05-24 13:40:28 +00:00
nobu 7f3b12f05b use predefined IDs
* array.c (rb_ary_equal), hash.c (hash_equal): use predefined IDs,
  `to_ary` and `to_hash` respectively.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46029 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-05-20 08:28:31 +00:00
ko1 f2606d6250 * array.c (ARY_SET): added.
ARY_SET() is same functionality of RARRAY_ASET(), but
  it has an assertion (`ary' doesn't have shared array).



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45569 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-04-11 09:55:10 +00:00
ko1 6bc463204a * array.c: make shared arrays WB-protected objects.
Shared arrays were WB-unprotected object because
  sharing array can modify shared array's buffer
  if it occupied shared array.
  [sharing array (ary)] -> [shared array (shared)] -> <buff>
                |                                       A
                +---------------------------------------+
             write `buff' with WB(ary, &buff[i], obj)
             -> if `ary' and `shared' are old, then only `ary'
                will be remembered.
             -> traverse from `ary'. But `shared' is old, so
                that written `obj' is not marked.
  It cause WB miss so that shared arrays were WB-unprotected.
  (WB-unprotected objects are marked everytime if it is living)
  This patch insert WB() for `shared' if it is needed.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45568 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-04-11 08:47:00 +00:00
nobu 153fa25658 array.c: maybe shared array
* array.c (ary_reject): may be turned into a shared array during
  the given block.  [ruby-dev:48101] [Bug #9727]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45562 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-04-11 03:44:52 +00:00
ko1 f19bf5ba5a * array.c (rb_ary_modify): remember shared array owner if a shared
array owner is promoted and a shared array is not promoted.
  Now, shared array is WB-unprotected so that shared arrays are not
  promoted.  All objects referred from shared array should be marked
  correctly.
  [ruby-core:61919] [ruby-trunk - Bug #9718]
* test/ruby/test_array.rb: add a test for above.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45553 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-04-10 10:16:24 +00:00
nobu fc23374f06 [DOC] add links to `Object#hash`
add links to `Object#hash` to each #`hash` methods rdocs.
[Fixes GH-567]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45329 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-03-14 01:27:43 +00:00
nobu 78b1ca9f0f array.c: comment why rb_ary_modify is needed twice
* array.c (rb_ary_initialize): NUM2LONG() may call size.to_int,
  ary can be frozen, modified, etc, so recheck after argument
  conversion is necessary.  [Closes GH-526]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44855 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-02-06 01:31:27 +00:00
marcandre e030b4ee79 * array.c: rdoc clarification for <=>
* file.c: ditto

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44543 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-01-09 17:33:47 +00:00
tmm1 3cf4fe47e8 array.c: return first unique element in Array#uniq
* array.c (ary_add_hash): Fix consistency issue between Array#uniq and
  Array#uniq! [Bug #9340] [ruby-core:59457]
* test/ruby/test_array.rb (class TestArray): regression test for above.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44512 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-01-06 19:38:20 +00:00
glass 56b0396944 * array.c (rb_ary_zip): use ALLOCV_N() instead of ALLOCA_N().
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44480 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-01-01 15:55:51 +00:00
marcandre 9471f4187f * array.c: Have to_h raise on elements that are not key-value pairs [#9239]
* enum.c: ditto

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44354 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-12-23 03:42:29 +00:00
ko1 c702005a7b * include/ruby/ruby.h: rename OBJ_WRITE and OBJ_WRITTEN into
RB_OBJ_WRITE and RB_OBJ_WRITTEN.
* array.c, class.c, compile.c, hash.c, internal.h, iseq.c,
  proc.c, process.c, re.c, string.c, variable.c, vm.c,
  vm_eval.c, vm_insnhelper.c, vm_insnhelper.h,
  vm_method.c: catch up this change.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44299 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-12-20 08:07:47 +00:00
ko1 3477670963 * array.c: fix comment to remove the word "shady".
* variable.c: ditto.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44165 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-12-13 02:53:27 +00:00
marcandre e91ccb6c67 * array.c: More doc examples for Array#{map|collect}{!} using both forms
* enum.c: ditto

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44140 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-12-11 19:55:56 +00:00
nobu 037a9d0655 array.c, hash.c: add salt
* array.c (rb_ary_hash): add salt to differentiate false and empty
  array.  [ruby-core:58993] [Bug #9231]
* hash.c (rb_any_hash, rb_hash_hash): ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44125 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-12-10 14:44:51 +00:00
nobu 1018f57f2c array.c: id_random
* array.c (rb_ary_shuffle_bang, rb_ary_sample): share id_random
  instead of no longer used sym_random.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44066 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-12-08 06:47:39 +00:00
ktsj 7f5a9f3881 * array.c (rb_ary_shuffle_bang, rb_ary_sample): rename local variables.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44065 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-12-08 05:58:17 +00:00
ktsj 3e1360f370 * array.c (rb_ary_shuffle_bang, rb_ary_sample): check
unknown keywords.

* test/ruby/test_array.rb (test_shuffle, test_sample): tests for
  the above.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44064 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-12-08 05:02:12 +00:00
charliesome e0290c9404 * array.c (rb_ary_or): use RHASH_TBL_RAW instead of RHASH_TBL
* process.c (rb_execarg_fixup): use RHASH_TBL_RAW and insert write
  barriers where appropriate

* vm.c (kwmerge_i): use RHASH_TBL_RAW

* vm.c (HASH_ASET): use rb_hash_aset instead of calling directly into
  st_insert

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44052 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-12-08 00:41:01 +00:00
nobu 19737494b9 array.c: prefer lhs elements
* array.c (rb_ary_or): lhs elements are prefered, so should not
  replace with rhs elements.
* test/ruby/test_array.rb (test_OR_in_order): import the test failed
  by r43969 from rubyspec/core/array/union_spec.rb.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44015 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-12-05 12:53:31 +00:00
nobu 6f2efe84fb hash.c: detect recursion for all
* hash.c (rb_hash): detect recursion for all `hash' methods.  each
  `hash' methods no longer need to use rb_exec_recursive().

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43980 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-12-03 13:18:30 +00:00
glass 2b07df37d1 * array.c (rb_ary_uniq_bang): remove duplicate code.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43970 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-12-03 05:13:19 +00:00
glass 95f983f6d0 * array.c (ary_add_hash): set and return values because string keys
will be frozen. [ruby-core:58809] [Bug #9202]

* array.c (rb_ary_uniq_bang): ditto.

* array.c (rb_ary_or): ditto.

* array.c (rb_ary_uniq): ditto.

* test/ruby/test_array.rb: tests for above.

The patch is from normalperson (Eric Wong).

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43969 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-12-03 04:55:51 +00:00
nobu 7566c49068 ruby/ruby.h: RB_BLOCK_CALL_FUNC_ARGLIST
* include/ruby/ruby.h (RB_BLOCK_CALL_FUNC_ARGLIST): for declaration
  argument list of rb_block_call_func.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43910 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-11-29 07:59:14 +00:00
nobu 32145ebfd6 array.c, enum.c, range.c: rb_block_call_func compatible
* array.c (take_i), range.c (first_i): make rb_block_call_func
  compatible.

* enum.c (collect_all, DEFINE_ENUMFUNCS): add blockarg.

* enum.c ({min,max,minmax,chunk,slicebefore}_ii): ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43908 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-11-29 07:45:00 +00:00
nobu 9f45081627 ruby/ruby.h: add blockarg to rb_block_call_func
* include/ruby/ruby.h (rb_block_call_func): add blockarg.  block
  function can take block argument, e.g., proc {|&blockarg| ...}.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43907 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-11-29 02:26:48 +00:00
nobu 94f01c55df should not ignore the rest of recursive constructs
* array.c (rb_ary_hash): should not ignore the rest of recursive
  constructs.
* hash.c (rb_hash_hash): ditto.
* range.c (range_hash): ditto.
* struct.c (rb_struct_hash): ditto.
* test/-ext-/test_recursion.rb (TestRecursion): separate from
  test/ruby/test_thread.rb.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43860 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-11-26 17:20:16 +00:00
ko1 2bfd722d80 * internal.h: do not use ruby_sized_xrealloc() and ruby_sized_xfree()
if HAVE_MALLOC_USABLE_SIZE (or _WIN32) is defined.
  We don't need these function if malloc_usable_size() is available.
* gc.c: catch up this change.
* gc.c: define HAVE_MALLOC_USABLE_SIZE on _WIN32.
* array.c (ary_resize_capa): do not use ruby_sized_xfree() with
  local variable to avoid "unused local variable" warning.
  This change only has few impact.
* string.c (rb_str_resize): ditto.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43839 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-11-25 01:13:31 +00:00
zzak 6720c0aeeb * array.c: [DOC] Add note about negative indices in Array overview
By @ckaenzig [Fixes GH-427] https://github.com/ruby/ruby/pull/427


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43570 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-11-07 17:15:49 +00:00
glass c2f3e600d0 * array.c (rb_ary_shuffle_bang): use RARRAY_PTR_USE() without WB
because there are not new relations.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43563 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-11-07 02:08:36 +00:00
glass cf0838f414 * array.c (rb_ary_sample): use rb_ary_dup().
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43562 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-11-07 01:37:34 +00:00
glass 564a14e497 * array.c (rb_ary_shift_m): use RARRAY_PTR_USE() without WB because
there are not new relations.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43557 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-11-06 12:20:39 +00:00
glass 27f2c267fd * array.c (rb_ary_reverse): use RARRAY_PTR_USE().
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43556 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-11-06 12:09:31 +00:00
glass da10c47e49 * array.c (rb_ary_sample): use RARRAY_AREF() and RARRAY_PTR_USE()
instead of RARRAY_PTR().

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43550 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-11-06 02:50:28 +00:00
glass e90e8b2ef6 * array.c (rb_ary_and): defer hash creation and some refactoring.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43549 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-11-06 01:39:55 +00:00
glass adcab6c1bb * array.c (rb_ary_uniq_bang): use rb_ary_modify_check() instead of
rb_ary_modify() because the array will be unshared soon.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43472 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-10-30 03:11:41 +00:00
glass 887ff70f23 * array.c (rb_ary_zip): some refactoring.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43468 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-10-29 14:08:48 +00:00
glass 806b93ed9b * array.c (rb_ary_uniq_bang): use st_foreach() instead of for loop.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43467 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-10-29 13:14:19 +00:00
marcandre dc215dcd9f * array.c: Add Array#to_h [Feature #7292]
* enum.c: Add Enumerable#to_h

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43401 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-10-23 15:10:48 +00:00
ko1 76b06555d0 * gc.c, internal.h: rename ruby_xsizefree/realloc to
rb_sized_free/realloc.
* array.c: catch up these changes.
* string.c: ditto.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43333 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-10-17 08:41:23 +00:00
ko1 3de7ec0a3f * array.c, string.c: use ruby_xsizedfree() and ruby_xsizedrealloc().
* internal.h (SIZED_REALLOC_N): define a macro as REALLOC_N().



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43332 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-10-17 08:35:06 +00:00
nobu 4a01df4a04 array.c: reduce RARRAY_LEN and ARY_CAPA
* array.c: reduce use of RARRAY_LEN and ARY_CAPA when object is not
  modified.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43291 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-10-15 07:34:05 +00:00
glass d4f37a5532 * array.c (rb_ary_or): remove unused variables.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43241 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-10-10 14:04:55 +00:00
glass 2423e3f350 * array.c (rb_ary_or): use rb_hash_keys().
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43240 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-10-10 14:02:52 +00:00
glass 840cd22d85 * array.c (rb_ary_compact_bang): use ary_resize_smaller().
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43239 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-10-10 12:37:58 +00:00
nobu 9c6ea2f200 array.c: use rb_hash_values
* array.c (rb_ary_uniq): use rb_hash_values(), as well as the case no
  block is given.
* internal.h: define rb_hash_values() as internal API.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43197 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-10-08 07:11:15 +00:00
nobu 827f4d653b array.c: set class
* array.c (rb_ary_uniq): set class of the return value to the receiver
  class.  fix failure in TestArray#test_array_subclass.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43196 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-10-08 06:35:29 +00:00
nobu 5014840140 array.c: remove unused variables
* array.c (rb_ary_uniq): remove no longer used local variables since
  r43194.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43195 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-10-08 05:19:57 +00:00
glass 41eb48b88d * array.c (rb_ary_uniq): use rb_hash_keys().
* internal.h: define rb_hash_keys() as internal API.

* hash.c (rb_hash_keys): ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43194 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-10-08 04:56:50 +00:00
nobu 92b0e5b2ec array.c: minor performance improvement
* array.c (sort_2): minor performance improvement by replacing
  rb_funcall() with rb_funcallv.

* array.c (rb_ary_bsearch, recursive_cmp, rb_ary_cycle_size): ditto.

* array.c (descending_factorial, binomial_coefficient): ditto.

* array.c (rb_ary_repeated_permutation_size): ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43086 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-09-29 14:51:03 +00:00
ko1 dc626dbab3 * include/ruby/ruby.h: rename RARRAY_RAWPTR() to RARRAY_CONST_PTR().
RARRAY_RAWPTR(ary) returns (const VALUE *) type pointer and
  usecase of this macro is not acquire raw pointer, but acquire
  read-only pointer. So we rename to better name.
  RSTRUCT_RAWPTR() is also renamed to RSTRUCT_CONST_PTR()
  (I expect that nobody use it).
* array.c, compile.c, cont.c, enumerator.c, gc.c, proc.c, random.c,
  string.c, struct.c, thread.c, vm_eval.c, vm_insnhelper.c:
  catch up this change.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43043 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-09-25 08:24:34 +00:00
nobu f25daa2541 array.c: optimized equality
* array.c (rb_ary_index, rb_ary_rindex): use optimized equality to
  improve performance.  [Feature #8820]
* vm_insnhelper.c (rb_equal_opt): optimized equality function.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42704 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-27 07:46:08 +00:00
nobu c075b153e8 * remove trailing spaces.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42689 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-26 06:02:47 +00:00
ko1 ad0ef29da7 * array.c (rb_ary_splice): use RARRAY_PTR_USE() without WB because
there are not new relations.
* enum.c (enum_sort_by): ditto.
* struct.c (setup_struct): use RARRAY_RAWPTR().
* vm_eval.c (yield_under): ditto.
* ext/pathname/pathname.c (path_entries): use RARRAY_AREF().
* ext/pathname/pathname.c (path_s_glob): ditto.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42688 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-26 05:47:27 +00:00
kazu e86d9fe858 * array.c (ary_ensure_room_for_push): fix typo in r42658.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42686 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-26 04:13:46 +00:00
ko1 5bcdc68c6e * array.c (ary_make_shared): shared ary as shady. Need more effort to
make it normal object.
* array.c (rb_ary_modify): use RARRAY_PTR_USE() without WB because
  there are not new relations.
* array.c (ary_ensure_room_for_unshift): use RARRAY_RAWPTR() because
  there are not new relations.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42665 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-23 09:42:18 +00:00
ko1 c50d45fc96 * array.c: introduce ARY_SHARED_OCCUPIED(shared).
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42658 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-23 02:27:32 +00:00
glass 07e3b30c84 * array.c (rb_ary_zip): performance implement by using
ALLOCA_N() to allocate tmp buffer.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42374 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-04 12:24:26 +00:00
glass 633fd55c4c * array.c (rb_ary_zip): use rb_ary_new2() to create buffer
if rb_block_arity() > 1.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42340 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-02 15:36:20 +00:00
glass 5339293fb8 * array.c (rb_ary_zip): performance improvement by avoiding
array creation if rb_block_arity() > 1.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42336 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-02 14:56:39 +00:00
ko1 d462261395 * array.c (ary_memcpy): cast to int to suppress a warning.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42193 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-26 09:31:17 +00:00
ko1 d320b2d9e9 * array.c (ary_memcpy): try to enable optimization.
At least on my environments, I don't see any errors
  with many trials. Please tell us if you find any GC bugs.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42192 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-26 09:23:40 +00:00
ko1 33ebcb0538 * array.c, gc.c: move ary_unprotect_logging() into
rb_gc_unprotect_logging() which is general version
* include/ruby/ruby.h: add USE_RGENGC_LOGGING_WB_UNPROTECT
  to enable.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42151 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-24 09:42:43 +00:00
ko1 8160fab8bc * array.c (ary_resize_capa): use RARRAY_RAWPTR() because
this code creates no new references.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42106 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-22 04:21:01 +00:00
ko1 8eb0a3cd50 * array.c (ary_memfill): added.
* array.c (rb_ary_initialize): use ary_memfill().
* array.c (rb_ary_fill): ditto.
* array.c (rb_ary_slice_bang): use RARRAY_RAWPTR() because
  this code creates no new references.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42105 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-22 04:00:12 +00:00
ko1 3a20287053 * array.c (rb_ary_resize): use simple memcpy because there are no new
references.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42081 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-20 06:24:11 +00:00
ko1 45e8268d62 * array.c (ary_make_shared): make shared array shady.
Making non-shady shared array causes SEGV (see rubyci).
  It seems a bug around shared array.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42079 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-20 05:39:57 +00:00
ko1 6e3c4fd8b5 * array.c: reduce shady operations.
* array.c (rb_ary_modify, ary_make_partial, rb_ary_splice,
  rb_ary_replace, rb_ary_eql, rb_ary_compact_bang):
  use RARRAY_RAWPTR() instead of RARRAY_PTR().
* array.c (rb_ary_shift): use RARRAY_PTR_USE() without WB because
  there are not new relations.
* array.c (ary_ensure_room_for_unshift): ditto.
* array.c (rb_ary_sort_bang): ditto.
* array.c (rb_ary_delete_at): ditto.
* array.c (rb_ary_reverse_m): use RARRAY_RAWPTR() because
  there are not new relations.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42072 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-19 12:56:58 +00:00
ko1 8d8ead142c * array.c: reduce shade operations.
* array.c (rb_ary_modify): use RARRAY_RAWPTR().
* array.c (ary_make_substitution, rb_ary_s_create, ary_make_partial,
  rb_ary_splice, rb_ary_resize, rb_ary_rotate_m, rb_ary_times):
  use ary_memcpy().



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42071 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-19 12:12:31 +00:00
ko1 9cc7f5f829 * array.c (ary_mem_clear): added. This operation doesn't need WB
because this operation creates a reference to Qnil.
* array.c (ary_make_shared, rb_ary_store, rb_ary_shift_m,
  rb_ary_splice, rb_ary_resize, rb_ary_fill): use ary_mem_clear()
  instead of rb_mem_clear().
* array.c (ary_make_shared): use RARRAY_RAWPTR() instead of RARRAY_PTR().



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42070 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-19 11:08:13 +00:00
ko1 a6e1e3d637 * array.c: fix commit miss.
RGENGC_UNPROTECT_LOGGING should be 0.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42067 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-19 10:19:19 +00:00
ko1 5ef247aa60 * array.c (rb_ary_resurrect): use RARRAY_RAWPTR() because there is no
writing.
* array.c (rb_ary_new_from_values): use ary_memcpy().



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42066 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-19 10:16:31 +00:00
ko1 01bf495286 * array.c (ary_memcpy): add a function to copy VALUEs into ary
with write barrier. If ary is promoted, use write barrier correctly.
* array.c (rb_ary_cat, rb_ary_unshift_m, rb_ary_dup,
  rb_ary_sort_bang, rb_ary_replace, rb_ary_plus): use ary_memcpy().



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42065 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-19 10:10:31 +00:00
ko1 77887cf01c * array.c (rb_ary_store): use RARRAY_PTR_USE() intead of RARRAY_PTR().
Clearing memory space doesn't need WBs.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42064 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-19 06:34:18 +00:00
ko1 b9b5a2ccab * array.c (ary_ensure_room_for_push): use RARRAY_RAWPTR() instead of
RARRAY_PTR. In this code, there are no "write" operation.
* array.c (rb_ary_equal): ditto.
* array.c (recursive_equal): ditto.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42063 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-19 06:21:12 +00:00
ko1 8e5374d05a * array.c (ary_unprotect_logging): use (void *) for first parameter
because VALUE is not defined before including ruby/ruby.h.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42061 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-19 06:00:28 +00:00