aboutsummaryrefslogtreecommitdiffstats
path: root/ext/dl/mkcbtable.rb
diff options
context:
space:
mode:
authorttate <ttate@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2002-04-02 10:56:13 +0000
committerttate <ttate@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2002-04-02 10:56:13 +0000
commit7d711b817e62eb6c8dee01ea2283fcb1ad90f8ac (patch)
treeb1b54ab76217775071de4e3669674aa7887aa6b9 /ext/dl/mkcbtable.rb
parent64b6406445e53f187d2982f87becff8065edd0cc (diff)
downloadruby-7d711b817e62eb6c8dee01ea2283fcb1ad90f8ac.tar.gz
Add ruby-dl
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2324 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/dl/mkcbtable.rb')
-rw-r--r--ext/dl/mkcbtable.rb42
1 files changed, 42 insertions, 0 deletions
diff --git a/ext/dl/mkcbtable.rb b/ext/dl/mkcbtable.rb
new file mode 100644
index 0000000000..f25f012e4c
--- /dev/null
+++ b/ext/dl/mkcbtable.rb
@@ -0,0 +1,42 @@
+# -*- ruby -*-
+
+require 'mkmf'
+$:.unshift File.dirname(__FILE__)
+require 'type'
+require 'dlconfig'
+
+$int_eq_long = try_run(<<EOF)
+int main() {
+ return sizeof(int) == sizeof(long) ? 0 : 1;
+}
+EOF
+
+def output_func(types, n = 0)
+ code =
+ "/* #{types2ctypes(types).inspect} */\n" +
+ "rb_dl_func_table[#{types2num(types)}][#{n}] " +
+ "= rb_dl_func#{types2num(types)}_#{n};\n"
+ if( n < MAX_CBENT - 1)
+ return code + output_func(types, n+1)
+ else
+ return code
+ end
+end
+
+
+def rec_output(types = [VOID])
+ print output_func(types)
+ if( types.length <= MAX_CBARG )
+ DLTYPE.keys.sort.each{|t|
+ if( t != VOID && DLTYPE[t][:cb] )
+ rec_output(types + [t])
+ end
+ }
+ end
+end
+
+DLTYPE.keys.sort.each{|t|
+ if( DLTYPE[t][:cb] )
+ rec_output([t])
+ end
+}