aboutsummaryrefslogtreecommitdiff
path: root/src/hb-unicode.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/hb-unicode.cc')
-rw-r--r--src/hb-unicode.cc26
1 files changed, 8 insertions, 18 deletions
diff --git a/src/hb-unicode.cc b/src/hb-unicode.cc
index 9a6471e52..c1795dc7f 100644
--- a/src/hb-unicode.cc
+++ b/src/hb-unicode.cc
@@ -377,30 +377,20 @@ hb_unicode_funcs_set_##name##_func (hb_unicode_funcs_t *ufuncs, \
hb_destroy_func_t destroy) \
{ \
if (hb_object_is_immutable (ufuncs)) \
- goto fail; \
- \
- if (!func) \
- { \
- if (destroy) \
- destroy (user_data); \
- destroy = nullptr; \
- user_data = ufuncs->parent->user_data.name; \
- } \
+ return; \
\
if (ufuncs->destroy.name) \
ufuncs->destroy.name (ufuncs->user_data.name); \
\
- if (func) \
+ if (func) { \
ufuncs->func.name = func; \
- else \
+ ufuncs->user_data.name = user_data; \
+ ufuncs->destroy.name = destroy; \
+ } else { \
ufuncs->func.name = ufuncs->parent->func.name; \
- ufuncs->user_data.name = user_data; \
- ufuncs->destroy.name = destroy; \
- return; \
- \
-fail: \
- if (destroy) \
- destroy (user_data); \
+ ufuncs->user_data.name = ufuncs->parent->user_data.name; \
+ ufuncs->destroy.name = nullptr; \
+ } \
}
HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS