@@ -303,80 +303,19 @@ LookupResult &ConstraintSystem::lookupMember(Type base, DeclNameRef name) {
303
303
return *result;
304
304
}
305
305
306
- ArrayRef<Type> ConstraintSystem::
307
- getAlternativeLiteralTypes (KnownProtocolKind kind) {
308
- unsigned index;
309
-
310
- switch (kind) {
311
- #define PROTOCOL_WITH_NAME (Id, Name ) \
312
- case KnownProtocolKind::Id: llvm_unreachable (" Not a literal protocol" );
313
- #define EXPRESSIBLE_BY_LITERAL_PROTOCOL_WITH_NAME (Id, Name, __, ___ )
314
- #include " swift/AST/KnownProtocols.def"
315
-
316
- case KnownProtocolKind::ExpressibleByArrayLiteral: index = 0 ; break ;
317
- case KnownProtocolKind::ExpressibleByDictionaryLiteral:index = 1 ; break ;
318
- case KnownProtocolKind::ExpressibleByExtendedGraphemeClusterLiteral: index = 2 ;
319
- break ;
320
- case KnownProtocolKind::ExpressibleByFloatLiteral: index = 3 ; break ;
321
- case KnownProtocolKind::ExpressibleByIntegerLiteral: index = 4 ; break ;
322
- case KnownProtocolKind::ExpressibleByStringInterpolation: index = 5 ; break ;
323
- case KnownProtocolKind::ExpressibleByStringLiteral: index = 6 ; break ;
324
- case KnownProtocolKind::ExpressibleByNilLiteral: index = 7 ; break ;
325
- case KnownProtocolKind::ExpressibleByBooleanLiteral: index = 8 ; break ;
326
- case KnownProtocolKind::ExpressibleByUnicodeScalarLiteral: index = 9 ; break ;
327
- case KnownProtocolKind::ExpressibleByColorLiteral: index = 10 ; break ;
328
- case KnownProtocolKind::ExpressibleByImageLiteral: index = 11 ; break ;
329
- case KnownProtocolKind::ExpressibleByFileReferenceLiteral: index = 12 ; break ;
330
- }
331
- static_assert (NumAlternativeLiteralTypes == 13 , " Wrong # of literal types" );
332
-
333
- // If we already looked for alternative literal types, return those results.
334
- if (AlternativeLiteralTypes[index])
335
- return *AlternativeLiteralTypes[index];
336
-
337
- SmallVector<Type, 4 > types;
338
-
339
- // Some literal kinds are related.
340
- switch (kind) {
341
- #define PROTOCOL_WITH_NAME (Id, Name ) \
342
- case KnownProtocolKind::Id: llvm_unreachable (" Not a literal protocol" );
343
- #define EXPRESSIBLE_BY_LITERAL_PROTOCOL_WITH_NAME (Id, Name, __, ___ )
344
- #include " swift/AST/KnownProtocols.def"
345
-
346
- case KnownProtocolKind::ExpressibleByArrayLiteral:
347
- case KnownProtocolKind::ExpressibleByDictionaryLiteral:
348
- break ;
349
-
350
- case KnownProtocolKind::ExpressibleByExtendedGraphemeClusterLiteral:
351
- case KnownProtocolKind::ExpressibleByStringInterpolation:
352
- case KnownProtocolKind::ExpressibleByStringLiteral:
353
- case KnownProtocolKind::ExpressibleByUnicodeScalarLiteral:
354
- break ;
355
-
356
- case KnownProtocolKind::ExpressibleByIntegerLiteral:
306
+ ArrayRef<Type>
307
+ ConstraintSystem::getAlternativeLiteralTypes (KnownProtocolKind kind,
308
+ SmallVectorImpl<Type> &scratch) {
309
+ assert (scratch.empty ());
310
+ if (kind == KnownProtocolKind::ExpressibleByIntegerLiteral) {
357
311
// Integer literals can be treated as floating point literals.
358
312
if (auto floatProto = getASTContext ().getProtocol (
359
313
KnownProtocolKind::ExpressibleByFloatLiteral)) {
360
- if (auto defaultType = TypeChecker::getDefaultType (floatProto, DC)) {
361
- types.push_back (defaultType);
362
- }
314
+ if (auto defaultType = TypeChecker::getDefaultType (floatProto, DC))
315
+ scratch.push_back (defaultType);
363
316
}
364
- break ;
365
-
366
- case KnownProtocolKind::ExpressibleByFloatLiteral:
367
- break ;
368
-
369
- case KnownProtocolKind::ExpressibleByNilLiteral:
370
- case KnownProtocolKind::ExpressibleByBooleanLiteral:
371
- break ;
372
- case KnownProtocolKind::ExpressibleByColorLiteral:
373
- case KnownProtocolKind::ExpressibleByImageLiteral:
374
- case KnownProtocolKind::ExpressibleByFileReferenceLiteral:
375
- break ;
376
317
}
377
-
378
- AlternativeLiteralTypes[index] = allocateCopy (types);
379
- return *AlternativeLiteralTypes[index];
318
+ return scratch;
380
319
}
381
320
382
321
bool ConstraintSystem::containsCodeCompletionLoc (Expr *expr) const {
0 commit comments