9 #include <hilti/ast/ctor.h> 10 #include <hilti/ast/expression.h> 11 #include <hilti/ast/types/auto.h> 12 #include <hilti/ast/types/tuple.h> 13 #include <hilti/ast/types/unknown.h> 20 Tuple(
const std::vector<Expression>& v,
Meta m =
Meta()) :
NodeBase(nodes(_inferType(v), v), std::move(m)) {}
22 auto value()
const {
return children<Expression>(1, -1); }
26 bool operator==(
const Tuple& other)
const {
return value() == other.value(); }
29 const auto&
type()
const {
return child<Type>(0); }
36 const auto& v = value();
41 return std::all_of(v.begin(), v.end(), [](
const auto& e) {
return e.isLhs(); });
47 auto isEqual(
const Ctor& other)
const {
return node::isEqual(
this, other); }
52 Type _inferType(
const std::vector<Expression>& exprs) {
53 for (
const auto& e : exprs ) {
54 if ( ! expression::isResolved(e) )
58 std::vector<Type> types;
59 types.reserve(exprs.size());
60 for (
const auto& e : exprs )
61 types.push_back(e.type());
auto isLhs() const
Definition: tuple.h:35
const auto & children() const
Definition: node.h:471
const auto & type() const
Definition: tuple.h:29
auto isTemporary() const
Definition: tuple.h:45
auto properties() const
Definition: tuple.h:49
std::map< std::string, node::detail::PropertyValue > Properties
Definition: node.h:97
bool isConstant() const
Definition: tuple.h:32
auto isEqual(const Ctor &other) const
Definition: tuple.h:47
auto & meta() const
Definition: node.h:475