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/