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> 26 constexpr util::enum_::Value<Kind> kinds[] = {{Kind::Self,
"self"}, {Kind::DollarDollar,
"$$"}, {Kind::Captures,
"$@"}};
30 constexpr
auto from_string(
const std::string_view& s) {
return util::enum_::from_string<Kind>(s, detail::kinds); }
33 constexpr
auto to_string(Kind m) {
return util::enum_::to_string(m, detail::kinds); }
43 keyword::Kind kind()
const {
return _kind; }
45 bool operator==(
const Keyword& other)
const {
return _kind == other._kind && type() == other.
type(); }
48 bool isLhs()
const {
return true; }
57 auto isEqual(
const Expression& other)
const {
return node::isEqual(
this, other); }
65 hilti::type::pruneWalk(std::move(t)));
73 inline std::ostream& operator<<(std::ostream& stream,
const Keyword& keyword) {
74 switch ( keyword.kind() ) {
75 case keyword::Kind::Self:
return stream <<
"<self>";
76 case keyword::Kind::DollarDollar:
return stream <<
"<$$>";
77 case keyword::Kind::Captures:
return stream <<
"<captures>";
auto isConstant() const
Definition: keyword.h:55
Definition: declaration.h:53
bool isLhs() const
Definition: keyword.h:48
Definition: expression.h:18
static Declaration createDollarDollarDeclaration(Type t)
Definition: keyword.h:63
auto isEqual(const Expression &other) const
Definition: keyword.h:57
Definition: expression.h:16
std::map< std::string, node::detail::PropertyValue > Properties
Definition: node.h:97
bool isTemporary() const
Definition: keyword.h:50
const Type & type() const
Definition: keyword.h:52
auto properties() const
Definition: keyword.h:60
Definition: expression.h:21