Skip to content

Commit 7bf8f7c

Browse files
committed
ASTGen: Translate import declarations
1 parent 5ab1e3e commit 7bf8f7c

File tree

4 files changed

+101
-6
lines changed

4 files changed

+101
-6
lines changed

include/swift/AST/CASTBridging.h

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -256,12 +256,6 @@ BridgedIdentifier ASTContext_getIdentifier(BridgedASTContext cContext,
256256
_Bool ASTContext_langOptsHasFeature(BridgedASTContext cContext,
257257
BridgedFeature feature);
258258

259-
void *ImportDecl_create(BridgedASTContext cContext,
260-
BridgedDeclContext cDeclContext,
261-
BridgedSourceLoc cImportLoc, char kind,
262-
BridgedSourceLoc cKindLoc, BridgedArrayRef path,
263-
BridgedArrayRef cPathLocs);
264-
265259
void *TopLevelCodeDecl_createStmt(BridgedASTContext cContext,
266260
BridgedDeclContext cDeclContext,
267261
BridgedSourceLoc cStartLoc, void *element,
@@ -440,6 +434,24 @@ void *OperatorDecl_create(BridgedASTContext cContext,
440434
BridgedIdentifier cPrecedenceGroupName,
441435
BridgedSourceLoc cPrecedenceGroupLoc);
442436

437+
typedef enum ENUM_EXTENSIBILITY_ATTR(open) {
438+
BridgedImportKindModule,
439+
BridgedImportKindType,
440+
BridgedImportKindStruct,
441+
BridgedImportKindClass,
442+
BridgedImportKindEnum,
443+
BridgedImportKindProtocol,
444+
BridgedImportKindVar,
445+
BridgedImportKindFunc,
446+
} BridgedImportKind;
447+
448+
void *ImportDecl_create(BridgedASTContext cContext,
449+
BridgedDeclContext cDeclContext,
450+
BridgedSourceLoc cImportKeywordLoc,
451+
BridgedImportKind cImportKind,
452+
BridgedSourceLoc cImportKindLoc,
453+
BridgedArrayRef cImportPathElements);
454+
443455
void *GenericParamList_create(BridgedASTContext cContext,
444456
BridgedSourceLoc cLeftAngleLoc,
445457
BridgedArrayRef cParameters,

lib/AST/CASTBridging.cpp

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,7 @@ BridgedIdentifier ASTContext_getIdentifier(BridgedASTContext cContext,
186186
return {convertASTContext(cContext).getIdentifier(str).getAsOpaquePointer()};
187187
}
188188

189+
<<<<<<< HEAD
189190
bool ASTContext_langOptsHasFeature(BridgedASTContext cContext,
190191
BridgedFeature feature) {
191192
return convertASTContext(cContext).LangOpts.hasFeature((Feature)feature);
@@ -215,6 +216,9 @@ void *ImportDecl_create(BridgedASTContext cContext,
215216
}
216217

217218
BridgedSourceLoc SourceLoc_advanced(BridgedSourceLoc cLoc, SwiftInt len) {
219+
=======
220+
BridgedSourceLoc SourceLoc_advanced(BridgedSourceLoc cLoc, long len) {
221+
>>>>>>> 2841aca3260 (ASTGen: Translate import declarations)
218222
SourceLoc loc = convertSourceLoc(cLoc).getAdvancedLoc(len);
219223
return {loc.getOpaquePointerValue()};
220224
}
@@ -822,6 +826,28 @@ void *OperatorDecl_create(BridgedASTContext cContext,
822826
return static_cast<Decl *>(decl);
823827
}
824828

829+
void *ImportDecl_create(BridgedASTContext cContext,
830+
BridgedDeclContext cDeclContext,
831+
BridgedSourceLoc cImportKeywordLoc,
832+
BridgedImportKind cImportKind,
833+
BridgedSourceLoc cImportKindLoc,
834+
BridgedArrayRef cImportPathElements) {
835+
ImportPath::Builder builder;
836+
for (auto &element :
837+
convertArrayRef<BridgedIdentifierAndSourceLoc>(cImportPathElements)) {
838+
builder.push_back(convertIdentifier(element.name),
839+
convertSourceLoc(element.nameLoc));
840+
}
841+
842+
ASTContext &context = convertASTContext(cContext);
843+
auto *decl = ImportDecl::create(
844+
context, convertDeclContext(cDeclContext),
845+
convertSourceLoc(cImportKeywordLoc), static_cast<ImportKind>(cImportKind),
846+
convertSourceLoc(cImportKindLoc), std::move(builder).get());
847+
848+
return static_cast<Decl *>(decl);
849+
}
850+
825851
void *OptionalTypeRepr_create(BridgedASTContext cContext, void *base,
826852
BridgedSourceLoc cQuestionLoc) {
827853
ASTContext &context = convertASTContext(cContext);

lib/ASTGen/Sources/ASTGen/Decls.swift

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,53 @@ extension ASTGenVisitor {
351351
}
352352
}
353353

354+
// MARK: - ImportDecl
355+
356+
extension BridgedImportKind {
357+
fileprivate init?(from tokenKind: TokenKind) {
358+
switch tokenKind {
359+
case .keyword(.typealias): self = .type
360+
case .keyword(.struct): self = .struct
361+
case .keyword(.class): self = .class
362+
case .keyword(.enum): self = .enum
363+
case .keyword(.protocol): self = .protocol
364+
case .keyword(.var), .keyword(.let): self = .var
365+
case .keyword(.func): self = .func
366+
default: return nil
367+
}
368+
}
369+
}
370+
371+
extension ASTGenVisitor {
372+
func visit(_ node: ImportDeclSyntax) -> ASTNode {
373+
let importKind: BridgedImportKind
374+
switch node.importKindSpecifier {
375+
case let specifier?:
376+
guard let value = BridgedImportKind(from: specifier.tokenKind) else {
377+
self.diagnose(Diagnostic(node: specifier, message: UnexpectedTokenKindError(token: specifier)))
378+
fallthrough
379+
}
380+
381+
importKind = value
382+
case nil:
383+
importKind = .module
384+
}
385+
386+
return .decl(
387+
ImportDecl_create(
388+
self.ctx,
389+
self.declContext,
390+
self.bridgedSourceLoc(for: node.importKeyword),
391+
importKind,
392+
self.bridgedSourceLoc(for: node.importKindSpecifier),
393+
node.path.map(in: self) {
394+
$0.name.bridgedIdentifierAndSourceLoc(in: self) as BridgedIdentifierAndSourceLoc
395+
}
396+
)
397+
)
398+
}
399+
}
400+
354401
extension ASTGenVisitor {
355402
func visit(_ node: MemberBlockItemListSyntax) -> BridgedArrayRef {
356403
node.map(in: self) { self.visit($0).rawValue }

test/ASTGen/verify-parse.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,16 @@
1414

1515
// NB: Ridiculous formatting to test that we do not include leading trivia in locations.
1616

17+
import
18+
Swift
19+
import typealias Swift.Codable
20+
import enum Swift.Optional
21+
import struct Swift.Array
22+
import class Swift.KeyPath
23+
import protocol Swift.Sequence
24+
import func Swift.max
25+
import var Swift._playgroundPrintHook
26+
1727
func
1828
test1
1929
(

0 commit comments

Comments
 (0)