本文整理汇总了C++中mangle::Mangler::mangleType方法的典型用法代码示例。如果您正苦于以下问题:C++ Mangler::mangleType方法的具体用法?C++ Mangler::mangleType怎么用?C++ Mangler::mangleType使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类mangle::Mangler
的用法示例。
在下文中一共展示了Mangler::mangleType方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: addDecl
void addDecl(const NominalTypeDecl *decl) {
auto type = decl->getDeclaredInterfaceType()->getCanonicalType();
Mangle::Mangler mangler;
mangler.setModuleContext(decl->getModuleContext());
mangler.mangleType(type, 0);
auto mangledName = IGM.getAddrOfStringForTypeRef(mangler.finalize());
addRelativeAddress(mangledName);
switch (decl->getKind()) {
case DeclKind::Class:
case DeclKind::Struct: {
auto properties = decl->getStoredProperties();
addConstantInt32(std::distance(properties.begin(), properties.end()));
addConstantInt32(fieldRecordSize);
for (auto property : properties)
addFieldDecl(property);
break;
}
case DeclKind::Enum: {
auto enumDecl = cast<EnumDecl>(decl);
auto cases = enumDecl->getAllElements();
addConstantInt32(std::distance(cases.begin(), cases.end()));
addConstantInt32(fieldRecordSize);
for (auto enumCase : cases)
addFieldDecl(enumCase);
break;
}
default:
llvm_unreachable("Not a nominal type");
break;
}
}
示例2: addFieldDecl
void addFieldDecl(const ValueDecl *value) {
auto type = value->getInterfaceType()->getCanonicalType();
Mangle::Mangler mangler;
mangler.setModuleContext(value->getModuleContext());
mangler.mangleType(type, 0);
auto mangledName = IGM.getAddrOfStringForTypeRef(mangler.finalize());
addRelativeAddress(mangledName);
if (IGM.Opts.StripReflectionNames) {
addConstantInt32(0);
} else {
auto fieldName = IGM.getAddrOfFieldName(value->getNameStr());
addRelativeAddress(fieldName);
}
}