diff options
| author | yugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-03-04 09:20:22 +0000 |
|---|---|---|
| committer | yugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-03-04 09:20:22 +0000 |
| commit | 9d2e070f0551a873787f62f427fa1062f9414913 (patch) | |
| tree | a2e1889639dd730d0fa6edfabfaa2ddc33b0e63f /ext/dl/mkcallback.rb | |
| parent | bcc0224e666e5ee6cf3b6fd366194211545dd5b8 (diff) | |
merges r22690 from trunk into ruby_1_9_1.
--
* ext/dl/cfunc.c (rb_dlcfunc_call): fix for stdcall and missing
argument numbers. [ruby-core:22601]
* ext/dl/dl.h (DLSTACK_PROTO0_): added.
* ext/dl/mkcallback.rb (gencallback, gen_callback_file),
(rb_dl_init_callbacks): omit stdcall functions unless supported.
* lib/rubygems/config_file.rb (SHGetFolderPath): stdcall.
git-svn-id: http://svn.ruby-lang.org/repos/ruby/branches/ruby_1_9_1@22754 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/dl/mkcallback.rb')
| -rw-r--r-- | ext/dl/mkcallback.rb | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/ext/dl/mkcallback.rb b/ext/dl/mkcallback.rb index 8809f69f0..1cac0857b 100644 --- a/ext/dl/mkcallback.rb +++ b/ext/dl/mkcallback.rb @@ -114,7 +114,7 @@ end def gencallback(ty, calltype, proc_entry, argc, n) <<-EOS - +#{calltype == STDCALL ? "\n#ifdef FUNC_STDCALL" : ""} static #{DLTYPE[ty][:type]} FUNC_#{calltype.upcase}(#{func_name(ty,argc,n,calltype)})(#{(0...argc).collect{|i| "DLSTACK_TYPE stack" + i.to_s}.join(", ")}) { @@ -128,7 +128,7 @@ FUNC_#{calltype.upcase}(#{func_name(ty,argc,n,calltype)})(#{(0...argc).collect{| ret = rb_funcall2(cb, rb_dl_cb_call, #{argc}, #{argc > 0 ? 'args' : 'NULL'}); return #{DLTYPE[ty][:conv] ? DLTYPE[ty][:conv] % "ret" : ""}; } - +#{calltype == STDCALL ? "#endif\n" : ""} EOS end @@ -157,7 +157,9 @@ def gen_callback_file(ty) f.puts <<-EOS #include "dl.h" extern VALUE rb_DLCdeclCallbackAddrs, rb_DLCdeclCallbackProcs; +#ifdef FUNC_STDCALL extern VALUE rb_DLStdcallCallbackAddrs, rb_DLStdcallCallbackProcs; +#endif extern ID rb_dl_cb_call; EOS yield f @@ -167,8 +169,10 @@ void { #{gen_push_proc_ary(ty, "rb_DLCdeclCallbackProcs")} #{gen_push_addr_ary(ty, "rb_DLCdeclCallbackAddrs", CDECL)} +#ifdef FUNC_STDCALL #{gen_push_proc_ary(ty, "rb_DLStdcallCallbackProcs")} #{gen_push_addr_ary(ty, "rb_DLStdcallCallbackAddrs", STDCALL)} +#endif } EOS } @@ -201,11 +205,13 @@ rb_dl_init_callbacks() tmp = rb_DLCdeclCallbackAddrs = rb_ary_new(); rb_define_const(rb_mDL, "CdeclCallbackAddrs", tmp); +#ifdef FUNC_STDCALL tmp = rb_DLStdcallCallbackProcs = rb_ary_new(); rb_define_const(rb_mDL, "StdcallCallbackProcs", tmp); tmp = rb_DLStdcallCallbackAddrs = rb_ary_new(); rb_define_const(rb_mDL, "StdcallCallbackAddrs", tmp); +#endif #{ (0...MAX_DLTYPE).collect{|ty| |
