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

ruby-changes:9848

From: akr <ko1@a...>
Date: Thu, 8 Jan 2009 23:02:02 +0900 (JST)
Subject: [ruby-changes:9848] Ruby:r21389 (trunk): * ext/socket/mkconstants.rb (gen_name_to_int_func): generate

akr	2009-01-08 23:00:34 +0900 (Thu, 08 Jan 2009)

  New Revision: 21389

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

  Log:
    * ext/socket/mkconstants.rb (gen_name_to_int_func): generate
      name_to_int functions, not only body.

  Modified files:
    trunk/ChangeLog
    trunk/ext/socket/mkconstants.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 21388)
+++ ChangeLog	(revision 21389)
@@ -1,3 +1,8 @@
+Thu Jan  8 22:59:30 2009  Tanaka Akira  <akr@f...>
+
+	* ext/socket/mkconstants.rb (gen_name_to_int_func): generate
+	  name_to_int functions, not only body.
+
 Thu Jan  8 22:44:10 2009  Tanaka Akira  <akr@f...>
 
 	* ext/socket/socket.c: don't use AI_NUMERICSERV for platforms which
Index: ext/socket/mkconstants.rb
===================================================================
--- ext/socket/mkconstants.rb	(revision 21388)
+++ ext/socket/mkconstants.rb	(revision 21389)
@@ -104,13 +104,19 @@
   }
 end
 
-ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_name_to_int(str_var, len_var, retp_var, pat, prefix_optional=nil)")
-    switch (<%=len_var%>) {
+ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_name_to_int_func(funcname, pat, prefix_optional, guard=nil)")
+%if guard
+#ifdef <%=guard%>
+%end
+static int
+<%=funcname%>(char *str, int len, int *valp)
+{
+    switch (len) {
 %    each_names_with_len(pat, prefix_optional) {|pairs, len|
       case <%=len%>:
 %      pairs.each {|name, const|
 #ifdef <%=const%>
-        if (memcmp(<%=str_var%>, <%=c_str name%>, <%=len%>) == 0) { *<%=retp_var%> = <%=const%>; return 0; }
+        if (memcmp(str, <%=c_str name%>, <%=len%>) == 0) { *valp = <%=const%>; return 0; }
 #endif
 %      }
         return -1;
@@ -119,6 +125,10 @@
       default:
         return -1;
     }
+}
+%if guard
+#endif
+%end
 EOS
 
 def reverse_each_name_with_prefix_optional(pat, prefix_pat)
@@ -201,56 +211,15 @@
 <%= INTERN_DEFS.map {|decl, gen_hash, func| gen_hash }.join("\n") %>
 }
 
-static int
-family_to_int(char *str, int len, int *valp)
-{
-<%= gen_name_to_int("str", "len", "valp", /\A[AP]F_/, "AF_") %>
-}
+<%= gen_name_to_int_func("family_to_int", /\A(AF_|PF_)/, "AF_") %>
+<%= gen_name_to_int_func("socktype_to_int", /\ASOCK_/, "SOCK_") %>
+<%= gen_name_to_int_func("level_to_int", /\A(SOL_SOCKET\z|IPPROTO_)/, /\A(SOL_|IPPROTO_)/) %>
+<%= gen_name_to_int_func("so_optname_to_int", /\ASO_/, "SO_") %>
+<%= gen_name_to_int_func("ip_optname_to_int", /\AIP_/, "IP_") %>
+<%= gen_name_to_int_func("ipv6_optname_to_int", /\AIPV6_/, "IPV6_", "IPPROTO_IPV6") %>
+<%= gen_name_to_int_func("tcp_optname_to_int", /\ATCP_/, "TCP_") %>
+<%= gen_name_to_int_func("udp_optname_to_int", /\AUDP_/, "UDP_") %>
 
-static int
-socktype_to_int(char *str, int len, int *valp)
-{
-<%= gen_name_to_int("str", "len", "valp", /\ASOCK_/, "SOCK_") %>
-}
-
-static int
-level_to_int(char *str, int len, int *valp)
-{
-<%= gen_name_to_int("str", "len", "valp", /\A(SOL_SOCKET\z|IPPROTO_)/, /\A(SOL_|IPPROTO_)/) %>
-}
-
-static int
-so_optname_to_int(char *str, int len, int *valp)
-{
-<%= gen_name_to_int("str", "len", "valp", /\ASO_/, "SO_") %>
-}
-
-static int
-ip_optname_to_int(char *str, int len, int *valp)
-{
-<%= gen_name_to_int("str", "len", "valp", /\AIP_/, "IP_") %>
-}
-
-#ifdef IPPROTO_IPV6
-static int
-ipv6_optname_to_int(char *str, int len, int *valp)
-{
-<%= gen_name_to_int("str", "len", "valp", /\AIPV6_/, "IPV6_") %>
-}
-#endif
-
-static int
-tcp_optname_to_int(char *str, int len, int *valp)
-{
-<%= gen_name_to_int("str", "len", "valp", /\ATCP_/, "TCP_") %>
-}
-
-static int
-udp_optname_to_int(char *str, int len, int *valp)
-{
-<%= gen_name_to_int("str", "len", "valp", /\AUDP_/, "UDP_") %>
-}
-
 <%= INTERN_DEFS.map {|decl, gen_hash, func| func }.join("\n") %>
 
 EOS

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

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