12 #include <hilti/ast/operator.h>
14 #define HILTI_OPERATOR(ns, cls) \
15 Result<hilti::expression::ResolvedOperator*> instantiate(hilti::Builder* builder, Expressions operands, Meta meta) \
17 return {ns::operator_::cls::create(builder->context(), \
19 result(builder, operands, meta), \
20 std::move(operands), \
24 std::string name() const final { return hilti::util::replace(#cls, "_::", "::"); } \
25 std::string _typename() const final { return hilti::util::typename_(*this); }
27 #define HILTI_OPERATOR_IMPLEMENTATION(cls) \
29 static hilti::operator_::Register<cls> _operator_##cls; \
32 namespace hilti::operator_ {
46 const auto&
byKind(Kind kind) {
return _operators_by_kind[kind]; }
52 const auto&
byMethodID(
const ID&
id) {
return _operators_by_method[id]; }
55 const auto&
byName(
const std::string_view& name) {
return _operators_by_name[std::string(name)]; }
71 const auto&
operators()
const {
return _operators; }
77 void register_(std::unique_ptr<Operator> op);
111 std::list<std::unique_ptr<Operator>> _pending;
112 std::vector<std::unique_ptr<Operator>> _operators;
113 std::map<std::string, const Operator*> _operators_by_name;
114 std::map<Kind, std::vector<const Operator*>> _operators_by_kind;
115 std::map<ID, std::vector<const Operator*>>
116 _operators_by_builtin_function;
118 std::map<ID, std::vector<const Operator*>> _operators_by_method;
125 inline auto get(std::string_view name) {
129 logger().internalError(util::fmt(
"unknown operator '%s'", name));
Definition: unresolved-operator.h:15
Definition: operator-registry.h:134
Definition: operator-registry.h:35
const auto & byBuiltinFunctionID(const ID &id)
Definition: operator-registry.h:41
static auto & singleton()
Definition: operator-registry.h:105
bool havePending() const
Definition: operator-registry.h:91
std::pair< bool, std::optional< std::vector< const Operator * > > > functionCallCandidates(const expression::UnresolvedOperator *op)
Definition: operator-registry.cc:81
const auto & byName(const std::string_view &name)
Definition: operator-registry.h:55
void debugEnforceBuiltInsAreResolved(Builder *builder) const
Definition: operator-registry.cc:59
const auto & byKind(Kind kind)
Definition: operator-registry.h:46
const auto & byMethodID(const ID &id)
Definition: operator-registry.h:52
void initPending(Builder *builder)
Definition: operator-registry.cc:16
void clear()
Definition: operator-registry.cc:133
void register_(std::unique_ptr< Operator > op)
Definition: operator-registry.cc:14
const auto & operators() const
Definition: operator-registry.h:71