10 #include <hilti/ast/node.h> 11 #include <hilti/ast/type.h> 12 #include <hilti/base/type_erase.h> 21 namespace expression {
23 #include <hilti/autogen/__expression.h> 26 inline Node to_node(Expression t) {
return Node(std::move(t)); }
29 inline std::ostream& operator<<(std::ostream& out, Expression e) {
return out << to_node(std::move(e)); }
31 inline bool operator==(
const Expression& x,
const Expression& y) {
35 assert(x.isEqual(y) == y.isEqual(x));
39 inline bool operator!=(
const Expression& e1,
const Expression& e2) {
return ! (e1 == e2); }
49 bool isResolved(
const detail::Expression& e, type::ResolvedState* rstate =
nullptr);
57 inline bool isResolved(
const std::vector<detail::Expression>& exprs, type::ResolvedState* rstate =
nullptr) {
58 return std::all_of(exprs.begin(), exprs.end(), [&](
const auto& e) {
return isResolved(e, rstate); });
68 return std::all_of(exprs.begin(), exprs.end(), [&](
const auto& e) {
return isResolved(e, rstate); });
78 return std::all_of(exprs.begin(), exprs.end(),
79 [&](
const auto& e) {
return type::detail::isResolved(e.type(), rstate); });
84 using Expression = expression::detail::Expression;
85 using expression::detail::to_node;
88 template<typename T, typename std::enable_if_t<std::is_base_of<trait::isExpression, T>::value>* =
nullptr>
89 inline Node to_node(T t) {
90 return Node(Expression(std::move(t)));
Definition: expression.h:18