mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
Implement type sugar "T?" for Optional<T>.
- New type representation OptionalTypeRepr. - New sugared type OptionalType. - New base type SyntaxSugarType, parent of ArraySliceType and OptionalType. These two are the same in a lot of ways. - The form "T[]?" is forbidden, because it makes "Int[4][2]" oddly different from "Int[4]?[2]". The type can be spelled "(T[])?" or Optional<T[]>. - Like Slice, "Optional" is just looked up in the current module. This may or may not be the desired behavior in the long run. <rdar://problem/14666783> Swift SVN r7100
This commit is contained in:
@@ -1892,6 +1892,20 @@ Type ModuleFile::getType(TypeID TID) {
|
||||
break;
|
||||
}
|
||||
|
||||
case decls_block::OPTIONAL_TYPE: {
|
||||
TypeID baseID, implID;
|
||||
decls_block::OptionalTypeLayout::readRecord(scratch, baseID, implID);
|
||||
|
||||
auto optionalTy = OptionalType::get(getType(baseID), ctx);
|
||||
typeOrOffset = optionalTy;
|
||||
|
||||
// Optional types are uniqued by the ASTContext, so they may already have
|
||||
// type information. If so, ignore the information in the module.
|
||||
if (!optionalTy->hasImplementationType())
|
||||
optionalTy->setImplementationType(getType(implID));
|
||||
break;
|
||||
}
|
||||
|
||||
case decls_block::ARRAY_TYPE: {
|
||||
TypeID baseID;
|
||||
uint64_t size;
|
||||
|
||||
Reference in New Issue
Block a user