diff --git a/src/Makefile.am b/src/Makefile.am index e8e5a16d0..99168c6b7 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -345,7 +345,9 @@ test_gsub_would_substitute_LDADD = libharfbuzz.la $(HBLIBS) $(FREETYPE_LIBS) COMPILED_TESTS = \ test-algs \ test-array \ + test-bimap \ test-iter \ + test-machinery \ test-map \ test-number \ test-ot-tag \ @@ -354,7 +356,6 @@ COMPILED_TESTS = \ test-serialize \ test-unicode-ranges \ test-vector \ - test-bimap \ test-repacker \ $(NULL) COMPILED_TESTS_CPPFLAGS = $(HBCFLAGS) -DMAIN -UNDEBUG @@ -370,18 +371,18 @@ test_array_SOURCES = test-array.cc test_array_CPPFLAGS = $(HBCFLAGS) test_array_LDADD = libharfbuzz.la $(HBLIBS) -test_priority_queue_SOURCES = test-priority-queue.cc hb-static.cc -test_priority_queue_CPPFLAGS = $(HBCFLAGS) -test_priority_queue_LDADD = libharfbuzz.la $(HBLIBS) - -test_repacker_SOURCES = test-repacker.cc hb-static.cc -test_repacker_CPPFLAGS = $(HBCFLAGS) -test_repacker_LDADD = libharfbuzz.la libharfbuzz-subset.la $(HBLIBS) +test_bimap_SOURCES = test-bimap.cc hb-static.cc +test_bimap_CPPFLAGS = $(COMPILED_TESTS_CPPFLAGS) +test_bimap_LDADD = $(COMPILED_TESTS_LDADD) test_iter_SOURCES = test-iter.cc hb-static.cc test_iter_CPPFLAGS = $(COMPILED_TESTS_CPPFLAGS) test_iter_LDADD = $(COMPILED_TESTS_LDADD) +test_machinery_SOURCES = test-machinery.cc hb-static.cc +test_machinery_CPPFLAGS = $(COMPILED_TESTS_CPPFLAGS) +test_machinery_LDADD = $(COMPILED_TESTS_LDADD) + test_map_SOURCES = test-map.cc hb-static.cc test_map_CPPFLAGS = $(COMPILED_TESTS_CPPFLAGS) test_map_LDADD = $(COMPILED_TESTS_LDADD) @@ -394,6 +395,14 @@ test_ot_tag_SOURCES = hb-ot-tag.cc test_ot_tag_CPPFLAGS = $(COMPILED_TESTS_CPPFLAGS) test_ot_tag_LDADD = $(COMPILED_TESTS_LDADD) +test_priority_queue_SOURCES = test-priority-queue.cc hb-static.cc +test_priority_queue_CPPFLAGS = $(HBCFLAGS) +test_priority_queue_LDADD = libharfbuzz.la $(HBLIBS) + +test_repacker_SOURCES = test-repacker.cc hb-static.cc +test_repacker_CPPFLAGS = $(HBCFLAGS) +test_repacker_LDADD = libharfbuzz.la libharfbuzz-subset.la $(HBLIBS) + test_set_SOURCES = test-set.cc hb-static.cc test_set_CPPFLAGS = $(COMPILED_TESTS_CPPFLAGS) test_set_LDADD = $(COMPILED_TESTS_LDADD) @@ -410,10 +419,6 @@ test_vector_SOURCES = test-vector.cc hb-static.cc test_vector_CPPFLAGS = $(COMPILED_TESTS_CPPFLAGS) test_vector_LDADD = $(COMPILED_TESTS_LDADD) -test_bimap_SOURCES = test-bimap.cc hb-static.cc -test_bimap_CPPFLAGS = $(COMPILED_TESTS_CPPFLAGS) -test_bimap_LDADD = $(COMPILED_TESTS_LDADD) - dist_check_SCRIPTS = \ check-c-linkage-decls.py \ check-externs.py \ diff --git a/src/hb-common.cc b/src/hb-common.cc index 249a8a801..41229b918 100644 --- a/src/hb-common.cc +++ b/src/hb-common.cc @@ -1065,7 +1065,7 @@ hb_variation_from_string (const char *str, int len, static inline void free_static_C_locale (); static struct hb_C_locale_lazy_loader_t : hb_lazy_loader_t, - hb_C_locale_lazy_loader_t> + hb_C_locale_lazy_loader_t> { static hb_locale_t create () { diff --git a/src/hb-machinery.hh b/src/hb-machinery.hh index 5046ac193..b529173fc 100644 --- a/src/hb-machinery.hh +++ b/src/hb-machinery.hh @@ -194,7 +194,8 @@ struct hb_lazy_loader_t : hb_data_wrapper_t } const Returned * operator -> () const { return get (); } - const Returned & operator * () const { return *get (); } + template + const U & operator * () const { return *get (); } explicit operator bool () const { return get_stored () != Funcs::get_null (); } template operator const C * () const { return get (); } diff --git a/src/meson.build b/src/meson.build index d70dc8799..2df9ea184 100644 --- a/src/meson.build +++ b/src/meson.build @@ -485,12 +485,13 @@ if get_option('tests').enabled() compiled_tests = { 'test-algs': ['test-algs.cc', 'hb-static.cc'], 'test-array': ['test-array.cc'], - 'test-repacker': ['test-repacker.cc', 'hb-static.cc'], - 'test-priority-queue': ['test-priority-queue.cc', 'hb-static.cc'], 'test-iter': ['test-iter.cc', 'hb-static.cc'], + 'test-machinery': ['test-machinery.cc', 'hb-static.cc'], 'test-map': ['test-map.cc', 'hb-static.cc'], 'test-number': ['test-number.cc', 'hb-number.cc'], 'test-ot-tag': ['hb-ot-tag.cc'], + 'test-priority-queue': ['test-priority-queue.cc', 'hb-static.cc'], + 'test-repacker': ['test-repacker.cc', 'hb-static.cc'], 'test-set': ['test-set.cc', 'hb-static.cc'], 'test-serialize': ['test-serialize.cc', 'hb-static.cc'], 'test-unicode-ranges': ['test-unicode-ranges.cc'], diff --git a/src/test-machinery.cc b/src/test-machinery.cc new file mode 100644 index 000000000..7fc9c24b5 --- /dev/null +++ b/src/test-machinery.cc @@ -0,0 +1,46 @@ +/* + * Copyright © 2022 Behdad Esfahbod + * + * This is part of HarfBuzz, a text shaping library. + * + * Permission is hereby granted, without written agreement and without + * license or royalty fees, to use, copy, modify, and distribute this + * software and its documentation for any purpose, provided that the + * above copyright notice and the following two paragraphs appear in + * all copies of this software. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + */ + +#include "hb.hh" +#include "hb-machinery.hh" + +struct hb_intp_lazy_loader_t : hb_lazy_loader_t +{ + static int* create () { return nullptr; } + static void destroy (int* l) {} + static int* get_null () { return nullptr; } +}; + +struct hb_void_lazy_loader_t : hb_lazy_loader_t +{ + static void* create () { return nullptr; } + static void destroy (void* l) {} + static void* get_null () { return nullptr; } +}; + +int +main (int argc, char **argv) +{ + return 0; +}