mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* ext/dl/mkcallback.rb (foreach_proc_entry): extracted.
(gencallback): ditto. (gen_push_proc_ary): ditto. (gen_push_addr_ary): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@18959 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
a2a32f9f02
commit
f69c1c5eda
2 changed files with 52 additions and 37 deletions
|
@ -1,3 +1,10 @@
|
||||||
|
Sun Aug 31 01:27:46 2008 Tanaka Akira <akr@fsij.org>
|
||||||
|
|
||||||
|
* ext/dl/mkcallback.rb (foreach_proc_entry): extracted.
|
||||||
|
(gencallback): ditto.
|
||||||
|
(gen_push_proc_ary): ditto.
|
||||||
|
(gen_push_addr_ary): ditto.
|
||||||
|
|
||||||
Sat Aug 30 23:51:01 2008 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
|
Sat Aug 30 23:51:01 2008 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>
|
||||||
|
|
||||||
* test/rinda/test_tuplebag.rb (test_has_expires_eh): fix failures
|
* test/rinda/test_tuplebag.rb (test_has_expires_eh): fix failures
|
||||||
|
|
|
@ -97,19 +97,22 @@ VALUE rb_DLStdcallCallbackAddrs, rb_DLStdcallCallbackProcs;
|
||||||
static ID cb_call;
|
static ID cb_call;
|
||||||
EOS
|
EOS
|
||||||
|
|
||||||
for calltype in CALLTYPES
|
def foreach_proc_entry
|
||||||
case calltype
|
for calltype in CALLTYPES
|
||||||
when CDECL
|
case calltype
|
||||||
proc_entry = "rb_DLCdeclCallbackProcs"
|
when CDECL
|
||||||
when STDCALL
|
proc_entry = "rb_DLCdeclCallbackProcs"
|
||||||
proc_entry = "rb_DLStdcallCallbackProcs"
|
when STDCALL
|
||||||
else
|
proc_entry = "rb_DLStdcallCallbackProcs"
|
||||||
raise "unknown calltype: #{calltype}"
|
else
|
||||||
|
raise "unknown calltype: #{calltype}"
|
||||||
|
end
|
||||||
|
yield calltype, proc_entry
|
||||||
end
|
end
|
||||||
for ty in 0..(MAX_DLTYPE-1)
|
end
|
||||||
for argc in 0..(DLSTACK_SIZE-1)
|
|
||||||
for n in 0..(MAX_CALLBACK-1)
|
def gencallback(ty, calltype, proc_entry, argc, n)
|
||||||
$out << (<<-EOS)
|
<<-EOS
|
||||||
|
|
||||||
static #{DLTYPE[ty][:type]}
|
static #{DLTYPE[ty][:type]}
|
||||||
FUNC_#{calltype.upcase}(#{func_name(ty,argc,n,calltype)})(#{(0...argc).collect{|i| "DLSTACK_TYPE stack" + i.to_s}.join(", ")})
|
FUNC_#{calltype.upcase}(#{func_name(ty,argc,n,calltype)})(#{(0...argc).collect{|i| "DLSTACK_TYPE stack" + i.to_s}.join(", ")})
|
||||||
|
@ -125,7 +128,32 @@ FUNC_#{calltype.upcase}(#{func_name(ty,argc,n,calltype)})(#{(0...argc).collect{|
|
||||||
return #{DLTYPE[ty][:conv] ? DLTYPE[ty][:conv] % "ret" : ""};
|
return #{DLTYPE[ty][:conv] ? DLTYPE[ty][:conv] % "ret" : ""};
|
||||||
}
|
}
|
||||||
|
|
||||||
EOS
|
EOS
|
||||||
|
end
|
||||||
|
|
||||||
|
def gen_push_proc_ary(ty, aryname)
|
||||||
|
sprintf(" rb_ary_push(#{aryname}, rb_ary_new3(%d,%s));",
|
||||||
|
MAX_CALLBACK * DLSTACK_SIZE,
|
||||||
|
(0...MAX_CALLBACK).collect{
|
||||||
|
(0...DLSTACK_SIZE).collect{ "Qnil" }.join(",")
|
||||||
|
}.join(","))
|
||||||
|
end
|
||||||
|
|
||||||
|
def gen_push_addr_ary(ty, aryname, calltype)
|
||||||
|
sprintf(" rb_ary_push(#{aryname}, rb_ary_new3(%d,%s));",
|
||||||
|
MAX_CALLBACK * DLSTACK_SIZE,
|
||||||
|
(0...MAX_CALLBACK).collect{|i|
|
||||||
|
(0...DLSTACK_SIZE).collect{|argc|
|
||||||
|
"PTR2NUM(%s)" % func_name(ty,argc,i,calltype)
|
||||||
|
}.join(",")
|
||||||
|
}.join(","))
|
||||||
|
end
|
||||||
|
|
||||||
|
foreach_proc_entry do |calltype, proc_entry|
|
||||||
|
for ty in 0..(MAX_DLTYPE-1)
|
||||||
|
for argc in 0..(DLSTACK_SIZE-1)
|
||||||
|
for n in 0..(MAX_CALLBACK-1)
|
||||||
|
$out << gencallback(ty, calltype, proc_entry, argc, n)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -152,42 +180,22 @@ rb_dl_init_callbacks()
|
||||||
|
|
||||||
#{
|
#{
|
||||||
(0...MAX_DLTYPE).collect{|ty|
|
(0...MAX_DLTYPE).collect{|ty|
|
||||||
sprintf(" rb_ary_push(rb_DLCdeclCallbackProcs, rb_ary_new3(%d,%s));",
|
gen_push_proc_ary(ty, "rb_DLCdeclCallbackProcs")
|
||||||
MAX_CALLBACK * DLSTACK_SIZE,
|
|
||||||
(0...MAX_CALLBACK).collect{
|
|
||||||
(0...DLSTACK_SIZE).collect{ "Qnil" }.join(",")
|
|
||||||
}.join(","))
|
|
||||||
}.join("\n")
|
}.join("\n")
|
||||||
}
|
}
|
||||||
#{
|
#{
|
||||||
(0...MAX_DLTYPE).collect{|ty|
|
(0...MAX_DLTYPE).collect{|ty|
|
||||||
sprintf(" rb_ary_push(rb_DLCdeclCallbackAddrs, rb_ary_new3(%d,%s));",
|
gen_push_addr_ary(ty, "rb_DLCdeclCallbackAddrs", CDECL)
|
||||||
MAX_CALLBACK * DLSTACK_SIZE,
|
|
||||||
(0...MAX_CALLBACK).collect{|i|
|
|
||||||
(0...DLSTACK_SIZE).collect{|argc|
|
|
||||||
"PTR2NUM(%s)" % func_name(ty,argc,i,CDECL)
|
|
||||||
}.join(",")
|
|
||||||
}.join(","))
|
|
||||||
}.join("\n")
|
}.join("\n")
|
||||||
}
|
}
|
||||||
#{
|
#{
|
||||||
(0...MAX_DLTYPE).collect{|ty|
|
(0...MAX_DLTYPE).collect{|ty|
|
||||||
sprintf(" rb_ary_push(rb_DLStdcallCallbackProcs, rb_ary_new3(%d,%s));",
|
gen_push_proc_ary(ty, "rb_DLStdcallCallbackProcs")
|
||||||
MAX_CALLBACK * DLSTACK_SIZE,
|
|
||||||
(0...MAX_CALLBACK).collect{
|
|
||||||
(0...DLSTACK_SIZE).collect{ "Qnil" }.join(",")
|
|
||||||
}.join(","))
|
|
||||||
}.join("\n")
|
}.join("\n")
|
||||||
}
|
}
|
||||||
#{
|
#{
|
||||||
(0...MAX_DLTYPE).collect{|ty|
|
(0...MAX_DLTYPE).collect{|ty|
|
||||||
sprintf(" rb_ary_push(rb_DLStdcallCallbackAddrs, rb_ary_new3(%d,%s));",
|
gen_push_addr_ary(ty, "rb_DLStdcallCallbackAddrs", STDCALL)
|
||||||
MAX_CALLBACK * DLSTACK_SIZE,
|
|
||||||
(0...MAX_CALLBACK).collect{|i|
|
|
||||||
(0...DLSTACK_SIZE).collect{|argc|
|
|
||||||
"PTR2NUM(%s)" % func_name(ty,argc,i,STDCALL)
|
|
||||||
}.join(",")
|
|
||||||
}.join(","))
|
|
||||||
}.join("\n")
|
}.join("\n")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue