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

ruby-changes:7071

From: nobu <ko1@a...>
Date: Thu, 14 Aug 2008 00:47:10 +0900 (JST)
Subject: [ruby-changes:7071] Ruby:r18589 (trunk): * configure.in (rb_cv_gcc_function_alias): checks alias attribute.

nobu	2008-08-14 00:43:55 +0900 (Thu, 14 Aug 2008)

  New Revision: 18589

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

  Log:
    * configure.in (rb_cv_gcc_function_alias): checks alias attribute.
    
    * string.c (alias_func): replaced with RUBY_ALIAS_FUNCTION.

  Modified files:
    trunk/ChangeLog
    trunk/configure.in
    trunk/string.c

Index: configure.in
===================================================================
--- configure.in	(revision 18588)
+++ configure.in	(revision 18589)
@@ -445,6 +445,23 @@
 RUBY_FUNC_ATTRIBUTE(cdecl)
 RUBY_FUNC_ATTRIBUTE(fastcall)
 
+if test "$GCC" = yes; then
+    AC_CACHE_CHECK([for function alias], [rb_cv_gcc_function_alias],
+	[rb_cv_gcc_function_alias=no
+	for a in alias weak,alias; do
+	    AC_TRY_LINK([void foo(void) {}
+		void bar(void) __attribute__(($a("foo")));], [bar()],
+		[rb_cv_gcc_function_alias=$a; break])
+	done])
+    if test "$rb_cv_gcc_function_alias" = no; then
+	AC_DEFINE([RUBY_ALIAS_FUNCTION(old_prot, new_name, args)],
+		  [VALUE old_prot {return new_name args;}])
+    else
+	AC_DEFINE_UNQUOTED([RUBY_ALIAS_FUNCTION(old_prot, new_name, args)],
+			   [VALUE old_prot __attribute__(($rb_cv_gcc_function_alias(@%:@new_name)));])
+    fi
+fi
+
 AC_CACHE_CHECK([for RUBY_EXTERN], rb_cv_ruby_extern,
 [rb_cv_ruby_extern=no
 for mac in "__attribute__((dllimport))" "__declspec(dllimport)"; do
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 18588)
+++ ChangeLog	(revision 18589)
@@ -1,3 +1,9 @@
+Thu Aug 14 00:43:53 2008  Nobuyoshi Nakada  <nobu@r...>
+
+	* configure.in (rb_cv_gcc_function_alias): checks alias attribute.
+
+	* string.c (alias_func): replaced with RUBY_ALIAS_FUNCTION.
+
 Wed Aug 13 23:42:49 2008  Nobuyoshi Nakada  <nobu@r...>
 
 	* common.mk (parse.h): fake rule.
Index: string.c
===================================================================
--- string.c	(revision 18588)
+++ string.c	(revision 18589)
@@ -43,14 +43,6 @@
 VALUE rb_cString;
 VALUE rb_cSymbol;
 
-#ifdef __GNUC__
-#define alias_func(old_prot, new_name, args) \
-VALUE old_prot __attribute__((weak, alias(#new_name)));
-#else
-#define alias_func(old_prot, new_name, args) \
-VALUE old_prot {return new_name args;}
-#endif
-
 #define STR_TMPLOCK FL_USER7
 #define STR_NOEMBED FL_USER1
 #define STR_SHARED  FL_USER2 /* = ELTS_SHARED */
@@ -440,7 +432,7 @@
     return rb_str_new(ptr, strlen(ptr));
 }
 
-alias_func(rb_str_new2(const char *ptr), rb_str_new_cstr, (ptr))
+RUBY_ALIAS_FUNCTION(rb_str_new2(const char *ptr), rb_str_new_cstr, (ptr))
 #define rb_str_new2 rb_str_new_cstr
 
 VALUE
@@ -451,7 +443,7 @@
     return str;
 }
 
-alias_func(rb_usascii_str_new2(const char *ptr), rb_usascii_str_new_cstr, (ptr))
+RUBY_ALIAS_FUNCTION(rb_usascii_str_new2(const char *ptr), rb_usascii_str_new_cstr, (ptr))
 #define rb_usascii_str_new2 rb_usascii_str_new_cstr
 
 VALUE
@@ -472,7 +464,7 @@
     return str;
 }
 
-alias_func(rb_tainted_str_new2(const char *ptr), rb_tainted_str_new_cstr, (ptr))
+RUBY_ALIAS_FUNCTION(rb_tainted_str_new2(const char *ptr), rb_tainted_str_new_cstr, (ptr))
 #define rb_tainted_str_new2 rb_tainted_str_new_cstr
 
 static VALUE
@@ -516,7 +508,7 @@
     return str2;
 }
 
-alias_func(rb_str_new3(VALUE str), rb_str_new_shared, (str))
+RUBY_ALIAS_FUNCTION(rb_str_new3(VALUE str), rb_str_new_shared, (str))
 #define rb_str_new3 rb_str_new_shared
 
 static VALUE
@@ -579,7 +571,7 @@
     return str;
 }
 
-alias_func(rb_str_new4(VALUE orig), rb_str_new_frozen, (orig))
+RUBY_ALIAS_FUNCTION(rb_str_new4(VALUE orig), rb_str_new_frozen, (orig))
 #define rb_str_new4 rb_str_new_frozen
 
 VALUE
@@ -588,7 +580,7 @@
     return str_new(rb_obj_class(obj), ptr, len);
 }
 
-alias_func(rb_str_new5(VALUE obj, const char *ptr, long len),
+RUBY_ALIAS_FUNCTION(rb_str_new5(VALUE obj, const char *ptr, long len),
 	   rb_str_new_with_class, (obj, ptr, len))
 #define rb_str_new5 rb_str_new_with_class
 
@@ -622,7 +614,7 @@
     return str;
 }
 
-alias_func(rb_str_buf_new2(const char *ptr), rb_str_buf_new_cstr, (ptr))
+RUBY_ALIAS_FUNCTION(rb_str_buf_new2(const char *ptr), rb_str_buf_new_cstr, (ptr))
 #define rb_str_buf_new2 rb_str_buf_new_cstr
 
 VALUE
@@ -1365,7 +1357,7 @@
     return rb_obj_freeze(str);
 }
 
-alias_func(rb_str_dup_frozen(VALUE str), rb_str_new_frozen, (str))
+RUBY_ALIAS_FUNCTION(rb_str_dup_frozen(VALUE str), rb_str_new_frozen, (str))
 #define rb_str_dup_frozen rb_str_new_frozen
 
 VALUE

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

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