9 #include <hilti/ast/node.h> 10 #include <hilti/ast/type.h> 11 #include <hilti/base/type_erase.h> 20 namespace expression {
22 #include <hilti/autogen/__expression.h> 25 inline Node to_node(Expression t) {
return Node(std::move(t)); }
28 inline std::ostream& operator<<(std::ostream& out, Expression e) {
return out << to_node(std::move(e)); }
30 inline bool operator==(
const Expression& x,
const Expression& y) {
34 assert(x.isEqual(y) == y.isEqual(x));
38 inline bool operator!=(
const Expression& e1,
const Expression& e2) {
return ! (e1 == e2); }
48 inline bool isResolved(
const detail::Expression& e, type::ResolvedState* rstate =
nullptr) {
49 return type::detail::isResolved(e.type(), rstate);
58 inline bool isResolved(
const std::vector<detail::Expression>& exprs, type::ResolvedState* rstate =
nullptr) {
59 for (
const auto& e : exprs ) {
60 if ( ! type::detail::isResolved(e.type(), rstate) )
74 for (
const auto& e : exprs ) {
75 if ( ! type::detail::isResolved(e.type(), rstate) )
89 for (
const auto& e : exprs ) {
90 if ( ! type::detail::isResolved(e.type(), rstate) )
99 using Expression = expression::detail::Expression;
100 using expression::detail::to_node;
103 template<typename T, typename std::enable_if_t<std::is_base_of<trait::isExpression, T>::value>* =
nullptr>
104 inline Node to_node(T t) {
105 return Node(Expression(std::move(t)));
Definition: expression.h:17