10 #include <hilti/ast/builder/declaration.h> 11 #include <hilti/ast/ctors/all.h> 12 #include <hilti/ast/expressions/all.h> 13 #include <hilti/ast/types/unresolved-id.h> 19 inline Expression id(ID id_, Meta m = Meta()) {
return expression::UnresolvedID(std::move(id_), std::move(m)); }
23 inline Expression string(std::string s,
const Meta& m = Meta()) {
24 return expression::Ctor(ctor::String(std::move(s), m), m);
27 inline Expression bool_(
bool b,
const Meta& m = Meta()) {
return expression::Ctor(ctor::Bool(b, m), m); }
29 inline Expression bytes(std::string s,
const Meta& m = Meta()) {
30 return expression::Ctor(ctor::Bytes(std::move(s), m), m);
33 inline Expression coerceTo(Expression e, Type t,
const Meta& m) {
34 return expression::PendingCoerced(std::move(e), std::move(t), m);
37 inline Expression coerceTo(
const Expression& e, Type t) {
38 return expression::PendingCoerced(e, std::move(t), e.meta());
41 inline Expression default_(Type t,
const Meta& m = Meta()) {
42 return expression::Ctor(ctor::Default(std::move(t), m), m);
45 inline Expression default_(Type t, std::vector<Expression> type_args,
const Meta& m = Meta()) {
46 return expression::Ctor(ctor::Default(std::move(t), std::move(type_args), m), m);
50 return expression::Ctor(ctor::Default(std::move(t), type_args.
copy(), m), m);
54 inline Expression exception(Type t, std::string msg,
const Meta& m = Meta()) {
55 return expression::Ctor(ctor::Exception(std::move(t), builder::string(std::move(msg)), m), m);
58 inline Expression exception(Type t, Expression msg,
const Meta& m = Meta()) {
59 return expression::Ctor(ctor::Exception(std::move(t), std::move(msg), m), m);
62 inline Expression integer(
int i,
const Meta& m = Meta()) {
63 return expression::Ctor(ctor::SignedInteger(static_cast<int64_t>(i), 64, m), m);
66 inline Expression integer(int64_t i,
const Meta& m = Meta()) {
67 return expression::Ctor(ctor::SignedInteger(i, 64, m), m);
70 inline Expression integer(
unsigned int i,
const Meta& m = Meta()) {
71 return expression::Ctor(ctor::UnsignedInteger(i, 64, m), m);
74 inline Expression integer(uint64_t i,
const Meta& m = Meta()) {
75 return expression::Ctor(ctor::UnsignedInteger(i, 64, m), m);
78 inline Expression null(
const Meta& m = Meta()) {
return expression::Ctor(ctor::Null(m), m); }
80 inline Expression optional(Expression e,
const Meta& m = Meta()) {
81 return expression::Ctor(ctor::Optional(std::move(e), m), m);
84 inline Expression optional(Type t,
const Meta& m = Meta()) {
85 return expression::Ctor(ctor::Optional(std::move(t), m), m);
89 return expression::Ctor(ctor::Port(p, m), m);
92 inline Expression regexp(std::string p, std::optional<AttributeSet> attrs = {},
const Meta& m = Meta()) {
93 return expression::Ctor(ctor::RegExp({std::move(p)}, std::move(attrs), m), m);
96 inline Expression regexp(std::vector<std::string> p, std::optional<AttributeSet> attrs = {},
const Meta& m = Meta()) {
97 return expression::Ctor(ctor::RegExp(std::move(p), std::move(attrs), m), m);
100 inline Expression stream(std::string s,
const Meta& m = Meta()) {
101 return expression::Ctor(ctor::Stream(std::move(s), m), m);
104 inline Expression struct_(std::vector<ctor::struct_::Field> f,
const Meta& m = Meta()) {
105 return expression::Ctor(ctor::Struct(std::move(f), m), m);
108 inline Expression struct_(std::vector<ctor::struct_::Field> f, Type t,
const Meta& m = Meta()) {
109 return expression::Ctor(ctor::Struct(std::move(f), std::move(t), m), m);
112 inline Expression tuple(
const std::vector<Expression>& v,
const Meta& m = Meta()) {
113 return expression::Ctor(ctor::Tuple(v, m), m);
116 inline Expression vector(
const std::vector<Expression>& v,
const Meta& m = Meta()) {
117 return expression::Ctor(ctor::Vector(v, m), m);
120 inline Expression vector(
const Type& t, std::vector<Expression> v,
const Meta& m = Meta()) {
121 return expression::Ctor(ctor::Vector(t, std::move(v), m), m);
124 inline Expression vector(
const Type& t,
const Meta& m = Meta()) {
return expression::Ctor(ctor::Vector(t, {}, m), m); }
126 inline Expression void_(
const Meta& m = Meta()) {
return expression::Void(m); }
128 inline Expression strong_reference(
const Type& t,
const Meta& m = Meta()) {
129 return expression::Ctor(ctor::StrongReference(t, m), m);
132 inline Expression weak_reference(
const Type& t,
const Meta& m = Meta()) {
133 return expression::Ctor(ctor::WeakReference(t, m), m);
136 inline Expression value_reference(Expression e,
const Meta& m = Meta()) {
137 return expression::Ctor(ctor::ValueReference(std::move(e), m), m);
142 inline Expression and_(Expression op0, Expression op1,
const Meta& m = Meta()) {
143 return expression::LogicalAnd(std::move(op0), std::move(op1), m);
146 inline Expression or_(Expression op0, Expression op1,
const Meta& m = Meta()) {
147 return expression::LogicalOr(std::move(op0), std::move(op1), m);
150 inline Expression begin(Expression e,
const Meta& m = Meta()) {
151 return expression::UnresolvedOperator(operator_::Kind::Begin, {std::move(e)}, m);
154 inline Expression cast(Expression e, Type dst, Meta m = Meta()) {
155 return expression::UnresolvedOperator(operator_::Kind::Cast, {std::move(e), expression::Type_(std::move(dst))},
159 inline Expression delete_(Expression
self, ID field,
const Meta& m = Meta()) {
160 return expression::UnresolvedOperator(operator_::Kind::Delete,
161 {std::move(
self), expression::Member(std::move(field))}, m);
164 inline Expression deref(Expression e,
const Meta& m = Meta()) {
165 return expression::UnresolvedOperator(operator_::Kind::Deref, {std::move(e)}, m);
168 inline Expression end(Expression e,
const Meta& m = Meta()) {
169 return expression::UnresolvedOperator(operator_::Kind::End, {std::move(e)}, m);
172 inline Expression call(ID id_,
const std::vector<Expression>& v,
const Meta& m = Meta()) {
173 return expression::UnresolvedOperator(operator_::Kind::Call, {id(std::move(id_), m), tuple(v, m)}, m);
176 inline Expression index(Expression value,
unsigned int index,
const Meta& m = Meta()) {
177 return expression::UnresolvedOperator(operator_::Kind::Index, {std::move(value), integer(index, m)}, m);
180 inline Expression size(Expression op,
const Meta& m = Meta()) {
181 return expression::UnresolvedOperator(operator_::Kind::Size, {std::move(op)}, m);
184 inline Expression modulo(Expression op1, Expression op2,
const Meta& m = Meta()) {
185 return expression::UnresolvedOperator(operator_::Kind::Modulo, {std::move(op1), std::move(op2)}, m);
188 inline Expression lowerEqual(Expression op1, Expression op2,
const Meta& m = Meta()) {
189 return expression::UnresolvedOperator(operator_::Kind::LowerEqual, {std::move(op1), std::move(op2)}, m);
192 inline Expression greaterEqual(Expression op1, Expression op2,
const Meta& m = Meta()) {
193 return expression::UnresolvedOperator(operator_::Kind::GreaterEqual, {std::move(op1), std::move(op2)}, m);
196 inline Expression lower(Expression op1, Expression op2,
const Meta& m = Meta()) {
197 return expression::UnresolvedOperator(operator_::Kind::Lower, {std::move(op1), std::move(op2)}, m);
200 inline Expression greater(Expression op1, Expression op2,
const Meta& m = Meta()) {
201 return expression::UnresolvedOperator(operator_::Kind::Greater, {std::move(op1), std::move(op2)}, m);
204 inline Expression equal(Expression op1, Expression op2,
const Meta& m = Meta()) {
205 return expression::UnresolvedOperator(operator_::Kind::Equal, {std::move(op1), std::move(op2)}, m);
208 inline Expression unequal(Expression op1, Expression op2,
const Meta& m = Meta()) {
209 return expression::UnresolvedOperator(operator_::Kind::Unequal, {std::move(op1), std::move(op2)}, m);
212 inline Expression member(Expression
self, std::string id_,
const Meta& m = Meta()) {
213 return expression::UnresolvedOperator(operator_::Kind::Member,
214 {std::move(
self), expression::Member(ID(std::move(id_)), m)}, m);
217 inline Expression hasMember(Expression
self, std::string id_,
const Meta& m = Meta()) {
218 return expression::UnresolvedOperator(operator_::Kind::HasMember,
219 {std::move(
self), expression::Member(ID(std::move(id_)), m)}, m);
222 inline Expression tryMember(Expression
self, std::string id_,
const Meta& m = Meta()) {
223 return expression::UnresolvedOperator(operator_::Kind::TryMember,
224 {std::move(
self), expression::Member(ID(std::move(id_)), m)}, m);
227 inline Expression memberCall(Expression
self, std::string id_,
const std::vector<Expression>& args,
228 const Meta& m = Meta()) {
229 return expression::UnresolvedOperator(operator_::Kind::MemberCall,
230 {std::move(
self), expression::Member(ID(std::move(id_)), m), tuple(args, m)},
234 inline Expression memberCall(Expression
self, std::string id_, ctor::Tuple args,
const Meta& m = Meta()) {
235 return expression::UnresolvedOperator(operator_::Kind::MemberCall,
236 {std::move(
self), expression::Member(ID(std::move(id_)), m),
237 expression::Ctor(std::move(args))},
241 inline Expression pack(Type type,
const std::vector<Expression>& args,
const Meta& m = Meta()) {
242 return expression::UnresolvedOperator(operator_::Kind::Pack,
246 inline Expression unpack(Type type,
const std::vector<Expression>& args,
const Meta& m = Meta()) {
247 return expression::UnresolvedOperator(operator_::Kind::Unpack,
253 inline Expression unset(Expression
self, ID field,
const Meta& m = Meta()) {
254 return expression::UnresolvedOperator(operator_::Kind::Unset,
255 {std::move(
self), expression::Member(std::move(field))}, m);
258 inline Expression sumAssign(Expression op1, Expression op2,
const Meta& m = Meta()) {
259 return expression::UnresolvedOperator(operator_::Kind::SumAssign, {std::move(op1), std::move(op2)}, m);
262 inline Expression deferred(Expression e, Meta m = Meta()) {
return expression::Deferred(std::move(e), std::move(m)); }
264 inline Expression differenceAssign(Expression op1, Expression op2,
const Meta& m = Meta()) {
265 return expression::UnresolvedOperator(operator_::Kind::DifferenceAssign, {std::move(op1), std::move(op2)}, m);
268 inline Expression sum(Expression op1, Expression op2,
const Meta& m = Meta()) {
269 return expression::UnresolvedOperator(operator_::Kind::Sum, {std::move(op1), std::move(op2)}, m);
272 inline Expression difference(Expression op1, Expression op2,
const Meta& m = Meta()) {
273 return expression::UnresolvedOperator(operator_::Kind::Difference, {std::move(op1), std::move(op2)}, m);
276 inline Expression decrementPostfix(Expression op,
const Meta& m = Meta()) {
277 return expression::UnresolvedOperator(operator_::Kind::DecrPostfix, {std::move(op)}, m);
280 inline Expression decrementPrefix(Expression op,
const Meta& m = Meta()) {
281 return expression::UnresolvedOperator(operator_::Kind::DecrPrefix, {std::move(op)}, m);
284 inline Expression incrementPostfix(Expression op,
const Meta& m = Meta()) {
285 return expression::UnresolvedOperator(operator_::Kind::IncrPostfix, {std::move(op)}, m);
288 inline Expression incrementPrefix(Expression op,
const Meta& m = Meta()) {
289 return expression::UnresolvedOperator(operator_::Kind::IncrPrefix, {std::move(op)}, m);
292 inline Expression new_(Type t,
const Meta& m = Meta()) {
293 return expression::UnresolvedOperator(operator_::Kind::New,
294 std::vector<Expression>{expression::Type_(std::move(t), m),
299 inline Expression new_(Type t,
const std::vector<Expression>& args,
const Meta& m = Meta()) {
300 return expression::UnresolvedOperator(operator_::Kind::New,
301 std::vector<Expression>{expression::Type_(std::move(t), m),
308 inline Expression expression(Ctor c, Meta m = Meta()) {
return expression::Ctor(std::move(c), std::move(m)); }
310 inline Expression expression(
const Location& l) {
return expression::Ctor(ctor::String(l), l); }
312 inline Expression expression(
const Meta& m) {
return expression::Ctor(ctor::String(m.location()), m); }
314 inline Expression grouping(Expression e, Meta m = Meta()) {
return expression::Grouping(std::move(e), std::move(m)); }
316 inline Expression move(Expression e, Meta m = Meta()) {
return expression::Move(std::move(e), std::move(m)); }
318 inline Expression typeinfo(Type t,
const Meta& m = Meta()) {
319 return expression::TypeInfo(expression::Type_(std::move(t), m), m);
322 inline Expression typeinfo(Expression e, Meta m = Meta()) {
return expression::TypeInfo(std::move(e), std::move(m)); }
324 inline Expression assign(Expression target, Expression src, Meta m = Meta()) {
325 return expression::Assign(std::move(target), std::move(src), std::move(m));
328 inline Expression not_(Expression e,
const Meta& m = Meta()) {
return expression::LogicalNot(std::move(e), m); }
330 inline Expression ternary(Expression cond, Expression true_, Expression false_, Meta m = Meta()) {
331 return expression::Ternary(std::move(cond), std::move(true_), std::move(false_), std::move(m));
334 inline Expression min(
const Expression& e1,
const Expression& e2,
const Meta& m = Meta()) {
335 return ternary(lowerEqual(e1, e2, m), e1, e2, m);
338 inline Expression max(
const Expression& e1,
const Expression& e2,
const Meta& m = Meta()) {
339 return ternary(lowerEqual(e1, e2, m), e2, e1, m);
342 inline auto port(Expression port, Expression protocol,
const Meta& m = Meta()) {
346 hilti::builder::parameter(
hilti::ID(
"protocol"),
347 hilti::builder::typeByID(
"hilti::Protocol"))),
348 std::vector<Expression>{std::move(port), std::move(protocol)}, m);
std::vector< T > copy() const
Definition: node.h:600
Definition: builtin-function.h:15