[#28561] Ruby::DL vs Ruby::FFI — Aston <blackapache512-ticket@...>

Ruby.DL and FFI libraries are great for programmers like me who are not internet programmers, but are more interested in scientific and number processing etc.

11 messages 2010/03/08

[#28686] trunk (26947) build fail with msys/mingw/vista — Jon <jon.forums@...>

I get the following build failure when msysgit's "c:\git\cmd" dir is on PATH.

8 messages 2010/03/16

[#28687] [Bug #2973] rb_bug - Segmentation fault - error.c:213 — rudolf gavlas <redmine@...>

Bug #2973: rb_bug - Segmentation fault - error.c:213

10 messages 2010/03/16

[#28735] [Bug #2982] Ruby tries to link with both openssl and readline — Lucas Nussbaum <redmine@...>

Bug #2982: Ruby tries to link with both openssl and readline

16 messages 2010/03/18

[#28736] [Bug #2983] Ruby (GPLv2 only) tries to link to with readline (now GPLv3) — Lucas Nussbaum <redmine@...>

Bug #2983: Ruby (GPLv2 only) tries to link to with readline (now GPLv3)

10 messages 2010/03/18

[#28907] [Bug #3000] Open SSL Segfaults — Christian Höltje <redmine@...>

Bug #3000: Open SSL Segfaults

19 messages 2010/03/23

[#28924] [Bug #3005] Ruby core dump - [BUG] rb_sys_fail() - errno == 0 — Sebastian YEPES <redmine@...>

Bug #3005: Ruby core dump - [BUG] rb_sys_fail() - errno == 0

10 messages 2010/03/24

[#28954] [Feature #3010] slow require gems in ruby 1.9.1 — Miao Jiang <redmine@...>

Feature #3010: slow require gems in ruby 1.9.1

15 messages 2010/03/24

[#29179] [Bug #3071] Convert rubygems and rdoc to use psych — Aaron Patterson <redmine@...>

Bug #3071: Convert rubygems and rdoc to use psych

10 messages 2010/03/31

[ruby-core:29026] [Bug #3016] Enumerable#slice_before and dup

From: Marc-Andre Lafortune <redmine@...>
Date: 2010-03-26 05:02:05 UTC
List: ruby-core #29026
Bug #3016: Enumerable#slice_before and dup
http://redmine.ruby-lang.org/issues/show/3016

Author: Marc-Andre Lafortune
Status: Open, Priority: Low
Category: core, Target version: 1.9.2
ruby -v: ruby 1.9.2dev (2010-03-03 trunk 26805) [x86_64-darwin10.2.0]

When writing the specs for slice_before, I was surprised that it doesn't call #dup.

class X
  def dup
    raise "Hi!"
  end
end

[:foo].slice_before(X.new){}.to_a
  # ==> [[:foo]], I expected it to raise

The implementation calls directly rb_obj_dup.

It's a minor issue, but would it not be best to call dup on the argument? Most special needs for #dup can be addressed by initialize_dup, but maybe there are some reasonable cases where some user classes will redefine #dup?

The same question is valid for Enumerable#chunk.


diff --git a/enum.c b/enum.c
index b69d8c9..e6e6adb 100644
--- a/enum.c
+++ b/enum.c
@@ -14,7 +14,7 @@
 #include "node.h"
 
 VALUE rb_mEnumerable;
-static ID id_each, id_eqq, id_cmp, id_next, id_size;
+static ID id_each, id_eqq, id_cmp, id_next, id_size, id_dup;
 
 static VALUE
 enum_values_pack(int argc, VALUE *argv)
@@ -2189,7 +2189,7 @@ chunk_i(VALUE yielder, VALUE enumerator, int argc, VALUE *argv)
     arg.yielder = yielder;
 
     if (!NIL_P(arg.state))
-        arg.state = rb_obj_dup(arg.state);
+        arg.state = rb_funcall(arg.state, id_dup, 0, 0);
 
     rb_block_call(enumerable, id_each, 0, 0, chunk_ii, (VALUE)&arg);
     if (!NIL_P(arg.prev_elts))
@@ -2364,7 +2364,7 @@ slicebefore_i(VALUE yielder, VALUE enumerator, int argc, VALUE *argv)
     arg.yielder = yielder;
 
     if (!NIL_P(arg.state))
-        arg.state = rb_obj_dup(arg.state);
+        arg.state = rb_funcall(arg.state, id_dup, 0, 0);
 
     rb_block_call(enumerable, id_each, 0, 0, slicebefore_ii, (VALUE)&arg);
     if (!NIL_P(arg.prev_elts))
@@ -2606,5 +2606,6 @@ Init_Enumerable(void)
     id_cmp  = rb_intern("<=>");
     id_next = rb_intern("next");
     id_size = rb_intern("size");
+    id_dup  = rb_intern("dup");
 }


----------------------------------------
http://redmine.ruby-lang.org

In This Thread

Prev Next