Accept (and prefer) "import type" as a scoped import for any non-protocol type.

Previously this was spelled "import typealias", and that spelling will
continue to be allowed (since someone may specifically be importing a
typealias and want that to match), but now that 'type' is a keyword,
"import type" is the right way to spell the generic "import any type"
scoped import.

Swift SVN r14488
This commit is contained in:
Jordan Rose
2014-02-27 23:46:06 +00:00
parent 7ac2c1de2f
commit 1fe8630bcd
5 changed files with 10 additions and 8 deletions

View File

@@ -119,9 +119,10 @@
module:</p>
<ul>
<li><code>typealias</code> can be used to import any concrete type (struct,
class, enum, or another typealias). It cannot be used to import protocols,
which are often used for more than just their existential type.</li>
<li><code>type</code> can be used to import any concrete type (struct,
class, enum, or typealias). It cannot be used to import protocols, which are
often used for more than just their existential type.
<code>typealias</code> is accepted as an alias for <code>type</code></li>
<li><code>struct</code>, <code>class</code>, <code>enum</code> can be used
to import any type whose <i>canonical type</i> is a struct, class,
@@ -141,7 +142,7 @@
import Swift
<i>// Import a single type.</i>
import typealias Swift.BufferedStream
import type Swift.BufferedStream
<i>// Import all addition overloads.</i>
import func Swift.+

View File

@@ -563,7 +563,7 @@ void PrintAST::visitImportDecl(ImportDecl *decl) {
case ImportKind::Module:
break;
case ImportKind::Type:
Printer << "typealias ";
Printer << "type ";
break;
case ImportKind::Struct:
Printer << "struct ";

View File

@@ -321,7 +321,7 @@ void DerivedFileUnit::lookupValue(Module::AccessPathTy accessPath,
// If this import is specific to some named type or decl ("import Swift.int")
// then filter out any lookups that don't match.
if (accessPath.size() == 1 && accessPath.front().first != Name)
if (accessPath.size() == 1 && accessPath.front().first != name)
return;
if (name == DerivedDecl->getName())

View File

@@ -819,7 +819,7 @@ void Parser::parseDeclDelayed() {
/// decl-import:
/// 'import' attribute-list import-kind? import-path
/// import-kind:
/// 'typealias'
/// ('type'|'typealias')
/// 'struct'
/// 'class'
/// 'enum'
@@ -847,6 +847,7 @@ ParserResult<ImportDecl> Parser::parseDeclImport(ParseDeclOptions Flags,
SourceLoc KindLoc;
if (Tok.isKeyword()) {
switch (Tok.getKind()) {
case tok::kw_type:
case tok::kw_typealias:
Kind = ImportKind::Type;
break;

View File

@@ -113,7 +113,7 @@ static const char *getImportKindString(ImportKind kind) {
case ImportKind::Module:
llvm_unreachable("module imports do not bring in decls");
case ImportKind::Type:
return "typealias";
return "type";
case ImportKind::Struct:
return "struct";
case ImportKind::Class: