From a606faa491af05b99dba6ebafa57662cf6b451fe Mon Sep 17 00:00:00 2001 From: Daniel Stutzbach Date: Tue, 31 Aug 2010 19:51:07 +0000 Subject: [PATCH] Issue 5553: Improved Py_LOCAL_INLINE to actually inline under compilers other than MSC --- Include/pyport.h | 2 -- Misc/NEWS | 4 ++++ Modules/_sre.c | 3 --- configure | 50 ++++++++++++++++++++++++++++++++++++++++++++++++ configure.in | 7 +++++++ pyconfig.h.in | 3 +++ 6 files changed, 64 insertions(+), 5 deletions(-) diff --git a/Include/pyport.h b/Include/pyport.h index 3932dc63722..799e6cfb4d2 100644 --- a/Include/pyport.h +++ b/Include/pyport.h @@ -266,8 +266,6 @@ typedef Py_intptr_t Py_ssize_t; * should keep using static. */ -#undef USE_INLINE /* XXX - set via configure? */ - #if defined(_MSC_VER) #if defined(PY_LOCAL_AGGRESSIVE) /* enable more aggressive optimization for visual studio */ diff --git a/Misc/NEWS b/Misc/NEWS index 32d26ff8b13..e32d61e802f 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -12,6 +12,10 @@ What's New in Python 3.2 Alpha 2? Core and Builtins ----------------- +- Issue #5553: The Py_LOCAL_INLINE macro now results in inlining on + most platforms. Previously, it online inlined when using Microsoft + Visual C. + - Issue #9712: Fix tokenize on identifiers that start with non-ascii names. - Issue #9688: __basicsize__ and __itemsize__ must be accessed as Py_ssize_t. diff --git a/Modules/_sre.c b/Modules/_sre.c index 7ac17bfcbe7..2b764b11cad 100644 --- a/Modules/_sre.c +++ b/Modules/_sre.c @@ -67,9 +67,6 @@ static char copyright[] = /* enables fast searching */ #define USE_FAST_SEARCH -/* enables aggressive inlining (always on for Visual C) */ -#undef USE_INLINE - /* enables copy/deepcopy handling (work in progress) */ #undef USE_BUILTIN_COPY diff --git a/configure b/configure index 4dd233207e9..f94b125bbdf 100755 --- a/configure +++ b/configure @@ -638,6 +638,7 @@ SVNVERSION ARFLAGS AR RANLIB +USE_INLINE GNULD LINKCC RUNSHARED @@ -4754,6 +4755,55 @@ esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GNULD" >&5 $as_echo "$GNULD" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 +$as_echo_n "checking for inline... " >&6; } +if test "${ac_cv_c_inline+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_inline=no +for ac_kw in inline __inline__ __inline; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __cplusplus +typedef int foo_t; +static $ac_kw foo_t static_foo () {return 0; } +$ac_kw foo_t foo () {return 0; } +#endif + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_inline=$ac_kw +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + test "$ac_cv_c_inline" != no && break +done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 +$as_echo "$ac_cv_c_inline" >&6; } + +case $ac_cv_c_inline in + inline | yes) ;; + *) + case $ac_cv_c_inline in + no) ac_val=;; + *) ac_val=$ac_cv_c_inline;; + esac + cat >>confdefs.h <<_ACEOF +#ifndef __cplusplus +#define inline $ac_val +#endif +_ACEOF + ;; +esac + +if test "$ac_cv_c_inline" != no ; then + $as_echo "#define USE_INLINE 1" >>confdefs.h + + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for --enable-shared" >&5 $as_echo_n "checking for --enable-shared... " >&6; } # Check whether --enable-shared was given. diff --git a/configure.in b/configure.in index f36b28c453e..df8dc9a6cbf 100644 --- a/configure.in +++ b/configure.in @@ -660,6 +660,13 @@ case `"$ac_prog" -V 2>&1 < /dev/null` in esac AC_MSG_RESULT($GNULD) +AC_C_INLINE +if test "$ac_cv_c_inline" != no ; then + AC_DEFINE(USE_INLINE,1) + AC_SUBST(USE_INLINE) +fi + + AC_MSG_CHECKING(for --enable-shared) AC_ARG_ENABLE(shared, AS_HELP_STRING([--enable-shared], [disable/enable building shared python library])) diff --git a/pyconfig.h.in b/pyconfig.h.in index ae3f6e4e49e..27e77b62bb5 100644 --- a/pyconfig.h.in +++ b/pyconfig.h.in @@ -1043,6 +1043,9 @@ /* Define to 0 if you don't want to use computed gotos in ceval.c. */ #undef USE_COMPUTED_GOTOS +/* Define if the compiler supports the inline keyword */ +#undef USE_INLINE + /* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE