Undo default unicode-funcs to avoid static initializer again
authorBehdad Esfahbod <behdad@behdad.org>
Tue, 5 Jun 2012 22:14:03 +0000 (18:14 -0400)
committerBehdad Esfahbod <behdad@behdad.org>
Tue, 5 Jun 2012 22:43:57 +0000 (18:43 -0400)
src/hb-buffer.cc
src/hb-glib.cc
src/hb-icu.cc
src/hb-unicode-private.hh
src/hb-unicode.cc

index 144a68c..20de022 100644 (file)
@@ -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_t *> (&_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:
index 33369b2..60f5259 100644 (file)
@@ -337,21 +337,22 @@ hb_glib_unicode_decompose (hb_unicode_funcs_t *ufuncs HB_UNUSED,
 }
 
 
-hb_unicode_funcs_t *
-hb_glib_get_unicode_funcs (void)
-{
-  static const hb_unicode_funcs_t _hb_glib_unicode_funcs = {
-    HB_OBJECT_HEADER_STATIC,
+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 */
-    {
+  NULL, /* parent */
+  TRUE, /* immutable */
+  {
 #define HB_UNICODE_FUNC_IMPLEMENT(name) hb_glib_unicode_##name,
-      HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS
+    HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS
 #undef HB_UNICODE_FUNC_IMPLEMENT
-    }
-  };
+  }
+};
 
+hb_unicode_funcs_t *
+hb_glib_get_unicode_funcs (void)
+{
   return const_cast<hb_unicode_funcs_t *> (&_hb_glib_unicode_funcs);
 }
 
index 78cbc1a..01beb4a 100644 (file)
@@ -269,21 +269,23 @@ hb_icu_unicode_decompose (hb_unicode_funcs_t *ufuncs HB_UNUSED,
   return ret;
 }
 
-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 */
-    {
+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
+    HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS
 #undef HB_UNICODE_FUNC_IMPLEMENT
-    }
-  };
+  }
+};
 
+hb_unicode_funcs_t *
+hb_icu_get_unicode_funcs (void)
+{
   return const_cast<hb_unicode_funcs_t *> (&_hb_icu_unicode_funcs);
 }
 
index 9a900f5..7f719c4 100644 (file)
@@ -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
 
 
index b7a5f8d..e96c0cf 100644 (file)
@@ -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_t *> (&_hb_unicode_funcs_default);
 }
 
 hb_unicode_funcs_t *
@@ -130,21 +130,23 @@ hb_unicode_funcs_create (hb_unicode_funcs_t *parent)
   return ufuncs;
 }
 
-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 */
-    {
+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
+    HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS
 #undef HB_UNICODE_FUNC_IMPLEMENT
-    }
-  };
+  }
+};
 
+hb_unicode_funcs_t *
+hb_unicode_funcs_get_empty (void)
+{
   return const_cast<hb_unicode_funcs_t *> (&_hb_unicode_funcs_nil);
 }