9 #include <hilti/ast/declarations/parameter.h> 10 #include <hilti/ast/expressions/void.h> 11 #include <hilti/ast/id.h> 12 #include <hilti/ast/type.h> 13 #include <hilti/ast/types/error.h> 14 #include <hilti/ast/types/operand-list.h> 15 #include <hilti/base/util.h> 33 constexpr util::enum_::Value<Flavor> flavors[] = {
34 {Flavor::Hook,
"hook"},
35 {Flavor::Method,
"method"},
36 {Flavor::Standard,
"standard"},
40 constexpr
auto to_string(Flavor f) {
return util::enum_::to_string(f, detail::flavors); }
43 constexpr
auto from_string(
const std::string_view& s) {
return util::enum_::from_string<Flavor>(s, detail::flavors); }
53 const auto& type()
const {
return child<Type>(0); }
55 void setType(
const Type& x) { children()[0] = x; }
57 bool operator==(
const Result& other)
const {
return type() == other.type(); }
66 using Kind = declaration::parameter::Kind;
76 function::Flavor flavor = function::Flavor::Standard,
Meta m =
Meta())
77 :
TypeBase(nodes(std::move(result), util::transform(params, [](
const auto& p) {
return Declaration(p); })),
81 const auto& result()
const {
return child<function::Result>(0); }
82 auto parameters()
const {
return children<function::Parameter>(1, -1); }
83 auto parameterRefs()
const {
return childRefsOfType<type::function::Parameter>(); }
84 auto flavor()
const {
return _flavor; }
88 bool operator==(
const Function& other)
const {
89 return result() == other.result() && parameters() == other.parameters();
93 auto isEqual(
const Type& other)
const {
return node::isEqual(
this, other); }
97 if ( result().type().isA<type::Auto>() )
103 if ( ! type::detail::isResolved(result().type(), rstate) )
106 for (
auto p = children().begin() + 1; p != children().end(); p++ ) {
123 bool _wildcard =
false;
124 function::Flavor _flavor = function::Flavor::Standard;
132 if ( ! (f1.result() == f2.result()) )
135 auto p1 = f1.parameters();
136 auto p2 = f2.parameters();
137 return std::equal(std::begin(p1), std::end(p1), std::begin(p2), std::end(p2),
138 [](
const auto& p1,
const auto& p2) {
return areEquivalent(p1, p2); });
Definition: function.h:71
Definition: declaration.h:53
auto properties() const
Definition: function.h:60
Definition: function.h:47
auto properties() const
Definition: function.h:120
const Node none
Definition: node.cc:14
auto isWildcard() const
Definition: function.h:117
Definition: parameter.h:46
auto _isResolved(ResolvedState *rstate) const
Definition: function.h:96
std::map< std::string, node::detail::PropertyValue > Properties
Definition: node.h:97
auto isEqual(const Type &other) const
Definition: function.h:93
auto typeParameters() const
Definition: function.h:115