summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelipe Magno de Almeida <felipe@expertisesolutions.com.br>2016-11-03 19:41:59 -0200
committerFelipe Magno de Almeida <felipe@expertisesolutions.com.br>2016-11-03 19:41:59 -0200
commitb14d69983f0a4e1741582765294623c850547bd5 (patch)
treeac0dfe74919824ee249021fefde0d9f98ff5a4e0
parent446ec7ffb21de5da3ef35ed62856228e314b6030 (diff)
downloadefl-b14d69983f0a4e1741582765294623c850547bd5.tar.gz
mono: Add out parameters
-rw-r--r--src/bin/eolian_mono/eolian_mono/parameter.hh7
-rw-r--r--src/bin/eolian_mono/eolian_mono/type_impl.hh5
2 files changed, 7 insertions, 5 deletions
diff --git a/src/bin/eolian_mono/eolian_mono/parameter.hh b/src/bin/eolian_mono/eolian_mono/parameter.hh
index 97a1987b19..f68a914930 100644
--- a/src/bin/eolian_mono/eolian_mono/parameter.hh
+++ b/src/bin/eolian_mono/eolian_mono/parameter.hh
@@ -17,7 +17,7 @@ struct parameter_generator
template <typename OutputIterator, typename Context>
bool generate(OutputIterator sink, attributes::parameter_def const& param, Context const& context) const
{
- return as_generator(type << " " << string).generate(sink, std::make_tuple(param.type, param.param_name), context);
+ return as_generator(type << " " << string).generate(sink, std::make_tuple(param, param.param_name), context);
}
} const parameter {};
@@ -26,7 +26,7 @@ struct marshall_parameter_generator
template <typename OutputIterator, typename Context>
bool generate(OutputIterator sink, attributes::parameter_def const& param, Context const& context) const
{
- return as_generator(marshall_type << " " << string).generate(sink, std::make_tuple(param.type, param.param_name), context);
+ return as_generator(marshall_type << " " << string).generate(sink, std::make_tuple(param, param.param_name), context);
}
} const marshall_parameter {};
@@ -35,7 +35,8 @@ struct argument_generator
template <typename OutputIterator, typename Context>
bool generate(OutputIterator sink, attributes::parameter_def const& param, Context const& context) const
{
- return as_generator(param.param_name).generate(sink, attributes::unused, context);
+ return as_generator((param.direction != attributes::parameter_direction::in ? " out " : "")
+ << param.param_name).generate(sink, attributes::unused, context);
}
} const argument {};
diff --git a/src/bin/eolian_mono/eolian_mono/type_impl.hh b/src/bin/eolian_mono/eolian_mono/type_impl.hh
index c8c466c77a..5b76d77539 100644
--- a/src/bin/eolian_mono/eolian_mono/type_impl.hh
+++ b/src/bin/eolian_mono/eolian_mono/type_impl.hh
@@ -218,7 +218,8 @@ struct visitor_generate
// .generate(std::ostream_iterator<char>(std::cerr), std::make_tuple(eolian_mono::escape_namespace(regular.namespaces), regular.base_type), *context);
if(as_generator
(
- *(lower_case[string] << ".")
+ (is_out ? " out " : "")
+ << *(lower_case[string] << ".")
<< string
// << (regular.base_qualifier & qualifier_info::is_const
// || (regular.base_qualifier & qualifier_info::is_ref
@@ -243,7 +244,7 @@ struct visitor_generate
// as_generator(" System.IntPtr")
// .generate(sink, attributes::unused, *context);
return
- as_generator(" " << *(lower_case[string] << ".") << string)
+ as_generator((is_out ? " out " : " ") << *(lower_case[string] << ".") << string)
.generate(sink, std::make_tuple(eolian_mono::escape_namespace(klass.namespaces), klass.eolian_name), *context)
// && (!(klass.base_qualifier & qualifier_info::is_ref)
// || as_generator("&").generate(sink, attributes::unused, *context))