8 #include <hilti/ast/declaration.h> 9 #include <hilti/ast/declarations/expression.h> 10 #include <hilti/ast/expression.h> 11 #include <hilti/ast/types/auto.h> 12 #include <hilti/ast/types/unknown.h> 13 #include <hilti/base/util.h> 16 namespace expression {
27 constexpr util::enum_::Value<Kind> kinds[] = {{Kind::Self,
"self"}, {Kind::DollarDollar,
"$$"}, {Kind::Captures,
"$@"}};
31 constexpr
auto from_string(
const std::string_view& s) {
return util::enum_::from_string<Kind>(s, detail::kinds); }
34 constexpr
auto to_string(Kind m) {
return util::enum_::to_string(m, detail::kinds); }
44 keyword::Kind kind()
const {
return _kind; }
46 bool operator==(
const Keyword& other)
const {
return _kind == other._kind && type() == other.
type(); }
49 bool isLhs()
const {
return true; }
58 auto isEqual(
const Expression& other)
const {
return node::isEqual(
this, other); }
66 hilti::type::pruneWalk(std::move(t)));
74 inline std::ostream& operator<<(std::ostream& stream,
const Keyword& keyword) {
75 switch ( keyword.kind() ) {
76 case keyword::Kind::Self:
return stream <<
"<self>";
77 case keyword::Kind::DollarDollar:
return stream <<
"<$$>";
78 case keyword::Kind::Captures:
return stream <<
"<captures>";
auto isConstant() const
Definition: keyword.h:56
Definition: declaration.h:53
bool isLhs() const
Definition: keyword.h:49
Definition: expression.h:17
static Declaration createDollarDollarDeclaration(Type t)
Definition: keyword.h:64
auto isEqual(const Expression &other) const
Definition: keyword.h:58
Definition: expression.h:17
std::map< std::string, node::detail::PropertyValue > Properties
Definition: node.h:99
bool isTemporary() const
Definition: keyword.h:51
const Type & type() const
Definition: keyword.h:53
auto properties() const
Definition: keyword.h:61