7 #include <hilti/ast/declarations/parameter.h> 8 #include <hilti/ast/expression.h> 9 #include <hilti/ast/node.h> 10 #include <hilti/ast/type.h> 13 namespace expression {
28 std::vector<declaration::Parameter> parameters, std::vector<Expression> arguments,
Meta m =
Meta())
29 :
NodeBase(nodes(
std::move(type), parameters,
std::move(arguments)),
std::move(m)),
30 _name(
std::move(name)),
31 _cxxname(
std::move(cxxname)),
32 _num_parameters(parameters.size()) {}
34 auto arguments()
const {
return children<Expression>(_num_parameters + 1, -1); }
35 const auto parameters()
const {
return children<declaration::Parameter>(1, _num_parameters); }
36 const auto& cxxname()
const {
return _cxxname; }
37 const auto& name()
const {
return _name; }
39 void setArguments(std::vector<hilti::Expression> args) {
42 for (
auto& a : args )
43 children().emplace_back(std::move(a));
47 return lhs._cxxname == rhs._cxxname && lhs.
type() == rhs.
type() && lhs.parameters() == rhs.parameters() &&
48 lhs.arguments() == rhs.arguments();
52 const Type&
type()
const {
return child<hilti::Type>(0); };
56 auto isEqual(
const Expression& other)
const {
return node::isEqual(
this, other); }
58 auto isLhs()
const {
return false; }
67 size_t _num_parameters = 0;
Definition: builtin-function.h:16
const Type & type() const
Definition: builtin-function.h:52
Definition: optional.h:79
auto properties() const
Definition: builtin-function.h:62
const auto & children() const
Definition: node.h:470
Definition: expression.h:17
std::map< std::string, node::detail::PropertyValue > Properties
Definition: node.h:99
BuiltinFunction(std::string name, std::string cxxname, hilti::Type type, std::vector< declaration::Parameter > parameters, std::vector< Expression > arguments, Meta m=Meta())
Definition: builtin-function.h:27
auto isEqual(const Expression &other) const
Definition: builtin-function.h:56
auto isLhs() const
Definition: builtin-function.h:58
auto isTemporary() const
Definition: builtin-function.h:60
bool isConstant() const
Definition: builtin-function.h:54