Skip to content

Commit f556c3b

Browse files
committed
Simplify typecheckMemberExpr
1 parent 108ab7c commit f556c3b

File tree

1 file changed

+9
-15
lines changed

1 file changed

+9
-15
lines changed

src/sema/typecheck-expr.cpp

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1443,15 +1443,17 @@ Type Typechecker::typecheckMemberExpr(MemberExpr& expr) {
14431443
baseType = baseType.removePointer();
14441444

14451445
if (baseType.isArrayType()) {
1446-
auto sizeSynonyms = {"count", "length", "size"};
1447-
1448-
if (llvm::is_contained(sizeSynonyms, expr.getMemberName())) {
1446+
if (llvm::is_contained({"count", "length", "size"}, expr.getMemberName())) {
14491447
ERROR(expr.getLocation(), "use the '.size()' member function to get the number of elements in an array");
14501448
}
1451-
}
1452-
1453-
if (auto* typeDecl = baseType.getDecl()) { // TODO: add comment why types don't always have decl
1454-
for (auto& field : typeDecl->fields) {
1449+
} else if (baseType.isTupleType()) {
1450+
for (auto& element : baseType.getTupleElements()) {
1451+
if (element.name == expr.getMemberName()) {
1452+
return element.type;
1453+
}
1454+
}
1455+
} else {
1456+
for (auto& field : baseType.getDecl()->fields) {
14551457
if (field.getName() == expr.getMemberName()) {
14561458
checkHasAccess(field, expr.getLocation(), AccessLevel::None);
14571459
expr.setDecl(field);
@@ -1460,14 +1462,6 @@ Type Typechecker::typecheckMemberExpr(MemberExpr& expr) {
14601462
}
14611463
}
14621464

1463-
if (baseType.isTupleType()) {
1464-
for (auto& element : baseType.getTupleElements()) {
1465-
if (element.name == expr.getMemberName()) {
1466-
return element.type;
1467-
}
1468-
}
1469-
}
1470-
14711465
ERROR(expr.getLocation(), "no member named '" << expr.getMemberName() << "' in '" << baseType << "'");
14721466
}
14731467

0 commit comments

Comments
 (0)