Skip to content

Commit 00af9c9

Browse files
authored
Merge pull request swiftlang#22156 from Azoy/cache-money
2 parents 075b918 + 9789b25 commit 00af9c9

File tree

2 files changed

+11
-18
lines changed

2 files changed

+11
-18
lines changed

include/swift/AST/KnownStdlibTypes.def

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ KNOWN_STDLIB_TYPE_DECL(Float, NominalTypeDecl, 0)
4545
KNOWN_STDLIB_TYPE_DECL(Double, NominalTypeDecl, 0)
4646
KNOWN_STDLIB_TYPE_DECL(Float80, NominalTypeDecl, 0)
4747

48+
KNOWN_STDLIB_TYPE_DECL(_MaxBuiltinFloatType, TypeAliasDecl, 0)
49+
4850
KNOWN_STDLIB_TYPE_DECL(String, NominalTypeDecl, 0)
4951
KNOWN_STDLIB_TYPE_DECL(Substring, NominalTypeDecl, 0)
5052
KNOWN_STDLIB_TYPE_DECL(Array, NominalTypeDecl, 1)

lib/Sema/CSApply.cpp

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1834,8 +1834,6 @@ namespace {
18341834
Expr *forceBridgeFromObjectiveC(Expr *object, Type valueType) {
18351835
return bridgeFromObjectiveC(object, valueType, false);
18361836
}
1837-
1838-
TypeAliasDecl *MaxFloatTypeDecl = nullptr;
18391837

18401838
public:
18411839
ExprRewriter(ConstraintSystem &cs, const Solution &solution,
@@ -2002,25 +2000,18 @@ namespace {
20022000
type = defaultType;
20032001
}
20042002

2005-
// Find the maximum-sized builtin float type.
2006-
// FIXME: Cache name lookup.
2007-
if (!MaxFloatTypeDecl) {
2008-
SmallVector<ValueDecl *, 1> lookupResults;
2009-
tc.getStdlibModule(dc)->lookupValue(/*AccessPath=*/{},
2010-
tc.Context.Id_MaxBuiltinFloatType,
2011-
NLKind::QualifiedLookup,
2012-
lookupResults);
2013-
if (lookupResults.size() == 1)
2014-
MaxFloatTypeDecl = dyn_cast<TypeAliasDecl>(lookupResults.front());
2015-
}
2016-
if (!MaxFloatTypeDecl ||
2017-
!MaxFloatTypeDecl->hasInterfaceType() ||
2018-
!MaxFloatTypeDecl->getDeclaredInterfaceType()->is<BuiltinFloatType>()) {
2003+
// Get the _MaxBuiltinFloatType decl, or look for it if it's not cached.
2004+
auto maxFloatTypeDecl = tc.Context.get_MaxBuiltinFloatTypeDecl();
2005+
2006+
if (!maxFloatTypeDecl ||
2007+
!maxFloatTypeDecl->hasInterfaceType() ||
2008+
!maxFloatTypeDecl->getDeclaredInterfaceType()->is<BuiltinFloatType>()) {
20192009
tc.diagnose(expr->getLoc(), diag::no_MaxBuiltinFloatType_found);
20202010
return nullptr;
20212011
}
2022-
tc.validateDecl(MaxFloatTypeDecl);
2023-
auto maxType = MaxFloatTypeDecl->getUnderlyingTypeLoc().getType();
2012+
2013+
tc.validateDecl(maxFloatTypeDecl);
2014+
auto maxType = maxFloatTypeDecl->getUnderlyingTypeLoc().getType();
20242015

20252016
DeclName initName(tc.Context, DeclBaseName::createConstructor(),
20262017
{ tc.Context.Id_floatLiteral });

0 commit comments

Comments
 (0)