Skip to content

Commit f985c98

Browse files
committed
Drop get strongest iterator category
1 parent a3d015b commit f985c98

7 files changed

Lines changed: 10 additions & 68 deletions

File tree

‎cpp2rust/converter/converter.cpp‎

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3363,9 +3363,6 @@ bool Converter::ConvertCXXOperatorCallExpr(clang::CXXOperatorCallExpr *expr) {
33633363
case clang::OverloadedOperatorKind::OO_Arrow:
33643364
if (IsUniquePtr(expr->getArg(0)->getType())) {
33653365
ConvertUniquePtrDeref(expr);
3366-
} else if (GetStrongestIteratorCategory(ctx_, expr->getArg(0)->getType()) ==
3367-
IteratorCategory::Bidirectional) {
3368-
Convert(expr->getArg(0));
33693366
} else if (expr->getOperator() == clang::OverloadedOperatorKind::OO_Star) {
33703367
PushParen paren(*this);
33713368
StrCat(token::kStar);
@@ -5453,14 +5450,6 @@ void Converter::ConvertConstructFromArgs(clang::QualType type,
54535450
std::string Converter::AccessLValueObject(clang::MemberExpr *member) {
54545451
auto *object = member->getBase();
54555452
auto type = object->getType();
5456-
if (member->isArrow()) {
5457-
auto *op =
5458-
clang::dyn_cast<clang::CXXOperatorCallExpr>(object->IgnoreImplicit());
5459-
if (op && GetStrongestIteratorCategory(ctx_, op->getArg(0)->getType()) ==
5460-
IteratorCategory::Bidirectional) {
5461-
return ToString(object);
5462-
}
5463-
}
54645453
if (type->isPointerType() ||
54655454
(IsReferenceType(object) && clang::isa<clang::CallExpr>(object))) {
54665455
return std::format("({}{})", GetPointerDerefPrefix(type->getPointeeType()),

‎cpp2rust/converter/converter_lib.cpp‎

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1892,7 +1892,7 @@ clang::Expr *GetCallee(clang::CallExpr *expr) {
18921892
}
18931893

18941894
bool HasReceiver(clang::Expr *expr) {
1895-
if (clang::isa<clang::CXXMemberCallExpr>(expr))
1895+
if (clang::isa<clang::CXXMemberCallExpr, clang::MemberExpr>(expr))
18961896
return true;
18971897
if (auto *opcall = clang::dyn_cast<clang::CXXOperatorCallExpr>(expr)) {
18981898
if (auto *callee = opcall->getCalleeDecl()) {
@@ -1920,26 +1920,6 @@ std::optional<clang::QualType> GetParamImplicitConvertTarget(clang::Expr *expr,
19201920
return fn->getParamDecl(param_idx)->getType().getNonReferenceType();
19211921
}
19221922

1923-
std::optional<IteratorCategory>
1924-
GetStrongestIteratorCategory(clang::ASTContext &ctx, clang::QualType type) {
1925-
type = type.getNonReferenceType().getUnqualifiedType();
1926-
if (!Mapper::Contains(ctx, type)) {
1927-
return std::nullopt;
1928-
}
1929-
if (RuleRegistry::MapsToRefcountPointer(ctx, type)) {
1930-
return IteratorCategory::Contiguous;
1931-
}
1932-
auto mapped = Mapper::Map(ctx, type);
1933-
if (mapped.empty()) {
1934-
return std::nullopt;
1935-
}
1936-
if (mapped.starts_with("BidirectionalIterator<") ||
1937-
mapped.starts_with("UnsafeBidirectionalIterator<")) {
1938-
return IteratorCategory::Bidirectional;
1939-
}
1940-
return std::nullopt;
1941-
}
1942-
19431923
std::string GetClassName(clang::QualType type) {
19441924
if (auto *record = type->getAsCXXRecordDecl())
19451925
return record->getQualifiedNameAsString();

‎cpp2rust/converter/converter_lib.h‎

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -28,17 +28,6 @@ class Sema;
2828

2929
namespace cpp2rust {
3030

31-
// Order matters: each category is a superset of the previous one.
32-
// Use >= to check "at least this capable".
33-
enum class IteratorCategory {
34-
Forward,
35-
Bidirectional,
36-
RandomAccess,
37-
Contiguous,
38-
};
39-
40-
std::optional<IteratorCategory>
41-
GetStrongestIteratorCategory(clang::ASTContext &ctx, clang::QualType type);
4231
bool IsBuiltinConstantP(const clang::Expr *expr);
4332

4433
bool IsGlobalVar(const clang::VarDecl *decl);

‎cpp2rust/converter/models/converter_refcount.cpp‎

Lines changed: 4 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,8 @@ static bool IsFieldOfVectorElem(const clang::MemberExpr *expr) {
9797
}
9898

9999
static bool IsPointerType(clang::ASTContext &ctx, clang::QualType type) {
100-
return type->isPointerType() || GetStrongestIteratorCategory(ctx, type) ==
101-
IteratorCategory::Contiguous;
100+
return type->isPointerType() ||
101+
RuleRegistry::MapsToRefcountPointer(ctx, type);
102102
}
103103

104104
void ConverterRefCount::PendingDeref::set(std::string str, bool fresh) {
@@ -2848,12 +2848,6 @@ bool ConverterRefCount::ConvertCXXOperatorCallExpr(
28482848
break;
28492849
}
28502850

2851-
if (GetStrongestIteratorCategory(ctx_, expr->getArg(0)->getType()) ==
2852-
IteratorCategory::Bidirectional) {
2853-
Convert(expr->getArg(0));
2854-
break;
2855-
}
2856-
28572851
{
28582852
bool deref = !isAddrOf();
28592853
PushParen paren(*this, deref);
@@ -3314,7 +3308,8 @@ void ConverterRefCount::ConvertArrow(clang::Expr *expr) {
33143308
bool is_overloaded_arrow =
33153309
op && op->getOperator() == clang::OverloadedOperatorKind::OO_Arrow;
33163310

3317-
if (!is_overloaded_arrow || IsUserOperatorCall(op)) {
3311+
if (!is_overloaded_arrow || IsUserOperatorCall(op) ||
3312+
RuleRegistry::ReturnsPointer(ctx_, expr)) {
33183313
auto pointee_type = expr->getType()->getPointeeType();
33193314
// Virtual methods, which take &mut self, are called through PtrDyn.
33203315
if (auto *record = pointee_type->getAsRecordDecl();
@@ -3333,12 +3328,6 @@ void ConverterRefCount::ConvertArrow(clang::Expr *expr) {
33333328
return;
33343329
}
33353330

3336-
if (GetStrongestIteratorCategory(ctx_, op->getArg(0)->getType()) ==
3337-
IteratorCategory::Bidirectional) {
3338-
Convert(op->getArg(0));
3339-
return;
3340-
}
3341-
33423331
Convert(expr);
33433332
}
33443333

@@ -3348,12 +3337,6 @@ std::string ConverterRefCount::AccessLValueObject(clang::MemberExpr *member) {
33483337

33493338
bool is_mut = method && !method->isConst();
33503339
if (member->isArrow()) {
3351-
auto *op =
3352-
clang::dyn_cast<clang::CXXOperatorCallExpr>(object->IgnoreImplicit());
3353-
if (op && GetStrongestIteratorCategory(ctx_, op->getArg(0)->getType()) ==
3354-
IteratorCategory::Bidirectional) {
3355-
return ConvertRValue(op->getArg(0));
3356-
}
33573340
auto str = is_mut ? ConvertLValue(object) : ConvertRValue(object);
33583341
auto pointee_type = object->getType()->getPointeeType();
33593342
return DerefPtrExpr(str, pointee_type);

‎cpp2rust/converter/rules/decls.h‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ const clang::Expr *GetReturned(const clang::FunctionDecl *rule);
4242
const clang::Expr *GetMacroMemberBase(const clang::SourceManager &sm,
4343
const clang::MemberExpr *member);
4444

45-
4645
std::optional<std::vector<clang::TemplateArgument>>
4746
DeduceFromType(clang::Sema &sema, clang::TemplateParameterList *params,
4847
clang::QualType pattern, clang::QualType actual);

‎cpp2rust/converter/rules/registry.cpp‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@
1212
#include <llvm/ADT/StringExtras.h>
1313

1414
#include <algorithm>
15-
#include <set>
1615
#include <cstdlib>
1716
#include <filesystem>
1817
#include <format>
18+
#include <set>
1919
#include <string>
2020
#include <unordered_map>
2121
#include <unordered_set>
@@ -88,7 +88,8 @@ clang::QualType getInitPattern(const clang::FunctionDecl *rule) {
8888
void collectGenerics(const std::vector<TranslationRule::BodyFragment> &body,
8989
std::set<unsigned> &used) {
9090
for (const auto &fragment : body) {
91-
if (auto generic = std::get_if<TranslationRule::GenericFragment>(&fragment)) {
91+
if (auto generic =
92+
std::get_if<TranslationRule::GenericFragment>(&fragment)) {
9293
used.insert(generic->n);
9394
} else if (auto call = std::get_if<
9495
std::unique_ptr<TranslationRule::MethodCallFragment>>(

‎cpp2rust/rule_preprocessing/cpp_rule_indexer.cpp‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,8 @@ class DeclaredNames : public clang::RecursiveASTVisitor<DeclaredNames> {
138138
public:
139139
explicit DeclaredNames(const clang::SourceManager &sm) : sm_(sm) {}
140140

141-
bool VisitTemplateSpecializationType(clang::TemplateSpecializationType *type) {
141+
bool
142+
VisitTemplateSpecializationType(clang::TemplateSpecializationType *type) {
142143
add(type->getTemplateName().getAsTemplateDecl());
143144
return true;
144145
}

0 commit comments

Comments
 (0)