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> 27 constexpr util::enum_::Value<Kind> kinds[] = {{Kind::Self,
"self"},
28 {Kind::DollarDollar,
"$$"},
29 {Kind::Captures,
"$@"},
30 {Kind::Scope,
"$scope"}};
34 constexpr
auto from_string(
const std::string_view& s) {
return util::enum_::from_string<Kind>(s, detail::kinds); }
37 constexpr
auto to_string(Kind m) {
return util::enum_::to_string(m, detail::kinds); }
47 keyword::Kind kind()
const {
return _kind; }
49 bool operator==(
const Keyword& other)
const {
return _kind == other._kind && type() == other.
type(); }
51 void setType(
const Type& t) { children()[0] = t; }
54 bool isLhs()
const {
return true; }
63 auto isEqual(
const Expression& other)
const {
return node::isEqual(
this, other); }
71 hilti::type::pruneWalk(std::move(t)));
79 inline std::ostream& operator<<(std::ostream& stream,
const Keyword& keyword) {
80 switch ( keyword.kind() ) {
81 case keyword::Kind::Self:
return stream <<
"<self>";
82 case keyword::Kind::DollarDollar:
return stream <<
"<$$>";
83 case keyword::Kind::Captures:
return stream <<
"<captures>";
84 case keyword::Kind::Scope:
return stream <<
"<scope>";
auto isConstant() const
Definition: keyword.h:61
Definition: declaration.h:54
bool isLhs() const
Definition: keyword.h:54
Definition: expression.h:18
static Declaration createDollarDollarDeclaration(Type t)
Definition: keyword.h:69
auto isEqual(const Expression &other) const
Definition: keyword.h:63
Definition: expression.h:16
std::map< std::string, node::detail::PropertyValue > Properties
Definition: node.h:98
bool isTemporary() const
Definition: keyword.h:56
const Type & type() const
Definition: keyword.h:58
auto properties() const
Definition: keyword.h:66
Definition: expression.h:21