[前][次][番号順一覧][スレッド一覧]

ruby-changes:22577

From: nobu <ko1@a...>
Date: Wed, 15 Feb 2012 19:52:54 +0900 (JST)
Subject: [ruby-changes:22577] nobu:r34626 (trunk): * ext/fiddle/closure.c (callback): same as r34506.

nobu	2012-02-15 19:52:31 +0900 (Wed, 15 Feb 2012)

  New Revision: 34626

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=34626

  Log:
    * ext/fiddle/closure.c (callback): same as r34506.

  Modified files:
    trunk/ChangeLog
    trunk/ext/fiddle/closure.c
    trunk/test/fiddle/test_closure.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 34625)
+++ ChangeLog	(revision 34626)
@@ -1,3 +1,7 @@
+Wed Feb 15 19:52:28 2012  Nobuyoshi Nakada  <nobu@r...>
+
+	* ext/fiddle/closure.c (callback): same as r34506.
+
 Wed Feb 15 17:41:31 2012  NARUSE, Yui  <naruse@r...>
 
 	* io.c (io_strsetbuf): call rb_str_modify to make str independent
Index: ext/fiddle/closure.c
===================================================================
--- ext/fiddle/closure.c	(revision 34625)
+++ ext/fiddle/closure.c	(revision 34626)
@@ -125,7 +125,7 @@
 	break;
 #if HAVE_LONG_LONG
       case TYPE_LONG_LONG:
-	*(unsigned LONG_LONG *)resp = rb_big2ull(ret);
+	*(unsigned LONG_LONG *)resp = NUM2ULL(ret);
 	break;
 #endif
       default:
Index: test/fiddle/test_closure.rb
===================================================================
--- test/fiddle/test_closure.rb	(revision 34625)
+++ test/fiddle/test_closure.rb	(revision 34626)
@@ -55,5 +55,30 @@
       n = 10000
       assert_equal(n, n.times {ObjectSpace.memsize_of(Closure.allocate)}, bug)
     end
+
+    %w[INT SHORT CHAR LONG LONG_LONG].each do |name|
+      type = DL.const_get("TYPE_#{name}") rescue next
+      size = DL.const_get("SIZEOF_#{name}")
+      [[type, size-1, name], [-type, size, "unsigned_"+name]].each do |t, s, n|
+        define_method("test_conversion_#{n.downcase}") do
+          arg = nil
+
+          clos = Class.new(Closure) do
+            define_method(:call) {|x| arg = x}
+          end.new(t, [t])
+
+          v = ~(~0 << (8*s))
+
+          arg = nil
+          assert_equal(v, clos.call(v))
+          assert_equal(arg, v, n)
+
+          arg = nil
+          func = Function.new(clos, [t], t)
+          assert_equal(v, func.call(v))
+          assert_equal(arg, v, n)
+        end
+      end
+    end
   end
 end if defined?(Fiddle)

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]