From be4560a3b5e8599cbe2b29a01a60c21c9e2b194f Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Tue, 5 Jun 2012 18:14:03 -0400 Subject: [PATCH] Undo default unicode-funcs to avoid static initializer again --- src/hb-buffer.cc | 2 +- src/hb-glib.cc | 25 +++++++++++++------------ src/hb-icu.cc | 26 ++++++++++++++------------ src/hb-unicode-private.hh | 10 +++++----- src/hb-unicode.cc | 28 +++++++++++++++------------- 5 files changed, 48 insertions(+), 43 deletions(-) diff --git a/src/hb-buffer.cc b/src/hb-buffer.cc index 144a68cdb..20de022c6 100644 --- a/src/hb-buffer.cc +++ b/src/hb-buffer.cc @@ -37,7 +37,7 @@ #define HB_DEBUG_BUFFER (HB_DEBUG+0) #endif -#define _HB_BUFFER_UNICODE_FUNCS_DEFAULT _hb_unicode_funcs_default +#define _HB_BUFFER_UNICODE_FUNCS_DEFAULT (const_cast (&_hb_unicode_funcs_default)) #define _HB_BUFFER_PROPS_DEFAULT { HB_DIRECTION_INVALID, HB_SCRIPT_INVALID, HB_LANGUAGE_INVALID } /* Here is how the buffer works internally: diff --git a/src/hb-glib.cc b/src/hb-glib.cc index 33369b2c5..60f525908 100644 --- a/src/hb-glib.cc +++ b/src/hb-glib.cc @@ -337,21 +337,22 @@ hb_glib_unicode_decompose (hb_unicode_funcs_t *ufuncs HB_UNUSED, } +extern HB_INTERNAL const hb_unicode_funcs_t _hb_glib_unicode_funcs; +const hb_unicode_funcs_t _hb_glib_unicode_funcs = { + HB_OBJECT_HEADER_STATIC, + + NULL, /* parent */ + TRUE, /* immutable */ + { +#define HB_UNICODE_FUNC_IMPLEMENT(name) hb_glib_unicode_##name, + HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS +#undef HB_UNICODE_FUNC_IMPLEMENT + } +}; + hb_unicode_funcs_t * hb_glib_get_unicode_funcs (void) { - static const hb_unicode_funcs_t _hb_glib_unicode_funcs = { - HB_OBJECT_HEADER_STATIC, - - NULL, /* parent */ - TRUE, /* immutable */ - { -#define HB_UNICODE_FUNC_IMPLEMENT(name) hb_glib_unicode_##name, - HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS -#undef HB_UNICODE_FUNC_IMPLEMENT - } - }; - return const_cast (&_hb_glib_unicode_funcs); } diff --git a/src/hb-icu.cc b/src/hb-icu.cc index 78cbc1a92..01beb4aef 100644 --- a/src/hb-icu.cc +++ b/src/hb-icu.cc @@ -269,21 +269,23 @@ hb_icu_unicode_decompose (hb_unicode_funcs_t *ufuncs HB_UNUSED, return ret; } + +extern HB_INTERNAL const hb_unicode_funcs_t _hb_icu_unicode_funcs; +const hb_unicode_funcs_t _hb_icu_unicode_funcs = { + HB_OBJECT_HEADER_STATIC, + + NULL, /* parent */ + TRUE, /* immutable */ + { +#define HB_UNICODE_FUNC_IMPLEMENT(name) hb_icu_unicode_##name, + HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS +#undef HB_UNICODE_FUNC_IMPLEMENT + } +}; + hb_unicode_funcs_t * hb_icu_get_unicode_funcs (void) { - static const hb_unicode_funcs_t _hb_icu_unicode_funcs = { - HB_OBJECT_HEADER_STATIC, - - NULL, /* parent */ - TRUE, /* immutable */ - { -#define HB_UNICODE_FUNC_IMPLEMENT(name) hb_icu_unicode_##name, - HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS -#undef HB_UNICODE_FUNC_IMPLEMENT - } - }; - return const_cast (&_hb_icu_unicode_funcs); } diff --git a/src/hb-unicode-private.hh b/src/hb-unicode-private.hh index 9a900f5d6..7f719c458 100644 --- a/src/hb-unicode-private.hh +++ b/src/hb-unicode-private.hh @@ -91,14 +91,14 @@ struct _hb_unicode_funcs_t { #ifdef HAVE_GLIB -extern "C" hb_unicode_funcs_t * hb_glib_get_unicode_funcs (void); -#define _hb_unicode_funcs_default hb_glib_get_unicode_funcs () +extern HB_INTERNAL const hb_unicode_funcs_t _hb_glib_unicode_funcs; +#define _hb_unicode_funcs_default _hb_glib_unicode_funcs #elif defined(HAVE_ICU) -extern "C" hb_unicode_funcs_t * hb_icu_get_unicode_funcs (void); -#define _hb_unicode_funcs_default hb_icu_get_unicode_funcs () +extern HB_INTERNAL const hb_unicode_funcs_t _hb_icu_unicode_funcs; +#define _hb_unicode_funcs_default _hb_icu_unicode_funcs #else #define HB_UNICODE_FUNCS_NIL 1 -#define _hb_unicode_funcs_default hb_unicode_funcs_get_empty () +#define _hb_unicode_funcs_default _hb_unicode_funcs_nil #endif diff --git a/src/hb-unicode.cc b/src/hb-unicode.cc index b7a5f8de0..e96c0cfb2 100644 --- a/src/hb-unicode.cc +++ b/src/hb-unicode.cc @@ -103,7 +103,7 @@ hb_unicode_decompose_nil (hb_unicode_funcs_t *ufuncs HB_UNUSED, hb_unicode_funcs_t * hb_unicode_funcs_get_default (void) { - return _hb_unicode_funcs_default; + return const_cast (&_hb_unicode_funcs_default); } hb_unicode_funcs_t * @@ -130,21 +130,23 @@ hb_unicode_funcs_create (hb_unicode_funcs_t *parent) return ufuncs; } + +extern HB_INTERNAL const hb_unicode_funcs_t _hb_unicode_funcs_nil; +const hb_unicode_funcs_t _hb_unicode_funcs_nil = { + HB_OBJECT_HEADER_STATIC, + + NULL, /* parent */ + TRUE, /* immutable */ + { +#define HB_UNICODE_FUNC_IMPLEMENT(name) hb_unicode_##name##_nil, + HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS +#undef HB_UNICODE_FUNC_IMPLEMENT + } +}; + hb_unicode_funcs_t * hb_unicode_funcs_get_empty (void) { - static const hb_unicode_funcs_t _hb_unicode_funcs_nil = { - HB_OBJECT_HEADER_STATIC, - - NULL, /* parent */ - TRUE, /* immutable */ - { -#define HB_UNICODE_FUNC_IMPLEMENT(name) hb_unicode_##name##_nil, - HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS -#undef HB_UNICODE_FUNC_IMPLEMENT - } - }; - return const_cast (&_hb_unicode_funcs_nil); }