@@ -3336,46 +3336,6 @@ void Converter::SetUFCSReceiver(clang::Expr *base, bool is_arrow,
33363336 ufcs_receiver_ = std::move (buf).str ();
33373337}
33383338
3339- // Returns the inner member and the replacement string.
3340- static std::pair<clang::MemberExpr *, std::string>
3341- replaceNonUniformLibcField (clang::MemberExpr *expr) {
3342- // Example: ::struct stat::st_mtim::tv_sec -> ::libc::stat::st_mtime
3343- struct Mapping {
3344- const char *record;
3345- const char *inner_field;
3346- const char *leaf_field;
3347- const char *replacement;
3348- };
3349- static constexpr Mapping kFields [] = {
3350- {" stat" , " st_mtim" , " tv_sec" , " st_mtime" }, // Linux
3351- {" stat" , " st_mtimespec" , " tv_sec" , " st_mtime" }, // macOS
3352- {" in6_addr" , " __in6_u" , " __u6_addr8" , " s6_addr" },
3353- };
3354-
3355- auto getNamedIdentifierOrNull = [](auto *decl) {
3356- return decl && decl->getDeclName ().isIdentifier () ? decl : nullptr ;
3357- };
3358-
3359- if (auto leaf = getNamedIdentifierOrNull (expr->getMemberDecl ())) {
3360- if (auto inner = clang::dyn_cast<clang::MemberExpr>(
3361- expr->getBase ()->IgnoreParenImpCasts ())) {
3362- if (auto field = getNamedIdentifierOrNull (
3363- clang::dyn_cast<clang::FieldDecl>(inner->getMemberDecl ()))) {
3364- if (getNamedIdentifierOrNull (field->getParent ())) {
3365- for (const auto &m : kFields ) {
3366- if (field->getParent ()->getName () == m.record &&
3367- field->getName () == m.inner_field &&
3368- leaf->getName () == m.leaf_field ) {
3369- return {inner, m.replacement };
3370- }
3371- }
3372- }
3373- }
3374- }
3375- }
3376- return {nullptr , " " };
3377- }
3378-
33793339void Converter::ConvertMemberExpr (clang::MemberExpr *expr) {
33803340 if (auto mapped = GetMappedAsString (expr); !mapped.empty ()) {
33813341 if (RuleRegistry::ReturnsPointer (ctx_, expr)) {
@@ -3387,7 +3347,7 @@ void Converter::ConvertMemberExpr(clang::MemberExpr *expr) {
33873347 }
33883348
33893349 auto *member = expr->getMemberDecl ();
3390- auto [inner, name_override] = replaceNonUniformLibcField (expr);
3350+ auto [inner, record, name_override] = ReplaceNonUniformLibcField (expr);
33913351 if (inner) {
33923352 expr = inner;
33933353 }
0 commit comments