for non-i386 and non-alpha, or non gcc, implement BREAKPOINT() as raise (5

Mon Aug 21 03:57:46 2000  Tim Janik  <timj@gtk.org>

        * glib.h (G_BREAKPOINT): for non-i386 and non-alpha, or non gcc,
        implement BREAKPOINT() as raise (5 /* SIGTRAP */);

        * glib.h: provide user-definable switch G_IMPLEMENT_INLINES,
        to turn on compilation of inline function implementations provided
        in header files with extern linkage.
        wrap inline function implementations into ifdef __G_UTILS_C__, so we
        really only compile them for gutils.c and not also into arbitrary user
        code that wants to make use of G_IMPLEMENT_INLINES.
        adjusted comment apropriately.

        * gutils.c: to turn on compilation of inline functions, provide
        #define G_IMPLEMENT_INLINES 1 and #define __G_UTILS_C__.
This commit is contained in:
Tim Janik 2000-09-07 23:08:25 +00:00 committed by Tim Janik
parent a5c0df554e
commit 9432265430
14 changed files with 262 additions and 140 deletions

View File

@ -1,3 +1,19 @@
Mon Aug 21 03:57:46 2000 Tim Janik <timj@gtk.org>
* glib.h (G_BREAKPOINT): for non-i386 and non-alpha, or non gcc,
implement BREAKPOINT() as raise (5 /* SIGTRAP */);
* glib.h: provide user-definable switch G_IMPLEMENT_INLINES,
to turn on compilation of inline function implementations provided
in header files with extern linkage.
wrap inline function implementations into ifdef __G_UTILS_C__, so we
really only compile them for gutils.c and not also into arbitrary user
code that wants to make use of G_IMPLEMENT_INLINES.
adjusted comment apropriately.
* gutils.c: to turn on compilation of inline functions, provide
#define G_IMPLEMENT_INLINES 1 and #define __G_UTILS_C__.
2000-09-06 Havoc Pennington <hp@redhat.com> 2000-09-06 Havoc Pennington <hp@redhat.com>
* gerror.c: docs * gerror.c: docs
@ -75,6 +91,7 @@ Tue Sep 5 20:16:27 2000 Owen Taylor <otaylor@redhat.com>
from FormatMessage. from FormatMessage.
2000-08-25 Elliot Lee <sopwith@redhat.com> 2000-08-25 Elliot Lee <sopwith@redhat.com>
* glib.h, gunicode.h, gmodule/gmodule.h: * glib.h, gunicode.h, gmodule/gmodule.h:
: Mark the following functions G_GNUC_CONST (to allow : Mark the following functions G_GNUC_CONST (to allow
optimization) because their results are a function of only their parameters: optimization) because their results are a function of only their parameters:
@ -84,6 +101,7 @@ Tue Sep 5 20:16:27 2000 Owen Taylor <otaylor@redhat.com>
g_unichar_to*, g_unichar_*digit_value, g_unichar_type g_unichar_to*, g_unichar_*digit_value, g_unichar_type
2000-08-21 Elliot Lee <sopwith@redhat.com> 2000-08-21 Elliot Lee <sopwith@redhat.com>
* gobject/Makefile.am, gobject/gobject-query.c, gobject/gparamspecs.c: Fix inclusion of * gobject/Makefile.am, gobject/gobject-query.c, gobject/gparamspecs.c: Fix inclusion of
config.h config.h

View File

@ -1,3 +1,19 @@
Mon Aug 21 03:57:46 2000 Tim Janik <timj@gtk.org>
* glib.h (G_BREAKPOINT): for non-i386 and non-alpha, or non gcc,
implement BREAKPOINT() as raise (5 /* SIGTRAP */);
* glib.h: provide user-definable switch G_IMPLEMENT_INLINES,
to turn on compilation of inline function implementations provided
in header files with extern linkage.
wrap inline function implementations into ifdef __G_UTILS_C__, so we
really only compile them for gutils.c and not also into arbitrary user
code that wants to make use of G_IMPLEMENT_INLINES.
adjusted comment apropriately.
* gutils.c: to turn on compilation of inline functions, provide
#define G_IMPLEMENT_INLINES 1 and #define __G_UTILS_C__.
2000-09-06 Havoc Pennington <hp@redhat.com> 2000-09-06 Havoc Pennington <hp@redhat.com>
* gerror.c: docs * gerror.c: docs
@ -75,6 +91,7 @@ Tue Sep 5 20:16:27 2000 Owen Taylor <otaylor@redhat.com>
from FormatMessage. from FormatMessage.
2000-08-25 Elliot Lee <sopwith@redhat.com> 2000-08-25 Elliot Lee <sopwith@redhat.com>
* glib.h, gunicode.h, gmodule/gmodule.h: * glib.h, gunicode.h, gmodule/gmodule.h:
: Mark the following functions G_GNUC_CONST (to allow : Mark the following functions G_GNUC_CONST (to allow
optimization) because their results are a function of only their parameters: optimization) because their results are a function of only their parameters:
@ -84,6 +101,7 @@ Tue Sep 5 20:16:27 2000 Owen Taylor <otaylor@redhat.com>
g_unichar_to*, g_unichar_*digit_value, g_unichar_type g_unichar_to*, g_unichar_*digit_value, g_unichar_type
2000-08-21 Elliot Lee <sopwith@redhat.com> 2000-08-21 Elliot Lee <sopwith@redhat.com>
* gobject/Makefile.am, gobject/gobject-query.c, gobject/gparamspecs.c: Fix inclusion of * gobject/Makefile.am, gobject/gobject-query.c, gobject/gparamspecs.c: Fix inclusion of
config.h config.h

View File

@ -1,3 +1,19 @@
Mon Aug 21 03:57:46 2000 Tim Janik <timj@gtk.org>
* glib.h (G_BREAKPOINT): for non-i386 and non-alpha, or non gcc,
implement BREAKPOINT() as raise (5 /* SIGTRAP */);
* glib.h: provide user-definable switch G_IMPLEMENT_INLINES,
to turn on compilation of inline function implementations provided
in header files with extern linkage.
wrap inline function implementations into ifdef __G_UTILS_C__, so we
really only compile them for gutils.c and not also into arbitrary user
code that wants to make use of G_IMPLEMENT_INLINES.
adjusted comment apropriately.
* gutils.c: to turn on compilation of inline functions, provide
#define G_IMPLEMENT_INLINES 1 and #define __G_UTILS_C__.
2000-09-06 Havoc Pennington <hp@redhat.com> 2000-09-06 Havoc Pennington <hp@redhat.com>
* gerror.c: docs * gerror.c: docs
@ -75,6 +91,7 @@ Tue Sep 5 20:16:27 2000 Owen Taylor <otaylor@redhat.com>
from FormatMessage. from FormatMessage.
2000-08-25 Elliot Lee <sopwith@redhat.com> 2000-08-25 Elliot Lee <sopwith@redhat.com>
* glib.h, gunicode.h, gmodule/gmodule.h: * glib.h, gunicode.h, gmodule/gmodule.h:
: Mark the following functions G_GNUC_CONST (to allow : Mark the following functions G_GNUC_CONST (to allow
optimization) because their results are a function of only their parameters: optimization) because their results are a function of only their parameters:
@ -84,6 +101,7 @@ Tue Sep 5 20:16:27 2000 Owen Taylor <otaylor@redhat.com>
g_unichar_to*, g_unichar_*digit_value, g_unichar_type g_unichar_to*, g_unichar_*digit_value, g_unichar_type
2000-08-21 Elliot Lee <sopwith@redhat.com> 2000-08-21 Elliot Lee <sopwith@redhat.com>
* gobject/Makefile.am, gobject/gobject-query.c, gobject/gparamspecs.c: Fix inclusion of * gobject/Makefile.am, gobject/gobject-query.c, gobject/gparamspecs.c: Fix inclusion of
config.h config.h

View File

@ -1,3 +1,19 @@
Mon Aug 21 03:57:46 2000 Tim Janik <timj@gtk.org>
* glib.h (G_BREAKPOINT): for non-i386 and non-alpha, or non gcc,
implement BREAKPOINT() as raise (5 /* SIGTRAP */);
* glib.h: provide user-definable switch G_IMPLEMENT_INLINES,
to turn on compilation of inline function implementations provided
in header files with extern linkage.
wrap inline function implementations into ifdef __G_UTILS_C__, so we
really only compile them for gutils.c and not also into arbitrary user
code that wants to make use of G_IMPLEMENT_INLINES.
adjusted comment apropriately.
* gutils.c: to turn on compilation of inline functions, provide
#define G_IMPLEMENT_INLINES 1 and #define __G_UTILS_C__.
2000-09-06 Havoc Pennington <hp@redhat.com> 2000-09-06 Havoc Pennington <hp@redhat.com>
* gerror.c: docs * gerror.c: docs
@ -75,6 +91,7 @@ Tue Sep 5 20:16:27 2000 Owen Taylor <otaylor@redhat.com>
from FormatMessage. from FormatMessage.
2000-08-25 Elliot Lee <sopwith@redhat.com> 2000-08-25 Elliot Lee <sopwith@redhat.com>
* glib.h, gunicode.h, gmodule/gmodule.h: * glib.h, gunicode.h, gmodule/gmodule.h:
: Mark the following functions G_GNUC_CONST (to allow : Mark the following functions G_GNUC_CONST (to allow
optimization) because their results are a function of only their parameters: optimization) because their results are a function of only their parameters:
@ -84,6 +101,7 @@ Tue Sep 5 20:16:27 2000 Owen Taylor <otaylor@redhat.com>
g_unichar_to*, g_unichar_*digit_value, g_unichar_type g_unichar_to*, g_unichar_*digit_value, g_unichar_type
2000-08-21 Elliot Lee <sopwith@redhat.com> 2000-08-21 Elliot Lee <sopwith@redhat.com>
* gobject/Makefile.am, gobject/gobject-query.c, gobject/gparamspecs.c: Fix inclusion of * gobject/Makefile.am, gobject/gobject-query.c, gobject/gparamspecs.c: Fix inclusion of
config.h config.h

View File

@ -1,3 +1,19 @@
Mon Aug 21 03:57:46 2000 Tim Janik <timj@gtk.org>
* glib.h (G_BREAKPOINT): for non-i386 and non-alpha, or non gcc,
implement BREAKPOINT() as raise (5 /* SIGTRAP */);
* glib.h: provide user-definable switch G_IMPLEMENT_INLINES,
to turn on compilation of inline function implementations provided
in header files with extern linkage.
wrap inline function implementations into ifdef __G_UTILS_C__, so we
really only compile them for gutils.c and not also into arbitrary user
code that wants to make use of G_IMPLEMENT_INLINES.
adjusted comment apropriately.
* gutils.c: to turn on compilation of inline functions, provide
#define G_IMPLEMENT_INLINES 1 and #define __G_UTILS_C__.
2000-09-06 Havoc Pennington <hp@redhat.com> 2000-09-06 Havoc Pennington <hp@redhat.com>
* gerror.c: docs * gerror.c: docs
@ -75,6 +91,7 @@ Tue Sep 5 20:16:27 2000 Owen Taylor <otaylor@redhat.com>
from FormatMessage. from FormatMessage.
2000-08-25 Elliot Lee <sopwith@redhat.com> 2000-08-25 Elliot Lee <sopwith@redhat.com>
* glib.h, gunicode.h, gmodule/gmodule.h: * glib.h, gunicode.h, gmodule/gmodule.h:
: Mark the following functions G_GNUC_CONST (to allow : Mark the following functions G_GNUC_CONST (to allow
optimization) because their results are a function of only their parameters: optimization) because their results are a function of only their parameters:
@ -84,6 +101,7 @@ Tue Sep 5 20:16:27 2000 Owen Taylor <otaylor@redhat.com>
g_unichar_to*, g_unichar_*digit_value, g_unichar_type g_unichar_to*, g_unichar_*digit_value, g_unichar_type
2000-08-21 Elliot Lee <sopwith@redhat.com> 2000-08-21 Elliot Lee <sopwith@redhat.com>
* gobject/Makefile.am, gobject/gobject-query.c, gobject/gparamspecs.c: Fix inclusion of * gobject/Makefile.am, gobject/gobject-query.c, gobject/gparamspecs.c: Fix inclusion of
config.h config.h

View File

@ -1,3 +1,19 @@
Mon Aug 21 03:57:46 2000 Tim Janik <timj@gtk.org>
* glib.h (G_BREAKPOINT): for non-i386 and non-alpha, or non gcc,
implement BREAKPOINT() as raise (5 /* SIGTRAP */);
* glib.h: provide user-definable switch G_IMPLEMENT_INLINES,
to turn on compilation of inline function implementations provided
in header files with extern linkage.
wrap inline function implementations into ifdef __G_UTILS_C__, so we
really only compile them for gutils.c and not also into arbitrary user
code that wants to make use of G_IMPLEMENT_INLINES.
adjusted comment apropriately.
* gutils.c: to turn on compilation of inline functions, provide
#define G_IMPLEMENT_INLINES 1 and #define __G_UTILS_C__.
2000-09-06 Havoc Pennington <hp@redhat.com> 2000-09-06 Havoc Pennington <hp@redhat.com>
* gerror.c: docs * gerror.c: docs
@ -75,6 +91,7 @@ Tue Sep 5 20:16:27 2000 Owen Taylor <otaylor@redhat.com>
from FormatMessage. from FormatMessage.
2000-08-25 Elliot Lee <sopwith@redhat.com> 2000-08-25 Elliot Lee <sopwith@redhat.com>
* glib.h, gunicode.h, gmodule/gmodule.h: * glib.h, gunicode.h, gmodule/gmodule.h:
: Mark the following functions G_GNUC_CONST (to allow : Mark the following functions G_GNUC_CONST (to allow
optimization) because their results are a function of only their parameters: optimization) because their results are a function of only their parameters:
@ -84,6 +101,7 @@ Tue Sep 5 20:16:27 2000 Owen Taylor <otaylor@redhat.com>
g_unichar_to*, g_unichar_*digit_value, g_unichar_type g_unichar_to*, g_unichar_*digit_value, g_unichar_type
2000-08-21 Elliot Lee <sopwith@redhat.com> 2000-08-21 Elliot Lee <sopwith@redhat.com>
* gobject/Makefile.am, gobject/gobject-query.c, gobject/gparamspecs.c: Fix inclusion of * gobject/Makefile.am, gobject/gobject-query.c, gobject/gparamspecs.c: Fix inclusion of
config.h config.h

View File

@ -1,3 +1,19 @@
Mon Aug 21 03:57:46 2000 Tim Janik <timj@gtk.org>
* glib.h (G_BREAKPOINT): for non-i386 and non-alpha, or non gcc,
implement BREAKPOINT() as raise (5 /* SIGTRAP */);
* glib.h: provide user-definable switch G_IMPLEMENT_INLINES,
to turn on compilation of inline function implementations provided
in header files with extern linkage.
wrap inline function implementations into ifdef __G_UTILS_C__, so we
really only compile them for gutils.c and not also into arbitrary user
code that wants to make use of G_IMPLEMENT_INLINES.
adjusted comment apropriately.
* gutils.c: to turn on compilation of inline functions, provide
#define G_IMPLEMENT_INLINES 1 and #define __G_UTILS_C__.
2000-09-06 Havoc Pennington <hp@redhat.com> 2000-09-06 Havoc Pennington <hp@redhat.com>
* gerror.c: docs * gerror.c: docs
@ -75,6 +91,7 @@ Tue Sep 5 20:16:27 2000 Owen Taylor <otaylor@redhat.com>
from FormatMessage. from FormatMessage.
2000-08-25 Elliot Lee <sopwith@redhat.com> 2000-08-25 Elliot Lee <sopwith@redhat.com>
* glib.h, gunicode.h, gmodule/gmodule.h: * glib.h, gunicode.h, gmodule/gmodule.h:
: Mark the following functions G_GNUC_CONST (to allow : Mark the following functions G_GNUC_CONST (to allow
optimization) because their results are a function of only their parameters: optimization) because their results are a function of only their parameters:
@ -84,6 +101,7 @@ Tue Sep 5 20:16:27 2000 Owen Taylor <otaylor@redhat.com>
g_unichar_to*, g_unichar_*digit_value, g_unichar_type g_unichar_to*, g_unichar_*digit_value, g_unichar_type
2000-08-21 Elliot Lee <sopwith@redhat.com> 2000-08-21 Elliot Lee <sopwith@redhat.com>
* gobject/Makefile.am, gobject/gobject-query.c, gobject/gparamspecs.c: Fix inclusion of * gobject/Makefile.am, gobject/gobject-query.c, gobject/gparamspecs.c: Fix inclusion of
config.h config.h

View File

@ -1,3 +1,19 @@
Mon Aug 21 03:57:46 2000 Tim Janik <timj@gtk.org>
* glib.h (G_BREAKPOINT): for non-i386 and non-alpha, or non gcc,
implement BREAKPOINT() as raise (5 /* SIGTRAP */);
* glib.h: provide user-definable switch G_IMPLEMENT_INLINES,
to turn on compilation of inline function implementations provided
in header files with extern linkage.
wrap inline function implementations into ifdef __G_UTILS_C__, so we
really only compile them for gutils.c and not also into arbitrary user
code that wants to make use of G_IMPLEMENT_INLINES.
adjusted comment apropriately.
* gutils.c: to turn on compilation of inline functions, provide
#define G_IMPLEMENT_INLINES 1 and #define __G_UTILS_C__.
2000-09-06 Havoc Pennington <hp@redhat.com> 2000-09-06 Havoc Pennington <hp@redhat.com>
* gerror.c: docs * gerror.c: docs
@ -75,6 +91,7 @@ Tue Sep 5 20:16:27 2000 Owen Taylor <otaylor@redhat.com>
from FormatMessage. from FormatMessage.
2000-08-25 Elliot Lee <sopwith@redhat.com> 2000-08-25 Elliot Lee <sopwith@redhat.com>
* glib.h, gunicode.h, gmodule/gmodule.h: * glib.h, gunicode.h, gmodule/gmodule.h:
: Mark the following functions G_GNUC_CONST (to allow : Mark the following functions G_GNUC_CONST (to allow
optimization) because their results are a function of only their parameters: optimization) because their results are a function of only their parameters:
@ -84,6 +101,7 @@ Tue Sep 5 20:16:27 2000 Owen Taylor <otaylor@redhat.com>
g_unichar_to*, g_unichar_*digit_value, g_unichar_type g_unichar_to*, g_unichar_*digit_value, g_unichar_type
2000-08-21 Elliot Lee <sopwith@redhat.com> 2000-08-21 Elliot Lee <sopwith@redhat.com>
* gobject/Makefile.am, gobject/gobject-query.c, gobject/gparamspecs.c: Fix inclusion of * gobject/Makefile.am, gobject/gobject-query.c, gobject/gparamspecs.c: Fix inclusion of
config.h config.h

86
glib.h
View File

@ -205,23 +205,25 @@ extern "C" {
* *capable* to do function inlining, in which case inline function bodys * *capable* to do function inlining, in which case inline function bodys
* do make sense. we also define G_INLINE_FUNC to properly export the * do make sense. we also define G_INLINE_FUNC to properly export the
* function prototypes if no inlining can be performed. * function prototypes if no inlining can be performed.
* we special case most of the stuff, so inline functions can have a normal * inline function bodies have to be special cased with G_CAN_INLINE and a
* implementation by defining G_INLINE_FUNC to extern and G_CAN_INLINE to 1. * .c file specific macro to allow one compiled instance with extern linkage
* of the functions by defining G_IMPLEMENT_INLINES and the .c file macro.
*/ */
#ifdef G_IMPLEMENT_INLINES
# define G_INLINE_FUNC extern
# undef G_CAN_INLINE
#endif
#ifndef G_INLINE_FUNC #ifndef G_INLINE_FUNC
# define G_CAN_INLINE 1 # define G_CAN_INLINE 1
#endif #endif
#ifdef G_HAVE_INLINE #if defined (G_HAVE_INLINE) && defined (__GNUC__) && defined (__STRICT_ANSI__)
# if defined (__GNUC__) && defined (__STRICT_ANSI__)
# undef inline # undef inline
# define inline __inline__ # define inline __inline__
# endif #elif !defined (G_HAVE_INLINE)
#else /* !G_HAVE_INLINE */
# undef inline # undef inline
# if defined (G_HAVE___INLINE__) # if defined (G_HAVE___INLINE__)
# define inline __inline__ # define inline __inline__
# else /* !inline && !__inline__ */ # elif defined (G_HAVE___INLINE)
# if defined (G_HAVE___INLINE)
# define inline __inline # define inline __inline
# else /* !inline && !__inline__ && !__inline */ # else /* !inline && !__inline__ && !__inline */
# define inline /* don't inline, then */ # define inline /* don't inline, then */
@ -230,22 +232,15 @@ extern "C" {
# endif # endif
# endif # endif
#endif #endif
#endif
#ifndef G_INLINE_FUNC #ifndef G_INLINE_FUNC
# ifdef __GNUC__ # if defined (__GNUC__) && (__OPTIMIZE__)
# ifdef __OPTIMIZE__
# define G_INLINE_FUNC extern inline # define G_INLINE_FUNC extern inline
# else # elif defined (G_CAN_INLINE) && !defined (__GNUC__)
# undef G_CAN_INLINE
# define G_INLINE_FUNC extern
# endif
# else /* !__GNUC__ */
# ifdef G_CAN_INLINE
# define G_INLINE_FUNC static inline # define G_INLINE_FUNC static inline
# else # else /* can't inline */
# define G_INLINE_FUNC extern # define G_INLINE_FUNC extern
# undef G_CAN_INLINE
# endif # endif
# endif /* !__GNUC__ */
#endif /* !G_INLINE_FUNC */ #endif /* !G_INLINE_FUNC */
@ -327,7 +322,7 @@ extern "C" {
#elif defined (__alpha__) && defined (__GNUC__) && __GNUC__ >= 2 #elif defined (__alpha__) && defined (__GNUC__) && __GNUC__ >= 2
# define G_BREAKPOINT() G_STMT_START{ __asm__ __volatile__ ("bpt"); }G_STMT_END # define G_BREAKPOINT() G_STMT_START{ __asm__ __volatile__ ("bpt"); }G_STMT_END
#else /* !__i386__ && !__alpha__ */ #else /* !__i386__ && !__alpha__ */
#define G_BREAKPOINT() # define G_BREAKPOINT() G_STMT_START{ raise (5 /* SIGTRAP */); }G_STMT_END
#endif /* __i386__ */ #endif /* __i386__ */
@ -1806,7 +1801,24 @@ void g_atexit (GVoidFunc func);
*/ */
G_INLINE_FUNC gint g_bit_nth_lsf (guint32 mask, G_INLINE_FUNC gint g_bit_nth_lsf (guint32 mask,
gint nth_bit); gint nth_bit);
#ifdef G_CAN_INLINE G_INLINE_FUNC gint g_bit_nth_msf (guint32 mask,
gint nth_bit);
G_INLINE_FUNC guint g_bit_storage (guint number);
/* Trash Stacks
* elements need to be >= sizeof (gpointer)
*/
G_INLINE_FUNC void g_trash_stack_push (GTrashStack **stack_p,
gpointer data_p);
G_INLINE_FUNC gpointer g_trash_stack_pop (GTrashStack **stack_p);
G_INLINE_FUNC gpointer g_trash_stack_peek (GTrashStack **stack_p);
G_INLINE_FUNC guint g_trash_stack_height (GTrashStack **stack_p);
/* inline function implementations
*/
#if defined (G_CAN_INLINE) || defined (__G_UTILS_C__)
G_INLINE_FUNC gint G_INLINE_FUNC gint
g_bit_nth_lsf (guint32 mask, g_bit_nth_lsf (guint32 mask,
gint nth_bit) gint nth_bit)
@ -1820,11 +1832,6 @@ g_bit_nth_lsf (guint32 mask,
while (nth_bit < 32); while (nth_bit < 32);
return -1; return -1;
} }
#endif /* G_CAN_INLINE */
G_INLINE_FUNC gint g_bit_nth_msf (guint32 mask,
gint nth_bit);
#ifdef G_CAN_INLINE
G_INLINE_FUNC gint G_INLINE_FUNC gint
g_bit_nth_msf (guint32 mask, g_bit_nth_msf (guint32 mask,
gint nth_bit) gint nth_bit)
@ -1840,10 +1847,6 @@ g_bit_nth_msf (guint32 mask,
while (nth_bit > 0); while (nth_bit > 0);
return -1; return -1;
} }
#endif /* G_CAN_INLINE */
G_INLINE_FUNC guint g_bit_storage (guint number);
#ifdef G_CAN_INLINE
G_INLINE_FUNC guint G_INLINE_FUNC guint
g_bit_storage (guint number) g_bit_storage (guint number)
{ {
@ -1857,15 +1860,6 @@ g_bit_storage (guint number)
while (number); while (number);
return n_bits; return n_bits;
} }
#endif /* G_CAN_INLINE */
/* Trash Stacks
* elements need to be >= sizeof (gpointer)
*/
G_INLINE_FUNC void g_trash_stack_push (GTrashStack **stack_p,
gpointer data_p);
#ifdef G_CAN_INLINE
G_INLINE_FUNC void G_INLINE_FUNC void
g_trash_stack_push (GTrashStack **stack_p, g_trash_stack_push (GTrashStack **stack_p,
gpointer data_p) gpointer data_p)
@ -1875,10 +1869,6 @@ g_trash_stack_push (GTrashStack **stack_p,
data->next = *stack_p; data->next = *stack_p;
*stack_p = data; *stack_p = data;
} }
#endif /* G_CAN_INLINE */
G_INLINE_FUNC gpointer g_trash_stack_pop (GTrashStack **stack_p);
#ifdef G_CAN_INLINE
G_INLINE_FUNC gpointer G_INLINE_FUNC gpointer
g_trash_stack_pop (GTrashStack **stack_p) g_trash_stack_pop (GTrashStack **stack_p)
{ {
@ -1896,10 +1886,6 @@ g_trash_stack_pop (GTrashStack **stack_p)
return data; return data;
} }
#endif /* G_CAN_INLINE */
G_INLINE_FUNC gpointer g_trash_stack_peek (GTrashStack **stack_p);
#ifdef G_CAN_INLINE
G_INLINE_FUNC gpointer G_INLINE_FUNC gpointer
g_trash_stack_peek (GTrashStack **stack_p) g_trash_stack_peek (GTrashStack **stack_p)
{ {
@ -1909,10 +1895,6 @@ g_trash_stack_peek (GTrashStack **stack_p)
return data; return data;
} }
#endif /* G_CAN_INLINE */
G_INLINE_FUNC guint g_trash_stack_height (GTrashStack **stack_p);
#ifdef G_CAN_INLINE
G_INLINE_FUNC guint G_INLINE_FUNC guint
g_trash_stack_height (GTrashStack **stack_p) g_trash_stack_height (GTrashStack **stack_p)
{ {
@ -1924,7 +1906,7 @@ g_trash_stack_height (GTrashStack **stack_p)
return i; return i;
} }
#endif /* G_CAN_INLINE */ #endif /* G_CAN_INLINE || __G_UTILS_C__ */
/* String Chunks /* String Chunks

View File

@ -205,23 +205,25 @@ extern "C" {
* *capable* to do function inlining, in which case inline function bodys * *capable* to do function inlining, in which case inline function bodys
* do make sense. we also define G_INLINE_FUNC to properly export the * do make sense. we also define G_INLINE_FUNC to properly export the
* function prototypes if no inlining can be performed. * function prototypes if no inlining can be performed.
* we special case most of the stuff, so inline functions can have a normal * inline function bodies have to be special cased with G_CAN_INLINE and a
* implementation by defining G_INLINE_FUNC to extern and G_CAN_INLINE to 1. * .c file specific macro to allow one compiled instance with extern linkage
* of the functions by defining G_IMPLEMENT_INLINES and the .c file macro.
*/ */
#ifdef G_IMPLEMENT_INLINES
# define G_INLINE_FUNC extern
# undef G_CAN_INLINE
#endif
#ifndef G_INLINE_FUNC #ifndef G_INLINE_FUNC
# define G_CAN_INLINE 1 # define G_CAN_INLINE 1
#endif #endif
#ifdef G_HAVE_INLINE #if defined (G_HAVE_INLINE) && defined (__GNUC__) && defined (__STRICT_ANSI__)
# if defined (__GNUC__) && defined (__STRICT_ANSI__)
# undef inline # undef inline
# define inline __inline__ # define inline __inline__
# endif #elif !defined (G_HAVE_INLINE)
#else /* !G_HAVE_INLINE */
# undef inline # undef inline
# if defined (G_HAVE___INLINE__) # if defined (G_HAVE___INLINE__)
# define inline __inline__ # define inline __inline__
# else /* !inline && !__inline__ */ # elif defined (G_HAVE___INLINE)
# if defined (G_HAVE___INLINE)
# define inline __inline # define inline __inline
# else /* !inline && !__inline__ && !__inline */ # else /* !inline && !__inline__ && !__inline */
# define inline /* don't inline, then */ # define inline /* don't inline, then */
@ -230,22 +232,15 @@ extern "C" {
# endif # endif
# endif # endif
#endif #endif
#endif
#ifndef G_INLINE_FUNC #ifndef G_INLINE_FUNC
# ifdef __GNUC__ # if defined (__GNUC__) && (__OPTIMIZE__)
# ifdef __OPTIMIZE__
# define G_INLINE_FUNC extern inline # define G_INLINE_FUNC extern inline
# else # elif defined (G_CAN_INLINE) && !defined (__GNUC__)
# undef G_CAN_INLINE
# define G_INLINE_FUNC extern
# endif
# else /* !__GNUC__ */
# ifdef G_CAN_INLINE
# define G_INLINE_FUNC static inline # define G_INLINE_FUNC static inline
# else # else /* can't inline */
# define G_INLINE_FUNC extern # define G_INLINE_FUNC extern
# undef G_CAN_INLINE
# endif # endif
# endif /* !__GNUC__ */
#endif /* !G_INLINE_FUNC */ #endif /* !G_INLINE_FUNC */
@ -327,7 +322,7 @@ extern "C" {
#elif defined (__alpha__) && defined (__GNUC__) && __GNUC__ >= 2 #elif defined (__alpha__) && defined (__GNUC__) && __GNUC__ >= 2
# define G_BREAKPOINT() G_STMT_START{ __asm__ __volatile__ ("bpt"); }G_STMT_END # define G_BREAKPOINT() G_STMT_START{ __asm__ __volatile__ ("bpt"); }G_STMT_END
#else /* !__i386__ && !__alpha__ */ #else /* !__i386__ && !__alpha__ */
#define G_BREAKPOINT() # define G_BREAKPOINT() G_STMT_START{ raise (5 /* SIGTRAP */); }G_STMT_END
#endif /* __i386__ */ #endif /* __i386__ */
@ -1806,7 +1801,24 @@ void g_atexit (GVoidFunc func);
*/ */
G_INLINE_FUNC gint g_bit_nth_lsf (guint32 mask, G_INLINE_FUNC gint g_bit_nth_lsf (guint32 mask,
gint nth_bit); gint nth_bit);
#ifdef G_CAN_INLINE G_INLINE_FUNC gint g_bit_nth_msf (guint32 mask,
gint nth_bit);
G_INLINE_FUNC guint g_bit_storage (guint number);
/* Trash Stacks
* elements need to be >= sizeof (gpointer)
*/
G_INLINE_FUNC void g_trash_stack_push (GTrashStack **stack_p,
gpointer data_p);
G_INLINE_FUNC gpointer g_trash_stack_pop (GTrashStack **stack_p);
G_INLINE_FUNC gpointer g_trash_stack_peek (GTrashStack **stack_p);
G_INLINE_FUNC guint g_trash_stack_height (GTrashStack **stack_p);
/* inline function implementations
*/
#if defined (G_CAN_INLINE) || defined (__G_UTILS_C__)
G_INLINE_FUNC gint G_INLINE_FUNC gint
g_bit_nth_lsf (guint32 mask, g_bit_nth_lsf (guint32 mask,
gint nth_bit) gint nth_bit)
@ -1820,11 +1832,6 @@ g_bit_nth_lsf (guint32 mask,
while (nth_bit < 32); while (nth_bit < 32);
return -1; return -1;
} }
#endif /* G_CAN_INLINE */
G_INLINE_FUNC gint g_bit_nth_msf (guint32 mask,
gint nth_bit);
#ifdef G_CAN_INLINE
G_INLINE_FUNC gint G_INLINE_FUNC gint
g_bit_nth_msf (guint32 mask, g_bit_nth_msf (guint32 mask,
gint nth_bit) gint nth_bit)
@ -1840,10 +1847,6 @@ g_bit_nth_msf (guint32 mask,
while (nth_bit > 0); while (nth_bit > 0);
return -1; return -1;
} }
#endif /* G_CAN_INLINE */
G_INLINE_FUNC guint g_bit_storage (guint number);
#ifdef G_CAN_INLINE
G_INLINE_FUNC guint G_INLINE_FUNC guint
g_bit_storage (guint number) g_bit_storage (guint number)
{ {
@ -1857,15 +1860,6 @@ g_bit_storage (guint number)
while (number); while (number);
return n_bits; return n_bits;
} }
#endif /* G_CAN_INLINE */
/* Trash Stacks
* elements need to be >= sizeof (gpointer)
*/
G_INLINE_FUNC void g_trash_stack_push (GTrashStack **stack_p,
gpointer data_p);
#ifdef G_CAN_INLINE
G_INLINE_FUNC void G_INLINE_FUNC void
g_trash_stack_push (GTrashStack **stack_p, g_trash_stack_push (GTrashStack **stack_p,
gpointer data_p) gpointer data_p)
@ -1875,10 +1869,6 @@ g_trash_stack_push (GTrashStack **stack_p,
data->next = *stack_p; data->next = *stack_p;
*stack_p = data; *stack_p = data;
} }
#endif /* G_CAN_INLINE */
G_INLINE_FUNC gpointer g_trash_stack_pop (GTrashStack **stack_p);
#ifdef G_CAN_INLINE
G_INLINE_FUNC gpointer G_INLINE_FUNC gpointer
g_trash_stack_pop (GTrashStack **stack_p) g_trash_stack_pop (GTrashStack **stack_p)
{ {
@ -1896,10 +1886,6 @@ g_trash_stack_pop (GTrashStack **stack_p)
return data; return data;
} }
#endif /* G_CAN_INLINE */
G_INLINE_FUNC gpointer g_trash_stack_peek (GTrashStack **stack_p);
#ifdef G_CAN_INLINE
G_INLINE_FUNC gpointer G_INLINE_FUNC gpointer
g_trash_stack_peek (GTrashStack **stack_p) g_trash_stack_peek (GTrashStack **stack_p)
{ {
@ -1909,10 +1895,6 @@ g_trash_stack_peek (GTrashStack **stack_p)
return data; return data;
} }
#endif /* G_CAN_INLINE */
G_INLINE_FUNC guint g_trash_stack_height (GTrashStack **stack_p);
#ifdef G_CAN_INLINE
G_INLINE_FUNC guint G_INLINE_FUNC guint
g_trash_stack_height (GTrashStack **stack_p) g_trash_stack_height (GTrashStack **stack_p)
{ {
@ -1924,7 +1906,7 @@ g_trash_stack_height (GTrashStack **stack_p)
return i; return i;
} }
#endif /* G_CAN_INLINE */ #endif /* G_CAN_INLINE || __G_UTILS_C__ */
/* String Chunks /* String Chunks

View File

@ -50,8 +50,8 @@
/* implement Glib's inline functions /* implement Glib's inline functions
*/ */
#define G_INLINE_FUNC extern #define G_IMPLEMENT_INLINES 1
#define G_CAN_INLINE 1 #define __G_UTILS_C__
#include "glib.h" #include "glib.h"
#ifdef MAXPATHLEN #ifdef MAXPATHLEN

View File

@ -50,8 +50,8 @@
/* implement Glib's inline functions /* implement Glib's inline functions
*/ */
#define G_INLINE_FUNC extern #define G_IMPLEMENT_INLINES 1
#define G_CAN_INLINE 1 #define __G_UTILS_C__
#include "glib.h" #include "glib.h"
#ifdef MAXPATHLEN #ifdef MAXPATHLEN

View File

@ -828,6 +828,13 @@ main (int argc,
g_string_free (string1, TRUE); g_string_free (string1, TRUE);
g_string_free (string2, TRUE); g_string_free (string2, TRUE);
g_print ("test positional printf formats (not supported): ");
string = g_strdup_printf ("%.*s%s", 5, "a", "b");
tmp_string = g_strdup_printf ("%2$*1$s", 5, "c");
g_print ("%s%s\n", string, tmp_string);
g_free (tmp_string);
g_free (string);
g_print ("checking timers...\n"); g_print ("checking timers...\n");
timer = g_timer_new (); timer = g_timer_new ();

View File

@ -828,6 +828,13 @@ main (int argc,
g_string_free (string1, TRUE); g_string_free (string1, TRUE);
g_string_free (string2, TRUE); g_string_free (string2, TRUE);
g_print ("test positional printf formats (not supported): ");
string = g_strdup_printf ("%.*s%s", 5, "a", "b");
tmp_string = g_strdup_printf ("%2$*1$s", 5, "c");
g_print ("%s%s\n", string, tmp_string);
g_free (tmp_string);
g_free (string);
g_print ("checking timers...\n"); g_print ("checking timers...\n");
timer = g_timer_new (); timer = g_timer_new ();