aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/Makefile_Eolian_Cxx.am1
-rw-r--r--src/lib/eolian_cxx/grammar/eo_class_generator.hh5
-rw-r--r--src/tests/eolian_cxx/eolian_cxx_suite.cc2
-rw-r--r--src/tests/eolian_cxx/eolian_cxx_test_wrapper.cc29
4 files changed, 36 insertions, 1 deletions
diff --git a/src/Makefile_Eolian_Cxx.am b/src/Makefile_Eolian_Cxx.am
index a2d0766a3e..14cf493d73 100644
--- a/src/Makefile_Eolian_Cxx.am
+++ b/src/Makefile_Eolian_Cxx.am
@@ -62,6 +62,7 @@ tests/eolian_cxx/eolian_cxx_suite.cc \
tests/eolian_cxx/eolian_cxx_test_parse.cc \
tests/eolian_cxx/callback.c \
tests/eolian_cxx/eolian_cxx_test_callback.cc \
+tests/eolian_cxx/eolian_cxx_test_wrapper.cc \
tests/eolian_cxx/eolian_cxx_test_generate.cc
tests/eolian_cxx/tests_eolian_cxx_eolian_cxx_suite-eolian_cxx_test_callback.$(OBJEXT): tests/eolian_cxx/callback.eo.hh
diff --git a/src/lib/eolian_cxx/grammar/eo_class_generator.hh b/src/lib/eolian_cxx/grammar/eo_class_generator.hh
index 2b2233bdb7..656a791198 100644
--- a/src/lib/eolian_cxx/grammar/eo_class_generator.hh
+++ b/src/lib/eolian_cxx/grammar/eo_class_generator.hh
@@ -46,7 +46,10 @@ eo_class_generator(std::ostream& out, eo_class const& cls)
<< eo_class_getter(cls)
<< "private:" << endl
<< eo_class_constructors(cls)
- << "};" << endl;
+ << "};" << endl
+ << "static_assert(sizeof(" << cls.name << ") == sizeof(Eo*), \"sizeof(" << cls.name << ") != sizeof(Eo*)\");" << endl
+ << "static_assert(std::is_standard_layout<" << cls.name << ">::value, \"'" << cls.name << "' is not standard layout\");"
+ << endl << endl;
}
} } } // namespace efl { namespace eolian { namespace grammar {
diff --git a/src/tests/eolian_cxx/eolian_cxx_suite.cc b/src/tests/eolian_cxx/eolian_cxx_suite.cc
index bd08e9b8aa..20a8c34a15 100644
--- a/src/tests/eolian_cxx/eolian_cxx_suite.cc
+++ b/src/tests/eolian_cxx/eolian_cxx_suite.cc
@@ -4,6 +4,7 @@
#include <cassert>
void eolian_cxx_test_parse(TCase* tc);
+void eolian_cxx_test_wrapper(TCase* tc);
void eolian_cxx_test_generate(TCase* tc);
void eolian_cxx_test_callback(TCase* tc);
@@ -16,6 +17,7 @@ struct _Eolian_Cxx_Test_Case
static const Eolian_Cxx_Test_Case etc[] = {
{ "Eolian-Cxx Parsing", eolian_cxx_test_parse },
+ { "Eolian-Cxx Wrapper", eolian_cxx_test_wrapper },
{ "Eolian-Cxx Generation", eolian_cxx_test_generate },
{ "Eolian-Cxx Callback", eolian_cxx_test_callback },
{ NULL, NULL }
diff --git a/src/tests/eolian_cxx/eolian_cxx_test_wrapper.cc b/src/tests/eolian_cxx/eolian_cxx_test_wrapper.cc
index fb680a59c1..123b508734 100644
--- a/src/tests/eolian_cxx/eolian_cxx_test_wrapper.cc
+++ b/src/tests/eolian_cxx/eolian_cxx_test_wrapper.cc
@@ -1,2 +1,31 @@
// Test Eolian-Cxx wrappers
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <Eo.h>
+#include <Ecore.h>
+
+#include <callback.eo.hh>
+
+#include <check.h>
+
+START_TEST(eolian_cxx_test_wrapper_size)
+{
+ efl::eo::eo_init init;
+
+ ::efl::eo::base b(nullptr);
+ ::callback c;
+
+ fail_if(sizeof(b) != sizeof(Eo*));
+ fail_if(sizeof(b) != sizeof(c));
+}
+END_TEST
+
+void
+eolian_cxx_test_wrapper(TCase* tc)
+{
+ tcase_add_test(tc, eolian_cxx_test_wrapper_size);
+}