Convert MemoryContextSwitchTo() into an inline function when using GCC.

This commit is contained in:
Tom Lane 2005-02-18 21:52:34 +00:00
parent 477a64d9c8
commit a8593a3463
2 changed files with 28 additions and 2 deletions

View File

@ -14,7 +14,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/mmgr/mcxt.c,v 1.53 2004/12/31 22:02:48 pgsql Exp $ * $PostgreSQL: pgsql/src/backend/utils/mmgr/mcxt.c,v 1.54 2005/02/18 21:52:33 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -619,7 +619,13 @@ repalloc(void *pointer, Size size)
/* /*
* MemoryContextSwitchTo * MemoryContextSwitchTo
* Returns the current context; installs the given context. * Returns the current context; installs the given context.
*
* This is inlined when using GCC.
*
* TODO: investigate supporting inlining for some non-GCC compilers.
*/ */
#ifndef __GNUC__
MemoryContext MemoryContext
MemoryContextSwitchTo(MemoryContext context) MemoryContextSwitchTo(MemoryContext context)
{ {
@ -632,6 +638,8 @@ MemoryContextSwitchTo(MemoryContext context)
return old; return old;
} }
#endif /* ! __GNUC__ */
/* /*
* MemoryContextStrdup * MemoryContextStrdup
* Like strdup(), but allocate from the specified context * Like strdup(), but allocate from the specified context

View File

@ -21,7 +21,7 @@
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* $PostgreSQL: pgsql/src/include/utils/palloc.h,v 1.32 2004/12/31 22:03:46 pgsql Exp $ * $PostgreSQL: pgsql/src/include/utils/palloc.h,v 1.33 2005/02/18 21:52:34 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -70,8 +70,26 @@ extern void pfree(void *pointer);
extern void *repalloc(void *pointer, Size size); extern void *repalloc(void *pointer, Size size);
/*
* MemoryContextSwitchTo can't be a macro in standard C compilers.
* But we can make it an inline function when using GCC.
*/
#ifdef __GNUC__
static __inline__ MemoryContext
MemoryContextSwitchTo(MemoryContext context)
{
MemoryContext old = CurrentMemoryContext;
CurrentMemoryContext = context;
return old;
}
#else
extern MemoryContext MemoryContextSwitchTo(MemoryContext context); extern MemoryContext MemoryContextSwitchTo(MemoryContext context);
#endif /* __GNUC__ */
/* /*
* These are like standard strdup() except the copied string is * These are like standard strdup() except the copied string is
* allocated in a context, not with malloc(). * allocated in a context, not with malloc().