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(), this, result(builder, operands, meta), \
18 std::move(operands), meta)}; \
21 std::string name() const final { return hilti::util::replace(#cls, "_::", "::"); } \
22 std::string _typename() const final { return hilti::util::typename_(*this); }
24 #define HILTI_OPERATOR_IMPLEMENTATION(cls) \
26 static hilti::operator_::Register<cls> _operator_##cls; \
29 namespace hilti::operator_ {
43 const auto&
byKind(Kind kind) {
return _operators_by_kind[kind]; }
49 const auto&
byMethodID(
const ID&
id) {
return _operators_by_method[id]; }
52 const auto&
byName(
const std::string_view& name) {
return _operators_by_name[std::string(name)]; }
68 const auto&
operators()
const {
return _operators; }
74 void register_(std::unique_ptr<Operator> op);
108 std::list<std::unique_ptr<Operator>> _pending;
109 std::vector<std::unique_ptr<Operator>> _operators;
110 std::map<std::string, const Operator*> _operators_by_name;
111 std::map<Kind, std::vector<const Operator*>> _operators_by_kind;
112 std::map<ID, std::vector<const Operator*>>
113 _operators_by_builtin_function;
115 std::map<ID, std::vector<const Operator*>> _operators_by_method;
122 inline auto get(std::string_view name) {
126 logger().internalError(util::fmt(
"unknown operator '%s'", name));
Definition: unresolved-operator.h:15
Definition: operator-registry.h:131
Definition: operator-registry.h:32
const auto & byBuiltinFunctionID(const ID &id)
Definition: operator-registry.h:38
static auto & singleton()
Definition: operator-registry.h:102
bool havePending() const
Definition: operator-registry.h:88
std::pair< bool, std::optional< std::vector< const Operator * > > > functionCallCandidates(const expression::UnresolvedOperator *op)
Definition: operator-registry.cc:82
const auto & byName(const std::string_view &name)
Definition: operator-registry.h:52
void debugEnforceBuiltInsAreResolved(Builder *builder) const
Definition: operator-registry.cc:59
const auto & byKind(Kind kind)
Definition: operator-registry.h:43
const auto & byMethodID(const ID &id)
Definition: operator-registry.h:49
void initPending(Builder *builder)
Definition: operator-registry.cc:16
void clear()
Definition: operator-registry.cc:134
void register_(std::unique_ptr< Operator > op)
Definition: operator-registry.cc:14
const auto & operators() const
Definition: operator-registry.h:68