From d93e9ff286ce1961f530d56b5536881f47104ebd Mon Sep 17 00:00:00 2001 From: Lauro Moura Date: Thu, 23 Nov 2017 21:50:16 -0300 Subject: eolian_mono: Added code for eolian_mono generator Based on the eolian_cxx library generators. Buildsystem files will come in a future commmit. --- src/bin/eolian_mono/eolian/mono/type.hh | 68 +++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 src/bin/eolian_mono/eolian/mono/type.hh (limited to 'src/bin/eolian_mono/eolian/mono/type.hh') diff --git a/src/bin/eolian_mono/eolian/mono/type.hh b/src/bin/eolian_mono/eolian/mono/type.hh new file mode 100644 index 0000000000..b0e14516ce --- /dev/null +++ b/src/bin/eolian_mono/eolian/mono/type.hh @@ -0,0 +1,68 @@ +#ifndef EOLIAN_MONO_TYPE_HH +#define EOLIAN_MONO_TYPE_HH + +#include "grammar/generator.hpp" +#include "grammar/klass_def.hpp" +#include "grammar/case.hpp" + +namespace eolian_mono { + +namespace attributes = efl::eolian::grammar::attributes; + +template +struct visitor_generate; + +struct type_generator +{ + type_generator(bool is_return = false) + : is_return(is_return) {} + + template + bool generate(OutputIterator sink, attributes::type_def const& type, Context const& context) const + { + return type.original_type.visit(visitor_generate{sink, &context, type.c_type, false, is_return}); + } + template + bool generate(OutputIterator sink, attributes::parameter_def const& param, Context const& context) const + { + return param.type.original_type.visit(visitor_generate{sink, &context, param.type.c_type + , param.direction != attributes::parameter_direction::in, false}); + } + + bool is_return; +}; + +struct type_terminal +{ + type_generator const operator()(bool is_return) const + { + return type_generator(is_return); + } +} const type = {}; + +type_generator const as_generator(type_terminal) +{ + return type_generator{}; +} + +} + +namespace efl { namespace eolian { namespace grammar { + +template <> +struct is_eager_generator< ::eolian_mono::type_generator> : std::true_type {}; +template <> +struct is_generator< ::eolian_mono::type_generator> : std::true_type {}; +template <> +struct is_generator< ::eolian_mono::type_terminal> : std::true_type {}; + +namespace type_traits { +template <> +struct attributes_needed< ::eolian_mono::type_generator> : std::integral_constant {}; +template <> +struct attributes_needed< ::eolian_mono::type_terminal> : std::integral_constant {}; +} + +} } } + +#endif -- cgit v1.2.1