2#include "util/QualifiedName.h"
5namespace sammine_util {
17 std::string type_args;
18 std::string method_name;
22 return {std::move(base), std::move(type_args),
""};
27 std::string concrete_type_str,
28 std::string method_name) {
29 return {QualifiedName::local(std::move(class_name)),
30 "<" + std::move(concrete_type_str) +
">",
31 std::move(method_name)};
35 std::string
instance_key()
const {
return base.mangled() + type_args; }
41 if (method_name.empty())
42 return base.mangled() + type_args;
43 return base.mangled() + type_args +
"::" + method_name;
50 if (method_name.empty()) {
52 auto parts = base.parts();
53 parts.back() = base.get_name() + type_args;
54 return QualifiedName::from_parts(std::move(parts));
57 return QualifiedName::local(base.mangled() + type_args +
"::" +
Definition MonomorphizedName.h:15
QualifiedName to_qualified_name() const
Definition MonomorphizedName.h:49
std::string instance_key() const
Typeclass instance lookup key: "Add<i32>".
Definition MonomorphizedName.h:35
std::string mangled() const
Definition MonomorphizedName.h:40
static MonomorphizedName typeclass(std::string class_name, std::string concrete_type_str, std::string method_name)
Typeclass instance method: Add<i32>::add.
Definition MonomorphizedName.h:26
Definition QualifiedName.h:23