diff options
54 files changed, 1206 insertions, 157 deletions
diff --git a/src/Makefile_Efl_Mono.am b/src/Makefile_Efl_Mono.am index 5b2f993d22..7cfa20d4da 100644 --- a/src/Makefile_Efl_Mono.am +++ b/src/Makefile_Efl_Mono.am | |||
@@ -190,9 +190,11 @@ lib_efl_mono_libeflcustomexportsmono_la_DEPENDENCIES = @EFL_CUSTOM_EXPORTS_MONO_ | |||
190 | 190 | ||
191 | #Efl Mono - C Sharp binding library | 191 | #Efl Mono - C Sharp binding library |
192 | 192 | ||
193 | libefl_mono_dll_MCS_FLAGS = -doc:lib/efl_mono/libefl_mono.xml | ||
194 | |||
193 | lib/efl_mono/libefl_mono.dll: $(efl_mono_files_dist) lib/efl_mono/$(am__dirstamp) $(efl_mono_files_gen) lib/efl_mono/libefl_mono.dll.config | 195 | lib/efl_mono/libefl_mono.dll: $(efl_mono_files_dist) lib/efl_mono/$(am__dirstamp) $(efl_mono_files_gen) lib/efl_mono/libefl_mono.dll.config |
194 | @rm -f lib/efl_mono/libefl_mono.dll | 196 | @rm -f lib/efl_mono/libefl_mono.dll |
195 | $(AM_V_MCS) $(MCS) $(MCS_FLAGS) -out:$@ -t:library $(filter %.cs, $(^)) | 197 | $(AM_V_MCS) $(MCS) $(MCS_FLAGS) $(libefl_mono_dll_MCS_FLAGS) -out:$@ -t:library $(filter %.cs, $(^)) |
196 | 198 | ||
197 | lib/efl_mono/libefl_mono.dll.config: | 199 | lib/efl_mono/libefl_mono.dll.config: |
198 | echo "<configuration>" > $@ | 200 | echo "<configuration>" > $@ |
@@ -213,6 +215,7 @@ endif | |||
213 | EFL_INSTALL_EXEC_HOOK += \ | 215 | EFL_INSTALL_EXEC_HOOK += \ |
214 | $(MKDIR_P) $(efl_mono_dll_dest); \ | 216 | $(MKDIR_P) $(efl_mono_dll_dest); \ |
215 | cp -f $(builddir)/lib/efl_mono/libefl_mono.dll $(efl_mono_dll_dest)/libefl_mono.dll; \ | 217 | cp -f $(builddir)/lib/efl_mono/libefl_mono.dll $(efl_mono_dll_dest)/libefl_mono.dll; \ |
218 | cp -f $(builddir)/lib/efl_mono/libefl_mono.xml $(efl_mono_dll_dest)/libefl_mono.xml; \ | ||
216 | $(MKDIR_P) $(DESTDIR)$(datadir)/efl_mono; \ | 219 | $(MKDIR_P) $(DESTDIR)$(datadir)/efl_mono; \ |
217 | cp -f $(builddir)/bindings/mono/efl_mono/efl_libs.csv $(DESTDIR)$(datadir)/efl_mono/efl_libs.csv; | 220 | cp -f $(builddir)/bindings/mono/efl_mono/efl_libs.csv $(DESTDIR)$(datadir)/efl_mono/efl_libs.csv; |
218 | 221 | ||
diff --git a/src/Makefile_Eolian_Cxx.am b/src/Makefile_Eolian_Cxx.am index 3bc12415ca..d920936f37 100644 --- a/src/Makefile_Eolian_Cxx.am +++ b/src/Makefile_Eolian_Cxx.am | |||
@@ -94,6 +94,7 @@ tests/eolian_cxx/generic.c \ | |||
94 | tests/eolian_cxx/name1_name2_type_generation.c \ | 94 | tests/eolian_cxx/name1_name2_type_generation.c \ |
95 | tests/eolian_cxx/eolian_cxx_test_inheritance.cc \ | 95 | tests/eolian_cxx/eolian_cxx_test_inheritance.cc \ |
96 | tests/eolian_cxx/eolian_cxx_test_generate.cc \ | 96 | tests/eolian_cxx/eolian_cxx_test_generate.cc \ |
97 | tests/eolian_cxx/eolian_cxx_test_documentation.cc \ | ||
97 | tests/eolian_cxx/eolian_cxx_test_cyclic.cc \ | 98 | tests/eolian_cxx/eolian_cxx_test_cyclic.cc \ |
98 | tests/eolian_cxx/complex.c \ | 99 | tests/eolian_cxx/complex.c \ |
99 | tests/eolian_cxx/complex_cxx.cc \ | 100 | tests/eolian_cxx/complex_cxx.cc \ |
@@ -168,7 +169,7 @@ tests_eolian_cxx_eolian_cxx_suite_CXXFLAGS = \ | |||
168 | -DTESTS_WD=\"`pwd`\" \ | 169 | -DTESTS_WD=\"`pwd`\" \ |
169 | -DTESTS_SRC_DIR=\"$(top_srcdir)/src/tests/eolian_cxx\" \ | 170 | -DTESTS_SRC_DIR=\"$(top_srcdir)/src/tests/eolian_cxx\" \ |
170 | -DPACKAGE_BUILD_DIR=\"$(abs_top_builddir)/src/tests/eolian_cxx\" \ | 171 | -DPACKAGE_BUILD_DIR=\"$(abs_top_builddir)/src/tests/eolian_cxx\" \ |
171 | -DPACKAGE_DATA_DIR=\"$(datadir)/eolian_cxx\" \ | 172 | -DPACKAGE_DATA_DIR=\"$(top_srcdir)/src/tests/eolian_cxx\" \ |
172 | -DTESTS_BUILD_DIR=\"$(top_builddir)/src/tests/eolian_cxx\" \ | 173 | -DTESTS_BUILD_DIR=\"$(top_builddir)/src/tests/eolian_cxx\" \ |
173 | @CHECK_CFLAGS@ @EOLIAN_CXX_CFLAGS@ @EINA_CXX_CFLAGS@ \ | 174 | @CHECK_CFLAGS@ @EOLIAN_CXX_CFLAGS@ @EINA_CXX_CFLAGS@ \ |
174 | @EOLIAN_CFLAGS@ @EINA_CFLAGS@ @EO_CFLAGS@ @ECORE_CFLAGS@ \ | 175 | @EOLIAN_CFLAGS@ @EINA_CFLAGS@ @EO_CFLAGS@ @ECORE_CFLAGS@ \ |
diff --git a/src/bin/eolian_mono/eolian/mono/documentation.hh b/src/bin/eolian_mono/eolian/mono/documentation.hh new file mode 100644 index 0000000000..42fe9d24e1 --- /dev/null +++ b/src/bin/eolian_mono/eolian/mono/documentation.hh | |||
@@ -0,0 +1,201 @@ | |||
1 | #ifndef EOLIAN_MONO_DOCUMENTATION_HPP | ||
2 | #define EOLIAN_MONO_DOCUMENTATION_HPP | ||
3 | |||
4 | #include "grammar/generator.hpp" | ||
5 | #include "grammar/klass_def.hpp" | ||
6 | #include "grammar/html_escaped_string.hpp" | ||
7 | #include "using_decl.hh" | ||
8 | #include "keyword.hh" | ||
9 | |||
10 | #include <Eina.h> | ||
11 | |||
12 | namespace eolian_mono { | ||
13 | |||
14 | struct documentation_generator | ||
15 | { | ||
16 | |||
17 | int scope_size = 0; | ||
18 | |||
19 | documentation_generator(int scope_size) | ||
20 | : scope_size(scope_size) {} | ||
21 | |||
22 | /// Tag generator helpers | ||
23 | template<typename OutputIterator, typename Context> | ||
24 | bool generate_tag(OutputIterator sink, std::string const& tag, std::string const &text, Context const& context) const | ||
25 | { | ||
26 | if (text.empty()) | ||
27 | return true; | ||
28 | |||
29 | return as_generator( scope_tab(scope_size) << "///<" << tag << ">" << html_escaped_string << "</" << tag << ">\n").generate(sink, text, context); | ||
30 | } | ||
31 | |||
32 | template<typename OutputIterator, typename Context> | ||
33 | bool generate_tag_summary(OutputIterator sink, std::string const& text, Context const& context) const | ||
34 | { | ||
35 | return generate_tag(sink, "summary", text, context); | ||
36 | } | ||
37 | |||
38 | template<typename OutputIterator, typename Context> | ||
39 | bool generate_tag_para(OutputIterator sink, std::string const& text, Context const& context) const | ||
40 | { | ||
41 | return generate_tag(sink, "para", text, context); | ||
42 | } | ||
43 | |||
44 | template<typename OutputIterator, typename Context> | ||
45 | bool generate_tag_param(OutputIterator sink, std::string const& name, std::string const& text, Context const& context) const | ||
46 | { | ||
47 | return as_generator( scope_tab(scope_size) << "///<param name=\"" << name << "\">" | ||
48 | << html_escaped_string << "</param>\n").generate(sink, text, context); | ||
49 | } | ||
50 | |||
51 | template<typename OutputIterator, typename Context> | ||
52 | bool generate_tag_return(OutputIterator sink, std::string const& text, Context const& context) const | ||
53 | { | ||
54 | return generate_tag(sink, "return", text, context); | ||
55 | } | ||
56 | |||
57 | // Actual exported generators | ||
58 | template<typename OutputIterator, typename Attribute, typename Context> | ||
59 | bool generate(OutputIterator sink, Attribute const& attr, Context const& context) const | ||
60 | { | ||
61 | return generate(sink, attr.documentation, context); | ||
62 | } | ||
63 | |||
64 | template<typename OutputIterator, typename Context> | ||
65 | bool generate(OutputIterator sink, attributes::function_def const& func, Context const& context) const | ||
66 | { | ||
67 | if (func.type == attributes::function_type::prop_get || func.type == attributes::function_type::prop_set) | ||
68 | return generate_property(sink, func, context); | ||
69 | else | ||
70 | return generate_function(sink, func, context); | ||
71 | return true; | ||
72 | } | ||
73 | |||
74 | template<typename OutputIterator, typename Context> | ||
75 | bool generate_property(OutputIterator sink, attributes::function_def const& func, Context const& context) const | ||
76 | { | ||
77 | |||
78 | // First, try the get/set specific documentation | ||
79 | if (!func.documentation.summary.empty()) | ||
80 | { | ||
81 | if (!generate(sink, func.documentation, context)) | ||
82 | return false; | ||
83 | } | ||
84 | else // fallback to common property documentation | ||
85 | { | ||
86 | if (!generate(sink, func.property_documentation, context)) | ||
87 | return false; | ||
88 | } | ||
89 | |||
90 | for (auto&& param : func.parameters) | ||
91 | if (!generate_parameter(sink, param, context)) | ||
92 | return false; | ||
93 | |||
94 | if (!generate_tag_return(sink, func.return_documentation.summary, context)) | ||
95 | return false; | ||
96 | |||
97 | return true; | ||
98 | } | ||
99 | |||
100 | template<typename OutputIterator, typename Context> | ||
101 | bool generate_function(OutputIterator sink, attributes::function_def const& func, Context const& context) const | ||
102 | { | ||
103 | if (!generate(sink, func.documentation, context)) | ||
104 | return false; | ||
105 | |||
106 | for (auto&& param : func.parameters) | ||
107 | if (!generate_parameter(sink, param, context)) | ||
108 | return false; | ||
109 | |||
110 | if (!generate_tag_return(sink, func.return_documentation.summary, context)) | ||
111 | return false; | ||
112 | |||
113 | return true; | ||
114 | } | ||
115 | |||
116 | template<typename OutputIterator, typename Context> | ||
117 | bool generate_parameter(OutputIterator sink, attributes::parameter_def const& param, Context const& context) const | ||
118 | { | ||
119 | return generate_tag_param(sink, escape_keyword(param.param_name), param.documentation.summary, context); | ||
120 | } | ||
121 | |||
122 | template<typename OutputIterator, typename Context> | ||
123 | bool generate(OutputIterator sink, attributes::documentation_def const& doc, Context const& context) const | ||
124 | { | ||
125 | if (!generate_preamble(sink, doc, context)) | ||
126 | return false; | ||
127 | if (!generate_body(sink, doc, context)) | ||
128 | return false; | ||
129 | if (!generate_epilogue(sink, doc, context)) | ||
130 | return false; | ||
131 | |||
132 | return true; | ||
133 | } | ||
134 | |||
135 | template<typename OutputIterator, typename Context> | ||
136 | bool generate_preamble(OutputIterator sink, attributes::documentation_def const& doc, Context const context) const | ||
137 | { | ||
138 | return generate_tag_summary(sink, doc.summary, context); | ||
139 | } | ||
140 | |||
141 | |||
142 | template<typename OutputIterator, typename Context> | ||
143 | bool generate_body(OutputIterator sink, attributes::documentation_def const& doc, Context const context) const | ||
144 | { | ||
145 | for (auto&& para : doc.desc_paragraphs) | ||
146 | { | ||
147 | if (!generate_tag_para(sink, para, context)) | ||
148 | return false; | ||
149 | } | ||
150 | |||
151 | return true; | ||
152 | } | ||
153 | |||
154 | template<typename OutputIterator, typename Context> | ||
155 | bool generate_epilogue(OutputIterator sink, attributes::documentation_def const& doc, Context const context) const | ||
156 | { | ||
157 | if (doc.since.empty()) | ||
158 | return true; | ||
159 | |||
160 | if (!generate_tag_para(sink, doc.since, context)) | ||
161 | return false; | ||
162 | |||
163 | return true; | ||
164 | } | ||
165 | }; | ||
166 | |||
167 | struct documentation_terminal | ||
168 | { | ||
169 | documentation_generator operator()(int n) const | ||
170 | { | ||
171 | return documentation_generator(n); | ||
172 | } | ||
173 | } const documentation = {}; | ||
174 | |||
175 | documentation_generator as_generator(documentation_terminal) | ||
176 | { | ||
177 | return documentation_generator(0); | ||
178 | } | ||
179 | |||
180 | } // namespace eolian_mono | ||
181 | |||
182 | |||
183 | namespace efl { namespace eolian { namespace grammar { | ||
184 | |||
185 | template<> | ||
186 | struct is_eager_generator<::eolian_mono::documentation_generator> : std::true_type {}; | ||
187 | template<> | ||
188 | struct is_generator<::eolian_mono::documentation_generator> : std::true_type {}; | ||
189 | |||
190 | template<> | ||
191 | struct is_generator<::eolian_mono::documentation_terminal> : std::true_type {}; | ||
192 | |||
193 | namespace type_traits { | ||
194 | template<> | ||
195 | struct attributes_needed<struct ::eolian_mono::documentation_generator> : std::integral_constant<int, 1> {}; | ||
196 | template<> | ||
197 | struct attributes_needed<struct ::eolian_mono::documentation_terminal> : std::integral_constant<int, 1> {}; | ||
198 | } | ||
199 | } } } | ||
200 | |||
201 | #endif | ||
diff --git a/src/bin/eolian_mono/eolian/mono/enum_definition.hh b/src/bin/eolian_mono/eolian/mono/enum_definition.hh index ae9775e71f..d8bc54c175 100644 --- a/src/bin/eolian_mono/eolian/mono/enum_definition.hh +++ b/src/bin/eolian_mono/eolian/mono/enum_definition.hh | |||
@@ -22,6 +22,9 @@ struct enum_definition_generator | |||
22 | auto open_namespace = *("namespace " << string << " { ") << "\n"; | 22 | auto open_namespace = *("namespace " << string << " { ") << "\n"; |
23 | if(!as_generator(open_namespace).generate(sink, cpp_namespaces, add_lower_case_context(context))) return false; | 23 | if(!as_generator(open_namespace).generate(sink, cpp_namespaces, add_lower_case_context(context))) return false; |
24 | 24 | ||
25 | if(!as_generator(documentation).generate(sink, enum_, context)) | ||
26 | return false; | ||
27 | |||
25 | if(!as_generator | 28 | if(!as_generator |
26 | ( | 29 | ( |
27 | "public enum " << string << "\n{\n" | 30 | "public enum " << string << "\n{\n" |
@@ -38,9 +41,9 @@ struct enum_definition_generator | |||
38 | name[0] = std::toupper(name[0]); // Hack to allow 'static' as a field name | 41 | name[0] = std::toupper(name[0]); // Hack to allow 'static' as a field name |
39 | if (!as_generator | 42 | if (!as_generator |
40 | ( | 43 | ( |
41 | string << " = " << string << ",\n" | 44 | documentation << string << " = " << string << ",\n" |
42 | ) | 45 | ) |
43 | .generate(sink, std::make_tuple(name, literal), context)) | 46 | .generate(sink, std::make_tuple(*first, name, literal), context)) |
44 | return false; | 47 | return false; |
45 | } | 48 | } |
46 | 49 | ||
diff --git a/src/bin/eolian_mono/eolian/mono/function_declaration.hh b/src/bin/eolian_mono/eolian/mono/function_declaration.hh index 561c975118..76bbd6103b 100644 --- a/src/bin/eolian_mono/eolian/mono/function_declaration.hh +++ b/src/bin/eolian_mono/eolian/mono/function_declaration.hh | |||
@@ -21,10 +21,13 @@ struct function_declaration_generator | |||
21 | { | 21 | { |
22 | if(is_function_blacklisted(f.c_name)) | 22 | if(is_function_blacklisted(f.c_name)) |
23 | return true; | 23 | return true; |
24 | else | 24 | |
25 | return as_generator | 25 | if(!as_generator(documentation).generate(sink, f, context)) |
26 | return false; | ||
27 | |||
28 | return as_generator | ||
26 | (eolian_mono::type(true) << " " << string << "(" << (parameter % ", ") << ");\n") | 29 | (eolian_mono::type(true) << " " << string << "(" << (parameter % ", ") << ");\n") |
27 | .generate(sink, std::make_tuple(f.return_type, managed_method_name(f.name), f.parameters), context); | 30 | .generate(sink, std::make_tuple(f.return_type, managed_method_name(f.name), f.parameters), context); |
28 | } | 31 | } |
29 | }; | 32 | }; |
30 | 33 | ||
diff --git a/src/bin/eolian_mono/eolian/mono/function_definition.hh b/src/bin/eolian_mono/eolian/mono/function_definition.hh index 2a4c027896..04e8921fad 100644 --- a/src/bin/eolian_mono/eolian/mono/function_definition.hh +++ b/src/bin/eolian_mono/eolian/mono/function_definition.hh | |||
@@ -15,6 +15,7 @@ | |||
15 | #include "marshall_type.hh" | 15 | #include "marshall_type.hh" |
16 | #include "parameter.hh" | 16 | #include "parameter.hh" |
17 | #include "keyword.hh" | 17 | #include "keyword.hh" |
18 | #include "documentation.hh" | ||
18 | #include "using_decl.hh" | 19 | #include "using_decl.hh" |
19 | #include "generation_contexts.hh" | 20 | #include "generation_contexts.hh" |
20 | 21 | ||
@@ -34,7 +35,7 @@ struct native_function_definition_generator | |||
34 | if(!as_generator | 35 | if(!as_generator |
35 | ("\n\n" << scope_tab | 36 | ("\n\n" << scope_tab |
36 | << eolian_mono::marshall_native_annotation(true) | 37 | << eolian_mono::marshall_native_annotation(true) |
37 | << " public delegate " | 38 | << " private delegate " |
38 | << eolian_mono::marshall_type(true) | 39 | << eolian_mono::marshall_type(true) |
39 | << " " | 40 | << " " |
40 | << string | 41 | << string |
@@ -50,7 +51,7 @@ struct native_function_definition_generator | |||
50 | if(!as_generator | 51 | if(!as_generator |
51 | (scope_tab << "[System.Runtime.InteropServices.DllImport(" << context_find_tag<library_context>(context).actual_library_name(f.filename) << ")] " | 52 | (scope_tab << "[System.Runtime.InteropServices.DllImport(" << context_find_tag<library_context>(context).actual_library_name(f.filename) << ")] " |
52 | << eolian_mono::marshall_native_annotation(true) | 53 | << eolian_mono::marshall_native_annotation(true) |
53 | << " public static extern " | 54 | << " private static extern " |
54 | << eolian_mono::marshall_type(true) | 55 | << eolian_mono::marshall_type(true) |
55 | << " " << string | 56 | << " " << string |
56 | << "(System.IntPtr obj" | 57 | << "(System.IntPtr obj" |
@@ -68,7 +69,7 @@ struct native_function_definition_generator | |||
68 | 69 | ||
69 | if(!as_generator | 70 | if(!as_generator |
70 | (scope_tab | 71 | (scope_tab |
71 | << " public static " | 72 | << " private static " |
72 | << eolian_mono::marshall_type(true) << " " | 73 | << eolian_mono::marshall_type(true) << " " |
73 | << string | 74 | << string |
74 | << "(System.IntPtr obj, System.IntPtr pd" | 75 | << "(System.IntPtr obj, System.IntPtr pd" |
@@ -108,7 +109,7 @@ struct native_function_definition_generator | |||
108 | return false; | 109 | return false; |
109 | 110 | ||
110 | if(!as_generator | 111 | if(!as_generator |
111 | (scope_tab << "public static " | 112 | (scope_tab << "private static " |
112 | << string | 113 | << string |
113 | << "_delegate " | 114 | << "_delegate " |
114 | << string << "_static_delegate = new " << string << "_delegate(" << string << "NativeInherit." << string << ");\n" | 115 | << string << "_static_delegate = new " << string << "_delegate(" << string << "NativeInherit." << string << ");\n" |
@@ -137,7 +138,7 @@ struct function_definition_generator | |||
137 | if(!as_generator | 138 | if(!as_generator |
138 | ("\n\n" << scope_tab << "[System.Runtime.InteropServices.DllImport(" << context_find_tag<library_context>(context).actual_library_name(f.filename) << ")]\n" | 139 | ("\n\n" << scope_tab << "[System.Runtime.InteropServices.DllImport(" << context_find_tag<library_context>(context).actual_library_name(f.filename) << ")]\n" |
139 | << scope_tab << eolian_mono::marshall_annotation(true) | 140 | << scope_tab << eolian_mono::marshall_annotation(true) |
140 | << " public static extern " | 141 | << " private static extern " |
141 | << eolian_mono::marshall_type(true) | 142 | << eolian_mono::marshall_type(true) |
142 | << " " << string | 143 | << " " << string |
143 | << "(System.IntPtr obj" | 144 | << "(System.IntPtr obj" |
@@ -154,6 +155,10 @@ struct function_definition_generator | |||
154 | return false; | 155 | return false; |
155 | 156 | ||
156 | if(!as_generator | 157 | if(!as_generator |
158 | (documentation(1)).generate(sink, f, context)) | ||
159 | return false; | ||
160 | |||
161 | if(!as_generator | ||
157 | (scope_tab << (do_super ? "virtual " : "") << "public " << return_type << " " << string << "(" << (parameter % ", ") | 162 | (scope_tab << (do_super ? "virtual " : "") << "public " << return_type << " " << string << "(" << (parameter % ", ") |
158 | << ") {\n " | 163 | << ") {\n " |
159 | << eolian_mono::function_definition_preamble() << string << "(" | 164 | << eolian_mono::function_definition_preamble() << string << "(" |
diff --git a/src/bin/eolian_mono/eolian/mono/function_pointer.hh b/src/bin/eolian_mono/eolian/mono/function_pointer.hh index 0f91a4c41c..0890edcb51 100644 --- a/src/bin/eolian_mono/eolian/mono/function_pointer.hh +++ b/src/bin/eolian_mono/eolian/mono/function_pointer.hh | |||
@@ -6,6 +6,8 @@ | |||
6 | #include <vector> | 6 | #include <vector> |
7 | #include <string> | 7 | #include <string> |
8 | 8 | ||
9 | #include "documentation.hh" | ||
10 | |||
9 | namespace eolian_mono { | 11 | namespace eolian_mono { |
10 | 12 | ||
11 | // Blacklist structs that require some kind of manual binding. | 13 | // Blacklist structs that require some kind of manual binding. |
@@ -36,25 +38,26 @@ struct function_pointer { | |||
36 | if(!as_generator(open_namespace).generate(sink, namespaces, add_lower_case_context(context))) return false; | 38 | if(!as_generator(open_namespace).generate(sink, namespaces, add_lower_case_context(context))) return false; |
37 | 39 | ||
38 | // C# visible delegate | 40 | // C# visible delegate |
39 | if (!as_generator("public delegate " << type << " " << string | 41 | if (!as_generator(documentation |
42 | << "public delegate " << type << " " << string | ||
40 | << "(" << (parameter % ", ") << ");\n") | 43 | << "(" << (parameter % ", ") << ");\n") |
41 | .generate(sink, std::make_tuple(f.return_type, escape_keyword(f.name), f.parameters), context)) | 44 | .generate(sink, std::make_tuple(f, f.return_type, escape_keyword(f.name), f.parameters), context)) |
42 | return false; | 45 | return false; |
43 | // "Internal" delegate, 1-to-1 with the Unamaged function type | 46 | // "Internal" delegate, 1-to-1 with the Unamaged function type |
44 | if (!as_generator("public delegate " << type << " " << string // public? | 47 | if (!as_generator("internal delegate " << type << " " << string // public? |
45 | << "Internal(IntPtr data, " << (parameter % ", ") << ");\n") | 48 | << "Internal(IntPtr data, " << (parameter % ", ") << ");\n") |
46 | .generate(sink, std::make_tuple(f.return_type, escape_keyword(f.name), f.parameters), context)) | 49 | .generate(sink, std::make_tuple(f.return_type, escape_keyword(f.name), f.parameters), context)) |
47 | return false; | 50 | return false; |
48 | 51 | ||
49 | std::string f_name = escape_keyword(f.name); | 52 | std::string f_name = escape_keyword(f.name); |
50 | // Wrapper type, with callback matching the Unamanaged one | 53 | // Wrapper type, with callback matching the Unamanaged one |
51 | if (!as_generator("public class " << f_name << "Wrapper\n" | 54 | if (!as_generator("internal class " << f_name << "Wrapper\n" |
52 | << "{\n\n" | 55 | << "{\n\n" |
53 | << scope_tab << "private " << f_name << "Internal _cb;\n" | 56 | << scope_tab << "private " << f_name << "Internal _cb;\n" |
54 | << scope_tab << "private IntPtr _cb_data;\n" | 57 | << scope_tab << "private IntPtr _cb_data;\n" |
55 | << scope_tab << "private Eina_Free_Cb _cb_free_cb;\n\n" | 58 | << scope_tab << "private Eina_Free_Cb _cb_free_cb;\n\n" |
56 | 59 | ||
57 | << scope_tab << "public " << f_name << "Wrapper (" << f_name << "Internal _cb, IntPtr _cb_data, Eina_Free_Cb _cb_free_cb)\n" | 60 | << scope_tab << "internal " << f_name << "Wrapper (" << f_name << "Internal _cb, IntPtr _cb_data, Eina_Free_Cb _cb_free_cb)\n" |
58 | << scope_tab << "{\n" | 61 | << scope_tab << "{\n" |
59 | << scope_tab << scope_tab << "this._cb = _cb;\n" | 62 | << scope_tab << scope_tab << "this._cb = _cb;\n" |
60 | << scope_tab << scope_tab << "this._cb_data = _cb_data;\n" | 63 | << scope_tab << scope_tab << "this._cb_data = _cb_data;\n" |
@@ -67,12 +70,12 @@ struct function_pointer { | |||
67 | << scope_tab << scope_tab << scope_tab << "this._cb_free_cb(this._cb_data);\n" | 70 | << scope_tab << scope_tab << scope_tab << "this._cb_free_cb(this._cb_data);\n" |
68 | << scope_tab << "}\n\n" | 71 | << scope_tab << "}\n\n" |
69 | 72 | ||
70 | << scope_tab << "public " << type << " ManagedCb(" << (parameter % ",") << ")\n" | 73 | << scope_tab << "internal " << type << " ManagedCb(" << (parameter % ",") << ")\n" |
71 | << scope_tab << "{\n" | 74 | << scope_tab << "{\n" |
72 | << scope_tab << scope_tab << (f.return_type.c_type != "void" ? "return ": "") << "_cb(_cb_data, " << (argument_invocation_no_conversion % ", ") << ");\n" | 75 | << scope_tab << scope_tab << (f.return_type.c_type != "void" ? "return ": "") << "_cb(_cb_data, " << (argument_invocation_no_conversion % ", ") << ");\n" |
73 | << scope_tab << "}\n\n" | 76 | << scope_tab << "}\n\n" |
74 | 77 | ||
75 | << scope_tab << "public static " << type << " Cb(IntPtr cb_data, " << (parameter % ", ") << ")\n" | 78 | << scope_tab << "internal static " << type << " Cb(IntPtr cb_data, " << (parameter % ", ") << ")\n" |
76 | << scope_tab << "{\n" | 79 | << scope_tab << "{\n" |
77 | << scope_tab << scope_tab << "GCHandle handle = GCHandle.FromIntPtr(cb_data);\n" | 80 | << scope_tab << scope_tab << "GCHandle handle = GCHandle.FromIntPtr(cb_data);\n" |
78 | << scope_tab << scope_tab << string << " cb = (" << string << ")handle.Target;\n" | 81 | << scope_tab << scope_tab << string << " cb = (" << string << ")handle.Target;\n" |
diff --git a/src/bin/eolian_mono/eolian/mono/klass.hh b/src/bin/eolian_mono/eolian/mono/klass.hh index 639e263054..d8bea22024 100644 --- a/src/bin/eolian_mono/eolian/mono/klass.hh +++ b/src/bin/eolian_mono/eolian/mono/klass.hh | |||
@@ -14,6 +14,7 @@ | |||
14 | #include "function_definition.hh" | 14 | #include "function_definition.hh" |
15 | #include "function_registration.hh" | 15 | #include "function_registration.hh" |
16 | #include "function_declaration.hh" | 16 | #include "function_declaration.hh" |
17 | #include "documentation.hh" | ||
17 | #include "grammar/string.hpp" | 18 | #include "grammar/string.hpp" |
18 | #include "grammar/attribute_replace.hpp" | 19 | #include "grammar/attribute_replace.hpp" |
19 | #include "grammar/integral.hpp" | 20 | #include "grammar/integral.hpp" |
@@ -30,7 +31,8 @@ template <typename OutputIterator, typename Context> | |||
30 | static bool generate_static_cast_method(OutputIterator sink, const std::string &class_name, Context const &context) | 31 | static bool generate_static_cast_method(OutputIterator sink, const std::string &class_name, Context const &context) |
31 | { | 32 | { |
32 | return as_generator( | 33 | return as_generator( |
33 | scope_tab << "public static " << class_name << " static_cast(efl.Object obj)\n" | 34 | scope_tab << "///<summary>Casts obj into an instance of this type.</summary>\n" |
35 | << scope_tab << "public static " << class_name << " static_cast(efl.Object obj)\n" | ||
34 | << scope_tab << "{\n" | 36 | << scope_tab << "{\n" |
35 | << scope_tab << scope_tab << "if (obj == null)\n" | 37 | << scope_tab << scope_tab << "if (obj == null)\n" |
36 | << scope_tab << scope_tab << scope_tab << "throw new System.ArgumentNullException(\"obj\");\n" | 38 | << scope_tab << scope_tab << scope_tab << "throw new System.ArgumentNullException(\"obj\");\n" |
@@ -43,13 +45,15 @@ template <typename OutputIterator, typename Context> | |||
43 | static bool generate_equals_method(OutputIterator sink, Context const &context) | 45 | static bool generate_equals_method(OutputIterator sink, Context const &context) |
44 | { | 46 | { |
45 | return as_generator( | 47 | return as_generator( |
46 | scope_tab << "public override bool Equals(object obj)\n" | 48 | scope_tab << "///<summary>Verifies if the given object is equals to this.</summary>\n" |
49 | << scope_tab << "public override bool Equals(object obj)\n" | ||
47 | << scope_tab << "{\n" | 50 | << scope_tab << "{\n" |
48 | << scope_tab << scope_tab << "var other = obj as efl.Object;\n" | 51 | << scope_tab << scope_tab << "var other = obj as efl.Object;\n" |
49 | << scope_tab << scope_tab << "if (other == null)\n" | 52 | << scope_tab << scope_tab << "if (other == null)\n" |
50 | << scope_tab << scope_tab << scope_tab << "return false;\n" | 53 | << scope_tab << scope_tab << scope_tab << "return false;\n" |
51 | << scope_tab << scope_tab << "return this.raw_handle == other.raw_handle;\n" | 54 | << scope_tab << scope_tab << "return this.raw_handle == other.raw_handle;\n" |
52 | << scope_tab << "}\n" | 55 | << scope_tab << "}\n" |
56 | << scope_tab << "///<summary>Gets the hash code for this object based on the native pointer it points to.</summary>\n" | ||
53 | << scope_tab << "public override int GetHashCode()\n" | 57 | << scope_tab << "public override int GetHashCode()\n" |
54 | << scope_tab << "{\n" | 58 | << scope_tab << "{\n" |
55 | << scope_tab << scope_tab << "return this.raw_handle.ToInt32();\n" | 59 | << scope_tab << scope_tab << "return this.raw_handle.ToInt32();\n" |
@@ -156,8 +160,12 @@ struct klass | |||
156 | std::replace(evt_name.begin(), evt_name.end(), ',', '_'); | 160 | std::replace(evt_name.begin(), evt_name.end(), ',', '_'); |
157 | std::string arg_type = (*etype).original_type.visit(get_csharp_type_visitor{}); | 161 | std::string arg_type = (*etype).original_type.visit(get_csharp_type_visitor{}); |
158 | 162 | ||
163 | if (!as_generator("///<summary>Event argument wrapper for event " << string << ".</summary>\n" | ||
164 | ).generate(sink, evt_name, context)) | ||
165 | return false; | ||
159 | 166 | ||
160 | if (!as_generator("public class " << evt_name << "_Args : EventArgs {\n" | 167 | if (!as_generator("public class " << evt_name << "_Args : EventArgs {\n" |
168 | << scope_tab << "///<summary>Actual event payload.</summary>\n" | ||
161 | << scope_tab << "public " << arg_type << " arg { get; set; }\n" | 169 | << scope_tab << "public " << arg_type << " arg { get; set; }\n" |
162 | << "}\n").generate(sink, NULL, context)) | 170 | << "}\n").generate(sink, NULL, context)) |
163 | return false; | 171 | return false; |
@@ -166,6 +174,10 @@ struct klass | |||
166 | // Interface class | 174 | // Interface class |
167 | { | 175 | { |
168 | auto iface_cxt = context_add_tag(class_context{class_context::interface}, context); | 176 | auto iface_cxt = context_add_tag(class_context{class_context::interface}, context); |
177 | |||
178 | if(!as_generator(documentation).generate(sink, cls, iface_cxt)) | ||
179 | return false; | ||
180 | |||
169 | if(!as_generator | 181 | if(!as_generator |
170 | ( | 182 | ( |
171 | "public " /*<< class_type*/ "interface" /*<<*/ " " << string << " : " | 183 | "public " /*<< class_type*/ "interface" /*<<*/ " " << string << " : " |
@@ -199,6 +211,10 @@ struct klass | |||
199 | if (etype.is_engaged()) | 211 | if (etype.is_engaged()) |
200 | wrapper_args_type = "<" + evt_name + "_Args>"; | 212 | wrapper_args_type = "<" + evt_name + "_Args>"; |
201 | 213 | ||
214 | |||
215 | if (!as_generator(documentation(1)).generate(sink, e, iface_cxt)) | ||
216 | return false; | ||
217 | |||
202 | //FIXME Add a way to generate camelcase names | 218 | //FIXME Add a way to generate camelcase names |
203 | if (!as_generator( | 219 | if (!as_generator( |
204 | scope_tab << "event EventHandler" << wrapper_args_type << " " | 220 | scope_tab << "event EventHandler" << wrapper_args_type << " " |
@@ -218,19 +234,26 @@ struct klass | |||
218 | auto concrete_cxt = context_add_tag(class_context{class_context::concrete}, context); | 234 | auto concrete_cxt = context_add_tag(class_context{class_context::concrete}, context); |
219 | if(!as_generator | 235 | if(!as_generator |
220 | ( | 236 | ( |
221 | "public class " << string << "Concrete : " << string << "\n{\n" | 237 | documentation |
238 | << "sealed public class " << string << "Concrete : " << string << "\n{\n" | ||
222 | << scope_tab << "System.IntPtr handle;\n" | 239 | << scope_tab << "System.IntPtr handle;\n" |
240 | << scope_tab << "///<summary>Pointer to the native instance.</summary>\n" | ||
223 | << scope_tab << "public System.IntPtr raw_handle {\n" | 241 | << scope_tab << "public System.IntPtr raw_handle {\n" |
224 | << scope_tab << scope_tab << "get { return handle; }\n" | 242 | << scope_tab << scope_tab << "get { return handle; }\n" |
225 | << scope_tab << "}\n" | 243 | << scope_tab << "}\n" |
244 | << scope_tab << "///<summary>Pointer to the native class description.</summary>\n" | ||
226 | << scope_tab << "public System.IntPtr raw_klass {\n" | 245 | << scope_tab << "public System.IntPtr raw_klass {\n" |
227 | << scope_tab << scope_tab << "get { return efl.eo.Globals.efl_class_get(handle); }\n" | 246 | << scope_tab << scope_tab << "get { return efl.eo.Globals.efl_class_get(handle); }\n" |
228 | << scope_tab << "}\n" | 247 | << scope_tab << "}\n" |
248 | << scope_tab << "///<summary>Delegate for function to be called from inside the native constructor.</summary>\n" | ||
229 | << scope_tab << "public delegate void ConstructingMethod(" << string << " obj);\n" | 249 | << scope_tab << "public delegate void ConstructingMethod(" << string << " obj);\n" |
230 | << scope_tab << "[System.Runtime.InteropServices.DllImport(" << context_find_tag<library_context>(concrete_cxt).actual_library_name(cls.filename) | 250 | << scope_tab << "[System.Runtime.InteropServices.DllImport(" << context_find_tag<library_context>(concrete_cxt).actual_library_name(cls.filename) |
231 | << ")] static extern System.IntPtr\n" | 251 | << ")] private static extern System.IntPtr\n" |
232 | << scope_tab << scope_tab << class_get_name << "();\n" | 252 | << scope_tab << scope_tab << class_get_name << "();\n" |
233 | << (class_type == "class" ? "" : "/*") | 253 | << (class_type == "class" ? "" : "/*") |
254 | << scope_tab << "///<summary>Creates a new instance.</summary>\n" | ||
255 | << scope_tab << "///<param>Parent instance.</param>\n" | ||
256 | << scope_tab << "///<param>Delegate to call constructing methods that should be run inside the constructor.</param>\n" | ||
234 | << scope_tab << "public " << string << "Concrete(efl.Object parent = null, ConstructingMethod init_cb=null)\n" | 257 | << scope_tab << "public " << string << "Concrete(efl.Object parent = null, ConstructingMethod init_cb=null)\n" |
235 | << scope_tab << "{\n" | 258 | << scope_tab << "{\n" |
236 | << scope_tab << scope_tab << "System.IntPtr klass = " << class_get_name << "();\n" | 259 | << scope_tab << scope_tab << "System.IntPtr klass = " << class_get_name << "();\n" |
@@ -246,22 +269,26 @@ struct klass | |||
246 | << scope_tab << scope_tab << "eina.Error.RaiseIfOccurred();\n" | 269 | << scope_tab << scope_tab << "eina.Error.RaiseIfOccurred();\n" |
247 | << scope_tab << "}\n" | 270 | << scope_tab << "}\n" |
248 | << (class_type == "class" ? "" : "*/") | 271 | << (class_type == "class" ? "" : "*/") |
272 | << scope_tab << "///<summary>Constructs an instance from a native pointer.</summary>\n" | ||
249 | << scope_tab << "public " << string << "Concrete(System.IntPtr raw)\n" | 273 | << scope_tab << "public " << string << "Concrete(System.IntPtr raw)\n" |
250 | << scope_tab << "{\n" | 274 | << scope_tab << "{\n" |
251 | << scope_tab << scope_tab << "handle = raw;\n" | 275 | << scope_tab << scope_tab << "handle = raw;\n" |
252 | << scope_tab << scope_tab << "register_event_proxies();\n" | 276 | << scope_tab << scope_tab << "register_event_proxies();\n" |
253 | << scope_tab << "}\n" | 277 | << scope_tab << "}\n" |
278 | << scope_tab << "///<summary>Destructor.</summary>\n" | ||
254 | << scope_tab << "~" << string << "Concrete()\n" | 279 | << scope_tab << "~" << string << "Concrete()\n" |
255 | << scope_tab << "{\n" | 280 | << scope_tab << "{\n" |
256 | << scope_tab << scope_tab << "Dispose(false);\n" | 281 | << scope_tab << scope_tab << "Dispose(false);\n" |
257 | << scope_tab << "}\n" | 282 | << scope_tab << "}\n" |
258 | << scope_tab << "protected virtual void Dispose(bool disposing)\n" | 283 | << scope_tab << "///<summary>Releases the underlying native instance.</summary>\n" |
284 | << scope_tab << "protected void Dispose(bool disposing)\n" | ||
259 | << scope_tab << "{\n" | 285 | << scope_tab << "{\n" |
260 | << scope_tab << scope_tab << "if (handle != System.IntPtr.Zero) {\n" | 286 | << scope_tab << scope_tab << "if (handle != System.IntPtr.Zero) {\n" |
261 | << scope_tab << scope_tab << scope_tab << "efl.eo.Globals.efl_unref(handle);\n" | 287 | << scope_tab << scope_tab << scope_tab << "efl.eo.Globals.efl_unref(handle);\n" |
262 | << scope_tab << scope_tab << scope_tab << "handle = System.IntPtr.Zero;\n" | 288 | << scope_tab << scope_tab << scope_tab << "handle = System.IntPtr.Zero;\n" |
263 | << scope_tab << scope_tab << "}\n" | 289 | << scope_tab << scope_tab << "}\n" |
264 | << scope_tab << "}\n" | 290 | << scope_tab << "}\n" |
291 | << scope_tab << "///<summary>Releases the underlying native instance.</summary>\n" | ||
265 | << scope_tab << "public void Dispose()\n" | 292 | << scope_tab << "public void Dispose()\n" |
266 | << scope_tab << "{\n" | 293 | << scope_tab << "{\n" |
267 | << scope_tab << scope_tab << "Dispose(true);\n" | 294 | << scope_tab << scope_tab << "Dispose(true);\n" |
@@ -269,7 +296,7 @@ struct klass | |||
269 | << scope_tab << "}\n" | 296 | << scope_tab << "}\n" |
270 | ) | 297 | ) |
271 | .generate(sink | 298 | .generate(sink |
272 | , std::make_tuple( | 299 | , std::make_tuple( cls, |
273 | cls.cxx_name, cls.cxx_name, cls.cxx_name, cls.namespaces, cls.eolian_name | 300 | cls.cxx_name, cls.cxx_name, cls.cxx_name, cls.namespaces, cls.eolian_name |
274 | , cls.cxx_name, cls.namespaces, cls.eolian_name, cls.cxx_name | 301 | , cls.cxx_name, cls.namespaces, cls.eolian_name, cls.cxx_name |
275 | , cls.cxx_name) | 302 | , cls.cxx_name) |
@@ -304,22 +331,29 @@ struct klass | |||
304 | 331 | ||
305 | if(!as_generator | 332 | if(!as_generator |
306 | ( | 333 | ( |
307 | "public " << class_type << " " << string << "Inherit : " << string << "\n{\n" | 334 | documentation |
335 | << "public " << class_type << " " << string << "Inherit : " << string << "\n{\n" | ||
308 | << scope_tab << "System.IntPtr handle;\n" | 336 | << scope_tab << "System.IntPtr handle;\n" |
309 | << scope_tab << "public static System.IntPtr klass = System.IntPtr.Zero;\n" | 337 | << scope_tab << "internal static System.IntPtr klass = System.IntPtr.Zero;\n" |
310 | << scope_tab << "private static readonly object klassAllocLock = new object();\n" | 338 | << scope_tab << "private static readonly object klassAllocLock = new object();\n" |
311 | << scope_tab << (cls_has_string_return ? ("public Dictionary<String, IntPtr> cached_strings = new Dictionary<String, IntPtr>();") : "") << "\n" | 339 | << scope_tab << (cls_has_string_return ? ("internal Dictionary<String, IntPtr> cached_strings = new Dictionary<String, IntPtr>();") : "") << "\n" |
312 | << scope_tab << (cls_has_stringshare_return ? ("public Dictionary<String, IntPtr> cached_stringshares = new Dictionary<String, IntPtr>();") : "") << "\n" | 340 | << scope_tab << (cls_has_stringshare_return ? ("internal Dictionary<String, IntPtr> cached_stringshares = new Dictionary<String, IntPtr>();") : "") << "\n" |
341 | << scope_tab << "///<summary>Pointer to the native instance.</summary>\n" | ||
313 | << scope_tab << "public System.IntPtr raw_handle {\n" | 342 | << scope_tab << "public System.IntPtr raw_handle {\n" |
314 | << scope_tab << scope_tab << "get { return handle; }\n" | 343 | << scope_tab << scope_tab << "get { return handle; }\n" |
315 | << scope_tab << "}\n" | 344 | << scope_tab << "}\n" |
345 | << scope_tab << "///<summary>Pointer to the native class description.</summary>\n" | ||
316 | << scope_tab << "public System.IntPtr raw_klass {\n" | 346 | << scope_tab << "public System.IntPtr raw_klass {\n" |
317 | << scope_tab << scope_tab << "get { return klass; }\n" | 347 | << scope_tab << scope_tab << "get { return klass; }\n" |
318 | << scope_tab << "}\n" | 348 | << scope_tab << "}\n" |
349 | << scope_tab << "///<summary>Delegate for function to be called from inside the native constructor.</summary>\n" | ||
319 | << scope_tab << "public delegate void ConstructingMethod(" << string << " obj);\n" | 350 | << scope_tab << "public delegate void ConstructingMethod(" << string << " obj);\n" |
320 | << scope_tab << "[System.Runtime.InteropServices.DllImport(" << context_find_tag<library_context>(inherit_cxt).actual_library_name(cls.filename) | 351 | << scope_tab << "[System.Runtime.InteropServices.DllImport(" << context_find_tag<library_context>(inherit_cxt).actual_library_name(cls.filename) |
321 | << ")] static extern System.IntPtr\n" | 352 | << ")] private static extern System.IntPtr\n" |
322 | << scope_tab << scope_tab << class_get_name << "();\n" | 353 | << scope_tab << scope_tab << class_get_name << "();\n" |
354 | << scope_tab << "///<summary>Creates a new instance.</summary>\n" | ||
355 | << scope_tab << "///<param>Parent instance.</param>\n" | ||
356 | << scope_tab << "///<param>Delegate to call constructing methods that should be run inside the constructor.</param>\n" | ||
323 | << scope_tab << "public " << string << "Inherit(efl.Object parent = null, ConstructingMethod init_cb=null)\n" | 357 | << scope_tab << "public " << string << "Inherit(efl.Object parent = null, ConstructingMethod init_cb=null)\n" |
324 | << scope_tab << "{\n" | 358 | << scope_tab << "{\n" |
325 | << scope_tab << scope_tab << "if (klass == System.IntPtr.Zero) {\n" | 359 | << scope_tab << scope_tab << "if (klass == System.IntPtr.Zero) {\n" |
@@ -339,10 +373,12 @@ struct klass | |||
339 | << scope_tab << scope_tab << "register_event_proxies();\n" | 373 | << scope_tab << scope_tab << "register_event_proxies();\n" |
340 | << scope_tab << scope_tab << "eina.Error.RaiseIfOccurred();\n" | 374 | << scope_tab << scope_tab << "eina.Error.RaiseIfOccurred();\n" |
341 | << scope_tab << "}\n" | 375 | << scope_tab << "}\n" |
376 | << scope_tab << "///<summary>Destructor.</summary>\n" | ||
342 | << scope_tab << "~" << string << "Inherit()\n" | 377 | << scope_tab << "~" << string << "Inherit()\n" |
343 | << scope_tab << "{\n" | 378 | << scope_tab << "{\n" |
344 | << scope_tab << scope_tab << "Dispose(false);\n" | 379 | << scope_tab << scope_tab << "Dispose(false);\n" |
345 | << scope_tab << "}\n" | 380 | << scope_tab << "}\n" |
381 | << scope_tab << "///<summary>Releases the underlying native instance.</summary>\n" | ||
346 | << scope_tab << "protected virtual void Dispose(bool disposing)\n" | 382 | << scope_tab << "protected virtual void Dispose(bool disposing)\n" |
347 | << scope_tab << "{\n" | 383 | << scope_tab << "{\n" |
348 | << scope_tab << scope_tab << "if (handle != System.IntPtr.Zero) {\n" | 384 | << scope_tab << scope_tab << "if (handle != System.IntPtr.Zero) {\n" |
@@ -350,6 +386,7 @@ struct klass | |||
350 | << scope_tab << scope_tab << scope_tab << "handle = System.IntPtr.Zero;\n" | 386 | << scope_tab << scope_tab << scope_tab << "handle = System.IntPtr.Zero;\n" |
351 | << scope_tab << scope_tab << "}\n" | 387 | << scope_tab << scope_tab << "}\n" |
352 | << scope_tab << "}\n" | 388 | << scope_tab << "}\n" |
389 | << scope_tab << "///<summary>Releases the underlying native instance.</summary>\n" | ||
353 | << scope_tab << "public void Dispose()\n" | 390 | << scope_tab << "public void Dispose()\n" |
354 | << scope_tab << "{\n" | 391 | << scope_tab << "{\n" |
355 | << scope_tab << (cls_has_string_return ? "efl.eo.Globals.free_dict_values(cached_strings);" : "") << "\n" | 392 | << scope_tab << (cls_has_string_return ? "efl.eo.Globals.free_dict_values(cached_strings);" : "") << "\n" |
@@ -360,7 +397,7 @@ struct klass | |||
360 | ) | 397 | ) |
361 | .generate(sink | 398 | .generate(sink |
362 | , std::make_tuple( | 399 | , std::make_tuple( |
363 | cls.cxx_name, cls.cxx_name, cls.cxx_name, cls.namespaces, cls.eolian_name | 400 | cls, cls.cxx_name, cls.cxx_name, cls.cxx_name, cls.namespaces, cls.eolian_name |
364 | , cls.cxx_name, cls.cxx_name, cls.namespaces, cls.eolian_name, cls.cxx_name | 401 | , cls.cxx_name, cls.cxx_name, cls.namespaces, cls.eolian_name, cls.cxx_name |
365 | , cls.cxx_name) | 402 | , cls.cxx_name) |
366 | , inherit_cxt)) | 403 | , inherit_cxt)) |
@@ -399,7 +436,7 @@ struct klass | |||
399 | auto inative_cxt = context_add_tag(class_context{class_context::inherit_native}, context); | 436 | auto inative_cxt = context_add_tag(class_context{class_context::inherit_native}, context); |
400 | if(!as_generator | 437 | if(!as_generator |
401 | ( | 438 | ( |
402 | "public " << class_type << " " << string << "NativeInherit {\n" | 439 | "internal " << class_type << " " << string << "NativeInherit {\n" |
403 | << scope_tab << "public static byte class_initializer(IntPtr klass)\n" | 440 | << scope_tab << "public static byte class_initializer(IntPtr klass)\n" |
404 | << scope_tab << "{\n" | 441 | << scope_tab << "{\n" |
405 | << scope_tab << scope_tab << "Efl_Op_Description[] descs = new Efl_Op_Description[" << grammar::int_ << "];\n" | 442 | << scope_tab << scope_tab << "Efl_Op_Description[] descs = new Efl_Op_Description[" << grammar::int_ << "];\n" |
@@ -528,7 +565,7 @@ struct klass | |||
528 | << scope_tab << scope_tab << scope_tab << "efl.kw_event.Description desc = new efl.kw_event.Description(key);\n" | 565 | << scope_tab << scope_tab << scope_tab << "efl.kw_event.Description desc = new efl.kw_event.Description(key);\n" |
529 | << scope_tab << scope_tab << scope_tab << "bool result = efl.eo.Globals.efl_event_callback_priority_add(handle, desc, 0, evt_delegate, System.IntPtr.Zero);\n" | 566 | << scope_tab << scope_tab << scope_tab << "bool result = efl.eo.Globals.efl_event_callback_priority_add(handle, desc, 0, evt_delegate, System.IntPtr.Zero);\n" |
530 | << scope_tab << scope_tab << scope_tab << "if (!result) {\n" | 567 | << scope_tab << scope_tab << scope_tab << "if (!result) {\n" |
531 | << scope_tab << scope_tab << scope_tab << scope_tab << "eina.Log.Error(\"Failed to add event proxy for event ${key}\");\n" | 568 | << scope_tab << scope_tab << scope_tab << scope_tab << "eina.Log.Error($\"Failed to add event proxy for event {key}\");\n" |
532 | << scope_tab << scope_tab << scope_tab << scope_tab << "return false;\n" | 569 | << scope_tab << scope_tab << scope_tab << scope_tab << "return false;\n" |
533 | << scope_tab << scope_tab << scope_tab << "}\n" | 570 | << scope_tab << scope_tab << scope_tab << "}\n" |
534 | << scope_tab << scope_tab << scope_tab << "eina.Error.RaiseIfOccurred();\n" | 571 | << scope_tab << scope_tab << scope_tab << "eina.Error.RaiseIfOccurred();\n" |
@@ -544,12 +581,12 @@ struct klass | |||
544 | << scope_tab << scope_tab << scope_tab << "efl.kw_event.Description desc = new efl.kw_event.Description(key);\n" | 581 | << scope_tab << scope_tab << scope_tab << "efl.kw_event.Description desc = new efl.kw_event.Description(key);\n" |
545 | << scope_tab << scope_tab << scope_tab << "bool result = efl.eo.Globals.efl_event_callback_del(handle, desc, evt_delegate, System.IntPtr.Zero);\n" | 582 | << scope_tab << scope_tab << scope_tab << "bool result = efl.eo.Globals.efl_event_callback_del(handle, desc, evt_delegate, System.IntPtr.Zero);\n" |
546 | << scope_tab << scope_tab << scope_tab << "if (!result) {\n" | 583 | << scope_tab << scope_tab << scope_tab << "if (!result) {\n" |
547 | << scope_tab << scope_tab << scope_tab << scope_tab << "eina.Log.Error(\"Failed to remove event proxy for event ${key}\");\n" | 584 | << scope_tab << scope_tab << scope_tab << scope_tab << "eina.Log.Error($\"Failed to remove event proxy for event {key}\");\n" |
548 | << scope_tab << scope_tab << scope_tab << scope_tab << "return false;\n" | 585 | << scope_tab << scope_tab << scope_tab << scope_tab << "return false;\n" |
549 | << scope_tab << scope_tab << scope_tab << "}\n" | 586 | << scope_tab << scope_tab << scope_tab << "}\n" |
550 | << scope_tab << scope_tab << scope_tab << "eina.Error.RaiseIfOccurred();\n" | 587 | << scope_tab << scope_tab << scope_tab << "eina.Error.RaiseIfOccurred();\n" |
551 | << scope_tab << scope_tab << "} else if (event_count == 0) {\n" | 588 | << scope_tab << scope_tab << "} else if (event_count == 0) {\n" |
552 | << scope_tab << scope_tab << scope_tab << "eina.Log.Error(\"Trying to remove proxy for event ${key} when there is nothing registered.\");\n" | 589 | << scope_tab << scope_tab << scope_tab << "eina.Log.Error($\"Trying to remove proxy for event {key} when there is nothing registered.\");\n" |
553 | << scope_tab << scope_tab << scope_tab << "return false;\n" | 590 | << scope_tab << scope_tab << scope_tab << "return false;\n" |
554 | << scope_tab << scope_tab << "} \n" | 591 | << scope_tab << scope_tab << "} \n" |
555 | << scope_tab << scope_tab << "event_cb_count[key]--;\n" | 592 | << scope_tab << scope_tab << "event_cb_count[key]--;\n" |
@@ -586,8 +623,12 @@ struct klass | |||
586 | // Marshal.PtrToStructure for value types | 623 | // Marshal.PtrToStructure for value types |
587 | 624 | ||
588 | // Wrapper event declaration | 625 | // Wrapper event declaration |
626 | if(!as_generator(documentation(1)).generate(sink, e, context)) | ||
627 | return false; | ||
628 | |||
589 | if(!as_generator( | 629 | if(!as_generator( |
590 | scope_tab << "protected event EventHandler" << wrapper_args_template << " " << upper_name << ";\n" | 630 | scope_tab << "protected event EventHandler" << wrapper_args_template << " " << upper_name << ";\n" |
631 | << scope_tab << "///<summary>Method to raise event "<< event_name << ".</summary>\n" | ||
591 | << scope_tab << "protected void On_" << event_name << "(" << wrapper_args_type << " e)\n" | 632 | << scope_tab << "protected void On_" << event_name << "(" << wrapper_args_type << " e)\n" |
592 | << scope_tab << "{\n" | 633 | << scope_tab << "{\n" |
593 | << scope_tab << scope_tab << "EventHandler" << wrapper_args_template << " evt;\n" | 634 | << scope_tab << scope_tab << "EventHandler" << wrapper_args_template << " evt;\n" |
@@ -596,13 +637,13 @@ struct klass | |||
596 | << scope_tab << scope_tab << "}\n" | 637 | << scope_tab << scope_tab << "}\n" |
597 | << scope_tab << scope_tab << "if (evt != null) { evt(this, e); }\n" | 638 | << scope_tab << scope_tab << "if (evt != null) { evt(this, e); }\n" |
598 | << scope_tab << "}\n" | 639 | << scope_tab << "}\n" |
599 | << scope_tab << "public void on_" << event_name << "_NativeCallback(System.IntPtr data, ref efl.Event evt)\n" | 640 | << scope_tab << "private void on_" << event_name << "_NativeCallback(System.IntPtr data, ref efl.Event evt)\n" |
600 | << scope_tab << "{\n" | 641 | << scope_tab << "{\n" |
601 | << scope_tab << event_args | 642 | << scope_tab << event_args |
602 | << scope_tab << scope_tab << "try {\n" | 643 | << scope_tab << scope_tab << "try {\n" |
603 | << scope_tab << scope_tab << scope_tab << "On_" << event_name << "(args);\n" | 644 | << scope_tab << scope_tab << scope_tab << "On_" << event_name << "(args);\n" |
604 | << scope_tab << scope_tab << "} catch (Exception e) {\n" | 645 | << scope_tab << scope_tab << "} catch (Exception e) {\n" |
605 | << scope_tab << scope_tab << scope_tab << "eina.Log.Warning(e.ToString());\n" | 646 | << scope_tab << scope_tab << scope_tab << "eina.Log.Error(e.ToString());\n" |
606 | << scope_tab << scope_tab << scope_tab << "eina.Error.Set(eina.Error.EFL_ERROR);\n" | 647 | << scope_tab << scope_tab << scope_tab << "eina.Error.Set(eina.Error.EFL_ERROR);\n" |
607 | << scope_tab << scope_tab << "}\n" | 648 | << scope_tab << scope_tab << "}\n" |
608 | << scope_tab << "}\n" | 649 | << scope_tab << "}\n" |
@@ -618,7 +659,7 @@ struct klass | |||
618 | << scope_tab << scope_tab << scope_tab << scope_tab << "if (add_cpp_event_handler(key, this.evt_" << event_name << "_delegate))\n" | 659 | << scope_tab << scope_tab << scope_tab << scope_tab << "if (add_cpp_event_handler(key, this.evt_" << event_name << "_delegate))\n" |
619 | << scope_tab << scope_tab << scope_tab << scope_tab << scope_tab << upper_name << " += value;\n" | 660 | << scope_tab << scope_tab << scope_tab << scope_tab << scope_tab << upper_name << " += value;\n" |
620 | << scope_tab << scope_tab << scope_tab << scope_tab << "else\n" | 661 | << scope_tab << scope_tab << scope_tab << scope_tab << "else\n" |
621 | << scope_tab << scope_tab << scope_tab << scope_tab << scope_tab << "eina.Log.Error(\"Error adding proxy for event ${key}\");\n" | 662 | << scope_tab << scope_tab << scope_tab << scope_tab << scope_tab << "eina.Log.Error($\"Error adding proxy for event {key}\");\n" |
622 | << scope_tab << scope_tab << scope_tab << "}\n" // End of lock block | 663 | << scope_tab << scope_tab << scope_tab << "}\n" // End of lock block |
623 | << scope_tab << scope_tab << "}\n" | 664 | << scope_tab << scope_tab << "}\n" |
624 | << scope_tab << scope_tab << "remove {\n" | 665 | << scope_tab << scope_tab << "remove {\n" |
@@ -627,7 +668,7 @@ struct klass | |||
627 | << scope_tab << scope_tab << scope_tab << scope_tab << "if (remove_cpp_event_handler(key, this.evt_" << event_name << "_delegate))\n" | 668 | << scope_tab << scope_tab << scope_tab << scope_tab << "if (remove_cpp_event_handler(key, this.evt_" << event_name << "_delegate))\n" |
628 | << scope_tab << scope_tab << scope_tab << scope_tab << scope_tab << upper_name << " -= value;\n" | 669 | << scope_tab << scope_tab << scope_tab << scope_tab << scope_tab << upper_name << " -= value;\n" |
629 | << scope_tab << scope_tab << scope_tab << scope_tab << "else\n" | 670 | << scope_tab << scope_tab << scope_tab << scope_tab << "else\n" |
630 | << scope_tab << scope_tab << scope_tab << scope_tab << scope_tab << "eina.Log.Error(\"Error removing proxy for event ${key}\");\n" | 671 | << scope_tab << scope_tab << scope_tab << scope_tab << scope_tab << "eina.Log.Error($\"Error removing proxy for event {key}\");\n" |
631 | << scope_tab << scope_tab << scope_tab << "}\n" // End of lock block | 672 | << scope_tab << scope_tab << scope_tab << "}\n" // End of lock block |
632 | << scope_tab << scope_tab << "}\n" | 673 | << scope_tab << scope_tab << "}\n" |
633 | << scope_tab << "}\n") | 674 | << scope_tab << "}\n") |
@@ -672,8 +713,12 @@ struct klass | |||
672 | wrapper_args_type << "EventArgs"; | 713 | wrapper_args_type << "EventArgs"; |
673 | } | 714 | } |
674 | 715 | ||
716 | if (!as_generator(documentation(1)).generate(sink, e, context)) | ||
717 | return false; | ||
718 | |||
675 | if (!as_generator( | 719 | if (!as_generator( |
676 | scope_tab << "protected event EventHandler" << wrapper_args_template << " " << wrapper_evt_name << ";\n" | 720 | scope_tab << "protected event EventHandler" << wrapper_args_template << " " << wrapper_evt_name << ";\n" |
721 | << scope_tab << "///<summary>Method to raise event "<< wrapper_evt_name << ".</summary>\n" | ||
677 | << scope_tab << "protected void On_" << wrapper_evt_name << "(" << wrapper_args_type.str() << " e)\n" | 722 | << scope_tab << "protected void On_" << wrapper_evt_name << "(" << wrapper_args_type.str() << " e)\n" |
678 | << scope_tab << "{\n" | 723 | << scope_tab << "{\n" |
679 | << scope_tab << scope_tab << "EventHandler" << wrapper_args_template << " evt;\n" | 724 | << scope_tab << scope_tab << "EventHandler" << wrapper_args_template << " evt;\n" |
@@ -683,13 +728,13 @@ struct klass | |||
683 | << scope_tab << scope_tab << "if (evt != null) { evt(this, e); }\n" | 728 | << scope_tab << scope_tab << "if (evt != null) { evt(this, e); }\n" |
684 | << scope_tab << "}\n" | 729 | << scope_tab << "}\n" |
685 | << scope_tab << "efl.Event_Cb evt_" << wrapper_evt_name << "_delegate;\n" | 730 | << scope_tab << "efl.Event_Cb evt_" << wrapper_evt_name << "_delegate;\n" |
686 | << scope_tab << "protected void on_" << wrapper_evt_name << "_NativeCallback(System.IntPtr data, ref efl.Event evt)" | 731 | << scope_tab << "private void on_" << wrapper_evt_name << "_NativeCallback(System.IntPtr data, ref efl.Event evt)" |
687 | << scope_tab << "{\n" | 732 | << scope_tab << "{\n" |
688 | << scope_tab << event_args | 733 | << scope_tab << event_args |
689 | << scope_tab << scope_tab << "try {\n" | 734 | << scope_tab << scope_tab << "try {\n" |
690 | << scope_tab << scope_tab << scope_tab << "On_" << wrapper_evt_name << "(args);\n" | 735 | << scope_tab << scope_tab << scope_tab << "On_" << wrapper_evt_name << "(args);\n" |
691 | << scope_tab << scope_tab << "} catch (Exception e) {\n" | 736 | << scope_tab << scope_tab << "} catch (Exception e) {\n" |
692 | << scope_tab << scope_tab << scope_tab << "eina.Log.Warning(e.ToString());\n" | 737 | << scope_tab << scope_tab << scope_tab << "eina.Log.Error(e.ToString());\n" |
693 | << scope_tab << scope_tab << scope_tab << "eina.Error.Set(eina.Error.EFL_ERROR);\n" | 738 | << scope_tab << scope_tab << scope_tab << "eina.Error.Set(eina.Error.EFL_ERROR);\n" |
694 | << scope_tab << scope_tab << "}\n" | 739 | << scope_tab << scope_tab << "}\n" |
695 | << scope_tab << "}\n" | 740 | << scope_tab << "}\n" |
@@ -703,7 +748,7 @@ struct klass | |||
703 | << scope_tab << scope_tab << scope_tab << scope_tab << "if (add_cpp_event_handler(key, this.evt_" << wrapper_evt_name << "_delegate))\n" | 748 | << scope_tab << scope_tab << scope_tab << scope_tab << "if (add_cpp_event_handler(key, this.evt_" << wrapper_evt_name << "_delegate))\n" |
704 | << scope_tab << scope_tab << scope_tab << scope_tab << scope_tab << wrapper_evt_name << " += value;\n" | 749 | << scope_tab << scope_tab << scope_tab << scope_tab << scope_tab << wrapper_evt_name << " += value;\n" |
705 | << scope_tab << scope_tab << scope_tab << scope_tab << "else\n" | 750 | << scope_tab << scope_tab << scope_tab << scope_tab << "else\n" |
706 | << scope_tab << scope_tab << scope_tab << scope_tab << scope_tab << "eina.Log.Error(\"Error adding proxy for event ${key}\");\n" | 751 | << scope_tab << scope_tab << scope_tab << scope_tab << scope_tab << "eina.Log.Error($\"Error adding proxy for event {key}\");\n" |
707 | << scope_tab << scope_tab << scope_tab << "}\n" // End of lock block | 752 | << scope_tab << scope_tab << scope_tab << "}\n" // End of lock block |
708 | << scope_tab << scope_tab << "}\n" | 753 | << scope_tab << scope_tab << "}\n" |
709 | << scope_tab << scope_tab << "remove {\n" | 754 | << scope_tab << scope_tab << "remove {\n" |
@@ -712,7 +757,7 @@ struct klass | |||
712 | << scope_tab << scope_tab << scope_tab << scope_tab << "if (remove_cpp_event_handler(key, this.evt_" << wrapper_evt_name << "_delegate))\n" | 757 | << scope_tab << scope_tab << scope_tab << scope_tab << "if (remove_cpp_event_handler(key, this.evt_" << wrapper_evt_name << "_delegate))\n" |
713 | << scope_tab << scope_tab << scope_tab << scope_tab << scope_tab << wrapper_evt_name << " -= value;\n" | 758 | << scope_tab << scope_tab << scope_tab << scope_tab << scope_tab << wrapper_evt_name << " -= value;\n" |
714 | << scope_tab << scope_tab << scope_tab << scope_tab << "else\n" | 759 | << scope_tab << scope_tab << scope_tab << scope_tab << "else\n" |
715 | << scope_tab << scope_tab << scope_tab << scope_tab << scope_tab << "eina.Log.Error(\"Error removing proxy for event ${key}\");\n" | 760 | << scope_tab << scope_tab << scope_tab << scope_tab << scope_tab << "eina.Log.Error($\"Error removing proxy for event {key}\");\n" |
716 | << scope_tab << scope_tab << scope_tab << "}\n" // End of lock block | 761 | << scope_tab << scope_tab << scope_tab << "}\n" // End of lock block |
717 | << scope_tab << scope_tab << "}\n" | 762 | << scope_tab << scope_tab << "}\n" |
718 | << scope_tab << "}\n") | 763 | << scope_tab << "}\n") |
diff --git a/src/bin/eolian_mono/eolian/mono/struct_definition.hh b/src/bin/eolian_mono/eolian/mono/struct_definition.hh index 85cc14cc0d..5db84e0a9b 100644 --- a/src/bin/eolian_mono/eolian/mono/struct_definition.hh +++ b/src/bin/eolian_mono/eolian/mono/struct_definition.hh | |||
@@ -10,6 +10,7 @@ | |||
10 | #include "type.hh" | 10 | #include "type.hh" |
11 | #include "keyword.hh" | 11 | #include "keyword.hh" |
12 | #include "using_decl.hh" | 12 | #include "using_decl.hh" |
13 | #include "documentation.hh" | ||
13 | 14 | ||
14 | namespace eolian_mono { | 15 | namespace eolian_mono { |
15 | 16 | ||
@@ -35,6 +36,9 @@ struct struct_definition_generator | |||
35 | template <typename OutputIterator, typename Context> | 36 | template <typename OutputIterator, typename Context> |
36 | bool generate(OutputIterator sink, attributes::struct_def const& struct_, Context const& context) const | 37 | bool generate(OutputIterator sink, attributes::struct_def const& struct_, Context const& context) const |
37 | { | 38 | { |
39 | |||
40 | if(!as_generator(documentation).generate(sink, struct_, context)) | ||
41 | return false; | ||
38 | if(!as_generator | 42 | if(!as_generator |
39 | ( | 43 | ( |
40 | "[StructLayout(LayoutKind.Sequential)]\n" | 44 | "[StructLayout(LayoutKind.Sequential)]\n" |
@@ -46,11 +50,14 @@ struct struct_definition_generator | |||
46 | // iterate struct fields | 50 | // iterate struct fields |
47 | for (auto const& field : struct_.fields) | 51 | for (auto const& field : struct_.fields) |
48 | { | 52 | { |
53 | auto field_name = field.name; | ||
54 | field_name[0] = std::toupper(field_name[0]); // Hack to allow 'static' as a field name | ||
49 | if (!as_generator | 55 | if (!as_generator |
50 | ( | 56 | ( |
51 | " public " << type << " " << string << ";\n" | 57 | documentation(1) |
58 | << scope_tab(1) << "public " << type << " " << string << ";\n" | ||
52 | ) | 59 | ) |
53 | .generate(sink, std::make_tuple(field.type, to_field_name(field.name)), context)) | 60 | .generate(sink, std::make_tuple(field, field.type, to_field_name(field.name)), context)) |
54 | return false; | 61 | return false; |
55 | } | 62 | } |
56 | 63 | ||
@@ -79,7 +86,7 @@ struct struct_internal_definition_generator | |||
79 | if (!as_generator | 86 | if (!as_generator |
80 | ( | 87 | ( |
81 | "[StructLayout(LayoutKind.Sequential)]\n" | 88 | "[StructLayout(LayoutKind.Sequential)]\n" |
82 | "public struct " << string << "\n{\n" | 89 | "internal struct " << string << "\n{\n" |
83 | ) | 90 | ) |
84 | .generate(sink, binding_struct_internal_name(struct_), context)) | 91 | .generate(sink, binding_struct_internal_name(struct_), context)) |
85 | return false; | 92 | return false; |
@@ -97,11 +104,11 @@ struct struct_internal_definition_generator | |||
97 | || regular->base_type == "stringshare" | 104 | || regular->base_type == "stringshare" |
98 | || regular->base_type == "any_value_ptr"))) | 105 | || regular->base_type == "any_value_ptr"))) |
99 | { | 106 | { |
100 | if (!as_generator(" public System.IntPtr " << string << ";\n") | 107 | if (!as_generator(" internal System.IntPtr " << string << ";\n") |
101 | .generate(sink, field_name, context)) | 108 | .generate(sink, field_name, context)) |
102 | return false; | 109 | return false; |
103 | } | 110 | } |
104 | else if (!as_generator(eolian_mono::marshall_annotation(false) << " public " << eolian_mono::marshall_type(false) << " " << string << ";\n") | 111 | else if (!as_generator(eolian_mono::marshall_annotation(false) << " internal " << eolian_mono::marshall_type(false) << " " << string << ";\n") |
105 | .generate(sink, std::make_tuple(field.type, field.type, field_name), context)) | 112 | .generate(sink, std::make_tuple(field.type, field.type, field_name), context)) |
106 | return false; | 113 | return false; |
107 | } | 114 | } |
@@ -112,7 +119,7 @@ struct struct_internal_definition_generator | |||
112 | // those 'mini-amd64.c condition fields not met' crashes. | 119 | // those 'mini-amd64.c condition fields not met' crashes. |
113 | if (struct_.fields.size() == 0) | 120 | if (struct_.fields.size() == 0) |
114 | { | 121 | { |
115 | if (!as_generator("public IntPtr field;\n").generate(sink, nullptr, context)) | 122 | if (!as_generator("internal IntPtr field;\n").generate(sink, nullptr, context)) |
116 | return false; | 123 | return false; |
117 | } | 124 | } |
118 | 125 | ||
@@ -330,7 +337,7 @@ struct struct_binding_conversion_functions_generator | |||
330 | // Open conversion class | 337 | // Open conversion class |
331 | if (!as_generator | 338 | if (!as_generator |
332 | ( | 339 | ( |
333 | "public static class " << string << "_StructConvertion\n{\n" | 340 | "internal static class " << string << "_StructConvertion\n{\n" |
334 | ) | 341 | ) |
335 | .generate(sink, struct_.cxx_name, context)) | 342 | .generate(sink, struct_.cxx_name, context)) |
336 | return false; | 343 | return false; |
@@ -338,7 +345,7 @@ struct struct_binding_conversion_functions_generator | |||
338 | // to internal | 345 | // to internal |
339 | if (!as_generator | 346 | if (!as_generator |
340 | ( | 347 | ( |
341 | scope_tab << "public static " << string << " ToInternal(" << string << " _external_struct)\n" | 348 | scope_tab << "internal static " << string << " ToInternal(" << string << " _external_struct)\n" |
342 | << scope_tab << "{\n" | 349 | << scope_tab << "{\n" |
343 | << scope_tab << scope_tab << "var _internal_struct = new " << string << "();\n\n" | 350 | << scope_tab << scope_tab << "var _internal_struct = new " << string << "();\n\n" |
344 | ) | 351 | ) |
@@ -366,7 +373,7 @@ struct struct_binding_conversion_functions_generator | |||
366 | // to external | 373 | // to external |
367 | if (!as_generator | 374 | if (!as_generator |
368 | ( | 375 | ( |
369 | scope_tab << "public static " << string << " ToExternal(" << string << " _internal_struct)\n" | 376 | scope_tab << "internal static " << string << " ToExternal(" << string << " _internal_struct)\n" |
370 | << scope_tab << "{\n" | 377 | << scope_tab << "{\n" |
371 | << scope_tab << scope_tab << "var _external_struct = new " << string << "();\n\n" | 378 | << scope_tab << scope_tab << "var _external_struct = new " << string << "();\n\n" |
372 | ) | 379 | ) |
diff --git a/src/bin/eolian_mono/eolian/mono/using_decl.hh b/src/bin/eolian_mono/eolian/mono/using_decl.hh index 97bf62c526..fdea162f59 100644 --- a/src/bin/eolian_mono/eolian/mono/using_decl.hh +++ b/src/bin/eolian_mono/eolian/mono/using_decl.hh | |||
@@ -1,11 +1,19 @@ | |||
1 | #ifndef EOLIAN_MONO_USING_DECL_HH | 1 | #ifndef EOLIAN_MONO_USING_DECL_HH |
2 | #define EOLIAN_MONO_USING_DECL_HH | 2 | #define EOLIAN_MONO_USING_DECL_HH |
3 | 3 | ||
4 | #include <grammar/generator.hpp> | ||
5 | #include <grammar/context.hpp> | ||
6 | #include <grammar/kleene.hpp> | ||
7 | #include <grammar/integral.hpp> | ||
8 | #include <grammar/string.hpp> | ||
9 | #include <grammar/html_escaped_string.hpp> | ||
10 | |||
4 | namespace eolian_mono { | 11 | namespace eolian_mono { |
5 | 12 | ||
6 | namespace grammar = efl::eolian::grammar; | 13 | namespace grammar = efl::eolian::grammar; |
7 | using efl::eolian::grammar::as_generator; | 14 | using efl::eolian::grammar::as_generator; |
8 | using efl::eolian::grammar::string; | 15 | using efl::eolian::grammar::string; |
16 | using efl::eolian::grammar::html_escaped_string; | ||
9 | using efl::eolian::grammar::operator<<; | 17 | using efl::eolian::grammar::operator<<; |
10 | using efl::eolian::grammar::operator%; | 18 | using efl::eolian::grammar::operator%; |
11 | using efl::eolian::grammar::operator*; | 19 | using efl::eolian::grammar::operator*; |
diff --git a/src/bindings/mono/ecore_evas_mono/ecore_evas.cs b/src/bindings/mono/ecore_evas_mono/ecore_evas.cs index a1c8a6dfe2..81609f4736 100644 --- a/src/bindings/mono/ecore_evas_mono/ecore_evas.cs +++ b/src/bindings/mono/ecore_evas_mono/ecore_evas.cs | |||
@@ -1,3 +1,4 @@ | |||
1 | #pragma warning disable 1591 | ||
1 | 2 | ||
2 | using System; | 3 | using System; |
3 | using System.Runtime.InteropServices; | 4 | using System.Runtime.InteropServices; |
diff --git a/src/bindings/mono/efl_mono/efl_all.cs b/src/bindings/mono/efl_mono/efl_all.cs index 697cdf2f94..440f44b773 100644 --- a/src/bindings/mono/efl_mono/efl_all.cs +++ b/src/bindings/mono/efl_mono/efl_all.cs | |||
@@ -1,3 +1,5 @@ | |||
1 | #pragma warning disable 1591 | ||
2 | |||
1 | using System; | 3 | using System; |
2 | using System.Runtime.InteropServices; | 4 | using System.Runtime.InteropServices; |
3 | using System.Threading; | 5 | using System.Threading; |
diff --git a/src/bindings/mono/efl_mono/efl_libs.cs.in b/src/bindings/mono/efl_mono/efl_libs.cs.in index e1c7dc6aeb..86742641fe 100644 --- a/src/bindings/mono/efl_mono/efl_libs.cs.in +++ b/src/bindings/mono/efl_mono/efl_libs.cs.in | |||
@@ -1,3 +1,4 @@ | |||
1 | #pragma warning disable 1591 | ||
1 | 2 | ||
2 | namespace efl { | 3 | namespace efl { |
3 | 4 | ||
diff --git a/src/bindings/mono/eina_mono/eina_array.cs b/src/bindings/mono/eina_mono/eina_array.cs index 98e43b88b8..6156c0cbb1 100644 --- a/src/bindings/mono/eina_mono/eina_array.cs +++ b/src/bindings/mono/eina_mono/eina_array.cs | |||
@@ -1,3 +1,5 @@ | |||
1 | #pragma warning disable 1591 | ||
2 | |||
1 | using System; | 3 | using System; |
2 | using System.Runtime.InteropServices; | 4 | using System.Runtime.InteropServices; |
3 | using System.Collections.Generic; | 5 | using System.Collections.Generic; |
diff --git a/src/bindings/mono/eina_mono/eina_binbuf.cs b/src/bindings/mono/eina_mono/eina_binbuf.cs index dd30ab1275..ecfbfc3705 100644 --- a/src/bindings/mono/eina_mono/eina_binbuf.cs +++ b/src/bindings/mono/eina_mono/eina_binbuf.cs | |||
@@ -1,3 +1,5 @@ | |||
1 | #pragma warning disable 1591 | ||
2 | |||
1 | using System; | 3 | using System; |
2 | using System.Runtime.InteropServices; | 4 | using System.Runtime.InteropServices; |
3 | 5 | ||
diff --git a/src/bindings/mono/eina_mono/eina_common.cs b/src/bindings/mono/eina_mono/eina_common.cs index fe4e3ecabb..4bd93ce25b 100644 --- a/src/bindings/mono/eina_mono/eina_common.cs +++ b/src/bindings/mono/eina_mono/eina_common.cs | |||
@@ -1,3 +1,5 @@ | |||
1 | #pragma warning disable 1591 | ||
2 | |||
1 | using System; | 3 | using System; |
2 | using System.Text; | 4 | using System.Text; |
3 | using System.Runtime.InteropServices; | 5 | using System.Runtime.InteropServices; |
@@ -12,7 +14,7 @@ public delegate void Eina_Free_Cb(IntPtr data); | |||
12 | 14 | ||
13 | } | 15 | } |
14 | 16 | ||
15 | public static class NativeCustomExportFunctions | 17 | internal static class NativeCustomExportFunctions |
16 | { | 18 | { |
17 | [DllImport(efl.Libs.CustomExports)] public static extern void | 19 | [DllImport(efl.Libs.CustomExports)] public static extern void |
18 | efl_mono_native_free(IntPtr ptr); | 20 | efl_mono_native_free(IntPtr ptr); |
diff --git a/src/bindings/mono/eina_mono/eina_config.cs b/src/bindings/mono/eina_mono/eina_config.cs index c33dd06601..b5a0053372 100644 --- a/src/bindings/mono/eina_mono/eina_config.cs +++ b/src/bindings/mono/eina_mono/eina_config.cs | |||
@@ -1,3 +1,5 @@ | |||
1 | #pragma warning disable 1591 | ||
2 | |||
1 | using System; | 3 | using System; |
2 | using System.Runtime.InteropServices; | 4 | using System.Runtime.InteropServices; |
3 | 5 | ||
diff --git a/src/bindings/mono/eina_mono/eina_container_common.cs b/src/bindings/mono/eina_mono/eina_container_common.cs index a264ed7577..173f54d905 100644 --- a/src/bindings/mono/eina_mono/eina_container_common.cs +++ b/src/bindings/mono/eina_mono/eina_container_common.cs | |||
@@ -1,3 +1,5 @@ | |||
1 | #pragma warning disable 1591 | ||
2 | |||
1 | using System; | 3 | using System; |
2 | using System.Runtime.InteropServices; | 4 | using System.Runtime.InteropServices; |
3 | using System.Collections.Generic; | 5 | using System.Collections.Generic; |
diff --git a/src/bindings/mono/eina_mono/eina_error.cs b/src/bindings/mono/eina_mono/eina_error.cs index 7bd604ecc4..c83728047e 100644 --- a/src/bindings/mono/eina_mono/eina_error.cs +++ b/src/bindings/mono/eina_mono/eina_error.cs | |||
@@ -1,3 +1,5 @@ | |||
1 | #pragma warning disable 1591 | ||
2 | |||
1 | using System; | 3 | using System; |
2 | using System.Runtime.InteropServices; | 4 | using System.Runtime.InteropServices; |
3 | 5 | ||
diff --git a/src/bindings/mono/eina_mono/eina_hash.cs b/src/bindings/mono/eina_mono/eina_hash.cs index 045a9aed10..7b05f4e173 100644 --- a/src/bindings/mono/eina_mono/eina_hash.cs +++ b/src/bindings/mono/eina_mono/eina_hash.cs | |||
@@ -1,3 +1,5 @@ | |||
1 | #pragma warning disable 1591 | ||
2 | |||
1 | using System; | 3 | using System; |
2 | using System.Runtime.InteropServices; | 4 | using System.Runtime.InteropServices; |
3 | using System.Collections.Generic; | 5 | using System.Collections.Generic; |
diff --git a/src/bindings/mono/eina_mono/eina_inarray.cs b/src/bindings/mono/eina_mono/eina_inarray.cs index 120a4b8820..e246af83f0 100644 --- a/src/bindings/mono/eina_mono/eina_inarray.cs +++ b/src/bindings/mono/eina_mono/eina_inarray.cs | |||
@@ -1,3 +1,5 @@ | |||
1 | #pragma warning disable 1591 | ||
2 | |||
1 | using System; | 3 | using System; |
2 | using System.Runtime.InteropServices; | 4 | using System.Runtime.InteropServices; |
3 | using System.Collections.Generic; | 5 | using System.Collections.Generic; |
diff --git a/src/bindings/mono/eina_mono/eina_inlist.cs b/src/bindings/mono/eina_mono/eina_inlist.cs index 8257c20593..7b69924a9a 100644 --- a/src/bindings/mono/eina_mono/eina_inlist.cs +++ b/src/bindings/mono/eina_mono/eina_inlist.cs | |||
@@ -1,3 +1,5 @@ | |||
1 | #pragma warning disable 1591 | ||
2 | |||
1 | using System; | 3 | using System; |
2 | using System.Runtime.InteropServices; | 4 | using System.Runtime.InteropServices; |
3 | using System.Collections.Generic; | 5 | using System.Collections.Generic; |
diff --git a/src/bindings/mono/eina_mono/eina_iterator.cs b/src/bindings/mono/eina_mono/eina_iterator.cs index 854a68c084..77f61c189b 100644 --- a/src/bindings/mono/eina_mono/eina_iterator.cs +++ b/src/bindings/mono/eina_mono/eina_iterator.cs | |||
@@ -1,3 +1,5 @@ | |||
1 | #pragma warning disable 1591 | ||
2 | |||
1 | using System; | 3 | using System; |
2 | using System.Runtime.InteropServices; | 4 | using System.Runtime.InteropServices; |
3 | using System.Collections.Generic; | 5 | using System.Collections.Generic; |
diff --git a/src/bindings/mono/eina_mono/eina_list.cs b/src/bindings/mono/eina_mono/eina_list.cs index c972c82ed5..cef766f331 100644 --- a/src/bindings/mono/eina_mono/eina_list.cs +++ b/src/bindings/mono/eina_mono/eina_list.cs | |||
@@ -1,3 +1,5 @@ | |||
1 | #pragma warning disable 1591 | ||
2 | |||
1 | using System; | 3 | using System; |
2 | using System.Runtime.InteropServices; | 4 | using System.Runtime.InteropServices; |
3 | using System.Collections.Generic; | 5 | using System.Collections.Generic; |
diff --git a/src/bindings/mono/eina_mono/eina_log.cs b/src/bindings/mono/eina_mono/eina_log.cs index a2a1e45927..747f8ec58c 100644 --- a/src/bindings/mono/eina_mono/eina_log.cs +++ b/src/bindings/mono/eina_mono/eina_log.cs | |||
@@ -1,3 +1,5 @@ | |||
1 | #pragma warning disable 1591 | ||
2 | |||
1 | using System; | 3 | using System; |
2 | using System.Runtime.InteropServices; | 4 | using System.Runtime.InteropServices; |
3 | using System.Runtime.CompilerServices; | 5 | using System.Runtime.CompilerServices; |
diff --git a/src/bindings/mono/eina_mono/eina_slice.cs b/src/bindings/mono/eina_mono/eina_slice.cs index 189e9a57c7..c75c156fd7 100644 --- a/src/bindings/mono/eina_mono/eina_slice.cs +++ b/src/bindings/mono/eina_mono/eina_slice.cs | |||
@@ -1,3 +1,5 @@ | |||
1 | #pragma warning disable 1591 | ||
2 | |||
1 | using System; | 3 | using System; |
2 | using System.Runtime.InteropServices; | 4 | using System.Runtime.InteropServices; |
3 | 5 | ||
diff --git a/src/bindings/mono/eina_mono/eina_stringshare.cs b/src/bindings/mono/eina_mono/eina_stringshare.cs index 825103d864..4e464c27b1 100644 --- a/src/bindings/mono/eina_mono/eina_stringshare.cs +++ b/src/bindings/mono/eina_mono/eina_stringshare.cs | |||
@@ -1,3 +1,4 @@ | |||
1 | #pragma warning disable 1591 | ||
1 | 2 | ||
2 | using System; | 3 | using System; |
3 | using System.Runtime.InteropServices; | 4 | using System.Runtime.InteropServices; |
diff --git a/src/bindings/mono/eina_mono/eina_value.cs b/src/bindings/mono/eina_mono/eina_value.cs index 15c06590fa..d4e8dfbf94 100644 --- a/src/bindings/mono/eina_mono/eina_value.cs +++ b/src/bindings/mono/eina_mono/eina_value.cs | |||
@@ -1,3 +1,5 @@ | |||
1 | #pragma warning disable 1591 | ||
2 | |||
1 | #define CODE_ANALYSIS | 3 | #define CODE_ANALYSIS |
2 | 4 | ||
3 | using System; | 5 | using System; |
@@ -708,7 +710,7 @@ public class Value : IDisposable, IComparable<Value>, IEquatable<Value> | |||
708 | Setup(containerType, subtype, step); | 710 | Setup(containerType, subtype, step); |
709 | } | 711 | } |
710 | 712 | ||
711 | /// <summary>Constructor to build value from Values_Natives passed by value from C | 713 | /// <summary>Constructor to build value from Values_Natives passed by value from C.</summary> |
712 | public Value(Value_Native value) | 714 | public Value(Value_Native value) |
713 | { | 715 | { |
714 | this.Handle = MemoryNative.Alloc(Marshal.SizeOf(typeof(Value_Native))); | 716 | this.Handle = MemoryNative.Alloc(Marshal.SizeOf(typeof(Value_Native))); |
@@ -721,13 +723,13 @@ public class Value : IDisposable, IComparable<Value>, IEquatable<Value> | |||
721 | this.Ownership = ValueOwnership.Managed; | 723 | this.Ownership = ValueOwnership.Managed; |
722 | } | 724 | } |
723 | 725 | ||
724 | /// <summary>Implicit conversion from managed value to native struct representation | 726 | /// <summary>Implicit conversion from managed value to native struct representation.</summary> |
725 | public static implicit operator Value_Native(Value v) | 727 | public static implicit operator Value_Native(Value v) |
726 | { | 728 | { |
727 | return v.GetNative(); | 729 | return v.GetNative(); |
728 | } | 730 | } |
729 | 731 | ||
730 | /// <summary> | 732 | /// <summary>Implicit conversion from native struct representation to managed wrapper.</summary> |
731 | public static implicit operator Value(Value_Native v) | 733 | public static implicit operator Value(Value_Native v) |
732 | { | 734 | { |
733 | return new Value(v); | 735 | return new Value(v); |
diff --git a/src/bindings/mono/eldbus_mono/eldbus_common.cs b/src/bindings/mono/eldbus_mono/eldbus_common.cs index 95138581f0..20f14d4e6f 100644 --- a/src/bindings/mono/eldbus_mono/eldbus_common.cs +++ b/src/bindings/mono/eldbus_mono/eldbus_common.cs | |||
@@ -1,3 +1,5 @@ | |||
1 | #pragma warning disable 1591 | ||
2 | |||
1 | using System; | 3 | using System; |
2 | using System.Runtime.InteropServices; | 4 | using System.Runtime.InteropServices; |
3 | 5 | ||
diff --git a/src/bindings/mono/eldbus_mono/eldbus_config.cs b/src/bindings/mono/eldbus_mono/eldbus_config.cs index f6054815ff..84b2ae102c 100644 --- a/src/bindings/mono/eldbus_mono/eldbus_config.cs +++ b/src/bindings/mono/eldbus_mono/eldbus_config.cs | |||
@@ -1,3 +1,5 @@ | |||
1 | #pragma warning disable 1591 | ||
2 | |||
1 | using System; | 3 | using System; |
2 | using System.Runtime.InteropServices; | 4 | using System.Runtime.InteropServices; |
3 | 5 | ||
diff --git a/src/bindings/mono/eldbus_mono/eldbus_connection.cs b/src/bindings/mono/eldbus_mono/eldbus_connection.cs index 87d09cbd18..f80a0aba0a 100644 --- a/src/bindings/mono/eldbus_mono/eldbus_connection.cs +++ b/src/bindings/mono/eldbus_mono/eldbus_connection.cs | |||
@@ -1,3 +1,5 @@ | |||
1 | #pragma warning disable 1591 | ||
2 | |||
1 | using System; | 3 | using System; |
2 | using System.Runtime.InteropServices; | 4 | using System.Runtime.InteropServices; |
3 | 5 | ||
diff --git a/src/bindings/mono/eldbus_mono/eldbus_message.cs b/src/bindings/mono/eldbus_mono/eldbus_message.cs index 2ebc90c722..0a1afb66d1 100644 --- a/src/bindings/mono/eldbus_mono/eldbus_message.cs +++ b/src/bindings/mono/eldbus_mono/eldbus_message.cs | |||
@@ -1,3 +1,5 @@ | |||
1 | #pragma warning disable 1591 | ||
2 | |||
1 | using System; | 3 | using System; |
2 | using System.Runtime.InteropServices; | 4 | using System.Runtime.InteropServices; |
3 | 5 | ||
diff --git a/src/bindings/mono/eldbus_mono/eldbus_object.cs b/src/bindings/mono/eldbus_mono/eldbus_object.cs index 1b0f4cb58f..d07654deab 100644 --- a/src/bindings/mono/eldbus_mono/eldbus_object.cs +++ b/src/bindings/mono/eldbus_mono/eldbus_object.cs | |||
@@ -1,3 +1,6 @@ | |||
1 | |||
2 | #pragma warning disable 1591 | ||
3 | |||
1 | using System.Runtime.InteropServices; | 4 | using System.Runtime.InteropServices; |
2 | 5 | ||
3 | using static eldbus.EldbusObjectNativeFunctions; | 6 | using static eldbus.EldbusObjectNativeFunctions; |
diff --git a/src/bindings/mono/eldbus_mono/eldbus_pending.cs b/src/bindings/mono/eldbus_mono/eldbus_pending.cs index 9dff599619..f5afa05700 100644 --- a/src/bindings/mono/eldbus_mono/eldbus_pending.cs +++ b/src/bindings/mono/eldbus_mono/eldbus_pending.cs | |||
@@ -1,3 +1,5 @@ | |||
1 | #pragma warning disable 1591 | ||
2 | |||
1 | using System; | 3 | using System; |
2 | using System.Runtime.InteropServices; | 4 | using System.Runtime.InteropServices; |
3 | 5 | ||
diff --git a/src/bindings/mono/eldbus_mono/eldbus_proxy.cs b/src/bindings/mono/eldbus_mono/eldbus_proxy.cs index 1d07de71d8..d7729d8a70 100644 --- a/src/bindings/mono/eldbus_mono/eldbus_proxy.cs +++ b/src/bindings/mono/eldbus_mono/eldbus_proxy.cs | |||
@@ -1,3 +1,5 @@ | |||
1 | #pragma warning disable 1591 | ||
2 | |||
1 | using System; | 3 | using System; |
2 | using System.Runtime.InteropServices; | 4 | using System.Runtime.InteropServices; |
3 | 5 | ||
diff --git a/src/bindings/mono/eldbus_mono/eldbus_service.cs b/src/bindings/mono/eldbus_mono/eldbus_service.cs index b3b5487733..33c3acb194 100644 --- a/src/bindings/mono/eldbus_mono/eldbus_service.cs +++ b/src/bindings/mono/eldbus_mono/eldbus_service.cs | |||
@@ -1,3 +1,5 @@ | |||
1 | #pragma warning disable 1591 | ||
2 | |||
1 | using System; | 3 | using System; |
2 | using System.Runtime.InteropServices; | 4 | using System.Runtime.InteropServices; |
3 | 5 | ||
diff --git a/src/bindings/mono/eo_mono/iwrapper.cs b/src/bindings/mono/eo_mono/iwrapper.cs index bd3ba50edf..98e8f953ba 100644 --- a/src/bindings/mono/eo_mono/iwrapper.cs +++ b/src/bindings/mono/eo_mono/iwrapper.cs | |||
@@ -1,3 +1,4 @@ | |||
1 | #pragma warning disable 1591 | ||
1 | 2 | ||
2 | using System; | 3 | using System; |
3 | using System.Runtime.InteropServices; | 4 | using System.Runtime.InteropServices; |
diff --git a/src/bindings/mono/eo_mono/workaround.cs b/src/bindings/mono/eo_mono/workaround.cs index d29ce3969f..ab7d0c8802 100644 --- a/src/bindings/mono/eo_mono/workaround.cs +++ b/src/bindings/mono/eo_mono/workaround.cs | |||
@@ -1,32 +1,47 @@ | |||
1 | #pragma warning disable 1591 | ||
1 | 2 | ||
2 | using System; | 3 | using System; |
3 | using System.Runtime.InteropServices; | 4 | using System.Runtime.InteropServices; |
4 | using System.Collections.Generic; | 5 | using System.Collections.Generic; |
5 | 6 | ||
7 | ///<summary>Eo class description, passed to efl_class_new.</summary> | ||
6 | [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)] | 8 | [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)] |
7 | public struct ClassDescription | 9 | public struct ClassDescription |
8 | { | 10 | { |
11 | ///<summary>Current Eo version.</summary> | ||
9 | public uint version; | 12 | public uint version; |
13 | ///<summary>Name of the class.</summary> | ||
10 | [MarshalAs(UnmanagedType.LPStr)] public String name; | 14 | [MarshalAs(UnmanagedType.LPStr)] public String name; |
15 | ///<summary>Class type.</summary> | ||
11 | public int class_type; | 16 | public int class_type; |
17 | ///<summary>Size of data (private + protected + public) per instance.</summary> | ||
12 | public UIntPtr data_size; | 18 | public UIntPtr data_size; |
19 | ///<summary>Initializer for the class.</summary> | ||
13 | public IntPtr class_initializer; | 20 | public IntPtr class_initializer; |
21 | ///<summary>Constructor of the class.</summary> | ||
14 | public IntPtr class_constructor; | 22 | public IntPtr class_constructor; |
23 | ///<summary>Destructor of the class.</summary> | ||
15 | public IntPtr class_destructor; | 24 | public IntPtr class_destructor; |
16 | } | 25 | } |
17 | 26 | ||
27 | ///<summary>Description of an Eo API operation.</summary> | ||
18 | [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)] | 28 | [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)] |
19 | public struct Efl_Op_Description | 29 | public struct Efl_Op_Description |
20 | { | 30 | { |
31 | ///<summary>The EAPI function offering this op. (String with the name of the function on Windows)</summary> | ||
21 | public IntPtr api_func; | 32 | public IntPtr api_func; |
33 | ///<summary>The static function to be called for this op</summary> | ||
22 | public IntPtr func; | 34 | public IntPtr func; |
23 | } | 35 | } |
24 | 36 | ||
37 | ///<summary>List of operations on a given Object.</summary> | ||
25 | [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)] | 38 | [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)] |
26 | public struct Efl_Object_Ops | 39 | public struct Efl_Object_Ops |
27 | { | 40 | { |
28 | public IntPtr descs; /**< The op descriptions array of size count. */ | 41 | ///<summary>The op descriptions array of size count.</summary> |
29 | public UIntPtr count; /**< Number of op descriptions. */ | 42 | public IntPtr descs; |
43 | ///<summary>Number of op descriptions.</summary> | ||
44 | public UIntPtr count; | ||
30 | }; | 45 | }; |
31 | 46 | ||
32 | [StructLayout(LayoutKind.Sequential)] | 47 | [StructLayout(LayoutKind.Sequential)] |
@@ -262,28 +277,45 @@ namespace evas { | |||
262 | /* Copied from Evas_Legacy.h */ | 277 | /* Copied from Evas_Legacy.h */ |
263 | public enum Text_Style_Type | 278 | public enum Text_Style_Type |
264 | { | 279 | { |
265 | Plain = 0, /**< plain, standard text */ | 280 | ///<summary> plain, standard text.</summary> |
266 | Shadow, /**< text with shadow underneath */ | 281 | Plain = 0, |
267 | Outline, /**< text with an outline */ | 282 | ///<summary> text with shadow underneath.</summary> |
268 | SoftOutline, /**< text with a soft outline */ | 283 | Shadow, |
269 | Glow, /**< text with a glow effect */ | 284 | ///<summary> text with an outline.</summary> |
270 | OutlineShadow, /**< text with both outline and shadow effects */ | 285 | Outline, |
271 | FarShadow, /**< text with (far) shadow underneath */ | 286 | ///<summary> text with a soft outline.</summary> |
272 | OutlineSoftShadow, /**< text with outline and soft shadow effects combined */ | 287 | SoftOutline, |
273 | SoftShadow, /**< text with (soft) shadow underneath */ | 288 | ///<summary> text with a glow effect.</summary> |
274 | FarSoftShadow, /**< text with (far soft) shadow underneath */ | 289 | Glow, |
290 | ///<summary> text with both outline and shadow effects.</summary> | ||
291 | OutlineShadow, | ||
292 | ///<summary> text with (far) shadow underneath.</summary> | ||
293 | FarShadow, | ||
294 | ///<summary> text with outline and soft shadow effects combined.</summary> | ||
295 | OutlineSoftShadow, | ||
296 | ///<summary> text with (soft) shadow underneath.</summary> | ||
297 | SoftShadow, | ||
298 | ///<summary> text with (far soft) shadow underneath.</summary> | ||
299 | FarSoftShadow, | ||
275 | 300 | ||
276 | // Shadow direction modifiers | 301 | // Shadow direction modifiers |
277 | ShadowDirectionBottomRight = 0 /* 0 >> 4 */, /**< shadow growing to bottom right */ | 302 | ///<summary> shadow growing to bottom right.</summary> |
278 | ShadowDirectionBottom= 16 /* 1 >> 4 */, /**< shadow growing to the bottom */ | 303 | ShadowDirectionBottomRight = 0 /* 0 >> 4 */, |
279 | ShadowDirectionBottomLeft = 32 /* 2 >> 4 */, /**< shadow growing to bottom left */ | 304 | ///<summary> shadow growing to the bottom.</summary> |
280 | ShadowDirectionLeft = 48 /* 3 >> 4 */, /**< shadow growing to the left */ | 305 | ShadowDirectionBottom= 16 /* 1 >> 4 */, |
281 | ShadowDirectionTopLeft = 64 /* 4 >> 4 */, /**< shadow growing to top left */ | 306 | ///<summary> shadow growing to bottom left.</summary> |
282 | ShadowDirectionTop = 80 /* 5 >> 4 */, /**< shadow growing to the top */ | 307 | ShadowDirectionBottomLeft = 32 /* 2 >> 4 */, |
283 | ShadowDirectionTopRight = 96 /* 6 >> 4 */, /**< shadow growing to top right */ | 308 | ///<summary> shadow growing to the left.</summary> |
284 | ShadowDirectionRight = 112 /* 7 >> 4 */ /**< shadow growing to the right */ | 309 | ShadowDirectionLeft = 48 /* 3 >> 4 */, |
310 | ///<summary> shadow growing to top left.</summary> | ||
311 | ShadowDirectionTopLeft = 64 /* 4 >> 4 */, | ||
312 | ///<summary> shadow growing to the top.</summary> | ||
313 | ShadowDirectionTop = 80 /* 5 >> 4 */, | ||
314 | ///<summary> shadow growing to top right.</summary> | ||
315 | ShadowDirectionTopRight = 96 /* 6 >> 4 */, | ||
316 | ///<summary> shadow growing to the right.</summary> | ||
317 | ShadowDirectionRight = 112 /* 7 >> 4 */ | ||
285 | }; | 318 | }; |
286 | |||
287 | 319 | ||
288 | // Copied from Evas_Common.h | 320 | // Copied from Evas_Common.h |
289 | // | 321 | // |
@@ -292,47 +324,83 @@ public enum Text_Style_Type | |||
292 | 324 | ||
293 | public enum Callback_Type | 325 | public enum Callback_Type |
294 | { | 326 | { |
295 | EVAS_CALLBACK_MOUSE_IN = 0, /**< Mouse In Event */ | 327 | ///<summary> Mouse In Event.</summary> |
296 | EVAS_CALLBACK_MOUSE_OUT, /**< Mouse Out Event */ | 328 | EVAS_CALLBACK_MOUSE_IN = 0, |
297 | EVAS_CALLBACK_MOUSE_DOWN, /**< Mouse Button Down Event */ | 329 | ///<summary> Mouse Out Event.</summary> |
298 | EVAS_CALLBACK_MOUSE_UP, /**< Mouse Button Up Event */ | 330 | EVAS_CALLBACK_MOUSE_OUT, |
299 | EVAS_CALLBACK_MOUSE_MOVE, /**< Mouse Move Event */ | 331 | ///<summary> Mouse Button Down Event.</summary> |
300 | EVAS_CALLBACK_MOUSE_WHEEL, /**< Mouse Wheel Event */ | 332 | EVAS_CALLBACK_MOUSE_DOWN, |
301 | EVAS_CALLBACK_MULTI_DOWN, /**< Multi-touch Down Event */ | 333 | ///<summary> Mouse Button Up Event.</summary> |
302 | EVAS_CALLBACK_MULTI_UP, /**< Multi-touch Up Event */ | 334 | EVAS_CALLBACK_MOUSE_UP, |
303 | EVAS_CALLBACK_MULTI_MOVE, /**< Multi-touch Move Event */ | 335 | ///<summary> Mouse Move Event.</summary> |
304 | EVAS_CALLBACK_FREE, /**< Object Being Freed (Called after Del) */ | 336 | EVAS_CALLBACK_MOUSE_MOVE, |
305 | EVAS_CALLBACK_KEY_DOWN, /**< Key Press Event */ | 337 | ///<summary> Mouse Wheel Event.</summary> |
306 | EVAS_CALLBACK_KEY_UP, /**< Key Release Event */ | 338 | EVAS_CALLBACK_MOUSE_WHEEL, |
307 | EVAS_CALLBACK_FOCUS_IN, /**< Focus In Event */ | 339 | ///<summary> Multi-touch Down Event.</summary> |
308 | EVAS_CALLBACK_FOCUS_OUT, /**< Focus Out Event */ | 340 | EVAS_CALLBACK_MULTI_DOWN, |
309 | EVAS_CALLBACK_SHOW, /**< Show Event */ | 341 | ///<summary> Multi-touch Up Event.</summary> |
310 | EVAS_CALLBACK_HIDE, /**< Hide Event */ | 342 | EVAS_CALLBACK_MULTI_UP, |
311 | EVAS_CALLBACK_MOVE, /**< Move Event */ | 343 | ///<summary> Multi-touch Move Event.</summary> |
312 | EVAS_CALLBACK_RESIZE, /**< Resize Event */ | 344 | EVAS_CALLBACK_MULTI_MOVE, |
313 | EVAS_CALLBACK_RESTACK, /**< Restack Event */ | 345 | ///<summary> Object Being Freed (Called after Del).</summary> |
314 | EVAS_CALLBACK_DEL, /**< Object Being Deleted (called before Free) */ | 346 | EVAS_CALLBACK_FREE, |
315 | EVAS_CALLBACK_HOLD, /**< Events go on/off hold */ | 347 | ///<summary> Key Press Event.</summary> |
316 | EVAS_CALLBACK_CHANGED_SIZE_HINTS, /**< Size hints changed event */ | 348 | EVAS_CALLBACK_KEY_DOWN, |
317 | EVAS_CALLBACK_IMAGE_PRELOADED, /**< Image has been preloaded */ | 349 | ///<summary> Key Release Event.</summary> |
318 | EVAS_CALLBACK_CANVAS_FOCUS_IN, /**< Canvas got focus as a whole */ | 350 | EVAS_CALLBACK_KEY_UP, |
319 | EVAS_CALLBACK_CANVAS_FOCUS_OUT, /**< Canvas lost focus as a whole */ | 351 | ///<summary> Focus In Event.</summary> |
320 | EVAS_CALLBACK_RENDER_FLUSH_PRE, /**< Called after render update regions have | 352 | EVAS_CALLBACK_FOCUS_IN, |
321 | * been calculated, but only if update regions exist */ | 353 | ///<summary> Focus Out Event.</summary> |
322 | EVAS_CALLBACK_RENDER_FLUSH_POST, /**< Called after render update regions have | 354 | EVAS_CALLBACK_FOCUS_OUT, |
323 | * been sent to the display server, but only | 355 | ///<summary> Show Event.</summary> |
324 | * if update regions existed for the most recent frame */ | 356 | EVAS_CALLBACK_SHOW, |
325 | EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_IN, /**< Canvas object got focus */ | 357 | ///<summary> Hide Event.</summary> |
326 | EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_OUT, /**< Canvas object lost focus */ | 358 | EVAS_CALLBACK_HIDE, |
327 | EVAS_CALLBACK_IMAGE_UNLOADED, /**< Image data has been unloaded (by some mechanism in Evas that throw out original image data) */ | 359 | ///<summary> Move Event.</summary> |
328 | EVAS_CALLBACK_RENDER_PRE, /**< Called just before rendering starts on the canvas target. @since 1.2 */ | 360 | EVAS_CALLBACK_MOVE, |
329 | EVAS_CALLBACK_RENDER_POST, /**< Called just after rendering stops on the canvas target. @since 1.2 */ | 361 | ///<summary> Resize Event.</summary> |
330 | EVAS_CALLBACK_IMAGE_RESIZE, /**< Image size is changed. @since 1.8 */ | 362 | EVAS_CALLBACK_RESIZE, |
331 | EVAS_CALLBACK_DEVICE_CHANGED, /**< Devices added, removed or changed on canvas. @since 1.8 */ | 363 | ///<summary> Restack Event.</summary> |
332 | EVAS_CALLBACK_AXIS_UPDATE, /**< Input device changed value on some axis. @since 1.13 */ | 364 | EVAS_CALLBACK_RESTACK, |
333 | EVAS_CALLBACK_CANVAS_VIEWPORT_RESIZE, /**< Canvas viewport resized. @since 1.15 */ | 365 | ///<summary> Object Being Deleted (called before Free).</summary> |
334 | EVAS_CALLBACK_LAST /**< Sentinel value to indicate last enum field during | 366 | EVAS_CALLBACK_DEL, |
335 | * iteration */ | 367 | ///<summary> Events go on/off hold.</summary> |
368 | EVAS_CALLBACK_HOLD, | ||
369 | ///<summary> Size hints changed event.</summary> | ||
370 | EVAS_CALLBACK_CHANGED_SIZE_HINTS, | ||
371 | ///<summary> Image has been preloaded.</summary> | ||
372 | EVAS_CALLBACK_IMAGE_PRELOADED, | ||
373 | ///<summary> Canvas got focus as a whole.</summary> | ||
374 | EVAS_CALLBACK_CANVAS_FOCUS_IN, | ||
375 | ///<summary> Canvas lost focus as a whole.</summary> | ||
376 | EVAS_CALLBACK_CANVAS_FOCUS_OUT, | ||
377 | ///<summary>Called after render update regions have been calculated, | ||
378 | /// but only if update regions exist.</summary> | ||
379 | EVAS_CALLBACK_RENDER_FLUSH_PRE, | ||
380 | ///<summary>Called after render update regions have | ||
381 | /// been sent to the display server, but only | ||
382 | /// if update regions existed for the most recent frame.</summary> | ||
383 | EVAS_CALLBACK_RENDER_FLUSH_POST, | ||
384 | ///<summary> Canvas object got focus.</summary> | ||
385 | EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_IN, | ||
386 | ///<summary> Canvas object lost focus.</summary> | ||
387 | EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_OUT, | ||
388 | ///<summary> Image data has been unloaded (by some mechanism in Evas that throw out original image data).</summary> | ||
389 | EVAS_CALLBACK_IMAGE_UNLOADED, | ||
390 | ///<summary> Called just before rendering starts on the canvas target. @since 1.2.</summary> | ||
391 | EVAS_CALLBACK_RENDER_PRE, | ||
392 | ///<summary> Called just after rendering stops on the canvas target. @since 1.2.</summary> | ||
393 | EVAS_CALLBACK_RENDER_POST, | ||
394 | ///<summary> Image size is changed. @since 1.8.</summary> | ||
395 | EVAS_CALLBACK_IMAGE_RESIZE, | ||
396 | ///<summary> Devices added, removed or changed on canvas. @since 1.8.</summary> | ||
397 | EVAS_CALLBACK_DEVICE_CHANGED, | ||
398 | ///<summary> Input device changed value on some axis. @since 1.13.</summary> | ||
399 | EVAS_CALLBACK_AXIS_UPDATE, | ||
400 | ///<summary> Canvas viewport resized. @since 1.15.</summary> | ||
401 | EVAS_CALLBACK_CANVAS_VIEWPORT_RESIZE, | ||
402 | ///<summary>Sentinel value to indicate last enum field during iteration.</summary> | ||
403 | EVAS_CALLBACK_LAST | ||
336 | }; | 404 | }; |
337 | 405 | ||
338 | } | 406 | } |
diff --git a/src/examples/efl_mono/EoInherit01.cs b/src/examples/efl_mono/EoInherit01.cs index 6b899aeca1..17ea4df27e 100644 --- a/src/examples/efl_mono/EoInherit01.cs +++ b/src/examples/efl_mono/EoInherit01.cs | |||
@@ -30,7 +30,7 @@ public class ExampleEoInherit01 | |||
30 | int given = 111; | 30 | int given = 111; |
31 | 31 | ||
32 | // Call the C# override from the C method | 32 | // Call the C# override from the C method |
33 | example.NumberwrapperConcrete.example_numberwrapper_number_set(inheritObj.raw_handle, given); | 33 | inheritObj.CallNumberSet(given); |
34 | 34 | ||
35 | WriteLine($"Override successfully called? {inheritObj.derivedCalled}!\n"); | 35 | WriteLine($"Override successfully called? {inheritObj.derivedCalled}!\n"); |
36 | 36 | ||
diff --git a/src/examples/efl_mono/example_numberwrapper.c b/src/examples/efl_mono/example_numberwrapper.c index f80dee616a..4ec0f72df1 100644 --- a/src/examples/efl_mono/example_numberwrapper.c +++ b/src/examples/efl_mono/example_numberwrapper.c | |||
@@ -52,6 +52,11 @@ void _example_numberwrapper_number_set(EINA_UNUSED Eo *obj, Example_Numberwrappe | |||
52 | pd->number = n; | 52 | pd->number = n; |
53 | } | 53 | } |
54 | 54 | ||
55 | void _example_numberwrapper_number_set_call(Eo *obj, EINA_UNUSED Example_Numberwrapper_Data *pd, int n) | ||
56 | { | ||
57 | example_numberwrapper_number_set(obj, n); | ||
58 | } | ||
59 | |||
55 | int _example_numberwrapper_number_get(EINA_UNUSED Eo *obj, Example_Numberwrapper_Data *pd) | 60 | int _example_numberwrapper_number_get(EINA_UNUSED Eo *obj, Example_Numberwrapper_Data *pd) |
56 | { | 61 | { |
57 | return pd->number; | 62 | return pd->number; |
diff --git a/src/examples/efl_mono/example_numberwrapper.eo b/src/examples/efl_mono/example_numberwrapper.eo index 85f2ce4a4d..4e0279e867 100644 --- a/src/examples/efl_mono/example_numberwrapper.eo +++ b/src/examples/efl_mono/example_numberwrapper.eo | |||
@@ -17,6 +17,12 @@ class Example.Numberwrapper (Efl.Object) { | |||
17 | } | 17 | } |
18 | } | 18 | } |
19 | 19 | ||
20 | number_set_call { | ||
21 | params { | ||
22 | n: int; | ||
23 | } | ||
24 | } | ||
25 | |||
20 | number_callback_set { | 26 | number_callback_set { |
21 | params { | 27 | params { |
22 | cb: NumberCb; | 28 | cb: NumberCb; |
diff --git a/src/lib/eolian_cxx/Eolian_Cxx.hh b/src/lib/eolian_cxx/Eolian_Cxx.hh index 5a8ea813c7..ec5062fee3 100644 --- a/src/lib/eolian_cxx/Eolian_Cxx.hh +++ b/src/lib/eolian_cxx/Eolian_Cxx.hh | |||
@@ -24,6 +24,24 @@ struct eolian_init | |||
24 | } | 24 | } |
25 | }; | 25 | }; |
26 | 26 | ||
27 | struct eolian_state | ||
28 | { | ||
29 | Eolian *value; | ||
30 | eolian_state() | ||
31 | { | ||
32 | value = ::eolian_new(); | ||
33 | } | ||
34 | ~eolian_state() | ||
35 | { | ||
36 | ::eolian_free(value); | ||
37 | } | ||
38 | |||
39 | inline Eolian_Unit const* as_unit() const | ||
40 | { | ||
41 | return (Eolian_Unit const*)value; | ||
42 | } | ||
43 | }; | ||
44 | |||
27 | } } | 45 | } } |
28 | 46 | ||
29 | #endif // EOLIAN_CXX_LIB_HH | 47 | #endif // EOLIAN_CXX_LIB_HH |
diff --git a/src/lib/eolian_cxx/grammar/function_definition.hpp b/src/lib/eolian_cxx/grammar/function_definition.hpp index 3c2eab5c74..9b646efc9c 100644 --- a/src/lib/eolian_cxx/grammar/function_definition.hpp +++ b/src/lib/eolian_cxx/grammar/function_definition.hpp | |||
@@ -113,7 +113,7 @@ struct function_definition_generator | |||
113 | if(!as_generator(scope_tab).generate(sink, attributes::unused, ctx)) return false; | 113 | if(!as_generator(scope_tab).generate(sink, attributes::unused, ctx)) return false; |
114 | 114 | ||
115 | if(f.return_type != attributes::void_ | 115 | if(f.return_type != attributes::void_ |
116 | && !as_generator(attributes::c_type({attributes::parameter_direction::in, f.return_type, "", f.unit}) | 116 | && !as_generator(attributes::c_type({attributes::parameter_direction::in, f.return_type, "", attributes::documentation_def{}, f.unit}) |
117 | << " __return_value = " | 117 | << " __return_value = " |
118 | ).generate(sink, attributes::unused, ctx)) return false; | 118 | ).generate(sink, attributes::unused, ctx)) return false; |
119 | 119 | ||
diff --git a/src/lib/eolian_cxx/grammar/html_escaped_string.hpp b/src/lib/eolian_cxx/grammar/html_escaped_string.hpp new file mode 100644 index 0000000000..9a6eef1f7c --- /dev/null +++ b/src/lib/eolian_cxx/grammar/html_escaped_string.hpp | |||
@@ -0,0 +1,51 @@ | |||
1 | #ifndef EOLIAN_CXX_HTML_ESCAPED_STRING_HH | ||
2 | #define EOLIAN_CXX_HTML_ESCAPED_STRING_HH | ||
3 | |||
4 | #include <cstdlib> | ||
5 | #include <cstring> | ||
6 | |||
7 | #include "grammar/generator.hpp" | ||
8 | #include "grammar/attributes.hpp" | ||
9 | #include "grammar/string.hpp" | ||
10 | |||
11 | namespace efl { namespace eolian { namespace grammar { | ||
12 | |||
13 | struct html_escaped_string_generator | ||
14 | { | ||
15 | template<typename OutputIterator, typename Context> | ||
16 | bool generate(OutputIterator sink, std::string const& input, Context const& context) const | ||
17 | { | ||
18 | std::string out; | ||
19 | out.reserve(input.size()); | ||
20 | for (size_t pos = 0; pos != input.size(); ++pos) | ||
21 | { | ||
22 | switch(input[pos]) | ||
23 | { | ||
24 | case '&': out.append("&"); break; | ||
25 | case '\"': out.append("""); break; | ||
26 | case '\'': out.append("'"); break; | ||
27 | case '<': out.append("<"); break; | ||
28 | case '>': out.append(">"); break; | ||
29 | default: out.append(&input[pos], 1); break; | ||
30 | } | ||
31 | } | ||
32 | |||
33 | return as_generator(string).generate(sink, out, context); | ||
34 | } | ||
35 | }; | ||
36 | |||
37 | struct html_escaped_string_generator const html_escaped_string = {}; | ||
38 | |||
39 | template <> | ||
40 | struct is_eager_generator<html_escaped_string_generator> : std::true_type {}; | ||
41 | template <> | ||
42 | struct is_generator<html_escaped_string_generator> : std::true_type {}; | ||
43 | |||
44 | namespace type_traits { | ||
45 | template <> | ||
46 | struct attributes_needed<html_escaped_string_generator> : std::integral_constant<int, 1> {}; | ||
47 | } | ||
48 | } } } | ||
49 | |||
50 | #endif | ||
51 | |||
diff --git a/src/lib/eolian_cxx/grammar/klass_def.hpp b/src/lib/eolian_cxx/grammar/klass_def.hpp index f95b765cee..16d15b6f24 100644 --- a/src/lib/eolian_cxx/grammar/klass_def.hpp +++ b/src/lib/eolian_cxx/grammar/klass_def.hpp | |||
@@ -167,6 +167,49 @@ inline bool operator<(klass_name const& lhs, klass_name const& rhs) | |||
167 | , rhs.type)); | 167 | , rhs.type)); |
168 | } | 168 | } |
169 | 169 | ||
170 | struct documentation_def | ||
171 | { | ||
172 | std::string summary; | ||
173 | std::string description; | ||
174 | std::string since; | ||
175 | std::vector<std::string> desc_paragraphs; | ||
176 | |||
177 | documentation_def() {} | ||
178 | documentation_def(std::string summary, std::string description, std::string since) | ||
179 | : summary(summary), description(description), since(since) | ||
180 | {} | ||
181 | documentation_def(Eolian_Documentation const* eolian_doc) | ||
182 | { | ||
183 | const char *str; | ||
184 | |||
185 | if (!eolian_doc) | ||
186 | return; | ||
187 | |||
188 | str = eolian_documentation_summary_get(eolian_doc); | ||
189 | if (str) | ||
190 | summary = str; | ||
191 | |||
192 | str = eolian_documentation_description_get(eolian_doc); | ||
193 | if (str) | ||
194 | description = str; | ||
195 | |||
196 | str = eolian_documentation_since_get(eolian_doc); | ||
197 | if (str) | ||
198 | since = str; | ||
199 | |||
200 | efl::eina::ptr_list<const char> l(eolian_documentation_string_split(description.c_str())); | ||
201 | for (auto&& i : l) | ||
202 | desc_paragraphs.push_back({&i}); | ||
203 | } | ||
204 | |||
205 | friend inline bool operator==(documentation_def const& lhs, documentation_def const& rhs) | ||
206 | { | ||
207 | return lhs.summary == rhs.summary | ||
208 | && lhs.description == rhs.description | ||
209 | && lhs.since == rhs.since; | ||
210 | } | ||
211 | }; | ||
212 | |||
170 | template <> | 213 | template <> |
171 | struct tuple_element<0ul, klass_name> | 214 | struct tuple_element<0ul, klass_name> |
172 | { | 215 | { |
@@ -394,21 +437,24 @@ struct parameter_def | |||
394 | parameter_direction direction; | 437 | parameter_direction direction; |
395 | type_def type; | 438 | type_def type; |
396 | std::string param_name; | 439 | std::string param_name; |
440 | documentation_def documentation; | ||
397 | Eolian_Unit const* unit; | 441 | Eolian_Unit const* unit; |
398 | 442 | ||
399 | friend inline bool operator==(parameter_def const& lhs, parameter_def const& rhs) | 443 | friend inline bool operator==(parameter_def const& lhs, parameter_def const& rhs) |
400 | { | 444 | { |
401 | return lhs.direction == rhs.direction | 445 | return lhs.direction == rhs.direction |
402 | && lhs.type == rhs.type | 446 | && lhs.type == rhs.type |
403 | && lhs.param_name == rhs.param_name; | 447 | && lhs.param_name == rhs.param_name |
448 | && lhs.documentation == rhs.documentation; | ||
404 | } | 449 | } |
405 | friend inline bool operator!=(parameter_def const& lhs, parameter_def const& rhs) | 450 | friend inline bool operator!=(parameter_def const& lhs, parameter_def const& rhs) |
406 | { | 451 | { |
407 | return !(lhs == rhs); | 452 | return !(lhs == rhs); |
408 | } | 453 | } |
409 | 454 | ||
410 | parameter_def(parameter_direction direction, type_def type, std::string param_name, Eolian_Unit const* unit) | 455 | parameter_def(parameter_direction direction, type_def type, std::string param_name, |
411 | : direction(std::move(direction)), type(std::move(type)), param_name(std::move(param_name)), unit(unit) {} | 456 | documentation_def documentation, Eolian_Unit const* unit) |
457 | : direction(std::move(direction)), type(std::move(type)), param_name(std::move(param_name)), documentation(documentation), unit(unit) {} | ||
412 | parameter_def(Eolian_Function_Parameter const* param, Eolian_Unit const* unit) | 458 | parameter_def(Eolian_Function_Parameter const* param, Eolian_Unit const* unit) |
413 | : type( ::eolian_parameter_type_get(param), unit, EOLIAN_C_TYPE_PARAM) | 459 | : type( ::eolian_parameter_type_get(param), unit, EOLIAN_C_TYPE_PARAM) |
414 | , param_name( ::eolian_parameter_name_get(param)), unit(unit) | 460 | , param_name( ::eolian_parameter_name_get(param)), unit(unit) |
@@ -429,6 +475,8 @@ struct parameter_def | |||
429 | } | 475 | } |
430 | if( ::eolian_parameter_is_optional(param)) | 476 | if( ::eolian_parameter_is_optional(param)) |
431 | type.original_type.visit(detail::add_optional_qualifier_visitor{}); | 477 | type.original_type.visit(detail::add_optional_qualifier_visitor{}); |
478 | |||
479 | documentation = eolian_parameter_documentation_get(param); | ||
432 | } | 480 | } |
433 | }; | 481 | }; |
434 | 482 | ||
@@ -467,6 +515,16 @@ template <int I> | |||
467 | typename tuple_element<I, parameter_def>::type& get(parameter_def& p) | 515 | typename tuple_element<I, parameter_def>::type& get(parameter_def& p) |
468 | { return tuple_element<I, parameter_def>::get(p); } | 516 | { return tuple_element<I, parameter_def>::get(p); } |
469 | 517 | ||
518 | enum class function_type | ||
519 | { | ||
520 | unresolved, | ||
521 | property, | ||
522 | prop_set, | ||
523 | prop_get, | ||
524 | method, | ||
525 | function_pointer | ||
526 | }; | ||
527 | |||
470 | struct function_def | 528 | struct function_def |
471 | { | 529 | { |
472 | type_def return_type; | 530 | type_def return_type; |
@@ -474,9 +532,12 @@ struct function_def | |||
474 | std::vector<parameter_def> parameters; | 532 | std::vector<parameter_def> parameters; |
475 | std::string c_name; | 533 | std::string c_name; |
476 | std::string filename; | 534 | std::string filename; |
535 | documentation_def documentation; | ||
536 | documentation_def return_documentation; | ||
537 | documentation_def property_documentation; | ||
538 | function_type type; | ||
477 | bool is_beta; | 539 | bool is_beta; |
478 | bool is_protected; | 540 | bool is_protected; |
479 | bool is_function_pointer; | ||
480 | bool is_static; | 541 | bool is_static; |
481 | Eolian_Unit const* unit; | 542 | Eolian_Unit const* unit; |
482 | 543 | ||
@@ -487,9 +548,12 @@ struct function_def | |||
487 | && lhs.parameters == rhs.parameters | 548 | && lhs.parameters == rhs.parameters |
488 | && lhs.c_name == rhs.c_name | 549 | && lhs.c_name == rhs.c_name |
489 | && lhs.filename == rhs.filename | 550 | && lhs.filename == rhs.filename |
551 | && lhs.documentation == rhs.documentation | ||
552 | && lhs.return_documentation == rhs.return_documentation | ||
553 | && lhs.property_documentation == rhs.property_documentation | ||
554 | && lhs.type == rhs.type | ||
490 | && lhs.is_beta == rhs.is_beta | 555 | && lhs.is_beta == rhs.is_beta |
491 | && lhs.is_protected == rhs.is_protected | 556 | && lhs.is_protected == rhs.is_protected |
492 | && lhs.is_function_pointer == rhs.is_function_pointer | ||
493 | && lhs.is_static == rhs.is_static; | 557 | && lhs.is_static == rhs.is_static; |
494 | } | 558 | } |
495 | friend inline bool operator!=(function_def const& lhs, function_def const& rhs) | 559 | friend inline bool operator!=(function_def const& lhs, function_def const& rhs) |
@@ -501,13 +565,20 @@ struct function_def | |||
501 | std::vector<parameter_def> const& _parameters, | 565 | std::vector<parameter_def> const& _parameters, |
502 | std::string const& _c_name, | 566 | std::string const& _c_name, |
503 | std::string _filename, | 567 | std::string _filename, |
568 | documentation_def _documentation, | ||
569 | documentation_def _return_documentation, | ||
570 | documentation_def _property_documentation, | ||
571 | function_type _type, | ||
504 | bool _is_beta = false, | 572 | bool _is_beta = false, |
505 | bool _is_protected = false, | 573 | bool _is_protected = false, |
506 | bool _is_function_pointer = false, | ||
507 | Eolian_Unit const* unit = nullptr) | 574 | Eolian_Unit const* unit = nullptr) |
508 | : return_type(_return_type), name(_name), parameters(_parameters), | 575 | : return_type(_return_type), name(_name), parameters(_parameters), |
509 | c_name(_c_name), filename(_filename), is_beta(_is_beta), is_protected(_is_protected), | 576 | c_name(_c_name), filename(_filename), documentation(_documentation), |
510 | is_function_pointer(_is_function_pointer), unit(unit) {} | 577 | return_documentation(_return_documentation), |
578 | property_documentation(_property_documentation), | ||
579 | type(_type), | ||
580 | is_beta(_is_beta), is_protected(_is_protected), | ||
581 | unit(unit) {} | ||
511 | 582 | ||
512 | function_def( ::Eolian_Function const* function, Eolian_Function_Type type, Eolian_Unit const* unit) | 583 | function_def( ::Eolian_Function const* function, Eolian_Function_Type type, Eolian_Unit const* unit) |
513 | : return_type(void_), unit(unit) | 584 | : return_type(void_), unit(unit) |
@@ -572,6 +643,40 @@ struct function_def | |||
572 | is_beta = eolian_function_is_beta(function); | 643 | is_beta = eolian_function_is_beta(function); |
573 | is_protected = eolian_function_scope_get(function, type) == EOLIAN_SCOPE_PROTECTED; | 644 | is_protected = eolian_function_scope_get(function, type) == EOLIAN_SCOPE_PROTECTED; |
574 | is_static = eolian_function_is_class(function); | 645 | is_static = eolian_function_is_class(function); |
646 | |||
647 | return_documentation = eolian_function_return_documentation_get(function, type); | ||
648 | |||
649 | Eolian_Implement const* implement = eolian_function_implement_get(function); | ||
650 | if (!implement) | ||
651 | return; | ||
652 | |||
653 | documentation = eolian_implement_documentation_get(implement, type); | ||
654 | |||
655 | |||
656 | if (type == EOLIAN_PROP_GET || type == EOLIAN_PROP_SET) | ||
657 | property_documentation = eolian_implement_documentation_get(implement, EOLIAN_PROPERTY); | ||
658 | |||
659 | switch (type) | ||
660 | { | ||
661 | case EOLIAN_UNRESOLVED: | ||
662 | this->type = function_type::unresolved; | ||
663 | break; | ||
664 | case EOLIAN_PROPERTY: | ||
665 | this->type = function_type::property; | ||
666 | break; | ||
667 | case EOLIAN_PROP_GET: | ||
668 | this->type = function_type::prop_get; | ||
669 | break; | ||
670 | case EOLIAN_PROP_SET: | ||
671 | this->type = function_type::prop_set; | ||
672 | break; | ||
673 | case EOLIAN_METHOD: | ||
674 | this->type = function_type::method; | ||
675 | break; | ||
676 | case EOLIAN_FUNCTION_POINTER: | ||
677 | this->type = function_type::function_pointer; | ||
678 | break; | ||
679 | } | ||
575 | } | 680 | } |
576 | 681 | ||
577 | std::string template_statement() const | 682 | std::string template_statement() const |
@@ -677,6 +782,7 @@ struct event_def | |||
677 | eina::optional<type_def> type; | 782 | eina::optional<type_def> type; |
678 | std::string name, c_name; | 783 | std::string name, c_name; |
679 | bool beta, protect; | 784 | bool beta, protect; |
785 | documentation_def documentation; | ||
680 | 786 | ||
681 | friend inline bool operator==(event_def const& lhs, event_def const& rhs) | 787 | friend inline bool operator==(event_def const& lhs, event_def const& rhs) |
682 | { | 788 | { |
@@ -684,21 +790,25 @@ struct event_def | |||
684 | && lhs.name == rhs.name | 790 | && lhs.name == rhs.name |
685 | && lhs.c_name == rhs.c_name | 791 | && lhs.c_name == rhs.c_name |
686 | && lhs.beta == rhs.beta | 792 | && lhs.beta == rhs.beta |
687 | && lhs.protect == rhs.protect; | 793 | && lhs.protect == rhs.protect |
794 | && lhs.documentation == rhs.documentation; | ||
688 | } | 795 | } |
689 | friend inline bool operator!=(event_def const& lhs, event_def const& rhs) | 796 | friend inline bool operator!=(event_def const& lhs, event_def const& rhs) |
690 | { | 797 | { |
691 | return !(lhs == rhs); | 798 | return !(lhs == rhs); |
692 | } | 799 | } |
693 | 800 | ||
694 | event_def(type_def type, std::string name, std::string c_name, bool beta, bool protect) | 801 | event_def(type_def type, std::string name, std::string c_name, bool beta, bool protect, |
695 | : type(type), name(name), c_name(c_name), beta(beta), protect(protect) {} | 802 | documentation_def documentation) |
803 | : type(type), name(name), c_name(c_name), beta(beta), protect(protect) | ||
804 | , documentation(documentation) {} | ||
696 | event_def(Eolian_Event const* event, Eolian_Unit const* unit) | 805 | event_def(Eolian_Event const* event, Eolian_Unit const* unit) |
697 | : type( ::eolian_event_type_get(event) ? eina::optional<type_def>{{::eolian_event_type_get(event), unit, EOLIAN_C_TYPE_DEFAULT}} : eina::optional<type_def>{}) | 806 | : type( ::eolian_event_type_get(event) ? eina::optional<type_def>{{::eolian_event_type_get(event), unit, EOLIAN_C_TYPE_DEFAULT}} : eina::optional<type_def>{}) |
698 | , name( ::eolian_event_name_get(event)) | 807 | , name( ::eolian_event_name_get(event)) |
699 | , c_name( ::eolian_event_c_name_get(event)) | 808 | , c_name( ::eolian_event_c_name_get(event)) |
700 | , beta( ::eolian_event_is_beta(event)) | 809 | , beta( ::eolian_event_is_beta(event)) |
701 | , protect( ::eolian_event_scope_get(event) == EOLIAN_SCOPE_PROTECTED){} | 810 | , protect( ::eolian_event_scope_get(event) == EOLIAN_SCOPE_PROTECTED) |
811 | , documentation( ::eolian_event_documentation_get(event)) {} | ||
702 | }; | 812 | }; |
703 | 813 | ||
704 | template <> | 814 | template <> |
@@ -768,6 +878,7 @@ struct klass_def | |||
768 | std::string eolian_name; | 878 | std::string eolian_name; |
769 | std::string cxx_name; | 879 | std::string cxx_name; |
770 | std::string filename; | 880 | std::string filename; |
881 | documentation_def documentation; | ||
771 | std::vector<std::string> namespaces; | 882 | std::vector<std::string> namespaces; |
772 | std::vector<function_def> functions; | 883 | std::vector<function_def> functions; |
773 | std::set<klass_name, compare_klass_name_by_name> inherits; | 884 | std::set<klass_name, compare_klass_name_by_name> inherits; |
@@ -802,12 +913,14 @@ struct klass_def | |||
802 | } | 913 | } |
803 | 914 | ||
804 | klass_def(std::string eolian_name, std::string cxx_name, std::string filename | 915 | klass_def(std::string eolian_name, std::string cxx_name, std::string filename |
916 | , documentation_def documentation | ||
805 | , std::vector<std::string> namespaces | 917 | , std::vector<std::string> namespaces |
806 | , std::vector<function_def> functions | 918 | , std::vector<function_def> functions |
807 | , std::set<klass_name, compare_klass_name_by_name> inherits | 919 | , std::set<klass_name, compare_klass_name_by_name> inherits |
808 | , class_type type | 920 | , class_type type |
809 | , std::set<klass_name, compare_klass_name_by_name> immediate_inherits) | 921 | , std::set<klass_name, compare_klass_name_by_name> immediate_inherits) |
810 | : eolian_name(eolian_name), cxx_name(cxx_name), filename(filename) | 922 | : eolian_name(eolian_name), cxx_name(cxx_name), filename(filename) |
923 | , documentation(documentation) | ||
811 | , namespaces(namespaces) | 924 | , namespaces(namespaces) |
812 | , functions(functions), inherits(inherits), type(type) | 925 | , functions(functions), inherits(inherits), type(type) |
813 | , immediate_inherits(immediate_inherits) | 926 | , immediate_inherits(immediate_inherits) |
@@ -915,6 +1028,8 @@ struct klass_def | |||
915 | events.push_back({&*event_iterator, unit}); | 1028 | events.push_back({&*event_iterator, unit}); |
916 | } catch(std::exception const&) {} | 1029 | } catch(std::exception const&) {} |
917 | } | 1030 | } |
1031 | |||
1032 | documentation = eolian_class_documentation_get(klass); | ||
918 | } | 1033 | } |
919 | 1034 | ||
920 | // TODO memoize the return? | 1035 | // TODO memoize the return? |
@@ -956,6 +1071,7 @@ struct enum_value_def | |||
956 | value_def value; | 1071 | value_def value; |
957 | std::string name; | 1072 | std::string name; |
958 | std::string c_name; | 1073 | std::string c_name; |
1074 | documentation_def documentation; | ||
959 | 1075 | ||
960 | enum_value_def(Eolian_Enum_Type_Field const* enum_field, Eolian_Unit const* unit) | 1076 | enum_value_def(Eolian_Enum_Type_Field const* enum_field, Eolian_Unit const* unit) |
961 | { | 1077 | { |
@@ -963,6 +1079,7 @@ struct enum_value_def | |||
963 | c_name = eolian_typedecl_enum_field_c_name_get(enum_field); | 1079 | c_name = eolian_typedecl_enum_field_c_name_get(enum_field); |
964 | auto exp = eolian_typedecl_enum_field_value_get(enum_field, EINA_TRUE); | 1080 | auto exp = eolian_typedecl_enum_field_value_get(enum_field, EINA_TRUE); |
965 | value = eolian_expression_eval(unit, exp, EOLIAN_MASK_INT); // FIXME hardcoded int | 1081 | value = eolian_expression_eval(unit, exp, EOLIAN_MASK_INT); // FIXME hardcoded int |
1082 | documentation = eolian_typedecl_enum_field_documentation_get(enum_field); | ||
966 | } | 1083 | } |
967 | }; | 1084 | }; |
968 | 1085 | ||
@@ -972,6 +1089,7 @@ struct enum_def | |||
972 | std::string cxx_name; | 1089 | std::string cxx_name; |
973 | std::vector<std::string> namespaces; | 1090 | std::vector<std::string> namespaces; |
974 | std::vector<enum_value_def> fields; | 1091 | std::vector<enum_value_def> fields; |
1092 | documentation_def documentation; | ||
975 | 1093 | ||
976 | enum_def(Eolian_Typedecl const* enum_obj, Eolian_Unit const* unit) | 1094 | enum_def(Eolian_Typedecl const* enum_obj, Eolian_Unit const* unit) |
977 | { | 1095 | { |
@@ -989,6 +1107,8 @@ struct enum_def | |||
989 | enum_value_def field_def(&*field_iterator, unit); | 1107 | enum_value_def field_def(&*field_iterator, unit); |
990 | this->fields.push_back(field_def); | 1108 | this->fields.push_back(field_def); |
991 | } | 1109 | } |
1110 | |||
1111 | documentation = ::eolian_typedecl_documentation_get(enum_obj); | ||
992 | } | 1112 | } |
993 | }; | 1113 | }; |
994 | 1114 | ||
@@ -996,6 +1116,7 @@ struct struct_field_def | |||
996 | { | 1116 | { |
997 | type_def type; | 1117 | type_def type; |
998 | std::string name; | 1118 | std::string name; |
1119 | documentation_def documentation; | ||
999 | 1120 | ||
1000 | struct_field_def(Eolian_Struct_Type_Field const* struct_field, Eolian_Unit const* unit) | 1121 | struct_field_def(Eolian_Struct_Type_Field const* struct_field, Eolian_Unit const* unit) |
1001 | { | 1122 | { |
@@ -1003,6 +1124,7 @@ struct struct_field_def | |||
1003 | try { | 1124 | try { |
1004 | type.set(eolian_typedecl_struct_field_type_get(struct_field), unit, EOLIAN_C_TYPE_DEFAULT); | 1125 | type.set(eolian_typedecl_struct_field_type_get(struct_field), unit, EOLIAN_C_TYPE_DEFAULT); |
1005 | } catch(std::runtime_error const&) { /* Silently skip pointer fields*/ } | 1126 | } catch(std::runtime_error const&) { /* Silently skip pointer fields*/ } |
1127 | documentation = ::eolian_typedecl_struct_field_documentation_get(struct_field); | ||
1006 | } | 1128 | } |
1007 | 1129 | ||
1008 | }; | 1130 | }; |
@@ -1013,6 +1135,7 @@ struct struct_def | |||
1013 | std::string cxx_name; | 1135 | std::string cxx_name; |
1014 | std::vector<std::string> namespaces; | 1136 | std::vector<std::string> namespaces; |
1015 | std::vector<struct_field_def> fields; | 1137 | std::vector<struct_field_def> fields; |
1138 | documentation_def documentation; | ||
1016 | 1139 | ||
1017 | struct_def(Eolian_Typedecl const* struct_obj, Eolian_Unit const* unit) | 1140 | struct_def(Eolian_Typedecl const* struct_obj, Eolian_Unit const* unit) |
1018 | { | 1141 | { |
@@ -1029,6 +1152,8 @@ struct struct_def | |||
1029 | struct_field_def field_def(&*field_iterator, unit); | 1152 | struct_field_def field_def(&*field_iterator, unit); |
1030 | this->fields.push_back(field_def); | 1153 | this->fields.push_back(field_def); |
1031 | } | 1154 | } |
1155 | |||
1156 | documentation = ::eolian_typedecl_documentation_get(struct_obj); | ||
1032 | } | 1157 | } |
1033 | }; | 1158 | }; |
1034 | 1159 | ||
@@ -1137,7 +1262,7 @@ template <> | |||
1137 | struct is_tuple<attributes::parameter_def> : std::true_type {}; | 1262 | struct is_tuple<attributes::parameter_def> : std::true_type {}; |
1138 | template <> | 1263 | template <> |
1139 | struct is_tuple<attributes::event_def> : std::true_type {}; | 1264 | struct is_tuple<attributes::event_def> : std::true_type {}; |
1140 | 1265 | ||
1141 | } | 1266 | } |
1142 | 1267 | ||
1143 | } } } | 1268 | } } } |
diff --git a/src/lib/eolian_cxx/grammar/string.hpp b/src/lib/eolian_cxx/grammar/string.hpp index df4ae8f2cb..06cce17823 100644 --- a/src/lib/eolian_cxx/grammar/string.hpp +++ b/src/lib/eolian_cxx/grammar/string.hpp | |||
@@ -26,7 +26,7 @@ struct literal_generator | |||
26 | const char* string; | 26 | const char* string; |
27 | }; | 27 | }; |
28 | 28 | ||
29 | literal_generator as_generator(char const* literal) { return literal; } | 29 | inline literal_generator as_generator(char const* literal) { return literal; } |
30 | 30 | ||
31 | struct { | 31 | struct { |
32 | literal_generator operator()(const char* literal) const | 32 | literal_generator operator()(const char* literal) const |
@@ -164,7 +164,7 @@ struct is_generator<string_generator_terminal> : std::true_type {}; | |||
164 | template <> | 164 | template <> |
165 | struct is_generator<std::string> : std::true_type {}; | 165 | struct is_generator<std::string> : std::true_type {}; |
166 | 166 | ||
167 | string_generator as_generator(string_generator_terminal) | 167 | inline string_generator as_generator(string_generator_terminal) |
168 | { | 168 | { |
169 | return string_generator{}; | 169 | return string_generator{}; |
170 | } | 170 | } |
@@ -181,7 +181,7 @@ struct attributes_needed<string_replace_generator> : std::integral_constant<int, | |||
181 | 181 | ||
182 | namespace std { | 182 | namespace std { |
183 | 183 | ||
184 | ::efl::eolian::grammar::specific_string_generator as_generator(std::string string) | 184 | inline ::efl::eolian::grammar::specific_string_generator as_generator(std::string string) |
185 | { | 185 | { |
186 | return ::efl::eolian::grammar::specific_string_generator{string}; | 186 | return ::efl::eolian::grammar::specific_string_generator{string}; |
187 | } | 187 | } |
diff --git a/src/tests/efl_mono/Eina.cs b/src/tests/efl_mono/Eina.cs index e5baa8e32a..bd2d2976b9 100644 --- a/src/tests/efl_mono/Eina.cs +++ b/src/tests/efl_mono/Eina.cs | |||
@@ -510,7 +510,7 @@ class TestEinaBinbuf | |||
510 | { | 510 | { |
511 | var t = new NativeInheritImpl(); | 511 | var t = new NativeInheritImpl(); |
512 | var binbuf = new eina.Binbuf(base_seq, (uint)base_seq.Length); | 512 | var binbuf = new eina.Binbuf(base_seq, (uint)base_seq.Length); |
513 | Test.Assert(NativeInheritImpl.test_testing_eina_binbuf_in(t.raw_handle, binbuf.Handle)); | 513 | Test.Assert(t.CallEinaBinbufIn(binbuf)); |
514 | Test.Assert(t.binbuf_in_flag); | 514 | Test.Assert(t.binbuf_in_flag); |
515 | Test.Assert(binbuf.Own); | 515 | Test.Assert(binbuf.Own); |
516 | Test.Assert(binbuf.GetBytes().SequenceEqual(new byte[]{43,42,0x0,0x2A,0x42,33})); | 516 | Test.Assert(binbuf.GetBytes().SequenceEqual(new byte[]{43,42,0x0,0x2A,0x42,33})); |
@@ -523,7 +523,7 @@ class TestEinaBinbuf | |||
523 | var t = new NativeInheritImpl(); | 523 | var t = new NativeInheritImpl(); |
524 | var binbuf = new eina.Binbuf(base_seq, (uint)base_seq.Length); | 524 | var binbuf = new eina.Binbuf(base_seq, (uint)base_seq.Length); |
525 | binbuf.Own = false; | 525 | binbuf.Own = false; |
526 | Test.Assert(NativeInheritImpl.test_testing_eina_binbuf_in_own(t.raw_handle, binbuf.Handle)); | 526 | Test.Assert(t.CallEinaBinbufInOwn(binbuf)); |
527 | Test.Assert(t.binbuf_in_own_flag); | 527 | Test.Assert(t.binbuf_in_own_flag); |
528 | Test.Assert(binbuf.GetBytes().SequenceEqual(new byte[]{43,42,0x0,0x2A,0x42,33})); | 528 | Test.Assert(binbuf.GetBytes().SequenceEqual(new byte[]{43,42,0x0,0x2A,0x42,33})); |
529 | binbuf.Dispose(); | 529 | binbuf.Dispose(); |
@@ -534,11 +534,8 @@ class TestEinaBinbuf | |||
534 | public static void test_inherit_eina_binbuf_out() | 534 | public static void test_inherit_eina_binbuf_out() |
535 | { | 535 | { |
536 | var t = new NativeInheritImpl(); | 536 | var t = new NativeInheritImpl(); |
537 | IntPtr bb_hdl; | 537 | eina.Binbuf binbuf = t.CallEinaBinbufOut(); |
538 | Test.Assert(NativeInheritImpl.test_testing_eina_binbuf_out(t.raw_handle, out bb_hdl)); | ||
539 | Test.Assert(t.binbuf_out_flag); | 538 | Test.Assert(t.binbuf_out_flag); |
540 | Test.Assert(bb_hdl != IntPtr.Zero); | ||
541 | var binbuf = new eina.Binbuf(bb_hdl, false); | ||
542 | Test.Assert(binbuf.GetBytes().SequenceEqual(new byte[]{33})); | 539 | Test.Assert(binbuf.GetBytes().SequenceEqual(new byte[]{33})); |
543 | binbuf.Reset(); | 540 | binbuf.Reset(); |
544 | Test.Assert(binbuf.Append(base_seq)); | 541 | Test.Assert(binbuf.Append(base_seq)); |
@@ -550,11 +547,8 @@ class TestEinaBinbuf | |||
550 | public static void test_inherit_eina_binbuf_out_own() | 547 | public static void test_inherit_eina_binbuf_out_own() |
551 | { | 548 | { |
552 | var t = new NativeInheritImpl(); | 549 | var t = new NativeInheritImpl(); |
553 | IntPtr bb_hdl; | 550 | eina.Binbuf binbuf = t.CallEinaBinbufOutOwn(); |
554 | Test.Assert(NativeInheritImpl.test_testing_eina_binbuf_out_own(t.raw_handle, out bb_hdl)); | ||
555 | Test.Assert(t.binbuf_out_own_flag); | 551 | Test.Assert(t.binbuf_out_own_flag); |
556 | Test.Assert(bb_hdl != IntPtr.Zero); | ||
557 | var binbuf = new eina.Binbuf(bb_hdl, true); | ||
558 | Test.Assert(binbuf.GetBytes().SequenceEqual(new byte[]{33})); | 552 | Test.Assert(binbuf.GetBytes().SequenceEqual(new byte[]{33})); |
559 | binbuf.Reset(); | 553 | binbuf.Reset(); |
560 | Test.Assert(binbuf.Append(base_seq)); | 554 | Test.Assert(binbuf.Append(base_seq)); |
@@ -566,10 +560,8 @@ class TestEinaBinbuf | |||
566 | public static void test_inherit_eina_binbuf_return() | 560 | public static void test_inherit_eina_binbuf_return() |
567 | { | 561 | { |
568 | var t = new NativeInheritImpl(); | 562 | var t = new NativeInheritImpl(); |
569 | IntPtr bb_hdl = NativeInheritImpl.test_testing_eina_binbuf_return(t.raw_handle); | 563 | var binbuf = t.CallEinaBinbufReturn(); |
570 | Test.Assert(t.binbuf_return_flag); | 564 | Test.Assert(t.binbuf_return_flag); |
571 | Test.Assert(bb_hdl != IntPtr.Zero); | ||
572 | var binbuf = new eina.Binbuf(bb_hdl, false); | ||
573 | Test.Assert(binbuf.GetBytes().SequenceEqual(new byte[]{33})); | 565 | Test.Assert(binbuf.GetBytes().SequenceEqual(new byte[]{33})); |
574 | binbuf.Reset(); | 566 | binbuf.Reset(); |
575 | Test.Assert(binbuf.Append(base_seq)); | 567 | Test.Assert(binbuf.Append(base_seq)); |
@@ -581,10 +573,8 @@ class TestEinaBinbuf | |||
581 | public static void test_inherit_eina_binbuf_return_own() | 573 | public static void test_inherit_eina_binbuf_return_own() |
582 | { | 574 | { |
583 | var t = new NativeInheritImpl(); | 575 | var t = new NativeInheritImpl(); |
584 | IntPtr bb_hdl = NativeInheritImpl.test_testing_eina_binbuf_return_own(t.raw_handle); | 576 | var binbuf = t.CallEinaBinbufReturnOwn(); |
585 | Test.Assert(t.binbuf_return_own_flag); | 577 | Test.Assert(t.binbuf_return_own_flag); |
586 | Test.Assert(bb_hdl != IntPtr.Zero); | ||
587 | var binbuf = new eina.Binbuf(bb_hdl, true); | ||
588 | Test.Assert(binbuf.GetBytes().SequenceEqual(new byte[]{33})); | 578 | Test.Assert(binbuf.GetBytes().SequenceEqual(new byte[]{33})); |
589 | binbuf.Reset(); | 579 | binbuf.Reset(); |
590 | Test.Assert(binbuf.Append(base_seq)); | 580 | Test.Assert(binbuf.Append(base_seq)); |
@@ -681,7 +671,7 @@ class TestEinaSlice | |||
681 | { | 671 | { |
682 | var t = new NativeInheritImpl(); | 672 | var t = new NativeInheritImpl(); |
683 | var slc = new eina.Slice(pinnedPtr, (UIntPtr)3); | 673 | var slc = new eina.Slice(pinnedPtr, (UIntPtr)3); |
684 | Test.Assert(NativeInheritImpl.test_testing_eina_slice_in(t.raw_handle, slc)); | 674 | Test.Assert(t.EinaSliceIn(slc)); |
685 | Test.Assert(t.slice_in_flag); | 675 | Test.Assert(t.slice_in_flag); |
686 | } | 676 | } |
687 | 677 | ||
@@ -694,7 +684,7 @@ class TestEinaSlice | |||
694 | var slc = new eina.Rw_Slice(ptr, (UIntPtr)3); | 684 | var slc = new eina.Rw_Slice(ptr, (UIntPtr)3); |
695 | 685 | ||
696 | var t = new NativeInheritImpl(); | 686 | var t = new NativeInheritImpl(); |
697 | Test.Assert(NativeInheritImpl.test_testing_eina_rw_slice_in(t.raw_handle, slc)); | 687 | Test.Assert(t.EinaRwSliceIn(slc)); |
698 | 688 | ||
699 | Test.Assert(t.rw_slice_in_flag); | 689 | Test.Assert(t.rw_slice_in_flag); |
700 | Test.Assert(slc.GetBytes().SequenceEqual(base_seq)); | 690 | Test.Assert(slc.GetBytes().SequenceEqual(base_seq)); |
@@ -706,7 +696,7 @@ class TestEinaSlice | |||
706 | { | 696 | { |
707 | var t = new NativeInheritImpl(); | 697 | var t = new NativeInheritImpl(); |
708 | var slc = new eina.Slice(); | 698 | var slc = new eina.Slice(); |
709 | Test.Assert(NativeInheritImpl.test_testing_eina_slice_out(t.raw_handle, ref slc)); | 699 | Test.Assert(t.EinaSliceOut(ref slc)); |
710 | Test.Assert(t.slice_out_flag); | 700 | Test.Assert(t.slice_out_flag); |
711 | Test.Assert(slc.Mem != IntPtr.Zero); | 701 | Test.Assert(slc.Mem != IntPtr.Zero); |
712 | Test.Assert(slc.Length == base_seq.Length); | 702 | Test.Assert(slc.Length == base_seq.Length); |
@@ -717,7 +707,7 @@ class TestEinaSlice | |||
717 | { | 707 | { |
718 | var t = new NativeInheritImpl(); | 708 | var t = new NativeInheritImpl(); |
719 | var slc = new eina.Rw_Slice(); | 709 | var slc = new eina.Rw_Slice(); |
720 | Test.Assert(NativeInheritImpl.test_testing_eina_rw_slice_out(t.raw_handle, ref slc)); | 710 | Test.Assert(t.EinaRwSliceOut(ref slc)); |
721 | Test.Assert(t.rw_slice_out_flag); | 711 | Test.Assert(t.rw_slice_out_flag); |
722 | Test.Assert(slc.Mem != IntPtr.Zero); | 712 | Test.Assert(slc.Mem != IntPtr.Zero); |
723 | Test.Assert(slc.Length == base_seq.Length); | 713 | Test.Assert(slc.Length == base_seq.Length); |
diff --git a/src/tests/efl_mono/Events.cs b/src/tests/efl_mono/Events.cs index 025e501a19..5719745a76 100644 --- a/src/tests/efl_mono/Events.cs +++ b/src/tests/efl_mono/Events.cs | |||
@@ -6,21 +6,32 @@ namespace TestSuite | |||
6 | class TestEoEvents | 6 | class TestEoEvents |
7 | { | 7 | { |
8 | public bool called = false; | 8 | public bool called = false; |
9 | public bool correct_sender = false; | ||
9 | protected void callback(object sender, EventArgs e) { | 10 | protected void callback(object sender, EventArgs e) { |
10 | called = true; | 11 | called = true; |
12 | efl.Object obj = sender as efl.Object; | ||
13 | if (obj != null) | ||
14 | { | ||
15 | obj.SetName("loop_called"); | ||
16 | correct_sender = true; | ||
17 | } | ||
11 | } | 18 | } |
12 | protected void another_callback(object sender, EventArgs e) { } | 19 | protected void another_callback(object sender, EventArgs e) { } |
13 | 20 | ||
14 | public static void callback_add_event() | 21 | public static void callback_add_event() |
15 | { | 22 | { |
16 | efl.Loop loop = new efl.LoopConcrete(); | 23 | efl.Loop loop = new efl.LoopConcrete(); |
24 | loop.SetName("loop"); | ||
17 | TestEoEvents listener = new TestEoEvents(); | 25 | TestEoEvents listener = new TestEoEvents(); |
18 | loop.CALLBACK_ADD += listener.callback; | 26 | loop.CALLBACK_ADD += listener.callback; |
19 | 27 | ||
20 | Test.Assert(!listener.called); | 28 | Test.Assert(!listener.called); |
29 | Test.Assert(!listener.correct_sender); | ||
30 | Test.AssertEquals("loop", loop.GetName()); | ||
21 | loop.IDLE += listener.another_callback; | 31 | loop.IDLE += listener.another_callback; |
22 | Test.Assert(listener.called); | 32 | Test.Assert(listener.called); |
33 | Test.Assert(listener.correct_sender); | ||
34 | Test.AssertEquals("loop_called", loop.GetName()); | ||
23 | } | 35 | } |
24 | } | 36 | } |
25 | |||
26 | } | 37 | } |
diff --git a/src/tests/efl_mono/libefl_mono_native_test.c b/src/tests/efl_mono/libefl_mono_native_test.c index b8cc8d58e4..eedc12fac7 100644 --- a/src/tests/efl_mono/libefl_mono_native_test.c +++ b/src/tests/efl_mono/libefl_mono_native_test.c | |||
@@ -307,6 +307,11 @@ Eina_Bool _test_testing_eina_binbuf_in(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Tes | |||
307 | return r; | 307 | return r; |
308 | } | 308 | } |
309 | 309 | ||
310 | Eina_Bool _test_testing_call_eina_binbuf_in(Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Binbuf *binbuf) | ||
311 | { | ||
312 | return test_testing_eina_binbuf_in(obj, binbuf); | ||
313 | } | ||
314 | |||
310 | Eina_Binbuf *_binbuf_in_own_to_check = NULL; | 315 | Eina_Binbuf *_binbuf_in_own_to_check = NULL; |
311 | 316 | ||
312 | Eina_Bool _test_testing_eina_binbuf_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Binbuf *binbuf) | 317 | Eina_Bool _test_testing_eina_binbuf_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Binbuf *binbuf) |
@@ -319,6 +324,11 @@ Eina_Bool _test_testing_eina_binbuf_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test | |||
319 | return r; | 324 | return r; |
320 | } | 325 | } |
321 | 326 | ||
327 | Eina_Bool _test_testing_call_eina_binbuf_in_own(Eo *obj, EINA_UNUSED Test_Testing_Data *pd, Eina_Binbuf *binbuf) | ||
328 | { | ||
329 | return test_testing_eina_binbuf_in_own(obj, binbuf); | ||
330 | } | ||
331 | |||
322 | Eina_Bool _test_testing_check_binbuf_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) | 332 | Eina_Bool _test_testing_check_binbuf_in_own(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) |
323 | { | 333 | { |
324 | if (!_binbuf_in_own_to_check) return EINA_FALSE; | 334 | if (!_binbuf_in_own_to_check) return EINA_FALSE; |
@@ -339,6 +349,13 @@ Eina_Bool _test_testing_eina_binbuf_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Te | |||
339 | return EINA_TRUE; | 349 | return EINA_TRUE; |
340 | } | 350 | } |
341 | 351 | ||
352 | Eina_Binbuf *_test_testing_call_eina_binbuf_out(Eo *obj, EINA_UNUSED Test_Testing_Data *pd) | ||
353 | { | ||
354 | Eina_Binbuf *binbuf = NULL; | ||
355 | test_testing_eina_binbuf_out(obj, &binbuf); | ||
356 | return binbuf; | ||
357 | } | ||
358 | |||
342 | Eina_Bool _test_testing_check_binbuf_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) | 359 | Eina_Bool _test_testing_check_binbuf_out(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) |
343 | { | 360 | { |
344 | if (!_binbuf_out_to_check) return EINA_FALSE; | 361 | if (!_binbuf_out_to_check) return EINA_FALSE; |
@@ -353,6 +370,13 @@ Eina_Bool _test_testing_eina_binbuf_out_own(EINA_UNUSED Eo *obj, EINA_UNUSED Tes | |||
353 | return EINA_TRUE; | 370 | return EINA_TRUE; |
354 | } | 371 | } |
355 | 372 | ||
373 | Eina_Binbuf *_test_testing_call_eina_binbuf_out_own(Eo *obj, EINA_UNUSED Test_Testing_Data *pd) | ||
374 | { | ||
375 | Eina_Binbuf *binbuf = NULL; | ||
376 | test_testing_eina_binbuf_out_own(obj, &binbuf); | ||
377 | return binbuf; | ||
378 | } | ||
379 | |||
356 | Eina_Binbuf *_binbuf_return_to_check = NULL; | 380 | Eina_Binbuf *_binbuf_return_to_check = NULL; |
357 | 381 | ||
358 | Eina_Binbuf *_test_testing_eina_binbuf_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) | 382 | Eina_Binbuf *_test_testing_eina_binbuf_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) |
@@ -363,6 +387,11 @@ Eina_Binbuf *_test_testing_eina_binbuf_return(EINA_UNUSED Eo *obj, EINA_UNUSED T | |||
363 | return binbuf; | 387 | return binbuf; |
364 | } | 388 | } |
365 | 389 | ||
390 | Eina_Binbuf *_test_testing_call_eina_binbuf_return(Eo *obj, EINA_UNUSED Test_Testing_Data *pd) | ||
391 | { | ||
392 | return test_testing_eina_binbuf_return(obj); | ||
393 | } | ||
394 | |||
366 | Eina_Bool _test_testing_check_binbuf_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) | 395 | Eina_Bool _test_testing_check_binbuf_return(EINA_UNUSED Eo *obj, EINA_UNUSED Test_Testing_Data *pd) |
367 | { | 396 | { |
368 | if (!_binbuf_return_to_check) return EINA_FALSE; | 397 | if (!_binbuf_return_to_check) return EINA_FALSE; |
@@ -376,6 +405,12 @@ Eina_Binbuf *_test_testing_eina_binbuf_return_own(EINA_UNUSED Eo *obj, EINA_UNUS | |||
376 | return binbuf; | 405 | return binbuf; |
377 | } | 406 | } |
378 | 407 | ||
408 | Eina_Binbuf *_test_testing_call_eina_binbuf_return_own(Eo *obj, EINA_UNUSED Test_Testing_Data *pd) | ||
409 | { | ||
410 | return test_testing_eina_binbuf_return_own(obj); | ||
411 | } | ||
412 | |||
413 | |||
379 | static const int base_seq_int[] = {0x0,0x2A,0x42}; | 414 | static const int base_seq_int[] = {0x0,0x2A,0x42}; |
380 | static const unsigned int base_seq_int_size = EINA_C_ARRAY_LENGTH(base_seq_int); | 415 | static const unsigned int base_seq_int_size = EINA_C_ARRAY_LENGTH(base_seq_int); |
381 | static const int modified_seq_int[] = {0x0,0x2A,0x42,42,43,33}; | 416 | static const int modified_seq_int[] = {0x0,0x2A,0x42,42,43,33}; |
diff --git a/src/tests/efl_mono/test_testing.eo b/src/tests/efl_mono/test_testing.eo index 7d7ab51275..fec5f901f9 100644 --- a/src/tests/efl_mono/test_testing.eo +++ b/src/tests/efl_mono/test_testing.eo | |||
@@ -254,12 +254,27 @@ class Test.Testing (Efl.Object) { | |||
254 | return: bool; | 254 | return: bool; |
255 | } | 255 | } |
256 | 256 | ||
257 | call_eina_binbuf_in { | ||
258 | params { | ||
259 | @in binbuf: ptr(Eina.Binbuf); | ||
260 | } | ||
261 | return: bool; | ||
262 | } | ||
263 | |||
257 | eina_binbuf_in_own { | 264 | eina_binbuf_in_own { |
258 | params { | 265 | params { |
259 | @in binbuf: ptr(Eina.Binbuf) @owned; | 266 | @in binbuf: ptr(Eina.Binbuf) @owned; |
260 | } | 267 | } |
261 | return: bool; | 268 | return: bool; |
262 | } | 269 | } |
270 | |||
271 | call_eina_binbuf_in_own { | ||
272 | params { | ||
273 | @in str: ptr(Eina.Binbuf) @owned; | ||
274 | } | ||
275 | return: bool; | ||
276 | } | ||
277 | |||
263 | check_binbuf_in_own { | 278 | check_binbuf_in_own { |
264 | return: bool; | 279 | return: bool; |
265 | } | 280 | } |
@@ -270,6 +285,11 @@ class Test.Testing (Efl.Object) { | |||
270 | } | 285 | } |
271 | return: bool; | 286 | return: bool; |
272 | } | 287 | } |
288 | |||
289 | call_eina_binbuf_out { | ||
290 | return: ptr(Eina.Binbuf); | ||
291 | } | ||
292 | |||
273 | check_binbuf_out { | 293 | check_binbuf_out { |
274 | return: bool; | 294 | return: bool; |
275 | } | 295 | } |
@@ -281,9 +301,18 @@ class Test.Testing (Efl.Object) { | |||
281 | return: bool; | 301 | return: bool; |
282 | } | 302 | } |
283 | 303 | ||
304 | call_eina_binbuf_out_own { | ||
305 | return: ptr(Eina.Binbuf) @owned; | ||
306 | } | ||
307 | |||
284 | eina_binbuf_return { | 308 | eina_binbuf_return { |
285 | return: ptr(Eina.Binbuf); | 309 | return: ptr(Eina.Binbuf); |
286 | } | 310 | } |
311 | |||
312 | call_eina_binbuf_return { | ||
313 | return: ptr(Eina.Binbuf); | ||
314 | } | ||
315 | |||
287 | check_binbuf_return { | 316 | check_binbuf_return { |
288 | return: bool; | 317 | return: bool; |
289 | } | 318 | } |
@@ -292,6 +321,10 @@ class Test.Testing (Efl.Object) { | |||
292 | return: ptr(Eina.Binbuf) @owned; | 321 | return: ptr(Eina.Binbuf) @owned; |
293 | } | 322 | } |
294 | 323 | ||
324 | call_eina_binbuf_return_own { | ||
325 | return: ptr(Eina.Binbuf) @owned; | ||
326 | } | ||
327 | |||
295 | /* Eina Array */ | 328 | /* Eina Array */ |
296 | 329 | ||
297 | /* Integer */ | 330 | /* Integer */ |
diff --git a/src/tests/eolian_cxx/docs.eo b/src/tests/eolian_cxx/docs.eo new file mode 100644 index 0000000000..9d2e576866 --- /dev/null +++ b/src/tests/eolian_cxx/docs.eo | |||
@@ -0,0 +1,86 @@ | |||
1 | struct Foo { | ||
2 | [[This is struct Foo. | ||
3 | It does stuff. | ||
4 | |||
5 | Note: This is a note. | ||
6 | |||
7 | This is a longer description for struct Foo. | ||
8 | |||
9 | Warning: This is a warning. You can only use Warning: and | ||
10 | Note: at the beginning of a paragraph. | ||
11 | |||
12 | This is another paragraph. | ||
13 | |||
14 | @since 1.66 | ||
15 | ]] | ||
16 | field1: int; [[Field documentation.]] | ||
17 | field2: float; | ||
18 | field3: short; [[Another field documentation.]] | ||
19 | } | ||
20 | |||
21 | enum Bar { | ||
22 | [[Docs for enum Bar.]] | ||
23 | blah = 0, | ||
24 | foo = 1, [[Docs for foo.]] | ||
25 | bar = 2 [[Docs for bar.]] | ||
26 | } | ||
27 | |||
28 | type Alias: Bar; [[Docs for typedef. | ||
29 | |||
30 | More docs for typedef. | ||
31 | See @Bar. @since 2.0 | ||
32 | ]] | ||
33 | |||
34 | var pants: int = 150; [[Docs for var.]] | ||
35 | |||
36 | struct Opaque; [[Opaque struct docs. See @Foo for another struct.]] | ||
37 | |||
38 | class Docs { | ||
39 | [[Docs for class. | ||
40 | |||
41 | More docs for class. Testing references now. | ||
42 | @Foo | ||
43 | @Bar | ||
44 | @Alias | ||
45 | @pants | ||
46 | @.meth | ||
47 | @.prop | ||
48 | @.prop.get | ||
49 | @.prop.set | ||
50 | @Foo.field1 | ||
51 | @Bar.foo | ||
52 | @Docs | ||
53 | |||
54 | @since 1.17 | ||
55 | ]] | ||
56 | legacy_prefix: docs; | ||
57 | methods { | ||
58 | meth { | ||
59 | [[Method documentation.]] | ||
60 | params { | ||
61 | @in a: int; [[Param documentation.]] | ||
62 | @out b: float; | ||
63 | @out c: long; [[Another param documentation.]] | ||
64 | } | ||
65 | return: int; [[Return documentation.]] | ||
66 | } | ||
67 | @property prop { | ||
68 | [[Property common documentation. | ||
69 | |||
70 | @since 1.18 | ||
71 | ]] | ||
72 | get { | ||
73 | [[Get documentation.]] | ||
74 | } | ||
75 | set { | ||
76 | [[Set documentation.]] | ||
77 | } | ||
78 | values { | ||
79 | val: int; [[Value documentation.]] | ||
80 | } | ||
81 | } | ||
82 | } | ||
83 | events { | ||
84 | clicked; [[Event docs.]] | ||
85 | } | ||
86 | } | ||
diff --git a/src/tests/eolian_cxx/eolian_cxx_suite.cc b/src/tests/eolian_cxx/eolian_cxx_suite.cc index c78a338fc3..6a1b94033b 100644 --- a/src/tests/eolian_cxx/eolian_cxx_suite.cc +++ b/src/tests/eolian_cxx/eolian_cxx_suite.cc | |||
@@ -13,6 +13,7 @@ static const Efl_Test_Case etc[] = { | |||
13 | { "Eolian-Cxx Inheritance", eolian_cxx_test_inheritance }, | 13 | { "Eolian-Cxx Inheritance", eolian_cxx_test_inheritance }, |
14 | { "Eolian-Cxx Binding", eolian_cxx_test_binding }, | 14 | { "Eolian-Cxx Binding", eolian_cxx_test_binding }, |
15 | { "Eolian-Cxx Cyclic", eolian_cxx_test_cyclic }, | 15 | { "Eolian-Cxx Cyclic", eolian_cxx_test_cyclic }, |
16 | { "Eolian-Cxx Documentation", eolian_cxx_test_documentation }, | ||
16 | { NULL, NULL } | 17 | { NULL, NULL } |
17 | }; | 18 | }; |
18 | 19 | ||
diff --git a/src/tests/eolian_cxx/eolian_cxx_suite.h b/src/tests/eolian_cxx/eolian_cxx_suite.h index 0d3ce69931..63691d6a2d 100644 --- a/src/tests/eolian_cxx/eolian_cxx_suite.h +++ b/src/tests/eolian_cxx/eolian_cxx_suite.h | |||
@@ -10,5 +10,6 @@ void eolian_cxx_test_address_of(TCase* tc); | |||
10 | void eolian_cxx_test_inheritance(TCase* tc); | 10 | void eolian_cxx_test_inheritance(TCase* tc); |
11 | void eolian_cxx_test_binding(TCase* tc); | 11 | void eolian_cxx_test_binding(TCase* tc); |
12 | void eolian_cxx_test_cyclic(TCase* tc); | 12 | void eolian_cxx_test_cyclic(TCase* tc); |
13 | void eolian_cxx_test_documentation(TCase* tc); | ||
13 | 14 | ||
14 | #endif /* _EOLIAN_CXX_SUITE_H */ | 15 | #endif /* _EOLIAN_CXX_SUITE_H */ |
diff --git a/src/tests/eolian_cxx/eolian_cxx_test_documentation.cc b/src/tests/eolian_cxx/eolian_cxx_test_documentation.cc new file mode 100644 index 0000000000..26f249432b --- /dev/null +++ b/src/tests/eolian_cxx/eolian_cxx_test_documentation.cc | |||
@@ -0,0 +1,289 @@ | |||
1 | #ifdef HAVE_CONFIG_H | ||
2 | # include <config.h> | ||
3 | #endif | ||
4 | |||
5 | #include <iostream> | ||
6 | #include <cassert> | ||
7 | #include <iterator> | ||
8 | #include <algorithm> | ||
9 | |||
10 | #include <Eina.hh> | ||
11 | #include <Eolian_Cxx.hh> | ||
12 | |||
13 | #include "eolian_cxx_suite.h" | ||
14 | |||
15 | #include "grammar/klass_def.hpp" | ||
16 | |||
17 | using efl::eolian::grammar::attributes::klass_def; | ||
18 | using efl::eolian::grammar::attributes::documentation_def; | ||
19 | using efl::eolian::grammar::attributes::function_def; | ||
20 | using efl::eolian::grammar::attributes::enum_def; | ||
21 | using efl::eolian::grammar::attributes::struct_def; | ||
22 | |||
23 | klass_def init_test_data(efl::eolian::eolian_state const& state) | ||
24 | { | ||
25 | ck_assert(::eolian_directory_scan(state.value, PACKAGE_DATA_DIR)); | ||
26 | ck_assert(::eolian_all_eot_files_parse(state.value)); | ||
27 | ck_assert(::eolian_file_parse(state.value, PACKAGE_DATA_DIR"/docs.eo")); | ||
28 | |||
29 | const Eolian_Class *c_klass = ::eolian_class_get_by_name(state.as_unit(), "Docs"); | ||
30 | ck_assert_ptr_ne(c_klass, NULL); | ||
31 | |||
32 | klass_def klass(c_klass, state.as_unit()); | ||
33 | return klass; | ||
34 | } | ||
35 | |||
36 | START_TEST(eolian_cxx_test_class_docs) | ||
37 | { | ||
38 | efl::eina::eina_init eina_init; | ||
39 | efl::eolian::eolian_init eolian_init; | ||
40 | efl::eolian::eolian_state eolian_state; | ||
41 | |||
42 | klass_def klass = init_test_data(eolian_state); | ||
43 | documentation_def doc = klass.documentation; | ||
44 | ck_assert_str_eq(doc.summary.c_str(), "Docs for class."); | ||
45 | ck_assert_str_eq(doc.description.c_str(), | ||
46 | "More docs for class. Testing references now. " | ||
47 | "@Foo " | ||
48 | "@Bar " | ||
49 | "@Alias " | ||
50 | "@pants " | ||
51 | "@Docs.meth " | ||
52 | "@Docs.prop " | ||
53 | "@Docs.prop.get " | ||
54 | "@Docs.prop.set " | ||
55 | "@Foo.field1 " | ||
56 | "@Bar.foo " | ||
57 | "@Docs"); | ||
58 | ck_assert_str_eq(doc.since.c_str(), "1.17"); | ||
59 | } | ||
60 | END_TEST | ||
61 | |||
62 | START_TEST(eolian_cxx_test_function_docs) | ||
63 | { | ||
64 | efl::eina::eina_init eina_init; | ||
65 | efl::eolian::eolian_init eolian_init; | ||
66 | efl::eolian::eolian_state eolian_state; | ||
67 | |||
68 | klass_def klass = init_test_data(eolian_state); | ||
69 | function_def func = *std::find_if(klass.functions.begin(), klass.functions.end(), | ||
70 | [](const function_def& f) { | ||
71 | return f.name == "meth"; | ||
72 | }); | ||
73 | |||
74 | documentation_def doc = func.documentation; | ||
75 | ck_assert_str_eq(doc.summary.c_str(), "Method documentation."); | ||
76 | ck_assert_str_eq(doc.description.c_str(), ""); | ||
77 | ck_assert_str_eq(doc.since.c_str(), "1.17"); // Since is inherited from parent if not present, except when no doc is present ofr this member. | ||
78 | |||
79 | doc = func.return_documentation; | ||
80 | ck_assert_str_eq(doc.summary.c_str(), "Return documentation."); | ||
81 | ck_assert_str_eq(doc.description.c_str(), ""); | ||
82 | ck_assert_str_eq(doc.since.c_str(), "1.17"); | ||
83 | |||
84 | auto param_iter = func.parameters.begin(); | ||
85 | |||
86 | // a int | ||
87 | doc = param_iter->documentation; | ||
88 | ck_assert_str_eq(doc.summary.c_str(), "Param documentation."); | ||
89 | ck_assert_str_eq(doc.description.c_str(), ""); | ||
90 | ck_assert_str_eq(doc.since.c_str(), "1.17"); | ||
91 | |||
92 | param_iter++; | ||
93 | |||
94 | // b float (no doc) | ||
95 | doc = param_iter->documentation; | ||
96 | ck_assert_str_eq(doc.summary.c_str(), ""); | ||
97 | ck_assert_str_eq(doc.description.c_str(), ""); | ||
98 | ck_assert_str_eq(doc.since.c_str(), ""); | ||
99 | |||
100 | param_iter++; | ||
101 | |||
102 | // c long | ||
103 | doc = param_iter->documentation; | ||
104 | ck_assert_str_eq(doc.summary.c_str(), "Another param documentation."); | ||
105 | ck_assert_str_eq(doc.description.c_str(), ""); | ||
106 | ck_assert_str_eq(doc.since.c_str(), "1.17"); | ||
107 | } | ||
108 | END_TEST | ||
109 | |||
110 | START_TEST(eolian_cxx_test_property_docs) | ||
111 | { | ||
112 | efl::eina::eina_init eina_init; | ||
113 | efl::eolian::eolian_init eolian_init; | ||
114 | efl::eolian::eolian_state eolian_state; | ||
115 | |||
116 | klass_def klass = init_test_data(eolian_state); | ||
117 | auto func_iter = std::find_if(klass.functions.begin(), klass.functions.end(), | ||
118 | [](const function_def& f) { | ||
119 | return f.name == "prop_get"; | ||
120 | }); | ||
121 | |||
122 | ck_assert_msg(func_iter != klass.functions.end(), "Failed to find prop_get function"); | ||
123 | function_def func = *func_iter; | ||
124 | |||
125 | documentation_def doc = func.property_documentation; | ||
126 | ck_assert_str_eq(doc.summary.c_str(), "Property common documentation."); | ||
127 | ck_assert_str_eq(doc.description.c_str(), ""); | ||
128 | ck_assert_str_eq(doc.since.c_str(), "1.18"); | ||
129 | |||
130 | doc = func.documentation; // Actual getdocumentation. | ||
131 | ck_assert_str_eq(doc.summary.c_str(), "Get documentation."); | ||
132 | ck_assert_str_eq(doc.description.c_str(), ""); | ||
133 | ck_assert_str_eq(doc.since.c_str(), "1.17"); // Members inherit from parent *class* | ||
134 | |||
135 | func_iter = std::find_if(klass.functions.begin(), klass.functions.end(), | ||
136 | [](const function_def& f) { | ||
137 | return f.name == "prop_set"; | ||
138 | }); | ||
139 | |||
140 | ck_assert_msg(func_iter != klass.functions.end(), "Failed to find prop_set function"); | ||
141 | func = *func_iter; | ||
142 | |||
143 | doc = func.documentation; // Actual getdocumentation. | ||
144 | ck_assert_str_eq(doc.summary.c_str(), "Set documentation."); | ||
145 | ck_assert_str_eq(doc.description.c_str(), ""); | ||
146 | ck_assert_str_eq(doc.since.c_str(), "1.17"); // Members inherit from parent *class* | ||
147 | } | ||
148 | END_TEST | ||
149 | |||
150 | START_TEST(eolian_cxx_test_event_docs) | ||
151 | { | ||
152 | efl::eina::eina_init eina_init; | ||
153 | efl::eolian::eolian_init eolian_init; | ||
154 | efl::eolian::eolian_state eolian_state; | ||
155 | |||
156 | klass_def klass = init_test_data(eolian_state); | ||
157 | |||
158 | auto event = klass.events.front(); | ||
159 | documentation_def doc = event.documentation; | ||
160 | ck_assert_str_eq(doc.summary.c_str(), "Event docs."); | ||
161 | ck_assert_str_eq(doc.description.c_str(), ""); | ||
162 | ck_assert_str_eq(doc.since.c_str(), "1.17"); // Members inherit from parent *class* | ||
163 | } | ||
164 | END_TEST | ||
165 | |||
166 | START_TEST(eolian_cxx_test_enum_docs) | ||
167 | { | ||
168 | efl::eina::eina_init eina_init; | ||
169 | efl::eolian::eolian_init eolian_init; | ||
170 | efl::eolian::eolian_state eolian_state; | ||
171 | |||
172 | klass_def klass = init_test_data(eolian_state); | ||
173 | |||
174 | auto unit = eolian_state.as_unit(); | ||
175 | enum_def _enum(::eolian_typedecl_enum_get_by_name(unit, "Bar"), unit); | ||
176 | |||
177 | documentation_def doc = _enum.documentation; | ||
178 | ck_assert_str_eq(doc.summary.c_str(), "Docs for enum Bar."); | ||
179 | ck_assert_str_eq(doc.description.c_str(), ""); | ||
180 | ck_assert_str_eq(doc.since.c_str(), ""); | ||
181 | |||
182 | // fields | ||
183 | auto field_iter = _enum.fields.begin(); | ||
184 | |||
185 | // blah - no docs | ||
186 | doc = field_iter->documentation; | ||
187 | ck_assert_str_eq(doc.summary.c_str(), ""); | ||
188 | ck_assert_str_eq(doc.description.c_str(), ""); | ||
189 | ck_assert_str_eq(doc.since.c_str(), ""); | ||
190 | |||
191 | field_iter++; | ||
192 | |||
193 | // foo - docs | ||
194 | doc = field_iter->documentation; | ||
195 | ck_assert_str_eq(doc.summary.c_str(), "Docs for foo."); | ||
196 | ck_assert_str_eq(doc.description.c_str(), ""); | ||
197 | ck_assert_str_eq(doc.since.c_str(), ""); | ||
198 | |||
199 | field_iter++; | ||
200 | |||
201 | // bar - docs | ||
202 | doc = field_iter->documentation; | ||
203 | ck_assert_str_eq(doc.summary.c_str(), "Docs for bar."); | ||
204 | ck_assert_str_eq(doc.description.c_str(), ""); | ||
205 | ck_assert_str_eq(doc.since.c_str(), ""); | ||
206 | } | ||
207 | END_TEST | ||
208 | |||
209 | START_TEST(eolian_cxx_test_struct_docs) | ||
210 | { | ||
211 | efl::eina::eina_init eina_init; | ||
212 | efl::eolian::eolian_init eolian_init; | ||
213 | efl::eolian::eolian_state eolian_state; | ||
214 | |||
215 | klass_def klass = init_test_data(eolian_state); | ||
216 | |||
217 | auto unit = eolian_state.as_unit(); | ||
218 | struct_def _struct(::eolian_typedecl_struct_get_by_name(unit, "Foo"), unit); | ||
219 | |||
220 | documentation_def doc = _struct.documentation; | ||
221 | ck_assert_str_eq(doc.summary.c_str(), "This is struct Foo. " | ||
222 | "It does stuff."); | ||
223 | ck_assert_str_eq(doc.description.c_str(), | ||
224 | "Note: This is a note.\n" | ||
225 | "\n" | ||
226 | "This is a longer description for struct Foo.\n" | ||
227 | "\n" | ||
228 | "Warning: This is a warning. You can only use Warning: and " | ||
229 | "Note: at the beginning of a paragraph.\n" | ||
230 | "\n" | ||
231 | "This is another paragraph."); | ||
232 | ck_assert_str_eq(doc.since.c_str(), "1.66"); | ||
233 | |||
234 | std::vector<std::string> ref_paragraphs = { | ||
235 | "Note: This is a note.", | ||
236 | "This is a longer description for struct Foo.", | ||
237 | "Warning: This is a warning. You can only use Warning: and " | ||
238 | "Note: at the beginning of a paragraph.", | ||
239 | "This is another paragraph." | ||
240 | }; | ||
241 | |||
242 | auto paragraph_it = doc.desc_paragraphs.begin(); | ||
243 | auto ref_paragraph_it = ref_paragraphs.begin(); | ||
244 | |||
245 | while (ref_paragraph_it != ref_paragraphs.end()) | ||
246 | { | ||
247 | ck_assert_str_eq(paragraph_it->c_str(), ref_paragraph_it->c_str()); | ||
248 | paragraph_it++; | ||
249 | ref_paragraph_it++; | ||
250 | } | ||
251 | |||
252 | ck_assert(paragraph_it == doc.desc_paragraphs.end()); | ||
253 | |||
254 | |||
255 | // fields | ||
256 | auto field_iter = _struct.fields.begin(); | ||
257 | |||
258 | doc = field_iter->documentation; | ||
259 | ck_assert_str_eq(doc.summary.c_str(), "Field documentation."); | ||
260 | ck_assert_str_eq(doc.description.c_str(), ""); | ||
261 | ck_assert_str_eq(doc.since.c_str(), ""); | ||
262 | |||
263 | field_iter++; | ||
264 | |||
265 | doc = field_iter->documentation; | ||
266 | ck_assert_str_eq(doc.summary.c_str(), ""); | ||
267 | ck_assert_str_eq(doc.description.c_str(), ""); | ||
268 | ck_assert_str_eq(doc.since.c_str(), ""); | ||
269 | |||
270 | field_iter++; | ||
271 | |||
272 | doc = field_iter->documentation; | ||
273 | ck_assert_str_eq(doc.summary.c_str(), "Another field documentation."); | ||
274 | ck_assert_str_eq(doc.description.c_str(), ""); | ||
275 | ck_assert_str_eq(doc.since.c_str(), ""); | ||
276 | } | ||
277 | END_TEST | ||
278 | |||
279 | void | ||
280 | eolian_cxx_test_documentation(TCase* tc) | ||
281 | { | ||
282 | tcase_add_test(tc, eolian_cxx_test_class_docs); | ||
283 | tcase_add_test(tc, eolian_cxx_test_function_docs); | ||
284 | tcase_add_test(tc, eolian_cxx_test_property_docs); | ||
285 | tcase_add_test(tc, eolian_cxx_test_event_docs); | ||
286 | tcase_add_test(tc, eolian_cxx_test_enum_docs); | ||
287 | tcase_add_test(tc, eolian_cxx_test_struct_docs); | ||
288 | } | ||
289 | |||