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 auto type()
const {
return type::effectiveType(child<Type>(0)); }
58 bool operator==(
const Result& other)
const {
return type() == other.type(); }
64 using Kind = declaration::parameter::Kind;
74 function::Flavor flavor = function::Flavor::Standard,
Meta m =
Meta())
79 auto parameters()
const {
return childs<function::Parameter>(1, -1); }
80 const auto& result()
const {
return child<function::Result>(0); }
81 auto flavor()
const {
return _flavor; }
83 const auto& operands()
const {
84 if ( ! _cache.operands )
85 _cache.operands = type::OperandList::fromParameters(parameters());
87 return *_cache.operands;
90 bool operator==(
const Function& other)
const {
91 return result() == other.result() && parameters() == other.parameters();
95 auto isEqual(
const Type& other)
const {
return node::isEqual(
this, other); }
104 void clearCache() { _cache.operands.reset(); }
107 bool _wildcard =
false;
108 function::Flavor _flavor = function::Flavor::Standard;
110 mutable struct { std::optional<hilti::type::OperandList> operands; } _cache;
118 if ( ! (f1.result() == f2.result()) )
121 auto p1 = f1.parameters();
122 auto p2 = f2.parameters();
123 return std::equal(begin(p1), end(p1), begin(p2), end(p2),
124 [](
const auto& p1,
const auto& p2) {
return areEquivalent(p1, p2); });
Definition: function.h:69
auto properties() const
Definition: function.h:56
Definition: function.h:47
auto properties() const
Definition: function.h:102
const Node none
Definition: node.cc:12
auto isWildcard() const
Definition: function.h:99
Definition: parameter.h:45
std::map< std::string, node::detail::PropertyValue > Properties
Definition: node.h:83
auto transform(const std::vector< X > &x, F f)
Definition: util.h:86
auto isEqual(const Type &other) const
Definition: function.h:95
auto typeParameters() const
Definition: function.h:97