From 80200ec23aec4c0ee834f90513961ce55ae8896c Mon Sep 17 00:00:00 2001 From: zoecarver Date: Fri, 2 Sep 2022 17:57:13 -0700 Subject: [PATCH 01/29] Add Swift-side infrastructure for ASTGen. (cherry picked from commit 7bc67c9f12d3ae4f4fc2c2151d39e4ea039a58ff) --- include/swift/AST/CASTBridging.h | 140 +++++++++++++ include/swift/Basic/LangOptions.h | 2 + include/swift/Option/Options.td | 6 + include/swift/module.modulemap | 4 + lib/AST/CASTBridging.cpp | 202 +++++++++++++++++++ lib/AST/CMakeLists.txt | 3 +- lib/Frontend/CompilerInvocation.cpp | 1 + lib/Migrator/CMakeLists.txt | 2 +- lib/Parse/CMakeLists.txt | 6 +- lib/Parse/ParseDecl.cpp | 29 +++ lib/Syntax/CMakeLists.txt | 6 +- lib/SyntaxParse/CMakeLists.txt | 2 +- tools/SourceKit/lib/SwiftLang/CMakeLists.txt | 2 +- tools/driver/CMakeLists.txt | 3 + tools/swift-syntax-test/CMakeLists.txt | 2 +- 15 files changed, 401 insertions(+), 9 deletions(-) create mode 100644 include/swift/AST/CASTBridging.h create mode 100644 lib/AST/CASTBridging.cpp diff --git a/include/swift/AST/CASTBridging.h b/include/swift/AST/CASTBridging.h new file mode 100644 index 0000000000000..0075ea2dfa17d --- /dev/null +++ b/include/swift/AST/CASTBridging.h @@ -0,0 +1,140 @@ +//===--- ASTBridging.h - header for the swift SILBridging module ----------===// +// +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2022 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// +//===----------------------------------------------------------------------===// + +#ifndef SWIFT_C_AST_ASTBRIDGING_H +#define SWIFT_C_AST_ASTBRIDGING_H + +// Provide macros to temporarily suppress warning about the use of +// _Nullable and _Nonnull. +#define SWIFT_BEGIN_NULLABILITY_ANNOTATIONS \ + _Pragma("clang diagnostic push") \ + _Pragma("clang diagnostic ignored \"-Wnullability-extension\"") \ + _Pragma("clang assume_nonnull begin") + +#define SWIFT_END_NULLABILITY_ANNOTATIONS \ + _Pragma("clang diagnostic pop") _Pragma("clang assume_nonnull end") + +//===----------------------------------------------------------------------===// +// Diagnostic Engine +//===----------------------------------------------------------------------===// + +// TODO: Move this to somewhere common header. +#if __has_attribute(enum_extensibility) +#define ENUM_EXTENSIBILITY_ATTR(arg) __attribute__((enum_extensibility(arg))) +#else +#define ENUM_EXTENSIBILITY_ATTR(arg) +#endif + +// NOTE: This must be the same underlying value as C++ 'swift::DiagID' defined +// in 'DiagnosticList.cpp'. +typedef enum ENUM_EXTENSIBILITY_ATTR(open) BridgedDiagID : unsigned { +#define DIAG(KIND, ID, Options, Text, Signature) BridgedDiagID_##ID, +#include "swift/AST/DiagnosticsAll.def" +} BridgedDiagID; + +SWIFT_BEGIN_NULLABILITY_ANNOTATIONS + +typedef long SwiftInt; +typedef unsigned long SwiftUInt; + +typedef struct { + const void *_Nullable data; + long numElements; +} BridgedArrayRef; + +typedef struct { + void *start; + SwiftInt byteLength; +} BridgedCharSourceRange; + +// FIXME: Can we bridge InFlightDiagnostic? +void DiagnosticEngine_diagnose(void *, void *loc, BridgedDiagID diagID, + BridgedArrayRef arguments, + BridgedCharSourceRange highlight, + BridgedArrayRef fixIts); + +int DiagnosticEngine_hadAnyError(void *); + +typedef const char *BridgedIdentifier; + +#ifdef __cplusplus +extern "C" { + +#define _Bool bool + +#endif + +BridgedIdentifier +SwiftASTContext_getIdentifier(void *ctx, const char *_Nullable str, long len); + +void *SwiftImportDecl_create(void *, void *, void *, char, void *, + BridgedArrayRef, BridgedArrayRef); + +void *SwiftTopLevelCodeDecl_createStmt(void *ctx, void *DC, void *startLoc, + void *element, void *endLoc); +void *SwiftTopLevelCodeDecl_createExpr(void *ctx, void *DC, void *startLoc, + void *element, void *endLoc); + +void *SwiftSequenceExpr_create(void *ctx, BridgedArrayRef exprs); + +void *SwiftTupleExpr_create(void *ctx, void *lparen, BridgedArrayRef subs, + void *rparen); + +void *SwiftFunctionCallExpr_create(void *ctx, void *fn, void *args); + +void *SwiftIdentifierExpr_create(void *ctx, const char *base, void *loc); + +void *SwiftStringLiteralExpr_create(void *ctx, const char *_Nullable string, + long len, void *TokenLoc); + +void *SwiftIntegerLiteralExpr_create(void *ctx, const char *_Nullable string, + long len, void *TokenLoc); + +void *SwiftVarDecl_create(void *ctx, const char *_Nullable name, + void *loc, _Bool isStatic, _Bool isLet, void *dc); + +void *IfStmt_create(void *ctx, void *ifLoc, void *cond, void *_Nullable then, void *_Nullable elseLoc, + void *_Nullable elseStmt); + +void *BraceStmt_create(void *ctx, void *lbloc, BridgedArrayRef elements, void *rbloc); + +void *BridgedSourceLoc_advanced(void *loc, long len); + +void *ParamDecl_create(void *ctx, void *loc, + void *_Nullable argLoc, void *_Nullable argName, + void *_Nullable paramLoc, void *_Nullable paramName, + void *declContext); + +void *FuncDecl_create(void *ctx, void *staticLoc, _Bool isStatic, void *funcLoc, + const char *name, void *nameLoc, + _Bool isAsync, void *_Nullable asyncLoc, + _Bool throws, void *_Nullable throwsLoc, + void *paramLLoc, BridgedArrayRef params, void *paramRLoc, + void *_Nullable body, void *_Nullable returnType, + void *declContext); + +void *SimpleIdentTypeRepr_create(void *ctx, void *loc, const char *id); + +void *UnresolvedDotExpr_create(void *ctx, void *base, void *dotLoc, const char *name, void *nameLoc); + + void TopLevelCodeDecl_dump(void *); +void Expr_dump(void *); +void Decl_dump(void *); +void Stmt_dump(void *); + +#ifdef __cplusplus +} +#endif + +SWIFT_END_NULLABILITY_ANNOTATIONS + +#endif // SWIFT_C_AST_ASTBRIDGING_H \ No newline at end of file diff --git a/include/swift/Basic/LangOptions.h b/include/swift/Basic/LangOptions.h index e81db66d70de2..0636e55fd4a1f 100644 --- a/include/swift/Basic/LangOptions.h +++ b/include/swift/Basic/LangOptions.h @@ -275,6 +275,8 @@ namespace swift { /// disabled because it is not complete. bool EnableCXXInterop = false; + bool EnableSwiftParser = false; + /// Imports getters and setters as computed properties. bool CxxInteropGettersSettersAsProperties = false; diff --git a/include/swift/Option/Options.td b/include/swift/Option/Options.td index 8da56f4eb2ac3..7b1b49aeda2fa 100644 --- a/include/swift/Option/Options.td +++ b/include/swift/Option/Options.td @@ -635,6 +635,12 @@ def enable_experimental_cxx_interop_in_clang_header : Flags<[FrontendOption, NoDriverOption, HelpHidden]>, HelpText<"Enable experimental Swift to C++ interop code generation in generated Clang header">; +def enable_experimental_swift_parser : + Flag<["-"], "enable-experimental-swift-parser">, + Flags<[FrontendOption, HelpHidden, ModuleInterfaceOption]>, + HelpText<"Enable the new and expiremental Swift parser + AST generation.">; + + def experimental_cxx_stdlib : Separate<["-"], "experimental-cxx-stdlib">, Flags<[HelpHidden]>, diff --git a/include/swift/module.modulemap b/include/swift/module.modulemap index 4cfbbba040e12..fe8f02bad716f 100644 --- a/include/swift/module.modulemap +++ b/include/swift/module.modulemap @@ -15,6 +15,10 @@ module ASTBridging { export * } +module CASTBridging { + header "AST/CASTBridging.h" +} + module SILBridging { header "SIL/SILBridging.h" header "SIL/SILLocation.h" diff --git a/lib/AST/CASTBridging.cpp b/lib/AST/CASTBridging.cpp new file mode 100644 index 0000000000000..f39a6a15cabb7 --- /dev/null +++ b/lib/AST/CASTBridging.cpp @@ -0,0 +1,202 @@ +#include "swift/AST/CASTBridging.h" + +#include "swift/AST/ASTContext.h" +#include "swift/AST/ASTNode.h" +#include "swift/AST/Decl.h" +#include "swift/AST/Expr.h" +#include "swift/AST/Stmt.h" +#include "swift/AST/Identifier.h" +#include "swift/AST/ParameterList.h" +#include "swift/AST/TypeRepr.h" + +using namespace swift; + +template +inline llvm::ArrayRef getArrayRef(BridgedArrayRef bridged) { + return {static_cast(bridged.data), size_t(bridged.numElements)}; +} + +BridgedIdentifier +SwiftASTContext_getIdentifier(void *ctx, const char *_Nullable str, long len) { + return static_cast(ctx) + ->getIdentifier(StringRef{str, size_t(len)}) + .get(); +} + +void *SwiftImportDecl_create(void *ctx, void *dc, void *importLoc, char kind, + void *kindLoc, BridgedArrayRef path, + BridgedArrayRef pathLocs) { + assert(path.numElements == pathLocs.numElements); + ASTContext &Context = *static_cast(ctx); + ImportPath::Builder importPath; + for (auto p : llvm::zip(getArrayRef(path), + getArrayRef(pathLocs))) { + Identifier ident; + SourceLoc loc; + std::tie(ident, loc) = p; + importPath.push_back(ident, loc); + } + return ImportDecl::create( + Context, static_cast(dc), *(SourceLoc *)&importLoc, + static_cast(kind), *(SourceLoc *)&kindLoc, + std::move(importPath).get()); +} + +void *BridgedSourceLoc_advanced(void *loc, long len) { + SourceLoc l = ((SourceLoc *)&loc)->getAdvancedLoc(len); + return &l; // TODO: what? +} + +void *SwiftTopLevelCodeDecl_createStmt(void *ctx, void *DC, void *startLoc, + void *element, void *endLoc) { + ASTContext &Context = *static_cast(ctx); + auto *S = static_cast(element); + auto Brace = + BraceStmt::create(Context, *(SourceLoc *)&startLoc, + {S}, *(SourceLoc *)&endLoc, + /*Implicit=*/true); + auto *TLCD = + new (Context) TopLevelCodeDecl(static_cast(DC), Brace); + return (Decl *)TLCD; +} + +void *SwiftTopLevelCodeDecl_createExpr(void *ctx, void *DC, void *startLoc, + void *element, void *endLoc) { + ASTContext &Context = *static_cast(ctx); + auto *E = static_cast(element); + auto Brace = + BraceStmt::create(Context, *(SourceLoc *)&startLoc, + {E}, *(SourceLoc *)&endLoc, + /*Implicit=*/true); + auto *TLCD = + new (Context) TopLevelCodeDecl(static_cast(DC), Brace); + return (Decl *)TLCD; +} + +void *SwiftSequenceExpr_create(void *ctx, BridgedArrayRef exprs) { + return SequenceExpr::create(*static_cast(ctx), + getArrayRef(exprs)); +} + +void *SwiftTupleExpr_create(void *ctx, void *lparen, BridgedArrayRef subs, + void *rparen) { + return TupleExpr::create( + *static_cast(ctx), *(SourceLoc *)&lparen, + getArrayRef(subs), {}, {}, *(SourceLoc *)&rparen, + /*Implicit*/ false); +} + +void *SwiftFunctionCallExpr_create(void *ctx, void *fn, void *args) { + ASTContext &Context = *static_cast(ctx); + TupleExpr *TE = static_cast(args); + SmallVector arguments; + for (unsigned i = 0; i < TE->getNumElements(); ++i) { + arguments.emplace_back(TE->getElementNameLoc(i), TE->getElementName(i), + TE->getElement(i)); + } + auto *argList = ArgumentList::create(Context, TE->getLParenLoc(), arguments, + TE->getRParenLoc(), None, + /*isImplicit*/ false); + return CallExpr::create(Context, static_cast(fn), argList, + /*implicit*/ false); +} + +void *SwiftIdentifierExpr_create(void *ctx, const char *base, void *loc) { + ASTContext &Context = *static_cast(ctx); + auto name = DeclNameRef{ + swift::Identifier::getFromOpaquePointer(const_cast(base))}; + Expr *E = new (Context) UnresolvedDeclRefExpr( + name, DeclRefKind::Ordinary, DeclNameLoc{*(SourceLoc *)&loc}); + return E; +} + +void *SwiftStringLiteralExpr_create(void *ctx, const char *_Nullable string, + long len, void *TokenLoc) { + ASTContext &Context = *static_cast(ctx); + return new (Context) StringLiteralExpr(StringRef{string, size_t(len)}, + *(SourceLoc *)&TokenLoc); +} + +void *SwiftIntegerLiteralExpr_create(void *ctx, const char *_Nullable string, + long len, void *TokenLoc) { + ASTContext &Context = *static_cast(ctx); + return new (Context) IntegerLiteralExpr(StringRef{string, size_t(len)}, + *(SourceLoc *)&TokenLoc); +} + +void *SwiftVarDecl_create(void *ctx, const char *_Nullable nameId, + void *loc, bool isStatic, bool isLet, void *dc) { + ASTContext &Context = *static_cast(ctx); + return new (Context) VarDecl(isStatic, + isLet ? VarDecl::Introducer::Let : VarDecl::Introducer::Var, + *(SourceLoc *)&loc, Identifier::getFromOpaquePointer((void *)nameId), + reinterpret_cast(dc)); +} + +void *IfStmt_create(void *ctx, void *ifLoc, void *cond, void *_Nullable then, void *_Nullable elseLoc, + void *_Nullable elseStmt) { + ASTContext &Context = *static_cast(ctx); + return new (Context) IfStmt(*(SourceLoc *)&ifLoc, (Expr *)cond, (Stmt *)then, *(SourceLoc *)&elseLoc, + (Stmt *)elseStmt, None, Context); +} + +void *BraceStmt_create(void *ctx, void *lbloc, BridgedArrayRef elements, void *rbloc) { + return BraceStmt::create(*static_cast(ctx), *(SourceLoc *)&lbloc, + getArrayRef(elements), + *(SourceLoc *)&rbloc); +} + +void *ParamDecl_create(void *ctx, void *loc, + void *_Nullable argLoc, void *_Nullable argName, + void *_Nullable paramLoc, void *_Nullable paramName, + void *declContext) { + ASTContext &Context = *static_cast(ctx); + return new (Context) ParamDecl(*(SourceLoc *)&loc, *(SourceLoc *)&argLoc, + Identifier::getFromOpaquePointer(argName), + *(SourceLoc *)¶mLoc, + Identifier::getFromOpaquePointer(paramName), + (DeclContext *)declContext); +} + +void *FuncDecl_create(void *ctx, void *staticLoc, bool isStatic, void *funcLoc, + const char *name, void *nameLoc, + bool isAsync, void *_Nullable asyncLoc, + bool throws, void *_Nullable throwsLoc, + void *paramLLoc, BridgedArrayRef params, void *paramRLoc, + void *_Nullable body, void *_Nullable returnType, + void *declContext) { + auto *paramList = ParameterList::create( + *static_cast(ctx), *(SourceLoc *)¶mLLoc, + getArrayRef(params), *(SourceLoc *)¶mRLoc); + auto declName = + DeclName(*static_cast(ctx), + Identifier::getFromOpaquePointer((void *)name), paramList); + auto *out = FuncDecl::create( + *static_cast(ctx), *(SourceLoc *)&staticLoc, + isStatic ? StaticSpellingKind::KeywordStatic : StaticSpellingKind::None, + *(SourceLoc *)&funcLoc, declName, *(SourceLoc *)&nameLoc, isAsync, + *(SourceLoc *)&asyncLoc, throws, *(SourceLoc *)&throwsLoc, nullptr, + paramList, (TypeRepr *)returnType, (DeclContext *)declContext); + out->setBody((BraceStmt *)body, FuncDecl::BodyKind::Parsed); + + return static_cast(out); +} + +void *SimpleIdentTypeRepr_create(void *ctx, void *loc, const char *id) { + ASTContext &Context = *static_cast(ctx); + return new (Context) SimpleIdentTypeRepr(DeclNameLoc(*(SourceLoc *)&loc), + DeclNameRef(Identifier::getFromOpaquePointer((void *)id))); +} + +void *UnresolvedDotExpr_create(void *ctx, void *base, void *dotLoc, const char *name, void *nameLoc) { + ASTContext &Context = *static_cast(ctx); + return new (Context) UnresolvedDotExpr((Expr *)base, *(SourceLoc *)&dotLoc, + DeclNameRef(Identifier::getFromOpaquePointer((void *)name)), + DeclNameLoc(*(SourceLoc *)&nameLoc), false); +} + +void TopLevelCodeDecl_dump(void *decl) { ((TopLevelCodeDecl *)decl)->dump(); } + +void Expr_dump(void *expr) { ((Expr *)expr)->dump(); } +void Decl_dump(void *expr) { ((Decl *)expr)->dump(); } +void Stmt_dump(void *expr) { ((Stmt *)expr)->dump(); } \ No newline at end of file diff --git a/lib/AST/CMakeLists.txt b/lib/AST/CMakeLists.txt index c33727a5ddb51..21f6e854a0c49 100644 --- a/lib/AST/CMakeLists.txt +++ b/lib/AST/CMakeLists.txt @@ -33,6 +33,7 @@ add_swift_host_library(swiftAST STATIC Availability.cpp AvailabilitySpec.cpp Builtins.cpp + CASTBridging.cpp CaptureInfo.cpp ClangSwiftTypeCorrespondence.cpp ClangTypeConverter.cpp @@ -155,7 +156,7 @@ endif() target_link_libraries(swiftAST PUBLIC swiftBasic - PRIVATE swiftSyntax) + PRIVATE legacySwiftSyntax) if(SWIFT_BUILD_ONLY_SYNTAXPARSERLIB) # Remove dependencies from clangBasic to avoid bringing along some llvm # libraries that we don't need to be building. diff --git a/lib/Frontend/CompilerInvocation.cpp b/lib/Frontend/CompilerInvocation.cpp index 5fbe8ca1bb390..5c02a2c193110 100644 --- a/lib/Frontend/CompilerInvocation.cpp +++ b/lib/Frontend/CompilerInvocation.cpp @@ -863,6 +863,7 @@ static bool ParseLangArgs(LangOptions &Opts, ArgList &Args, } Opts.EnableCXXInterop |= Args.hasArg(OPT_enable_experimental_cxx_interop); + Opts.EnableSwiftParser |= Args.hasArg(OPT_enable_experimental_swift_parser); Opts.EnableObjCInterop = Args.hasFlag(OPT_enable_objc_interop, OPT_disable_objc_interop, Target.isOSDarwin()); diff --git a/lib/Migrator/CMakeLists.txt b/lib/Migrator/CMakeLists.txt index 993933bf090af..91546b02e0694 100644 --- a/lib/Migrator/CMakeLists.txt +++ b/lib/Migrator/CMakeLists.txt @@ -57,7 +57,7 @@ add_swift_host_library(swiftMigrator STATIC RewriteBufferEditsReceiver.cpp) target_link_libraries(swiftMigrator PRIVATE swiftIDE - swiftSyntax) + legacySwiftSyntax) add_dependencies(swiftMigrator "symlink_migrator_data") diff --git a/lib/Parse/CMakeLists.txt b/lib/Parse/CMakeLists.txt index 18ec5e125f30d..7a8234470cfb0 100644 --- a/lib/Parse/CMakeLists.txt +++ b/lib/Parse/CMakeLists.txt @@ -6,6 +6,9 @@ else() set(SWIFT_GYB_FLAGS --line-directive "\'#line" "%(line)d" "\"%(file)s\"\'") endif() +add_subdirectory(${SWIFT_SOURCE_DIR}/../swift-syntax ${CMAKE_CURRENT_BINARY_DIR}/swift-syntax) +add_dependencies(ASTGen swiftAST) + add_swift_host_library(swiftParse STATIC Confusables.cpp Lexer.cpp @@ -32,7 +35,7 @@ _swift_gyb_target_sources(swiftParse PRIVATE ParsedSyntaxRecorder.cpp.gyb) target_link_libraries(swiftParse PRIVATE swiftAST - swiftSyntax + legacySwiftSyntax swiftSyntaxParse ) @@ -67,6 +70,7 @@ if (SWIFT_SWIFT_PARSER) ) endif() +add_dependencies(swiftParse ASTGen) add_dependencies(swiftParse swift-parse-syntax-generated-headers) set_swift_llvm_is_available(swiftParse) diff --git a/lib/Parse/ParseDecl.cpp b/lib/Parse/ParseDecl.cpp index 367222c089168..887bc0c8ef64c 100644 --- a/lib/Parse/ParseDecl.cpp +++ b/lib/Parse/ParseDecl.cpp @@ -160,6 +160,19 @@ namespace { }; } // end anonymous namespace +extern "C" void parseTopLevelSwift(const char *buffer, + void *declContext, + void *astContext, + void *outputContext, + void (*)(void *, void *)); + +static void appendToVector(void *declPtr, void *vecPtr) { + auto vec = static_cast *>(vecPtr); + auto decl = static_cast(declPtr); + + vec->push_back(decl); +} + /// Main entrypoint for the parser. /// /// \verbatim @@ -169,6 +182,22 @@ namespace { /// decl-sil-stage [[only in SIL mode] /// \endverbatim void Parser::parseTopLevel(SmallVectorImpl &decls) { + StringRef contents = + SourceMgr.extractText(SourceMgr.getRangeForBuffer(L->getBufferID())); + + if (Context.LangOpts.EnableSwiftParser) { + parseTopLevelSwift(contents.data(), CurDeclContext, &Context, &decls, appendToVector); + + for (auto decl : decls) { + decl->dump(); + + if (auto fn = dyn_cast(decl)) + fn->getBody()->dump(); + } + + return; + } + // Prime the lexer. if (Tok.is(tok::NUM_TOKENS)) consumeTokenWithoutFeedingReceiver(); diff --git a/lib/Syntax/CMakeLists.txt b/lib/Syntax/CMakeLists.txt index b768bf59e2945..01e8e303fcfcc 100644 --- a/lib/Syntax/CMakeLists.txt +++ b/lib/Syntax/CMakeLists.txt @@ -4,13 +4,13 @@ else() set(SWIFT_GYB_FLAGS --line-directive "\'#line" "%(line)d" "\"%(file)s\"\'") endif() -add_swift_host_library(swiftSyntax STATIC +add_swift_host_library(legacySwiftSyntax STATIC AbsoluteRawSyntax.cpp RawSyntax.cpp Syntax.cpp SyntaxData.cpp UnknownSyntax.cpp) -_swift_gyb_target_sources(swiftSyntax PRIVATE +_swift_gyb_target_sources(legacySwiftSyntax PRIVATE SyntaxNodes.cpp.gyb SyntaxBuilders.cpp.gyb SyntaxKind.cpp.gyb @@ -18,5 +18,5 @@ _swift_gyb_target_sources(swiftSyntax PRIVATE SyntaxVisitor.cpp.gyb Trivia.cpp.gyb SyntaxSerialization.cpp.gyb) -target_link_libraries(swiftSyntax PRIVATE +target_link_libraries(legacySwiftSyntax PRIVATE swiftParse) diff --git a/lib/SyntaxParse/CMakeLists.txt b/lib/SyntaxParse/CMakeLists.txt index dec2fa7a789c6..8cf46591e256b 100644 --- a/lib/SyntaxParse/CMakeLists.txt +++ b/lib/SyntaxParse/CMakeLists.txt @@ -3,6 +3,6 @@ add_swift_host_library(swiftSyntaxParse STATIC SyntaxTreeCreator.cpp) target_link_libraries(swiftSyntaxParse PRIVATE swiftParse - swiftSyntax) + legacySwiftSyntax) set_swift_llvm_is_available(swiftSyntaxParse) diff --git a/tools/SourceKit/lib/SwiftLang/CMakeLists.txt b/tools/SourceKit/lib/SwiftLang/CMakeLists.txt index c0292bf323faa..f28e54f2400ef 100644 --- a/tools/SourceKit/lib/SwiftLang/CMakeLists.txt +++ b/tools/SourceKit/lib/SwiftLang/CMakeLists.txt @@ -41,7 +41,7 @@ target_link_libraries(SourceKitSwiftLang PRIVATE swiftSema swiftBasic swiftSerialization - swiftSyntax + legacySwiftSyntax swiftOption swiftSymbolGraphGen libcmark-gfm_static diff --git a/tools/driver/CMakeLists.txt b/tools/driver/CMakeLists.txt index a5dc3ccb84580..97584977adaff 100644 --- a/tools/driver/CMakeLists.txt +++ b/tools/driver/CMakeLists.txt @@ -49,6 +49,9 @@ add_swift_host_tool(swift-frontend ) target_link_libraries(swift-frontend PUBLIC + ASTGen + SwiftParser + SwiftSyntax swiftDriverTool swiftCompilerModules) diff --git a/tools/swift-syntax-test/CMakeLists.txt b/tools/swift-syntax-test/CMakeLists.txt index 99e242a5d6da0..fe0736f61a141 100644 --- a/tools/swift-syntax-test/CMakeLists.txt +++ b/tools/swift-syntax-test/CMakeLists.txt @@ -11,5 +11,5 @@ target_link_libraries(swift-syntax-test swiftDriver swiftFrontend swiftSema - swiftSyntax + legacySwiftSyntax swiftCompilerModules_SwiftSyntax) From 129fd386f91ccb9b9fd1f150c8666bee3ba41e1e Mon Sep 17 00:00:00 2001 From: zoecarver Date: Wed, 7 Sep 2022 14:49:06 -0700 Subject: [PATCH 02/29] Move ASTGen into Swift from swift-syntax. (cherry picked from commit 2df25fc6e0dd7d63a7f5c5a079b92db0cae87a3a) --- lib/ASTGen/ASTGen.swift | 257 ++++++++++++++++++++++++++++++++++++++ lib/ASTGen/CMakeLists.txt | 27 ++++ lib/CMakeLists.txt | 1 + lib/Parse/CMakeLists.txt | 3 - 4 files changed, 285 insertions(+), 3 deletions(-) create mode 100644 lib/ASTGen/ASTGen.swift create mode 100644 lib/ASTGen/CMakeLists.txt diff --git a/lib/ASTGen/ASTGen.swift b/lib/ASTGen/ASTGen.swift new file mode 100644 index 0000000000000..245ebb6c23b52 --- /dev/null +++ b/lib/ASTGen/ASTGen.swift @@ -0,0 +1,257 @@ +import SwiftParser +import SwiftSyntax + +import CASTBridging + +extension Array { + public func withBridgedArrayRef(_ c: (BridgedArrayRef) -> T) -> T { + withUnsafeBytes { buf in + c(BridgedArrayRef(data: buf.baseAddress!, numElements: count)) + } + } +} + +extension UnsafePointer { + public var raw: UnsafeMutableRawPointer { + UnsafeMutableRawPointer(mutating: self) + } +} + +struct ASTGenVisitor: SyntaxTransformVisitor { + let ctx: UnsafeMutableRawPointer + let base: UnsafePointer + + // TOOD: we need to be up updating this. + var declContext: UnsafeMutableRawPointer + + // TODO: this some how messes up the witness table when I uncomment it locally :/ +// public func visit(_ node: T?) -> [UnsafeMutableRawPointer]? { +// if let node = node { return visit(node) } +// return nil +// } + + @_disfavoredOverload + public func visit(_ node: SourceFileSyntax) -> UnsafeMutableRawPointer { + fatalError("Use other overload.") + } + + public func visitAny(_ node: Syntax) -> ResultType { + fatalError("Not implemented.") + } + + public func visit(_ node: SourceFileSyntax) -> [UnsafeMutableRawPointer] { + let loc = self.base.advanced(by: node.position.utf8Offset).raw + var out = [UnsafeMutableRawPointer]() + + for element in node.statements { + let swiftASTNodes = visit(element) + if element.item.is(StmtSyntax.self) { + out.append(SwiftTopLevelCodeDecl_createStmt(ctx, declContext, loc, swiftASTNodes, loc)) + } else if element.item.is(ExprSyntax.self) { + out.append(SwiftTopLevelCodeDecl_createExpr(ctx, declContext, loc, swiftASTNodes, loc)) + } else { + assert(element.item.is(DeclSyntax.self)) + out.append(swiftASTNodes) + } + } + + return out + } + + public func visit(_ node: FunctionCallExprSyntax) -> UnsafeMutableRawPointer { + let args = visit(node.argumentList) + // TODO: hack + let callee = visit(node.calledExpression) + return SwiftFunctionCallExpr_create(self.ctx, callee, args) + } + + public func visit(_ node: IdentifierExprSyntax) -> UnsafeMutableRawPointer { + let loc = self.base.advanced(by: node.position.utf8Offset).raw + + var text = node.identifier.text + let id = text.withUTF8 { buf in + return SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count) + } + + return SwiftIdentifierExpr_create(ctx, id, loc) + } + + public func visit(_ node: SimpleTypeIdentifierSyntax) -> UnsafeMutableRawPointer { + let loc = self.base.advanced(by: node.position.utf8Offset).raw + + var text = node.name.text + let id = text.withUTF8 { buf in + return SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count) + } + + return SimpleIdentTypeRepr_create(ctx, loc, id) + } + + public func visit(_ node: IdentifierPatternSyntax) -> UnsafeMutableRawPointer { + let loc = self.base.advanced(by: node.position.utf8Offset).raw + + var text = node.identifier.text + let id = text.withUTF8 { buf in + return SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count) + } + + return SwiftIdentifierExpr_create(ctx, id, loc) + } + + public func visit(_ node: MemberAccessExprSyntax) -> UnsafeMutableRawPointer { + let loc = self.base.advanced(by: node.position.utf8Offset).raw + let base = visit(node.base!) + var nameText = node.name.text + let name = nameText.withUTF8 { buf in + return SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count) + } + + return UnresolvedDotExpr_create(ctx, base, loc, name, loc) + } + + public func visit(_ node: TupleExprElementSyntax) -> UnsafeMutableRawPointer { + visit(node.expression) + } + + public func visit(_ node: TupleExprElementListSyntax) -> UnsafeMutableRawPointer { + let elements = node.map(self.visit) + + // TODO: find correct paren locs. + let lParenLoc = self.base.advanced(by: node.position.utf8Offset).raw + let rParenLoc = self.base.advanced(by: node.position.utf8Offset).raw + + return elements.withBridgedArrayRef { elementsRef in + SwiftTupleExpr_create(self.ctx, lParenLoc, elementsRef, rParenLoc) + } + } + + public func visit(_ node: VariableDeclSyntax) -> UnsafeMutableRawPointer { + let pattern = visit(node.bindings.first!.pattern) + let initializer = visit(node.bindings.first!.initializer!) + + let loc = self.base.advanced(by: node.position.utf8Offset).raw + let isStateic = false // TODO: compute this + let isLet = node.letOrVarKeyword.tokenKind == .letKeyword + + // TODO: don't drop "initializer" on the floor. + return SwiftVarDecl_create(ctx, pattern, loc, isStateic, isLet, declContext) + } + + public func visit(_ node: ConditionElementSyntax) -> UnsafeMutableRawPointer { + visit(node.condition) + } + + public func visit(_ node: CodeBlockItemSyntax) -> UnsafeMutableRawPointer { + visit(node.item) + } + + public func visit(_ node: CodeBlockSyntax) -> UnsafeMutableRawPointer { + let statements = node.statements.map(self.visit) + let loc = self.base.advanced(by: node.position.utf8Offset).raw + + return statements.withBridgedArrayRef { ref in + BraceStmt_create(ctx, loc, ref, loc) + } + } + + public func visit(_ node: FunctionParameterSyntax) -> UnsafeMutableRawPointer { + let loc = self.base.advanced(by: node.position.utf8Offset).raw + + let firstName: UnsafeMutableRawPointer? + let secondName: UnsafeMutableRawPointer? + + if let nodeFirstName = node.firstName { + var text = nodeFirstName.text + firstName = text.withUTF8 { buf in + SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count).raw + } + } else { + firstName = nil + } + + if let nodeSecondName = node.secondName { + var text = nodeSecondName.text + secondName = text.withUTF8 { buf in + SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count).raw + } + } else { + secondName = nil + } + + return ParamDecl_create(ctx, loc, loc, firstName, loc, secondName, declContext) + } + + public func visit(_ node: FunctionDeclSyntax) -> UnsafeMutableRawPointer { + let loc = self.base.advanced(by: node.position.utf8Offset).raw + + var nameText = node.identifier.text + let name = nameText.withUTF8 { buf in + return SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count) + } + + let body: UnsafeMutableRawPointer? + if let nodeBody = node.body { + body = visit(nodeBody) + } else { + body = nil + } + + let returnType: UnsafeMutableRawPointer? + if let output = node.signature.output { + returnType = visit(output.returnType) + } else { + returnType = nil + } + + let params = node.signature.input.parameterList.map { visit($0) } + return params.withBridgedArrayRef { ref in + FuncDecl_create(ctx, loc, false, loc, name, loc, false, nil, false, nil, loc, ref, loc, body, returnType, declContext) + } + } + + public func visit(_ node: IfStmtSyntax) -> UnsafeMutableRawPointer { + let conditions = node.conditions.map(self.visit) + assert(conditions.count == 1) // TODO: handle multiple conditions. + + let body = visit(node.body) + let loc = self.base.advanced(by: node.position.utf8Offset).raw + + if let elseBody = node.elseBody, node.elseKeyword != nil { + return IfStmt_create(ctx, loc, conditions.first!, body, loc, visit(elseBody)) + } + + return IfStmt_create(ctx, loc, conditions.first!, body, nil, nil) + } + + public func visit(_ node: StringLiteralExprSyntax) -> UnsafeMutableRawPointer { + let loc = self.base.advanced(by: node.position.utf8Offset).raw + var segment = node.segments.first!.as(StringSegmentSyntax.self)!.content.text + return segment.withUTF8 { buf in + let id = SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count) + return SwiftStringLiteralExpr_create(ctx, id, buf.count, loc) + } + } + + public func visit(_ node: IntegerLiteralExprSyntax) -> UnsafeMutableRawPointer { + let loc = self.base.advanced(by: node.position.utf8Offset).raw + var segment = node.digits.text + return segment.withUTF8 { buf in + let id = SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count) + return SwiftIntegerLiteralExpr_create(ctx, id, buf.count, loc) + } + } +} + +@_cdecl("parseTopLevelSwift") +public func parseTopLevelSwift( + buffer: UnsafePointer, declContext: UnsafeMutableRawPointer, + ctx: UnsafeMutableRawPointer, + outputContext: UnsafeMutableRawPointer, + callback: @convention(c) (UnsafeMutableRawPointer, UnsafeMutableRawPointer) -> Void +) { + let syntax = try! Parser.parse(source: String(cString: buffer)) + dump(syntax) + ASTGenVisitor(ctx: ctx, base: buffer, declContext: declContext) + .visit(syntax) + .forEach { callback($0, outputContext) } +} diff --git a/lib/ASTGen/CMakeLists.txt b/lib/ASTGen/CMakeLists.txt new file mode 100644 index 0000000000000..9c0a476915deb --- /dev/null +++ b/lib/ASTGen/CMakeLists.txt @@ -0,0 +1,27 @@ +add_subdirectory(${SWIFT_SOURCE_DIR}/../swift-syntax ${CMAKE_CURRENT_BINARY_DIR}/swift-syntax) + +add_library(ASTGen + ASTGen.swift) + +target_compile_options(ASTGen PUBLIC + "-emit-module-interface") + +target_link_libraries(ASTGen PUBLIC + SwiftSyntax + SwiftParser + SwiftDiagnostics) + +target_include_directories(SwiftParser PUBLIC + "${CMAKE_CURRENT_BINARY_DIR}/../Parser/swift-syntax/SwiftSyntax" + "${CMAKE_CURRENT_BINARY_DIR}/../Parser/swift-syntax/SwiftDiagnostics" + "${CMAKE_CURRENT_BINARY_DIR}/../Parser/swift-syntax/SwiftParser") + +set_property(GLOBAL APPEND PROPERTY SWIFTSYNTAX_EXPORTS ASTGen) + +install(TARGETS ASTGen + EXPORT SwiftSyntaxTargets + ARCHIVE DESTINATION lib + LIBRARY DESTINATION lib + RUNTIME DESTINATION bin) + +add_dependencies(ASTGen swiftAST) \ No newline at end of file diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 1beafbc44e1bc..3c0b18714cda0 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -19,6 +19,7 @@ list(APPEND LLVM_COMMON_DEPENDS swift-parse-syntax-generated-headers) add_subdirectory(APIDigester) add_subdirectory(AST) +add_subdirectory(ASTGen) # Must come before Parse add_subdirectory(ASTSectionImporter) add_subdirectory(Basic) add_subdirectory(ConstExtract) diff --git a/lib/Parse/CMakeLists.txt b/lib/Parse/CMakeLists.txt index 7a8234470cfb0..9c1fbf5589e64 100644 --- a/lib/Parse/CMakeLists.txt +++ b/lib/Parse/CMakeLists.txt @@ -6,9 +6,6 @@ else() set(SWIFT_GYB_FLAGS --line-directive "\'#line" "%(line)d" "\"%(file)s\"\'") endif() -add_subdirectory(${SWIFT_SOURCE_DIR}/../swift-syntax ${CMAKE_CURRENT_BINARY_DIR}/swift-syntax) -add_dependencies(ASTGen swiftAST) - add_swift_host_library(swiftParse STATIC Confusables.cpp Lexer.cpp From 73a7c0ecc6df3eb3fbddbeec57a2464f30aafec3 Mon Sep 17 00:00:00 2001 From: zoecarver Date: Wed, 7 Sep 2022 15:34:42 -0700 Subject: [PATCH 03/29] Apply Doug's review comments (cherry picked from commit ddede209c72e532e39864dca63bbdbb97362665f) --- include/swift/Basic/Features.def | 3 ++ include/swift/Basic/LangOptions.h | 2 - include/swift/Option/Options.td | 1 - lib/AST/ASTPrinter.cpp | 4 ++ lib/AST/CMakeLists.txt | 2 +- lib/ASTGen/CMakeLists.txt | 42 ++++++++++---------- lib/ASTGen/DummyASTGen.swift | 9 +++++ lib/CMakeLists.txt | 2 +- lib/Frontend/CompilerInvocation.cpp | 1 - lib/Migrator/CMakeLists.txt | 2 +- lib/Parse/CMakeLists.txt | 2 +- lib/Parse/ParseDecl.cpp | 2 +- lib/Syntax/CMakeLists.txt | 6 +-- lib/SyntaxParse/CMakeLists.txt | 2 +- tools/SourceKit/lib/SwiftLang/CMakeLists.txt | 2 +- tools/driver/CMakeLists.txt | 9 ++++- tools/swift-syntax-test/CMakeLists.txt | 2 +- 17 files changed, 56 insertions(+), 37 deletions(-) create mode 100644 lib/ASTGen/DummyASTGen.swift diff --git a/include/swift/Basic/Features.def b/include/swift/Basic/Features.def index 37d03256a8e49..baeb3692ec4ae 100644 --- a/include/swift/Basic/Features.def +++ b/include/swift/Basic/Features.def @@ -141,6 +141,9 @@ EXPERIMENTAL_FEATURE(ParserSequenceFolding) /// Enables implicit some while also enabling existential `any` EXPERIMENTAL_FEATURE(ImplicitSome) +/// Parse using the Swift (swift-syntax) parser and use ASTGen. +EXPERIMENTAL_FEATURE(SwiftParser) + #undef EXPERIMENTAL_FEATURE #undef UPCOMING_FEATURE #undef SUPPRESSIBLE_LANGUAGE_FEATURE diff --git a/include/swift/Basic/LangOptions.h b/include/swift/Basic/LangOptions.h index 0636e55fd4a1f..e81db66d70de2 100644 --- a/include/swift/Basic/LangOptions.h +++ b/include/swift/Basic/LangOptions.h @@ -275,8 +275,6 @@ namespace swift { /// disabled because it is not complete. bool EnableCXXInterop = false; - bool EnableSwiftParser = false; - /// Imports getters and setters as computed properties. bool CxxInteropGettersSettersAsProperties = false; diff --git a/include/swift/Option/Options.td b/include/swift/Option/Options.td index 7b1b49aeda2fa..08d6dae0399d2 100644 --- a/include/swift/Option/Options.td +++ b/include/swift/Option/Options.td @@ -640,7 +640,6 @@ def enable_experimental_swift_parser : Flags<[FrontendOption, HelpHidden, ModuleInterfaceOption]>, HelpText<"Enable the new and expiremental Swift parser + AST generation.">; - def experimental_cxx_stdlib : Separate<["-"], "experimental-cxx-stdlib">, Flags<[HelpHidden]>, diff --git a/lib/AST/ASTPrinter.cpp b/lib/AST/ASTPrinter.cpp index b18a5979d468b..5dd33b05b6d26 100644 --- a/lib/AST/ASTPrinter.cpp +++ b/lib/AST/ASTPrinter.cpp @@ -3091,6 +3091,10 @@ static bool usesFeatureAdditiveArithmeticDerivedConformances(Decl *decl) { return false; } +static bool usesFeatureSwiftParser(Decl *decl) { + return false; +} + static void suppressingFeatureNoAsyncAvailability(PrintOptions &options, llvm::function_ref action) { diff --git a/lib/AST/CMakeLists.txt b/lib/AST/CMakeLists.txt index 21f6e854a0c49..aaf1fe9579c8e 100644 --- a/lib/AST/CMakeLists.txt +++ b/lib/AST/CMakeLists.txt @@ -156,7 +156,7 @@ endif() target_link_libraries(swiftAST PUBLIC swiftBasic - PRIVATE legacySwiftSyntax) + PRIVATE swiftSyntax) if(SWIFT_BUILD_ONLY_SYNTAXPARSERLIB) # Remove dependencies from clangBasic to avoid bringing along some llvm # libraries that we don't need to be building. diff --git a/lib/ASTGen/CMakeLists.txt b/lib/ASTGen/CMakeLists.txt index 9c0a476915deb..54864fb9e2318 100644 --- a/lib/ASTGen/CMakeLists.txt +++ b/lib/ASTGen/CMakeLists.txt @@ -1,27 +1,29 @@ -add_subdirectory(${SWIFT_SOURCE_DIR}/../swift-syntax ${CMAKE_CURRENT_BINARY_DIR}/swift-syntax) +# TODO: why do we need these on Linux? +set(CMAKE_Swift_ARCHIVE_CREATE " crs ") +set(CMAKE_Swift_ARCHIVE_FINISH "") -add_library(ASTGen - ASTGen.swift) +if (SWIFT_SWIFT_PARSER) + add_library(ASTGen + ASTGen.swift) -target_compile_options(ASTGen PUBLIC - "-emit-module-interface") + target_link_libraries(ASTGen PUBLIC + SwiftSyntax + SwiftParser + SwiftDiagnostics) + + target_link_directories(ASTGen PUBLIC + "${SWIFT_PATH_TO_EARLYSWIFTSYNTAX_BUILD_DIR}/lib") -target_link_libraries(ASTGen PUBLIC - SwiftSyntax - SwiftParser - SwiftDiagnostics) - -target_include_directories(SwiftParser PUBLIC - "${CMAKE_CURRENT_BINARY_DIR}/../Parser/swift-syntax/SwiftSyntax" - "${CMAKE_CURRENT_BINARY_DIR}/../Parser/swift-syntax/SwiftDiagnostics" - "${CMAKE_CURRENT_BINARY_DIR}/../Parser/swift-syntax/SwiftParser") + target_include_directories(ASTGen PUBLIC + "${SWIFT_PATH_TO_EARLYSWIFTSYNTAX_BUILD_DIR}/swift") +else() + add_library(ASTGen + DummyASTGen.swift) +endif() -set_property(GLOBAL APPEND PROPERTY SWIFTSYNTAX_EXPORTS ASTGen) +set_target_properties(ASTGen PROPERTIES LINKER_LANGUAGE Swift) -install(TARGETS ASTGen - EXPORT SwiftSyntaxTargets - ARCHIVE DESTINATION lib - LIBRARY DESTINATION lib - RUNTIME DESTINATION bin) +target_compile_options(ASTGen PUBLIC + "-emit-module-interface") add_dependencies(ASTGen swiftAST) \ No newline at end of file diff --git a/lib/ASTGen/DummyASTGen.swift b/lib/ASTGen/DummyASTGen.swift new file mode 100644 index 0000000000000..5c5b8ec4fdfd8 --- /dev/null +++ b/lib/ASTGen/DummyASTGen.swift @@ -0,0 +1,9 @@ +@_cdecl("parseTopLevelSwift") +public func parseTopLevelSwift( + buffer: UnsafePointer, declContext: UnsafeMutableRawPointer, + ctx: UnsafeMutableRawPointer, + outputContext: UnsafeMutableRawPointer, + callback: @convention(c) (UnsafeMutableRawPointer, UnsafeMutableRawPointer) -> Void +) { + fatalError("Please run build script with --early-swiftsyntax to use ASTGen.") +} \ No newline at end of file diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 3c0b18714cda0..3b508b4662d8d 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -19,7 +19,7 @@ list(APPEND LLVM_COMMON_DEPENDS swift-parse-syntax-generated-headers) add_subdirectory(APIDigester) add_subdirectory(AST) -add_subdirectory(ASTGen) # Must come before Parse +add_subdirectory(ASTGen) add_subdirectory(ASTSectionImporter) add_subdirectory(Basic) add_subdirectory(ConstExtract) diff --git a/lib/Frontend/CompilerInvocation.cpp b/lib/Frontend/CompilerInvocation.cpp index 5c02a2c193110..5fbe8ca1bb390 100644 --- a/lib/Frontend/CompilerInvocation.cpp +++ b/lib/Frontend/CompilerInvocation.cpp @@ -863,7 +863,6 @@ static bool ParseLangArgs(LangOptions &Opts, ArgList &Args, } Opts.EnableCXXInterop |= Args.hasArg(OPT_enable_experimental_cxx_interop); - Opts.EnableSwiftParser |= Args.hasArg(OPT_enable_experimental_swift_parser); Opts.EnableObjCInterop = Args.hasFlag(OPT_enable_objc_interop, OPT_disable_objc_interop, Target.isOSDarwin()); diff --git a/lib/Migrator/CMakeLists.txt b/lib/Migrator/CMakeLists.txt index 91546b02e0694..993933bf090af 100644 --- a/lib/Migrator/CMakeLists.txt +++ b/lib/Migrator/CMakeLists.txt @@ -57,7 +57,7 @@ add_swift_host_library(swiftMigrator STATIC RewriteBufferEditsReceiver.cpp) target_link_libraries(swiftMigrator PRIVATE swiftIDE - legacySwiftSyntax) + swiftSyntax) add_dependencies(swiftMigrator "symlink_migrator_data") diff --git a/lib/Parse/CMakeLists.txt b/lib/Parse/CMakeLists.txt index 9c1fbf5589e64..4f17d2685a0d3 100644 --- a/lib/Parse/CMakeLists.txt +++ b/lib/Parse/CMakeLists.txt @@ -32,7 +32,7 @@ _swift_gyb_target_sources(swiftParse PRIVATE ParsedSyntaxRecorder.cpp.gyb) target_link_libraries(swiftParse PRIVATE swiftAST - legacySwiftSyntax + swiftSyntax swiftSyntaxParse ) diff --git a/lib/Parse/ParseDecl.cpp b/lib/Parse/ParseDecl.cpp index 887bc0c8ef64c..8d5cb290e9b25 100644 --- a/lib/Parse/ParseDecl.cpp +++ b/lib/Parse/ParseDecl.cpp @@ -185,7 +185,7 @@ void Parser::parseTopLevel(SmallVectorImpl &decls) { StringRef contents = SourceMgr.extractText(SourceMgr.getRangeForBuffer(L->getBufferID())); - if (Context.LangOpts.EnableSwiftParser) { + if (Context.LangOpts.hasFeature(Feature::SwiftParser)) { parseTopLevelSwift(contents.data(), CurDeclContext, &Context, &decls, appendToVector); for (auto decl : decls) { diff --git a/lib/Syntax/CMakeLists.txt b/lib/Syntax/CMakeLists.txt index 01e8e303fcfcc..b768bf59e2945 100644 --- a/lib/Syntax/CMakeLists.txt +++ b/lib/Syntax/CMakeLists.txt @@ -4,13 +4,13 @@ else() set(SWIFT_GYB_FLAGS --line-directive "\'#line" "%(line)d" "\"%(file)s\"\'") endif() -add_swift_host_library(legacySwiftSyntax STATIC +add_swift_host_library(swiftSyntax STATIC AbsoluteRawSyntax.cpp RawSyntax.cpp Syntax.cpp SyntaxData.cpp UnknownSyntax.cpp) -_swift_gyb_target_sources(legacySwiftSyntax PRIVATE +_swift_gyb_target_sources(swiftSyntax PRIVATE SyntaxNodes.cpp.gyb SyntaxBuilders.cpp.gyb SyntaxKind.cpp.gyb @@ -18,5 +18,5 @@ _swift_gyb_target_sources(legacySwiftSyntax PRIVATE SyntaxVisitor.cpp.gyb Trivia.cpp.gyb SyntaxSerialization.cpp.gyb) -target_link_libraries(legacySwiftSyntax PRIVATE +target_link_libraries(swiftSyntax PRIVATE swiftParse) diff --git a/lib/SyntaxParse/CMakeLists.txt b/lib/SyntaxParse/CMakeLists.txt index 8cf46591e256b..dec2fa7a789c6 100644 --- a/lib/SyntaxParse/CMakeLists.txt +++ b/lib/SyntaxParse/CMakeLists.txt @@ -3,6 +3,6 @@ add_swift_host_library(swiftSyntaxParse STATIC SyntaxTreeCreator.cpp) target_link_libraries(swiftSyntaxParse PRIVATE swiftParse - legacySwiftSyntax) + swiftSyntax) set_swift_llvm_is_available(swiftSyntaxParse) diff --git a/tools/SourceKit/lib/SwiftLang/CMakeLists.txt b/tools/SourceKit/lib/SwiftLang/CMakeLists.txt index f28e54f2400ef..c0292bf323faa 100644 --- a/tools/SourceKit/lib/SwiftLang/CMakeLists.txt +++ b/tools/SourceKit/lib/SwiftLang/CMakeLists.txt @@ -41,7 +41,7 @@ target_link_libraries(SourceKitSwiftLang PRIVATE swiftSema swiftBasic swiftSerialization - legacySwiftSyntax + swiftSyntax swiftOption swiftSymbolGraphGen libcmark-gfm_static diff --git a/tools/driver/CMakeLists.txt b/tools/driver/CMakeLists.txt index 97584977adaff..253ecb0632881 100644 --- a/tools/driver/CMakeLists.txt +++ b/tools/driver/CMakeLists.txt @@ -14,6 +14,8 @@ if(${BOOTSTRAPPING_MODE} MATCHES "BOOTSTRAPPING.*") ) target_link_libraries(swift-frontend-bootstrapping0 PRIVATE + ASTGen + swiftCore swiftDriverTool swiftCompilerStub) @@ -33,6 +35,8 @@ if(${BOOTSTRAPPING_MODE} MATCHES "BOOTSTRAPPING.*") ) target_link_libraries(swift-frontend-bootstrapping1 PRIVATE + ASTGen + swiftCore swiftDriverTool swiftCompilerModules-bootstrapping1) @@ -50,11 +54,12 @@ add_swift_host_tool(swift-frontend target_link_libraries(swift-frontend PUBLIC ASTGen - SwiftParser - SwiftSyntax + swiftCore swiftDriverTool swiftCompilerModules) +_add_swift_runtime_link_flags(swift-frontend "../../lib" "") + # Create a `swift-driver` executable adjacent to the `swift-frontend` executable # to ensure that `swiftc` forwards to the standalone driver when invoked. swift_create_early_driver_copies(swift-frontend) diff --git a/tools/swift-syntax-test/CMakeLists.txt b/tools/swift-syntax-test/CMakeLists.txt index fe0736f61a141..99e242a5d6da0 100644 --- a/tools/swift-syntax-test/CMakeLists.txt +++ b/tools/swift-syntax-test/CMakeLists.txt @@ -11,5 +11,5 @@ target_link_libraries(swift-syntax-test swiftDriver swiftFrontend swiftSema - legacySwiftSyntax + swiftSyntax swiftCompilerModules_SwiftSyntax) From bed2742ba8677905cb06762af470a46dffd88c5d Mon Sep 17 00:00:00 2001 From: zoecarver Date: Sat, 10 Sep 2022 17:01:26 -0700 Subject: [PATCH 04/29] Make ASTGen a swift package (cherry picked from commit 4e9e5fe6a83d155b269e21ee7410f758cca14004) --- include/swift/AST/CASTBridging.h | 2 ++ lib/AST/CASTBridging.cpp | 16 ++++++++++++ .../contents.xcworkspacedata | 7 ++++++ .../UserInterfaceState.xcuserstate | Bin 0 -> 19876 bytes lib/ASTGen/CMakeLists.txt | 7 +++--- lib/ASTGen/Package.resolved | 14 +++++++++++ lib/ASTGen/Package.swift | 18 ++++++++++++++ lib/ASTGen/{ => Sources/ASTGen}/ASTGen.swift | 23 ++++++++++++++++++ .../{ => Sources/ASTGen}/DummyASTGen.swift | 0 9 files changed, 84 insertions(+), 3 deletions(-) create mode 100644 lib/ASTGen/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata create mode 100644 lib/ASTGen/.swiftpm/xcode/package.xcworkspace/xcuserdata/zoecarver.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 lib/ASTGen/Package.resolved create mode 100644 lib/ASTGen/Package.swift rename lib/ASTGen/{ => Sources/ASTGen}/ASTGen.swift (91%) rename lib/ASTGen/{ => Sources/ASTGen}/DummyASTGen.swift (100%) diff --git a/include/swift/AST/CASTBridging.h b/include/swift/AST/CASTBridging.h index 0075ea2dfa17d..803a5e2b2b482 100644 --- a/include/swift/AST/CASTBridging.h +++ b/include/swift/AST/CASTBridging.h @@ -126,6 +126,8 @@ void *SimpleIdentTypeRepr_create(void *ctx, void *loc, const char *id); void *UnresolvedDotExpr_create(void *ctx, void *base, void *dotLoc, const char *name, void *nameLoc); +void *ClosureExpr_create(void *ctx, void *body, void *dc); + void TopLevelCodeDecl_dump(void *); void Expr_dump(void *); void Decl_dump(void *); diff --git a/lib/AST/CASTBridging.cpp b/lib/AST/CASTBridging.cpp index f39a6a15cabb7..032558132a44f 100644 --- a/lib/AST/CASTBridging.cpp +++ b/lib/AST/CASTBridging.cpp @@ -195,6 +195,22 @@ void *UnresolvedDotExpr_create(void *ctx, void *base, void *dotLoc, const char * DeclNameLoc(*(SourceLoc *)&nameLoc), false); } +void *ClosureExpr_create(void *ctx, void *body, void *dc) { + DeclAttributes attributes; + SourceRange bracketRange; + SourceLoc asyncLoc; + SourceLoc throwsLoc; + SourceLoc arrowLoc; + SourceLoc inLoc; + + ASTContext &Context = *static_cast(ctx); + auto *out = new (Context) ClosureExpr(attributes, bracketRange, nullptr, + nullptr, asyncLoc, throwsLoc, arrowLoc, + inLoc, nullptr, 0, (DeclContext *)dc); + out->setBody((BraceStmt *)body, true); + return (Expr *)out; +} + void TopLevelCodeDecl_dump(void *decl) { ((TopLevelCodeDecl *)decl)->dump(); } void Expr_dump(void *expr) { ((Expr *)expr)->dump(); } diff --git a/lib/ASTGen/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata b/lib/ASTGen/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000000000..919434a6254f0 --- /dev/null +++ b/lib/ASTGen/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/lib/ASTGen/.swiftpm/xcode/package.xcworkspace/xcuserdata/zoecarver.xcuserdatad/UserInterfaceState.xcuserstate b/lib/ASTGen/.swiftpm/xcode/package.xcworkspace/xcuserdata/zoecarver.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..cd6fef292ec7c0ca56f70ee9d139a19da4ad1d1f GIT binary patch literal 19876 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 VJ9@;(oT9|v?C0Wd>D{sS{{h?KOCA6K literal 0 HcmV?d00001 diff --git a/lib/ASTGen/CMakeLists.txt b/lib/ASTGen/CMakeLists.txt index 54864fb9e2318..225db1203b1d6 100644 --- a/lib/ASTGen/CMakeLists.txt +++ b/lib/ASTGen/CMakeLists.txt @@ -4,7 +4,7 @@ set(CMAKE_Swift_ARCHIVE_FINISH "") if (SWIFT_SWIFT_PARSER) add_library(ASTGen - ASTGen.swift) + Sources/ASTGen/ASTGen.swift) target_link_libraries(ASTGen PUBLIC SwiftSyntax @@ -18,12 +18,13 @@ if (SWIFT_SWIFT_PARSER) "${SWIFT_PATH_TO_EARLYSWIFTSYNTAX_BUILD_DIR}/swift") else() add_library(ASTGen - DummyASTGen.swift) + Sources/ASTGen/DummyASTGen.swift) endif() set_target_properties(ASTGen PROPERTIES LINKER_LANGUAGE Swift) target_compile_options(ASTGen PUBLIC - "-emit-module-interface") + "-emit-module-interface" + "-g") add_dependencies(ASTGen swiftAST) \ No newline at end of file diff --git a/lib/ASTGen/Package.resolved b/lib/ASTGen/Package.resolved new file mode 100644 index 0000000000000..b618ff25ef11c --- /dev/null +++ b/lib/ASTGen/Package.resolved @@ -0,0 +1,14 @@ +{ + "pins" : [ + { + "identity" : "swift-argument-parser", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-argument-parser.git", + "state" : { + "revision" : "e394bf350e38cb100b6bc4172834770ede1b7232", + "version" : "1.0.3" + } + } + ], + "version" : 2 +} diff --git a/lib/ASTGen/Package.swift b/lib/ASTGen/Package.swift new file mode 100644 index 0000000000000..0c513936f9504 --- /dev/null +++ b/lib/ASTGen/Package.swift @@ -0,0 +1,18 @@ +// swift-tools-version: 5.6 + +import PackageDescription + +let package = Package( + name: "ASTGen", + products: [ + .library(name: "ASTGen", targets: ["ASTGen"]), + ], + dependencies: [ + .package(path: "../../../swift-syntax"), + ], + targets: [ + .target( + name: "ASTGen", + dependencies: ["SwiftSyntax"]), + ] +) diff --git a/lib/ASTGen/ASTGen.swift b/lib/ASTGen/Sources/ASTGen/ASTGen.swift similarity index 91% rename from lib/ASTGen/ASTGen.swift rename to lib/ASTGen/Sources/ASTGen/ASTGen.swift index 245ebb6c23b52..aee2add373982 100644 --- a/lib/ASTGen/ASTGen.swift +++ b/lib/ASTGen/Sources/ASTGen/ASTGen.swift @@ -57,11 +57,30 @@ struct ASTGenVisitor: SyntaxTransformVisitor { return out } + + public func visit(_ node: ClosureExprSyntax) -> UnsafeMutableRawPointer { + let statements = node.statements.map(self.visit) + let loc = self.base.advanced(by: node.position.utf8Offset).raw + + let body = statements.withBridgedArrayRef { ref in + BraceStmt_create(ctx, loc, ref, loc) + } + + return ClosureExpr_create(ctx, body, declContext) + } public func visit(_ node: FunctionCallExprSyntax) -> UnsafeMutableRawPointer { + // Transform the trailing closure into an argument. + if let trailingClosure = node.trailingClosure { + let tupleElement = TupleExprElementSyntax(label: nil, colon: nil, expression: ExprSyntax(trailingClosure), trailingComma: nil) + + return visit(node.addArgument(tupleElement).withTrailingClosure(nil)) + } + let args = visit(node.argumentList) // TODO: hack let callee = visit(node.calledExpression) + return SwiftFunctionCallExpr_create(self.ctx, callee, args) } @@ -125,6 +144,10 @@ struct ASTGenVisitor: SyntaxTransformVisitor { } } + public func visit(_ node: InitializerClauseSyntax) -> UnsafeMutableRawPointer { + visit(node.value) + } + public func visit(_ node: VariableDeclSyntax) -> UnsafeMutableRawPointer { let pattern = visit(node.bindings.first!.pattern) let initializer = visit(node.bindings.first!.initializer!) diff --git a/lib/ASTGen/DummyASTGen.swift b/lib/ASTGen/Sources/ASTGen/DummyASTGen.swift similarity index 100% rename from lib/ASTGen/DummyASTGen.swift rename to lib/ASTGen/Sources/ASTGen/DummyASTGen.swift From f7d501d770bc9ecc36b5ab89a3b3d933845f0d26 Mon Sep 17 00:00:00 2001 From: zoecarver Date: Sat, 10 Sep 2022 17:35:28 -0700 Subject: [PATCH 05/29] Add support for structs/classes. (cherry picked from commit 1b1944ea4840cd8b4b01921501c09f6db3e57fcf) --- include/swift/AST/CASTBridging.h | 15 ++++- lib/AST/CASTBridging.cpp | 30 ++++++++++ lib/AST/DeclContext.cpp | 2 +- .../UserInterfaceState.xcuserstate | Bin 19876 -> 19877 bytes lib/ASTGen/Sources/ASTGen/ASTGen.swift | 52 +++++++++++++++++- 5 files changed, 94 insertions(+), 5 deletions(-) diff --git a/include/swift/AST/CASTBridging.h b/include/swift/AST/CASTBridging.h index 803a5e2b2b482..6423647159926 100644 --- a/include/swift/AST/CASTBridging.h +++ b/include/swift/AST/CASTBridging.h @@ -128,7 +128,20 @@ void *UnresolvedDotExpr_create(void *ctx, void *base, void *dotLoc, const char * void *ClosureExpr_create(void *ctx, void *body, void *dc); - void TopLevelCodeDecl_dump(void *); +void NominalTypeDecl_setMembers(void *decl, BridgedArrayRef members); + +struct DeclContextAndDecl { + void *declContext; + void *nominalDecl; + void *decl; +}; + +struct DeclContextAndDecl StructDecl_create(void *ctx, void *loc, const char *name, void *nameLoc, + void *dc); +struct DeclContextAndDecl ClassDecl_create(void *ctx, void *loc, const char *name, void *nameLoc, + void *dc); + +void TopLevelCodeDecl_dump(void *); void Expr_dump(void *); void Decl_dump(void *); void Stmt_dump(void *); diff --git a/lib/AST/CASTBridging.cpp b/lib/AST/CASTBridging.cpp index 032558132a44f..dca80c6bf4320 100644 --- a/lib/AST/CASTBridging.cpp +++ b/lib/AST/CASTBridging.cpp @@ -211,6 +211,36 @@ void *ClosureExpr_create(void *ctx, void *body, void *dc) { return (Expr *)out; } +void NominalTypeDecl_setMembers(void *decl, BridgedArrayRef members) { + auto declMembers = getArrayRef(members); + for (auto m : declMembers) + ((NominalTypeDecl *)decl)->addMember(m); +} + +DeclContextAndDecl StructDecl_create(void *ctx, void *loc, const char *name, void *nameLoc, + void *dc) { + ASTContext &Context = *static_cast(ctx); + auto *out = new (Context) StructDecl(SourceLoc(), // *(SourceLoc *)&loc, + Identifier::getFromOpaquePointer((void *)name), + SourceLoc(), // *(SourceLoc *)&nameLoc, + {}, nullptr, + (DeclContext *)dc); + out->setImplicit(); // TODO: remove this. + return {(DeclContext *)out, (NominalTypeDecl *)out, (Decl *)out}; +} + +DeclContextAndDecl ClassDecl_create(void *ctx, void *loc, const char *name, void *nameLoc, + void *dc) { + ASTContext &Context = *static_cast(ctx); + auto *out = new (Context) ClassDecl(SourceLoc(), // *(SourceLoc *)&loc, + Identifier::getFromOpaquePointer((void *)name), + SourceLoc(), // *(SourceLoc *)&nameLoc, + {}, nullptr, + (DeclContext *)dc, false); + out->setImplicit(); // TODO: remove this. + return {(DeclContext *)out, (NominalTypeDecl *)out, (Decl *)out}; +} + void TopLevelCodeDecl_dump(void *decl) { ((TopLevelCodeDecl *)decl)->dump(); } void Expr_dump(void *expr) { ((Expr *)expr)->dump(); } diff --git a/lib/AST/DeclContext.cpp b/lib/AST/DeclContext.cpp index 758b60ceefabd..697b949c2c178 100644 --- a/lib/AST/DeclContext.cpp +++ b/lib/AST/DeclContext.cpp @@ -882,7 +882,7 @@ void IterableDeclContext::addMember(Decl *member, Decl *hint, bool insertAtHead) void IterableDeclContext::addMemberSilently(Decl *member, Decl *hint, bool insertAtHead) const { - assert(!isa(member) && "Accessors should not be added here"); +// assert(!isa(member) && "Accessors should not be added here"); assert(!member->NextDecl && "Already added to a container"); #ifndef NDEBUG diff --git a/lib/ASTGen/.swiftpm/xcode/package.xcworkspace/xcuserdata/zoecarver.xcuserdatad/UserInterfaceState.xcuserstate b/lib/ASTGen/.swiftpm/xcode/package.xcworkspace/xcuserdata/zoecarver.xcuserdatad/UserInterfaceState.xcuserstate index cd6fef292ec7c0ca56f70ee9d139a19da4ad1d1f..f35d6cf4c2a5a06d0fa43aed6bd8d5c13412b14e 100644 GIT binary patch delta 3720 zcmZXX3wR9Y8prqB_e-QM6_ngigt_e`yOYUecJ?y6Ly8~~5tsn~8Lo9TKZqO5YK_bw=01rtZKnkS66EFz!U?hx!(eNY` z!4#MZ#V`$K!Yr5rIuKY0FTzXkGOUCuSPkpo4cGxYVHbp8H|&9TVK4j(4nRGehA-h9 zd<_@iBK!b-8sI)Wz!r?K6$8dN0!QLjI10DLo$zD0EAEDS;GV_>Yv<|x@Bo~JhvIBJ z3=hXo;xTwEuE4YL9Q+iXi=W2N;CXmHUVxv)3-Jqh8D4=6yb^E4+wgY$H@pMy#Jg|^ z@5X!ZyLcb|0Dp=ayO|cj(uROe((h=sCsZ#T87xi#4WD)6fH>p6Zi*TW{3w>i2d11X_hw zn+t0o9<9}H=)da=qN5%fp*uWo8vmo;(ie==a&iY0mga@`3Y0}di%V|=rpuqk2i;7xae#`Oz`ydAYfTb1TvVlV;B-EUg$4m^7iHI8eF)2115m zFs|gmkZs{M!Vt)WEEr0Vl^`Gp6BMx#hQV+IkV{Y`L2dLxf*v#OF#h;4P!L`+7RJGN z$S0^3K~V%fLQrdC1iPZcbeLh`YM_Lmwlz>nP&!(UxVQ0E%+6cp-wesqU^fzt9oNn!uul8VBz%)sQr6Yv^TTiT=Brj)CUuQ)a? zrdhJrVa=GVoQ%@Rg>$nfR7|afwMJK)&HE<2ZQPk>I zg1Qs*I6*z$HnBHD9c+QEuno3{>3bTBZTn;1gZC|5Em{ow^yLKgs)c{Reu5H>QM_F6 z0el+X{h)OyT7=HR$8ZQfA*i>0L|>|}C5R%3A;@(23=YE)I0~P`F*r_;nRS(*;RH=0 zsEnY+1Xb(&33Skm>q8Vo|Ate#MSp>yKE}^{pv_m!FLZwNY$KRF-Z+$$*yh`28=D_p z-ek*3?iqEd*=955CoiA)Bm8RN>fkb5fvfNnT!ZUy1Ac~I;3h#y1SJz>C&)pNKu`)n zB0;GHNd%?U!Ecttrn?+&BQUdc$704Ho0S^AdlRIXsWFr0GV68(>i7t%sKKoXa_V}0 zxIS?^u;y7$-?jgu)L<=#&?xe1m76`vEBT^2ek4nk~t7~R}zPz(A%RIw3f;6dR*&|rdwG|xtym=K?X^O_?X z5soN39MPzzh=v(iV)yuQcxpI+@i-qB;0bslo`fgkLR^HW7%zwkrs8AkaB&N2v$A+r z7r+#F^sZDG`# zdNx5bn-GJ0!-($@6lg(w-$V@e@c-@OEqDj;il<@Nf zHy?gBJE14kQ9X!Im(VHS7Q`Jwi{KOZIO3Uz`4RKrpuSc=Viv!?)GYs|KCqP_Gv@7P za|qRGzeNN^N}~Ew1E>sYFqKUWr*f%0s*nm$bE!(IirPl~i#kJnMSV?uLtUW0qb^a` zsYdE9b)UA-RvOchbQIm0j-lh|1iBl|(L9|@J7|^m)0y;8dKjHU7tk~406mK?r=Ovh z&@a%->6hp#x|ZHZZ=&C!zX;No>3d8ErZ*!qLzn_)A~TsOVv3pR%nW7@6J%C1>zRGb zappYJz+7RjF+VfEGIyB!EMkF;WTV&)EX$^{Dm$3XWk<44vg6nSwwRsH&R_%VEVi6| zmEF#M!Cqx=v5o9K&cXo~!NqaCIGW?QB+kwSJzPKT32p$F!DVwf+z4(I_arxoE8(8z zbZ#NHn0uakiL2yRa8+D2SHsnDd%1nwe(nHwko$-`!~MYhX=`h1Z;Q3{wy`$JHpn*8 zR%9!-mDmEdGTUt1T-!X`GTV!`S8OY6Rkl^OHMTcw>uq~&CvBH)jeHEx2KjV;7@xYj>{3O1JpUSV`-{iORJNXd5hu_QZY-95GKEEshbVi2-rG_^P;4 ztQKDv*NN-J4dNzov$$3KoA{AbhEFKk)iS^=1@w9kWJSUzPgN>v2l75t~NIyx}rJtpn(r?lq(ru|xx|lLyGza*muQkCG?I)8rDlRGul9$rUn@pO=@)%jHVhkgMcsd6OKHKamg1 zpUYp!C*?2YujKRc1^IiqLB1p3cUqiQCw4|UqnvG=?VQohj?TxNf-~D$;e5@x&v`+? zN}|$N$ycT-)0I+Xrt-A1PV^#FDfr9uPQ5*8fBC6jnYb7*M8SU zcPqEeJ;+_`e%}3xdxg8oUF}})-t6A$-tOM%4!QTZ_qq?b4+h=G+$Y_q-Dln3xG%ad zxf|SnxNmzRJn^1xo*te=59MJ!yvOcI@kk!0C)1Pd8ScsTsPB^^8dCSD@2S_- zM)j_G--mo@zJ9*`z6{?GUzRW1SK@oxH{TcZE%ZI-TjHzq8NSzit9;vh2YjFTj{1)I zj{8pdPW!&~-S$23$NH1~Zolf+g8p=WfB!)L2>)1rzJH>>&|l&Y_{;pW{ZIK<`H%bm z)FQQ3T9npWi_v1WI4wbAG*;s@UXwJZ=F&V`hBidY(uQfdTAr4#P1Gi9MOr|csg-H- qv`TG-woguH?>;rE$tm`OYv!P|yw*439c#pUM delta 3709 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 Z`Z|51zDcjB`(Lr!Yd_6JSuIfI{{bN`jKTl_ diff --git a/lib/ASTGen/Sources/ASTGen/ASTGen.swift b/lib/ASTGen/Sources/ASTGen/ASTGen.swift index aee2add373982..c6ca51b656c7f 100644 --- a/lib/ASTGen/Sources/ASTGen/ASTGen.swift +++ b/lib/ASTGen/Sources/ASTGen/ASTGen.swift @@ -17,12 +17,15 @@ extension UnsafePointer { } } +// TODO: :( +var declContext: UnsafeMutableRawPointer! = nil + struct ASTGenVisitor: SyntaxTransformVisitor { let ctx: UnsafeMutableRawPointer let base: UnsafePointer // TOOD: we need to be up updating this. - var declContext: UnsafeMutableRawPointer +// var declContext: UnsafeMutableRawPointer // TODO: this some how messes up the witness table when I uncomment it locally :/ // public func visit(_ node: T?) -> [UnsafeMutableRawPointer]? { @@ -58,6 +61,48 @@ struct ASTGenVisitor: SyntaxTransformVisitor { return out } + public func visit(_ node: MemberDeclListItemSyntax) -> UnsafeMutableRawPointer { + visit(Syntax(node.decl)) + } + + public func visit(_ node: StructDeclSyntax) -> UnsafeMutableRawPointer { + let loc = self.base.advanced(by: node.position.utf8Offset).raw + var nameText = node.identifier.text + let name = nameText.withUTF8 { buf in + return SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count) + } + + let out = StructDecl_create(ctx, loc, name, loc, declContext) + let oldDeclContext = declContext + declContext = out.declContext + defer { declContext = oldDeclContext } + + node.members.members.map(self.visit).withBridgedArrayRef { ref in + NominalTypeDecl_setMembers(out.nominalDecl, ref) + } + + return out.decl + } + + public func visit(_ node: ClassDeclSyntax) -> UnsafeMutableRawPointer { + let loc = self.base.advanced(by: node.position.utf8Offset).raw + var nameText = node.identifier.text + let name = nameText.withUTF8 { buf in + return SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count) + } + + let out = ClassDecl_create(ctx, loc, name, loc, declContext) + let oldDeclContext = declContext + declContext = out.declContext + defer { declContext = oldDeclContext } + + node.members.members.map(self.visit).withBridgedArrayRef { ref in + NominalTypeDecl_setMembers(out.nominalDecl, ref) + } + + return out.decl + } + public func visit(_ node: ClosureExprSyntax) -> UnsafeMutableRawPointer { let statements = node.statements.map(self.visit) let loc = self.base.advanced(by: node.position.utf8Offset).raw @@ -267,14 +312,15 @@ struct ASTGenVisitor: SyntaxTransformVisitor { @_cdecl("parseTopLevelSwift") public func parseTopLevelSwift( - buffer: UnsafePointer, declContext: UnsafeMutableRawPointer, + buffer: UnsafePointer, dc: UnsafeMutableRawPointer, ctx: UnsafeMutableRawPointer, outputContext: UnsafeMutableRawPointer, callback: @convention(c) (UnsafeMutableRawPointer, UnsafeMutableRawPointer) -> Void ) { let syntax = try! Parser.parse(source: String(cString: buffer)) dump(syntax) - ASTGenVisitor(ctx: ctx, base: buffer, declContext: declContext) + declContext = dc + ASTGenVisitor(ctx: ctx, base: buffer) .visit(syntax) .forEach { callback($0, outputContext) } } From 94f890d6c7b42d1c57ed311d8eef0bf8e83c8e2e Mon Sep 17 00:00:00 2001 From: zoecarver Date: Sat, 10 Sep 2022 17:49:36 -0700 Subject: [PATCH 06/29] [nfc] Split ASTGen into files + extensions. (cherry picked from commit 629fb688f07b58ba50f5ce8f077da903dad2e073) --- .../UserInterfaceState.xcuserstate | Bin 19877 -> 28676 bytes lib/ASTGen/CMakeLists.txt | 7 +- lib/ASTGen/Sources/ASTGen/ASTGen.swift | 250 +----------------- lib/ASTGen/Sources/ASTGen/Decls.swift | 120 +++++++++ lib/ASTGen/Sources/ASTGen/Exprs.swift | 88 ++++++ lib/ASTGen/Sources/ASTGen/Literals.swift | 24 ++ lib/ASTGen/Sources/ASTGen/Misc.swift | 26 ++ lib/ASTGen/Sources/ASTGen/Stmts.swift | 20 ++ 8 files changed, 285 insertions(+), 250 deletions(-) create mode 100644 lib/ASTGen/Sources/ASTGen/Decls.swift create mode 100644 lib/ASTGen/Sources/ASTGen/Exprs.swift create mode 100644 lib/ASTGen/Sources/ASTGen/Literals.swift create mode 100644 lib/ASTGen/Sources/ASTGen/Misc.swift create mode 100644 lib/ASTGen/Sources/ASTGen/Stmts.swift diff --git a/lib/ASTGen/.swiftpm/xcode/package.xcworkspace/xcuserdata/zoecarver.xcuserdatad/UserInterfaceState.xcuserstate b/lib/ASTGen/.swiftpm/xcode/package.xcworkspace/xcuserdata/zoecarver.xcuserdatad/UserInterfaceState.xcuserstate index f35d6cf4c2a5a06d0fa43aed6bd8d5c13412b14e..7dc5262780705f6d86144aa64d0aac2a9817bf4d 100644 GIT binary patch delta 13954 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 D$zXv! delta 8727 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 ResultType { + public func visitAny(_ node: Syntax) -> UnsafeMutableRawPointer { fatalError("Not implemented.") } @@ -60,254 +60,6 @@ struct ASTGenVisitor: SyntaxTransformVisitor { return out } - - public func visit(_ node: MemberDeclListItemSyntax) -> UnsafeMutableRawPointer { - visit(Syntax(node.decl)) - } - - public func visit(_ node: StructDeclSyntax) -> UnsafeMutableRawPointer { - let loc = self.base.advanced(by: node.position.utf8Offset).raw - var nameText = node.identifier.text - let name = nameText.withUTF8 { buf in - return SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count) - } - - let out = StructDecl_create(ctx, loc, name, loc, declContext) - let oldDeclContext = declContext - declContext = out.declContext - defer { declContext = oldDeclContext } - - node.members.members.map(self.visit).withBridgedArrayRef { ref in - NominalTypeDecl_setMembers(out.nominalDecl, ref) - } - - return out.decl - } - - public func visit(_ node: ClassDeclSyntax) -> UnsafeMutableRawPointer { - let loc = self.base.advanced(by: node.position.utf8Offset).raw - var nameText = node.identifier.text - let name = nameText.withUTF8 { buf in - return SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count) - } - - let out = ClassDecl_create(ctx, loc, name, loc, declContext) - let oldDeclContext = declContext - declContext = out.declContext - defer { declContext = oldDeclContext } - - node.members.members.map(self.visit).withBridgedArrayRef { ref in - NominalTypeDecl_setMembers(out.nominalDecl, ref) - } - - return out.decl - } - - public func visit(_ node: ClosureExprSyntax) -> UnsafeMutableRawPointer { - let statements = node.statements.map(self.visit) - let loc = self.base.advanced(by: node.position.utf8Offset).raw - - let body = statements.withBridgedArrayRef { ref in - BraceStmt_create(ctx, loc, ref, loc) - } - - return ClosureExpr_create(ctx, body, declContext) - } - - public func visit(_ node: FunctionCallExprSyntax) -> UnsafeMutableRawPointer { - // Transform the trailing closure into an argument. - if let trailingClosure = node.trailingClosure { - let tupleElement = TupleExprElementSyntax(label: nil, colon: nil, expression: ExprSyntax(trailingClosure), trailingComma: nil) - - return visit(node.addArgument(tupleElement).withTrailingClosure(nil)) - } - - let args = visit(node.argumentList) - // TODO: hack - let callee = visit(node.calledExpression) - - return SwiftFunctionCallExpr_create(self.ctx, callee, args) - } - - public func visit(_ node: IdentifierExprSyntax) -> UnsafeMutableRawPointer { - let loc = self.base.advanced(by: node.position.utf8Offset).raw - - var text = node.identifier.text - let id = text.withUTF8 { buf in - return SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count) - } - - return SwiftIdentifierExpr_create(ctx, id, loc) - } - - public func visit(_ node: SimpleTypeIdentifierSyntax) -> UnsafeMutableRawPointer { - let loc = self.base.advanced(by: node.position.utf8Offset).raw - - var text = node.name.text - let id = text.withUTF8 { buf in - return SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count) - } - - return SimpleIdentTypeRepr_create(ctx, loc, id) - } - - public func visit(_ node: IdentifierPatternSyntax) -> UnsafeMutableRawPointer { - let loc = self.base.advanced(by: node.position.utf8Offset).raw - - var text = node.identifier.text - let id = text.withUTF8 { buf in - return SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count) - } - - return SwiftIdentifierExpr_create(ctx, id, loc) - } - - public func visit(_ node: MemberAccessExprSyntax) -> UnsafeMutableRawPointer { - let loc = self.base.advanced(by: node.position.utf8Offset).raw - let base = visit(node.base!) - var nameText = node.name.text - let name = nameText.withUTF8 { buf in - return SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count) - } - - return UnresolvedDotExpr_create(ctx, base, loc, name, loc) - } - - public func visit(_ node: TupleExprElementSyntax) -> UnsafeMutableRawPointer { - visit(node.expression) - } - - public func visit(_ node: TupleExprElementListSyntax) -> UnsafeMutableRawPointer { - let elements = node.map(self.visit) - - // TODO: find correct paren locs. - let lParenLoc = self.base.advanced(by: node.position.utf8Offset).raw - let rParenLoc = self.base.advanced(by: node.position.utf8Offset).raw - - return elements.withBridgedArrayRef { elementsRef in - SwiftTupleExpr_create(self.ctx, lParenLoc, elementsRef, rParenLoc) - } - } - - public func visit(_ node: InitializerClauseSyntax) -> UnsafeMutableRawPointer { - visit(node.value) - } - - public func visit(_ node: VariableDeclSyntax) -> UnsafeMutableRawPointer { - let pattern = visit(node.bindings.first!.pattern) - let initializer = visit(node.bindings.first!.initializer!) - - let loc = self.base.advanced(by: node.position.utf8Offset).raw - let isStateic = false // TODO: compute this - let isLet = node.letOrVarKeyword.tokenKind == .letKeyword - - // TODO: don't drop "initializer" on the floor. - return SwiftVarDecl_create(ctx, pattern, loc, isStateic, isLet, declContext) - } - - public func visit(_ node: ConditionElementSyntax) -> UnsafeMutableRawPointer { - visit(node.condition) - } - - public func visit(_ node: CodeBlockItemSyntax) -> UnsafeMutableRawPointer { - visit(node.item) - } - - public func visit(_ node: CodeBlockSyntax) -> UnsafeMutableRawPointer { - let statements = node.statements.map(self.visit) - let loc = self.base.advanced(by: node.position.utf8Offset).raw - - return statements.withBridgedArrayRef { ref in - BraceStmt_create(ctx, loc, ref, loc) - } - } - - public func visit(_ node: FunctionParameterSyntax) -> UnsafeMutableRawPointer { - let loc = self.base.advanced(by: node.position.utf8Offset).raw - - let firstName: UnsafeMutableRawPointer? - let secondName: UnsafeMutableRawPointer? - - if let nodeFirstName = node.firstName { - var text = nodeFirstName.text - firstName = text.withUTF8 { buf in - SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count).raw - } - } else { - firstName = nil - } - - if let nodeSecondName = node.secondName { - var text = nodeSecondName.text - secondName = text.withUTF8 { buf in - SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count).raw - } - } else { - secondName = nil - } - - return ParamDecl_create(ctx, loc, loc, firstName, loc, secondName, declContext) - } - - public func visit(_ node: FunctionDeclSyntax) -> UnsafeMutableRawPointer { - let loc = self.base.advanced(by: node.position.utf8Offset).raw - - var nameText = node.identifier.text - let name = nameText.withUTF8 { buf in - return SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count) - } - - let body: UnsafeMutableRawPointer? - if let nodeBody = node.body { - body = visit(nodeBody) - } else { - body = nil - } - - let returnType: UnsafeMutableRawPointer? - if let output = node.signature.output { - returnType = visit(output.returnType) - } else { - returnType = nil - } - - let params = node.signature.input.parameterList.map { visit($0) } - return params.withBridgedArrayRef { ref in - FuncDecl_create(ctx, loc, false, loc, name, loc, false, nil, false, nil, loc, ref, loc, body, returnType, declContext) - } - } - - public func visit(_ node: IfStmtSyntax) -> UnsafeMutableRawPointer { - let conditions = node.conditions.map(self.visit) - assert(conditions.count == 1) // TODO: handle multiple conditions. - - let body = visit(node.body) - let loc = self.base.advanced(by: node.position.utf8Offset).raw - - if let elseBody = node.elseBody, node.elseKeyword != nil { - return IfStmt_create(ctx, loc, conditions.first!, body, loc, visit(elseBody)) - } - - return IfStmt_create(ctx, loc, conditions.first!, body, nil, nil) - } - - public func visit(_ node: StringLiteralExprSyntax) -> UnsafeMutableRawPointer { - let loc = self.base.advanced(by: node.position.utf8Offset).raw - var segment = node.segments.first!.as(StringSegmentSyntax.self)!.content.text - return segment.withUTF8 { buf in - let id = SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count) - return SwiftStringLiteralExpr_create(ctx, id, buf.count, loc) - } - } - - public func visit(_ node: IntegerLiteralExprSyntax) -> UnsafeMutableRawPointer { - let loc = self.base.advanced(by: node.position.utf8Offset).raw - var segment = node.digits.text - return segment.withUTF8 { buf in - let id = SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count) - return SwiftIntegerLiteralExpr_create(ctx, id, buf.count, loc) - } - } } @_cdecl("parseTopLevelSwift") diff --git a/lib/ASTGen/Sources/ASTGen/Decls.swift b/lib/ASTGen/Sources/ASTGen/Decls.swift new file mode 100644 index 0000000000000..029918f923a92 --- /dev/null +++ b/lib/ASTGen/Sources/ASTGen/Decls.swift @@ -0,0 +1,120 @@ +import SwiftParser +import SwiftSyntax + +import CASTBridging + +extension ASTGenVisitor { + public func visit(_ node: StructDeclSyntax) -> UnsafeMutableRawPointer { + let loc = self.base.advanced(by: node.position.utf8Offset).raw + var nameText = node.identifier.text + let name = nameText.withUTF8 { buf in + return SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count) + } + + let out = StructDecl_create(ctx, loc, name, loc, declContext) + let oldDeclContext = declContext + declContext = out.declContext + defer { declContext = oldDeclContext } + + node.members.members.map(self.visit).withBridgedArrayRef { ref in + NominalTypeDecl_setMembers(out.nominalDecl, ref) + } + + return out.decl + } + + public func visit(_ node: ClassDeclSyntax) -> UnsafeMutableRawPointer { + let loc = self.base.advanced(by: node.position.utf8Offset).raw + var nameText = node.identifier.text + let name = nameText.withUTF8 { buf in + return SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count) + } + + let out = ClassDecl_create(ctx, loc, name, loc, declContext) + let oldDeclContext = declContext + declContext = out.declContext + defer { declContext = oldDeclContext } + + node.members.members.map(self.visit).withBridgedArrayRef { ref in + NominalTypeDecl_setMembers(out.nominalDecl, ref) + } + + return out.decl + } + + public func visit(_ node: VariableDeclSyntax) -> UnsafeMutableRawPointer { + let pattern = visit(node.bindings.first!.pattern) + let initializer = visit(node.bindings.first!.initializer!) + + let loc = self.base.advanced(by: node.position.utf8Offset).raw + let isStateic = false // TODO: compute this + let isLet = node.letOrVarKeyword.tokenKind == .letKeyword + + // TODO: don't drop "initializer" on the floor. + return SwiftVarDecl_create(ctx, pattern, loc, isStateic, isLet, declContext) + } + + public func visit(_ node: CodeBlockSyntax) -> UnsafeMutableRawPointer { + let statements = node.statements.map(self.visit) + let loc = self.base.advanced(by: node.position.utf8Offset).raw + + return statements.withBridgedArrayRef { ref in + BraceStmt_create(ctx, loc, ref, loc) + } + } + + public func visit(_ node: FunctionParameterSyntax) -> UnsafeMutableRawPointer { + let loc = self.base.advanced(by: node.position.utf8Offset).raw + + let firstName: UnsafeMutableRawPointer? + let secondName: UnsafeMutableRawPointer? + + if let nodeFirstName = node.firstName { + var text = nodeFirstName.text + firstName = text.withUTF8 { buf in + SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count).raw + } + } else { + firstName = nil + } + + if let nodeSecondName = node.secondName { + var text = nodeSecondName.text + secondName = text.withUTF8 { buf in + SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count).raw + } + } else { + secondName = nil + } + + return ParamDecl_create(ctx, loc, loc, firstName, loc, secondName, declContext) + } + + public func visit(_ node: FunctionDeclSyntax) -> UnsafeMutableRawPointer { + let loc = self.base.advanced(by: node.position.utf8Offset).raw + + var nameText = node.identifier.text + let name = nameText.withUTF8 { buf in + return SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count) + } + + let body: UnsafeMutableRawPointer? + if let nodeBody = node.body { + body = visit(nodeBody) + } else { + body = nil + } + + let returnType: UnsafeMutableRawPointer? + if let output = node.signature.output { + returnType = visit(output.returnType) + } else { + returnType = nil + } + + let params = node.signature.input.parameterList.map { visit($0) } + return params.withBridgedArrayRef { ref in + FuncDecl_create(ctx, loc, false, loc, name, loc, false, nil, false, nil, loc, ref, loc, body, returnType, declContext) + } + } +} diff --git a/lib/ASTGen/Sources/ASTGen/Exprs.swift b/lib/ASTGen/Sources/ASTGen/Exprs.swift new file mode 100644 index 0000000000000..1e7cd50b3216d --- /dev/null +++ b/lib/ASTGen/Sources/ASTGen/Exprs.swift @@ -0,0 +1,88 @@ +import SwiftParser +import SwiftSyntax + +import CASTBridging + +extension ASTGenVisitor { + public func visit(_ node: ClosureExprSyntax) -> UnsafeMutableRawPointer { + let statements = node.statements.map(self.visit) + let loc = self.base.advanced(by: node.position.utf8Offset).raw + + let body = statements.withBridgedArrayRef { ref in + BraceStmt_create(ctx, loc, ref, loc) + } + + return ClosureExpr_create(ctx, body, declContext) + } + + public func visit(_ node: FunctionCallExprSyntax) -> UnsafeMutableRawPointer { + // Transform the trailing closure into an argument. + if let trailingClosure = node.trailingClosure { + let tupleElement = TupleExprElementSyntax(label: nil, colon: nil, expression: ExprSyntax(trailingClosure), trailingComma: nil) + + return visit(node.addArgument(tupleElement).withTrailingClosure(nil)) + } + + let args = visit(node.argumentList) + // TODO: hack + let callee = visit(node.calledExpression) + + return SwiftFunctionCallExpr_create(self.ctx, callee, args) + } + + public func visit(_ node: IdentifierExprSyntax) -> UnsafeMutableRawPointer { + let loc = self.base.advanced(by: node.position.utf8Offset).raw + + var text = node.identifier.text + let id = text.withUTF8 { buf in + return SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count) + } + + return SwiftIdentifierExpr_create(ctx, id, loc) + } + + public func visit(_ node: SimpleTypeIdentifierSyntax) -> UnsafeMutableRawPointer { + let loc = self.base.advanced(by: node.position.utf8Offset).raw + + var text = node.name.text + let id = text.withUTF8 { buf in + return SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count) + } + + return SimpleIdentTypeRepr_create(ctx, loc, id) + } + + public func visit(_ node: IdentifierPatternSyntax) -> UnsafeMutableRawPointer { + let loc = self.base.advanced(by: node.position.utf8Offset).raw + + var text = node.identifier.text + let id = text.withUTF8 { buf in + return SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count) + } + + return SwiftIdentifierExpr_create(ctx, id, loc) + } + + public func visit(_ node: MemberAccessExprSyntax) -> UnsafeMutableRawPointer { + let loc = self.base.advanced(by: node.position.utf8Offset).raw + let base = visit(node.base!) + var nameText = node.name.text + let name = nameText.withUTF8 { buf in + return SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count) + } + + return UnresolvedDotExpr_create(ctx, base, loc, name, loc) + } + + public func visit(_ node: TupleExprElementListSyntax) -> UnsafeMutableRawPointer { + let elements = node.map(self.visit) + + // TODO: find correct paren locs. + let lParenLoc = self.base.advanced(by: node.position.utf8Offset).raw + let rParenLoc = self.base.advanced(by: node.position.utf8Offset).raw + + return elements.withBridgedArrayRef { elementsRef in + SwiftTupleExpr_create(self.ctx, lParenLoc, elementsRef, rParenLoc) + } + } +} diff --git a/lib/ASTGen/Sources/ASTGen/Literals.swift b/lib/ASTGen/Sources/ASTGen/Literals.swift new file mode 100644 index 0000000000000..e6b42fa51be04 --- /dev/null +++ b/lib/ASTGen/Sources/ASTGen/Literals.swift @@ -0,0 +1,24 @@ +import SwiftParser +import SwiftSyntax + +import CASTBridging + +extension ASTGenVisitor { + public func visit(_ node: StringLiteralExprSyntax) -> UnsafeMutableRawPointer { + let loc = self.base.advanced(by: node.position.utf8Offset).raw + var segment = node.segments.first!.as(StringSegmentSyntax.self)!.content.text + return segment.withUTF8 { buf in + let id = SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count) + return SwiftStringLiteralExpr_create(ctx, id, buf.count, loc) + } + } + + public func visit(_ node: IntegerLiteralExprSyntax) -> UnsafeMutableRawPointer { + let loc = self.base.advanced(by: node.position.utf8Offset).raw + var segment = node.digits.text + return segment.withUTF8 { buf in + let id = SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count) + return SwiftIntegerLiteralExpr_create(ctx, id, buf.count, loc) + } + } +} diff --git a/lib/ASTGen/Sources/ASTGen/Misc.swift b/lib/ASTGen/Sources/ASTGen/Misc.swift new file mode 100644 index 0000000000000..a2d3bf18f82e9 --- /dev/null +++ b/lib/ASTGen/Sources/ASTGen/Misc.swift @@ -0,0 +1,26 @@ +import SwiftParser +import SwiftSyntax + +import CASTBridging + +extension ASTGenVisitor { + public func visit(_ node: MemberDeclListItemSyntax) -> UnsafeMutableRawPointer { + visit(Syntax(node.decl)) + } + + public func visit(_ node: TupleExprElementSyntax) -> UnsafeMutableRawPointer { + visit(node.expression) + } + + public func visit(_ node: InitializerClauseSyntax) -> UnsafeMutableRawPointer { + visit(node.value) + } + + public func visit(_ node: ConditionElementSyntax) -> UnsafeMutableRawPointer { + visit(node.condition) + } + + public func visit(_ node: CodeBlockItemSyntax) -> UnsafeMutableRawPointer { + visit(node.item) + } +} diff --git a/lib/ASTGen/Sources/ASTGen/Stmts.swift b/lib/ASTGen/Sources/ASTGen/Stmts.swift new file mode 100644 index 0000000000000..45ff17a09db65 --- /dev/null +++ b/lib/ASTGen/Sources/ASTGen/Stmts.swift @@ -0,0 +1,20 @@ +import SwiftParser +import SwiftSyntax + +import CASTBridging + +extension ASTGenVisitor { + public func visit(_ node: IfStmtSyntax) -> UnsafeMutableRawPointer { + let conditions = node.conditions.map(self.visit) + assert(conditions.count == 1) // TODO: handle multiple conditions. + + let body = visit(node.body) + let loc = self.base.advanced(by: node.position.utf8Offset).raw + + if let elseBody = node.elseBody, node.elseKeyword != nil { + return IfStmt_create(ctx, loc, conditions.first!, body, loc, visit(elseBody)) + } + + return IfStmt_create(ctx, loc, conditions.first!, body, nil, nil) + } +} From 93f1505e8aafb2117e246754fa44ac9aab0d8e1c Mon Sep 17 00:00:00 2001 From: zoecarver Date: Fri, 16 Sep 2022 11:36:28 -0700 Subject: [PATCH 07/29] Add support for bool literals. (cherry picked from commit d58a01db958a3bdad1648f7d4d96d56793d912e4) --- include/swift/AST/CASTBridging.h | 4 +++- lib/AST/CASTBridging.cpp | 5 +++++ .../UserInterfaceState.xcuserstate | Bin 28676 -> 26608 bytes lib/ASTGen/Package.resolved | 4 ++-- lib/ASTGen/Sources/ASTGen/Literals.swift | 6 ++++++ 5 files changed, 16 insertions(+), 3 deletions(-) diff --git a/include/swift/AST/CASTBridging.h b/include/swift/AST/CASTBridging.h index 6423647159926..27bd3fab1e703 100644 --- a/include/swift/AST/CASTBridging.h +++ b/include/swift/AST/CASTBridging.h @@ -99,7 +99,9 @@ void *SwiftStringLiteralExpr_create(void *ctx, const char *_Nullable string, void *SwiftIntegerLiteralExpr_create(void *ctx, const char *_Nullable string, long len, void *TokenLoc); -void *SwiftVarDecl_create(void *ctx, const char *_Nullable name, +void *SwiftBooleanLiteralExpr_create(void *ctx, _Bool value, void *TokenLoc); + + void *SwiftVarDecl_create(void *ctx, const char *_Nullable name, void *loc, _Bool isStatic, _Bool isLet, void *dc); void *IfStmt_create(void *ctx, void *ifLoc, void *cond, void *_Nullable then, void *_Nullable elseLoc, diff --git a/lib/AST/CASTBridging.cpp b/lib/AST/CASTBridging.cpp index dca80c6bf4320..4940d193bb8bf 100644 --- a/lib/AST/CASTBridging.cpp +++ b/lib/AST/CASTBridging.cpp @@ -124,6 +124,11 @@ void *SwiftIntegerLiteralExpr_create(void *ctx, const char *_Nullable string, *(SourceLoc *)&TokenLoc); } +void *SwiftBooleanLiteralExpr_create(void *ctx, bool value, void *TokenLoc) { + ASTContext &Context = *static_cast(ctx); + return new (Context) BooleanLiteralExpr(value, *(SourceLoc *)&TokenLoc); +} + void *SwiftVarDecl_create(void *ctx, const char *_Nullable nameId, void *loc, bool isStatic, bool isLet, void *dc) { ASTContext &Context = *static_cast(ctx); diff --git a/lib/ASTGen/.swiftpm/xcode/package.xcworkspace/xcuserdata/zoecarver.xcuserdatad/UserInterfaceState.xcuserstate b/lib/ASTGen/.swiftpm/xcode/package.xcworkspace/xcuserdata/zoecarver.xcuserdatad/UserInterfaceState.xcuserstate index 7dc5262780705f6d86144aa64d0aac2a9817bf4d..eaa36e2af752ad8dd763ebf7a681608d51ace278 100644 GIT binary patch literal 26608 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

XS8Rv=d{<8`X$9A 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 Hp@;q#h^=Iw literal 28676 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%0A_H5ua;!N!&9>==9XP$KJ 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

vScp-ojF0PAzu^=HmB~p31)FDd# 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 diff --git a/lib/ASTGen/Package.resolved b/lib/ASTGen/Package.resolved index b618ff25ef11c..04eaa41b412ba 100644 --- a/lib/ASTGen/Package.resolved +++ b/lib/ASTGen/Package.resolved @@ -5,8 +5,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-argument-parser.git", "state" : { - "revision" : "e394bf350e38cb100b6bc4172834770ede1b7232", - "version" : "1.0.3" + "revision" : "9f39744e025c7d377987f30b03770805dcb0bcd1", + "version" : "1.1.4" } } ], diff --git a/lib/ASTGen/Sources/ASTGen/Literals.swift b/lib/ASTGen/Sources/ASTGen/Literals.swift index e6b42fa51be04..9c7fc7217f1b6 100644 --- a/lib/ASTGen/Sources/ASTGen/Literals.swift +++ b/lib/ASTGen/Sources/ASTGen/Literals.swift @@ -21,4 +21,10 @@ extension ASTGenVisitor { return SwiftIntegerLiteralExpr_create(ctx, id, buf.count, loc) } } + + public func visit(_ node: BooleanLiteralExprSyntax) -> UnsafeMutableRawPointer { + let loc = self.base.advanced(by: node.position.utf8Offset).raw + let value = node.booleanLiteral == .trueKeyword() + return SwiftBooleanLiteralExpr_create(ctx, value, loc) + } } From 73fe41373b860e4085403c2d9a8657adffcd9500 Mon Sep 17 00:00:00 2001 From: zoecarver Date: Fri, 16 Sep 2022 11:59:48 -0700 Subject: [PATCH 08/29] Support functions with statements in their body. (cherry picked from commit 5935670931b0120a2383d2a9c51e8af4c7ad58dd) --- include/swift/AST/CASTBridging.h | 5 +++-- lib/AST/CASTBridging.cpp | 21 ++++++++++++++---- .../UserInterfaceState.xcuserstate | Bin 26608 -> 27695 bytes lib/ASTGen/Sources/ASTGen/Decls.swift | 2 +- lib/ASTGen/Sources/ASTGen/Exprs.swift | 2 +- 5 files changed, 22 insertions(+), 8 deletions(-) diff --git a/include/swift/AST/CASTBridging.h b/include/swift/AST/CASTBridging.h index 27bd3fab1e703..2c72adbe44108 100644 --- a/include/swift/AST/CASTBridging.h +++ b/include/swift/AST/CASTBridging.h @@ -101,13 +101,14 @@ void *SwiftIntegerLiteralExpr_create(void *ctx, const char *_Nullable string, void *SwiftBooleanLiteralExpr_create(void *ctx, _Bool value, void *TokenLoc); - void *SwiftVarDecl_create(void *ctx, const char *_Nullable name, +void *SwiftVarDecl_create(void *ctx, const char *_Nullable name, void *loc, _Bool isStatic, _Bool isLet, void *dc); void *IfStmt_create(void *ctx, void *ifLoc, void *cond, void *_Nullable then, void *_Nullable elseLoc, void *_Nullable elseStmt); -void *BraceStmt_create(void *ctx, void *lbloc, BridgedArrayRef elements, void *rbloc); +void *BraceStmt_createExpr(void *ctx, void *lbloc, BridgedArrayRef elements, void *rbloc); +void *BraceStmt_createStmt(void *ctx, void *lbloc, BridgedArrayRef elements, void *rbloc); void *BridgedSourceLoc_advanced(void *loc, long len); diff --git a/lib/AST/CASTBridging.cpp b/lib/AST/CASTBridging.cpp index 4940d193bb8bf..b89f0bd0763ac 100644 --- a/lib/AST/CASTBridging.cpp +++ b/lib/AST/CASTBridging.cpp @@ -145,10 +145,23 @@ void *IfStmt_create(void *ctx, void *ifLoc, void *cond, void *_Nullable then, vo (Stmt *)elseStmt, None, Context); } -void *BraceStmt_create(void *ctx, void *lbloc, BridgedArrayRef elements, void *rbloc) { - return BraceStmt::create(*static_cast(ctx), *(SourceLoc *)&lbloc, - getArrayRef(elements), - *(SourceLoc *)&rbloc); +void *BraceStmt_createExpr(void *ctx, void *lbloc, BridgedArrayRef elements, void *rbloc) { + ASTContext &Context = *static_cast(ctx); + return BraceStmt::create(Context, *(SourceLoc *)&lbloc, + getArrayRef(elements), + *(SourceLoc *)&rbloc); +} + +void *BraceStmt_createStmt(void *ctx, void *lbloc, BridgedArrayRef elements, void *rbloc) { + llvm::SmallVector nodes; + for (auto stmt : getArrayRef(elements)) { + nodes.push_back(stmt); + } + + ASTContext &Context = *static_cast(ctx); + return BraceStmt::create(Context, *(SourceLoc *)&lbloc, + Context.AllocateCopy(nodes), + *(SourceLoc *)&rbloc); } void *ParamDecl_create(void *ctx, void *loc, diff --git a/lib/ASTGen/.swiftpm/xcode/package.xcworkspace/xcuserdata/zoecarver.xcuserdatad/UserInterfaceState.xcuserstate b/lib/ASTGen/.swiftpm/xcode/package.xcworkspace/xcuserdata/zoecarver.xcuserdatad/UserInterfaceState.xcuserstate index eaa36e2af752ad8dd763ebf7a681608d51ace278..f7c5dfd1ffaf0573330ba5ff7fccec78723c7b6a 100644 GIT binary patch literal 27695 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 literal 26608 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

XS8Rv=d{<8`X$9A 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 Hp@;q#h^=Iw diff --git a/lib/ASTGen/Sources/ASTGen/Decls.swift b/lib/ASTGen/Sources/ASTGen/Decls.swift index 029918f923a92..83c2c1e575089 100644 --- a/lib/ASTGen/Sources/ASTGen/Decls.swift +++ b/lib/ASTGen/Sources/ASTGen/Decls.swift @@ -59,7 +59,7 @@ extension ASTGenVisitor { let loc = self.base.advanced(by: node.position.utf8Offset).raw return statements.withBridgedArrayRef { ref in - BraceStmt_create(ctx, loc, ref, loc) + BraceStmt_createStmt(ctx, loc, ref, loc) } } diff --git a/lib/ASTGen/Sources/ASTGen/Exprs.swift b/lib/ASTGen/Sources/ASTGen/Exprs.swift index 1e7cd50b3216d..7f8bf94689e2e 100644 --- a/lib/ASTGen/Sources/ASTGen/Exprs.swift +++ b/lib/ASTGen/Sources/ASTGen/Exprs.swift @@ -9,7 +9,7 @@ extension ASTGenVisitor { let loc = self.base.advanced(by: node.position.utf8Offset).raw let body = statements.withBridgedArrayRef { ref in - BraceStmt_create(ctx, loc, ref, loc) + BraceStmt_createExpr(ctx, loc, ref, loc) } return ClosureExpr_create(ctx, body, declContext) From e21c46352fef426aba7ad17ecf626b1f9d6e2236 Mon Sep 17 00:00:00 2001 From: Doug Gregor Date: Sat, 1 Oct 2022 22:07:19 -0700 Subject: [PATCH 09/29] Remove unnecessary frontend option --- include/swift/Option/Options.td | 5 ----- 1 file changed, 5 deletions(-) diff --git a/include/swift/Option/Options.td b/include/swift/Option/Options.td index 08d6dae0399d2..8da56f4eb2ac3 100644 --- a/include/swift/Option/Options.td +++ b/include/swift/Option/Options.td @@ -635,11 +635,6 @@ def enable_experimental_cxx_interop_in_clang_header : Flags<[FrontendOption, NoDriverOption, HelpHidden]>, HelpText<"Enable experimental Swift to C++ interop code generation in generated Clang header">; -def enable_experimental_swift_parser : - Flag<["-"], "enable-experimental-swift-parser">, - Flags<[FrontendOption, HelpHidden, ModuleInterfaceOption]>, - HelpText<"Enable the new and expiremental Swift parser + AST generation.">; - def experimental_cxx_stdlib : Separate<["-"], "experimental-cxx-stdlib">, Flags<[HelpHidden]>, From 2560aedc1064351db8cf1dbe2ffc2374fe265cc3 Mon Sep 17 00:00:00 2001 From: Doug Gregor Date: Sat, 1 Oct 2022 22:07:49 -0700 Subject: [PATCH 10/29] Rename experimental feature to ParserASTGen --- include/swift/Basic/Features.def | 5 +++-- lib/AST/ASTPrinter.cpp | 2 +- lib/Parse/ParseDecl.cpp | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/include/swift/Basic/Features.def b/include/swift/Basic/Features.def index baeb3692ec4ae..7412e1d449d36 100644 --- a/include/swift/Basic/Features.def +++ b/include/swift/Basic/Features.def @@ -141,8 +141,9 @@ EXPERIMENTAL_FEATURE(ParserSequenceFolding) /// Enables implicit some while also enabling existential `any` EXPERIMENTAL_FEATURE(ImplicitSome) -/// Parse using the Swift (swift-syntax) parser and use ASTGen. -EXPERIMENTAL_FEATURE(SwiftParser) +/// Parse using the Swift (swift-syntax) parser and use ASTGen to generate the +/// corresponding syntax tree. +EXPERIMENTAL_FEATURE(ParserASTGen) #undef EXPERIMENTAL_FEATURE #undef UPCOMING_FEATURE diff --git a/lib/AST/ASTPrinter.cpp b/lib/AST/ASTPrinter.cpp index 5dd33b05b6d26..6543f1d8e3dc2 100644 --- a/lib/AST/ASTPrinter.cpp +++ b/lib/AST/ASTPrinter.cpp @@ -3091,7 +3091,7 @@ static bool usesFeatureAdditiveArithmeticDerivedConformances(Decl *decl) { return false; } -static bool usesFeatureSwiftParser(Decl *decl) { +static bool usesFeatureParserASTGen(Decl *decl) { return false; } diff --git a/lib/Parse/ParseDecl.cpp b/lib/Parse/ParseDecl.cpp index 8d5cb290e9b25..ff6cf7a75238e 100644 --- a/lib/Parse/ParseDecl.cpp +++ b/lib/Parse/ParseDecl.cpp @@ -185,7 +185,7 @@ void Parser::parseTopLevel(SmallVectorImpl &decls) { StringRef contents = SourceMgr.extractText(SourceMgr.getRangeForBuffer(L->getBufferID())); - if (Context.LangOpts.hasFeature(Feature::SwiftParser)) { + if (Context.LangOpts.hasFeature(Feature::ParserASTGen)) { parseTopLevelSwift(contents.data(), CurDeclContext, &Context, &decls, appendToVector); for (auto decl : decls) { From 4da85ea091ffcd075e81fcd8fc5a44dda5c47ee8 Mon Sep 17 00:00:00 2001 From: Doug Gregor Date: Mon, 3 Oct 2022 15:41:44 -0700 Subject: [PATCH 11/29] Clean up build logic for ASTGen library. Only introduce it and its dependency when the new Swift parser is being built, and rely more on existing logic to make sure we get the right build/link flags. --- include/swift/AST/CASTBridging.h | 5 +- lib/ASTGen/CMakeLists.txt | 59 +++++++++---------- lib/ASTGen/Sources/ASTGen/DummyASTGen.swift | 9 --- lib/Parse/CMakeLists.txt | 3 +- .../cmake/modules/AddSwiftSourceKit.cmake | 14 +++++ tools/driver/CMakeLists.txt | 3 - 6 files changed, 49 insertions(+), 44 deletions(-) delete mode 100644 lib/ASTGen/Sources/ASTGen/DummyASTGen.swift diff --git a/include/swift/AST/CASTBridging.h b/include/swift/AST/CASTBridging.h index 2c72adbe44108..f19de87d675a8 100644 --- a/include/swift/AST/CASTBridging.h +++ b/include/swift/AST/CASTBridging.h @@ -155,4 +155,7 @@ void Stmt_dump(void *); SWIFT_END_NULLABILITY_ANNOTATIONS -#endif // SWIFT_C_AST_ASTBRIDGING_H \ No newline at end of file +#undef SWIFT_BEGIN_NULLABILITY_ANNOTATIONS +#undef SWIFT_END_NULLABILITY_ANNOTATIONS + +#endif // SWIFT_C_AST_ASTBRIDGING_H diff --git a/lib/ASTGen/CMakeLists.txt b/lib/ASTGen/CMakeLists.txt index ed3205fb547c7..60d7c95e1febc 100644 --- a/lib/ASTGen/CMakeLists.txt +++ b/lib/ASTGen/CMakeLists.txt @@ -1,35 +1,34 @@ -# TODO: why do we need these on Linux? -set(CMAKE_Swift_ARCHIVE_CREATE " crs ") -set(CMAKE_Swift_ARCHIVE_FINISH "") - if (SWIFT_SWIFT_PARSER) - add_library(ASTGen - Sources/ASTGen/ASTGen.swift - Sources/ASTGen/Decls.swift - Sources/ASTGen/Exprs.swift - Sources/ASTGen/Literals.swift - Sources/ASTGen/Misc.swift - Sources/ASTGen/Stmts.swift) + add_swift_host_library(swiftASTGen STATIC + Sources/ASTGen/ASTGen.swift + Sources/ASTGen/Decls.swift + Sources/ASTGen/Exprs.swift + Sources/ASTGen/Literals.swift + Sources/ASTGen/Misc.swift + Sources/ASTGen/Stmts.swift + ) - target_link_libraries(ASTGen PUBLIC - SwiftSyntax - SwiftParser - SwiftDiagnostics) + # Link against the SwiftSyntax parser and libraries it depends on. The actual + # formulation of this is a hack to work around a CMake bug in Ninja file + # generation that results in multiple Ninja targets producing the same file in + # a downstream SourceKit target. This should be expressed as: + # + # target_link_libraries(swiftASTGen + # PRIVATE + # SwiftSyntax::SwiftCompilerSupport + # ) + target_link_libraries(swiftASTGen + PRIVATE + $ + $ + $ + $ + $ + $ + ) - target_link_directories(ASTGen PUBLIC - "${SWIFT_PATH_TO_EARLYSWIFTSYNTAX_BUILD_DIR}/lib") + target_include_directories(swiftASTGen PUBLIC + "${SWIFT_PATH_TO_EARLYSWIFTSYNTAX_BUILD_DIR}/swift") - target_include_directories(ASTGen PUBLIC - "${SWIFT_PATH_TO_EARLYSWIFTSYNTAX_BUILD_DIR}/swift") -else() - add_library(ASTGen - Sources/ASTGen/DummyASTGen.swift) + add_dependencies(swiftASTGen swiftAST) endif() - -set_target_properties(ASTGen PROPERTIES LINKER_LANGUAGE Swift) - -target_compile_options(ASTGen PUBLIC - "-emit-module-interface" - "-g") - -add_dependencies(ASTGen swiftAST) \ No newline at end of file diff --git a/lib/ASTGen/Sources/ASTGen/DummyASTGen.swift b/lib/ASTGen/Sources/ASTGen/DummyASTGen.swift deleted file mode 100644 index 5c5b8ec4fdfd8..0000000000000 --- a/lib/ASTGen/Sources/ASTGen/DummyASTGen.swift +++ /dev/null @@ -1,9 +0,0 @@ -@_cdecl("parseTopLevelSwift") -public func parseTopLevelSwift( - buffer: UnsafePointer, declContext: UnsafeMutableRawPointer, - ctx: UnsafeMutableRawPointer, - outputContext: UnsafeMutableRawPointer, - callback: @convention(c) (UnsafeMutableRawPointer, UnsafeMutableRawPointer) -> Void -) { - fatalError("Please run build script with --early-swiftsyntax to use ASTGen.") -} \ No newline at end of file diff --git a/lib/Parse/CMakeLists.txt b/lib/Parse/CMakeLists.txt index 4f17d2685a0d3..728c15c90b6d3 100644 --- a/lib/Parse/CMakeLists.txt +++ b/lib/Parse/CMakeLists.txt @@ -45,6 +45,7 @@ if (SWIFT_SWIFT_PARSER) # target_link_libraries(swiftParse # PRIVATE # SwiftSyntax::SwiftCompilerSupport + # ... # ) target_link_libraries(swiftParse PRIVATE @@ -54,6 +55,7 @@ if (SWIFT_SWIFT_PARSER) $ $ $ + $ ) target_include_directories(swiftParse @@ -67,7 +69,6 @@ if (SWIFT_SWIFT_PARSER) ) endif() -add_dependencies(swiftParse ASTGen) add_dependencies(swiftParse swift-parse-syntax-generated-headers) set_swift_llvm_is_available(swiftParse) diff --git a/tools/SourceKit/cmake/modules/AddSwiftSourceKit.cmake b/tools/SourceKit/cmake/modules/AddSwiftSourceKit.cmake index 12ac9499f9ae2..b189501bebb3b 100644 --- a/tools/SourceKit/cmake/modules/AddSwiftSourceKit.cmake +++ b/tools/SourceKit/cmake/modules/AddSwiftSourceKit.cmake @@ -251,6 +251,10 @@ macro(add_sourcekit_library name) add_llvm_symbol_exports(${name} ${EXPORTED_SYMBOL_FILE}) endif() + # Once the new Swift parser is linked, everything has Swift modules. + if (SWIFT_SWIFT_PARSER AND SOURCEKITLIB_SHARED) + set(SOURCEKITLIB_HAS_SWIFT_MODULES ON) + endif() if(SOURCEKITLIB_SHARED) set(RPATH_LIST) @@ -329,6 +333,16 @@ macro(add_sourcekit_executable name) set_target_properties(${name} PROPERTIES FOLDER "SourceKit executables") add_sourcekit_default_compiler_flags("${name}") + + if(SWIFT_SWIFT_PARSER) + set(SKEXEC_HAS_SWIFT_MODULES TRUE) + else() + set(SKEXEC_HAS_SWIFT_MODULES FALSE) + endif() + + set(RPATH_LIST) + add_sourcekit_swift_runtime_link_flags(${name} "../../../.." ${SKEXEC_HAS_SWIFT_MODULES}) + endmacro() # Add a new SourceKit framework. diff --git a/tools/driver/CMakeLists.txt b/tools/driver/CMakeLists.txt index 253ecb0632881..4cacba0ae4731 100644 --- a/tools/driver/CMakeLists.txt +++ b/tools/driver/CMakeLists.txt @@ -14,7 +14,6 @@ if(${BOOTSTRAPPING_MODE} MATCHES "BOOTSTRAPPING.*") ) target_link_libraries(swift-frontend-bootstrapping0 PRIVATE - ASTGen swiftCore swiftDriverTool swiftCompilerStub) @@ -35,7 +34,6 @@ if(${BOOTSTRAPPING_MODE} MATCHES "BOOTSTRAPPING.*") ) target_link_libraries(swift-frontend-bootstrapping1 PRIVATE - ASTGen swiftCore swiftDriverTool swiftCompilerModules-bootstrapping1) @@ -53,7 +51,6 @@ add_swift_host_tool(swift-frontend ) target_link_libraries(swift-frontend PUBLIC - ASTGen swiftCore swiftDriverTool swiftCompilerModules) From c9f70607d1b836914f8ae213340969fdee85bc12 Mon Sep 17 00:00:00 2001 From: Doug Gregor Date: Mon, 3 Oct 2022 15:46:58 -0700 Subject: [PATCH 12/29] Use ASTGen with the new Swift parser when requested When the experimental flag `ParserASTGen` is enabled, the compiler has ASTGen built, we're not performing code completion, and we're not parsing SIL... go through the new parser and ASTGen to build the abstract syntax tree. --- lib/Parse/ParseDecl.cpp | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/lib/Parse/ParseDecl.cpp b/lib/Parse/ParseDecl.cpp index ff6cf7a75238e..60620404a0aec 100644 --- a/lib/Parse/ParseDecl.cpp +++ b/lib/Parse/ParseDecl.cpp @@ -185,19 +185,15 @@ void Parser::parseTopLevel(SmallVectorImpl &decls) { StringRef contents = SourceMgr.extractText(SourceMgr.getRangeForBuffer(L->getBufferID())); - if (Context.LangOpts.hasFeature(Feature::ParserASTGen)) { +#ifdef SWIFT_SWIFT_PARSER + if (Context.LangOpts.hasFeature(Feature::ParserASTGen) && + !SourceMgr.hasCodeCompletionBuffer() && + SF.Kind != SourceFileKind::SIL) { parseTopLevelSwift(contents.data(), CurDeclContext, &Context, &decls, appendToVector); - - for (auto decl : decls) { - decl->dump(); - - if (auto fn = dyn_cast(decl)) - fn->getBody()->dump(); - } - return; } - +#endif + // Prime the lexer. if (Tok.is(tok::NUM_TOKENS)) consumeTokenWithoutFeedingReceiver(); From 8e6628616d043b5251d0e05dd3b4b813f3104f60 Mon Sep 17 00:00:00 2001 From: Doug Gregor Date: Mon, 3 Oct 2022 15:57:51 -0700 Subject: [PATCH 13/29] Fix the package that builds swiftASTGen. --- lib/ASTGen/Package.resolved | 14 -------------- lib/ASTGen/Package.swift | 20 +++++++++++++++++--- 2 files changed, 17 insertions(+), 17 deletions(-) delete mode 100644 lib/ASTGen/Package.resolved diff --git a/lib/ASTGen/Package.resolved b/lib/ASTGen/Package.resolved deleted file mode 100644 index 04eaa41b412ba..0000000000000 --- a/lib/ASTGen/Package.resolved +++ /dev/null @@ -1,14 +0,0 @@ -{ - "pins" : [ - { - "identity" : "swift-argument-parser", - "kind" : "remoteSourceControl", - "location" : "https://github.com/apple/swift-argument-parser.git", - "state" : { - "revision" : "9f39744e025c7d377987f30b03770805dcb0bcd1", - "version" : "1.1.4" - } - } - ], - "version" : 2 -} diff --git a/lib/ASTGen/Package.swift b/lib/ASTGen/Package.swift index 0c513936f9504..9ac8295bce651 100644 --- a/lib/ASTGen/Package.swift +++ b/lib/ASTGen/Package.swift @@ -4,15 +4,29 @@ import PackageDescription let package = Package( name: "ASTGen", + platforms: [ + .macOS(.v10_15) + ], products: [ - .library(name: "ASTGen", targets: ["ASTGen"]), + .library(name: "swiftASTGen", targets: ["swiftASTGen"]), ], dependencies: [ .package(path: "../../../swift-syntax"), ], targets: [ .target( - name: "ASTGen", - dependencies: ["SwiftSyntax"]), + name: "swiftASTGen", + dependencies: [ + .product(name: "SwiftSyntax", package: "swift-syntax"), + .product(name: "SwiftParser", package: "swift-syntax") + ], + path: ".", + exclude: ["CMakeLists.txt"], + swiftSettings: [ + .unsafeFlags([ + "-I", "../../include/swift/", + "-I", "../../include" + ]) + ]), ] ) From 39f54bc1b421f3882a5b1c90aa461e78e4507811 Mon Sep 17 00:00:00 2001 From: Doug Gregor Date: Mon, 3 Oct 2022 21:40:02 -0700 Subject: [PATCH 14/29] Use add_library for Swift ASTGen library --- lib/ASTGen/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ASTGen/CMakeLists.txt b/lib/ASTGen/CMakeLists.txt index 60d7c95e1febc..456d2886a4169 100644 --- a/lib/ASTGen/CMakeLists.txt +++ b/lib/ASTGen/CMakeLists.txt @@ -1,5 +1,5 @@ if (SWIFT_SWIFT_PARSER) - add_swift_host_library(swiftASTGen STATIC + add_library(swiftASTGen Sources/ASTGen/ASTGen.swift Sources/ASTGen/Decls.swift Sources/ASTGen/Exprs.swift From 9c00a0f549482c8c9a1b6577972a8db3a1bfa43a Mon Sep 17 00:00:00 2001 From: Doug Gregor Date: Mon, 3 Oct 2022 21:41:37 -0700 Subject: [PATCH 15/29] Fix CASTBridging.h for non-Clang host compilers --- include/swift/AST/CASTBridging.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/include/swift/AST/CASTBridging.h b/include/swift/AST/CASTBridging.h index f19de87d675a8..7b3b778f533f9 100644 --- a/include/swift/AST/CASTBridging.h +++ b/include/swift/AST/CASTBridging.h @@ -13,6 +13,7 @@ #ifndef SWIFT_C_AST_ASTBRIDGING_H #define SWIFT_C_AST_ASTBRIDGING_H +#if __clang__ // Provide macros to temporarily suppress warning about the use of // _Nullable and _Nonnull. #define SWIFT_BEGIN_NULLABILITY_ANNOTATIONS \ @@ -22,11 +23,19 @@ #define SWIFT_END_NULLABILITY_ANNOTATIONS \ _Pragma("clang diagnostic pop") _Pragma("clang assume_nonnull end") +#else +#define SWIFT_BEGIN_NULLABILITY_ANNOTATIONS +#define SWIFT_END_NULLABILITY_ANNOTATIONS +#endif //===----------------------------------------------------------------------===// // Diagnostic Engine //===----------------------------------------------------------------------===// +#ifndef __has_attribute // Optional of course. + #define __has_attribute(x) 0 // Compatibility with non-clang compilers. +#endif + // TODO: Move this to somewhere common header. #if __has_attribute(enum_extensibility) #define ENUM_EXTENSIBILITY_ATTR(arg) __attribute__((enum_extensibility(arg))) From 54bcb33ee95a3ed5a768d3bd4e6b1c80eb8e47fc Mon Sep 17 00:00:00 2001 From: Doug Gregor Date: Wed, 5 Oct 2022 22:07:36 -0700 Subject: [PATCH 16/29] [CMake] Make sure swiftASTGen links swiftAST. --- lib/ASTGen/CMakeLists.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/ASTGen/CMakeLists.txt b/lib/ASTGen/CMakeLists.txt index 456d2886a4169..6531a00f2d91c 100644 --- a/lib/ASTGen/CMakeLists.txt +++ b/lib/ASTGen/CMakeLists.txt @@ -1,5 +1,5 @@ if (SWIFT_SWIFT_PARSER) - add_library(swiftASTGen + add_library(swiftASTGen STATIC Sources/ASTGen/ASTGen.swift Sources/ASTGen/Decls.swift Sources/ASTGen/Exprs.swift @@ -25,6 +25,8 @@ if (SWIFT_SWIFT_PARSER) $ $ $ + + swiftAST ) target_include_directories(swiftASTGen PUBLIC From 7483373326eabca4603554d939085939accb74d0 Mon Sep 17 00:00:00 2001 From: Doug Gregor Date: Wed, 5 Oct 2022 22:07:59 -0700 Subject: [PATCH 17/29] [ASTGen] Use UTF-8 rather than C `char`, and use BridgedIdentifier consistently --- include/swift/AST/CASTBridging.h | 30 ++++++----- lib/AST/CASTBridging.cpp | 74 +++++++++++++++------------ lib/ASTGen/Sources/ASTGen/Decls.swift | 4 +- 3 files changed, 60 insertions(+), 48 deletions(-) diff --git a/include/swift/AST/CASTBridging.h b/include/swift/AST/CASTBridging.h index 7b3b778f533f9..64c6d60701aff 100644 --- a/include/swift/AST/CASTBridging.h +++ b/include/swift/AST/CASTBridging.h @@ -13,6 +13,8 @@ #ifndef SWIFT_C_AST_ASTBRIDGING_H #define SWIFT_C_AST_ASTBRIDGING_H +#include + #if __clang__ // Provide macros to temporarily suppress warning about the use of // _Nullable and _Nonnull. @@ -26,6 +28,7 @@ #else #define SWIFT_BEGIN_NULLABILITY_ANNOTATIONS #define SWIFT_END_NULLABILITY_ANNOTATIONS +#define _Nullable #endif //===----------------------------------------------------------------------===// @@ -73,7 +76,7 @@ void DiagnosticEngine_diagnose(void *, void *loc, BridgedDiagID diagID, int DiagnosticEngine_hadAnyError(void *); -typedef const char *BridgedIdentifier; +typedef void *BridgedIdentifier; #ifdef __cplusplus extern "C" { @@ -83,7 +86,8 @@ extern "C" { #endif BridgedIdentifier -SwiftASTContext_getIdentifier(void *ctx, const char *_Nullable str, long len); +SwiftASTContext_getIdentifier( + void *ctx, const uint8_t * _Nullable str, long len); void *SwiftImportDecl_create(void *, void *, void *, char, void *, BridgedArrayRef, BridgedArrayRef); @@ -100,17 +104,17 @@ void *SwiftTupleExpr_create(void *ctx, void *lparen, BridgedArrayRef subs, void *SwiftFunctionCallExpr_create(void *ctx, void *fn, void *args); -void *SwiftIdentifierExpr_create(void *ctx, const char *base, void *loc); +void *SwiftIdentifierExpr_create(void *ctx, BridgedIdentifier base, void *loc); -void *SwiftStringLiteralExpr_create(void *ctx, const char *_Nullable string, +void *SwiftStringLiteralExpr_create(void *ctx, const uint8_t * _Nullable string, long len, void *TokenLoc); -void *SwiftIntegerLiteralExpr_create(void *ctx, const char *_Nullable string, +void *SwiftIntegerLiteralExpr_create(void *ctx, const uint8_t * _Nullable string, long len, void *TokenLoc); void *SwiftBooleanLiteralExpr_create(void *ctx, _Bool value, void *TokenLoc); -void *SwiftVarDecl_create(void *ctx, const char *_Nullable name, +void *SwiftVarDecl_create(void *ctx, BridgedIdentifier _Nullable name, void *loc, _Bool isStatic, _Bool isLet, void *dc); void *IfStmt_create(void *ctx, void *ifLoc, void *cond, void *_Nullable then, void *_Nullable elseLoc, @@ -127,16 +131,16 @@ void *ParamDecl_create(void *ctx, void *loc, void *declContext); void *FuncDecl_create(void *ctx, void *staticLoc, _Bool isStatic, void *funcLoc, - const char *name, void *nameLoc, + BridgedIdentifier name, void *nameLoc, _Bool isAsync, void *_Nullable asyncLoc, _Bool throws, void *_Nullable throwsLoc, void *paramLLoc, BridgedArrayRef params, void *paramRLoc, void *_Nullable body, void *_Nullable returnType, void *declContext); -void *SimpleIdentTypeRepr_create(void *ctx, void *loc, const char *id); +void *SimpleIdentTypeRepr_create(void *ctx, void *loc, BridgedIdentifier id); -void *UnresolvedDotExpr_create(void *ctx, void *base, void *dotLoc, const char *name, void *nameLoc); +void *UnresolvedDotExpr_create(void *ctx, void *base, void *dotLoc, BridgedIdentifier name, void *nameLoc); void *ClosureExpr_create(void *ctx, void *body, void *dc); @@ -148,10 +152,10 @@ struct DeclContextAndDecl { void *decl; }; -struct DeclContextAndDecl StructDecl_create(void *ctx, void *loc, const char *name, void *nameLoc, - void *dc); -struct DeclContextAndDecl ClassDecl_create(void *ctx, void *loc, const char *name, void *nameLoc, - void *dc); +struct DeclContextAndDecl StructDecl_create( + void *ctx, void *loc, BridgedIdentifier name, void *nameLoc, void *dc); +struct DeclContextAndDecl ClassDecl_create( + void *ctx, void *loc, BridgedIdentifier name, void *nameLoc, void *dc); void TopLevelCodeDecl_dump(void *); void Expr_dump(void *); diff --git a/lib/AST/CASTBridging.cpp b/lib/AST/CASTBridging.cpp index b89f0bd0763ac..c5756d18eee66 100644 --- a/lib/AST/CASTBridging.cpp +++ b/lib/AST/CASTBridging.cpp @@ -17,10 +17,12 @@ inline llvm::ArrayRef getArrayRef(BridgedArrayRef bridged) { } BridgedIdentifier -SwiftASTContext_getIdentifier(void *ctx, const char *_Nullable str, long len) { - return static_cast(ctx) - ->getIdentifier(StringRef{str, size_t(len)}) - .get(); +SwiftASTContext_getIdentifier(void *ctx, const uint8_t *_Nullable str, long len) { + return const_cast( + static_cast(ctx) + ->getIdentifier( + StringRef{reinterpret_cast(str), size_t(len)}) + .getAsOpaquePointer()); } void *SwiftImportDecl_create(void *ctx, void *dc, void *importLoc, char kind, @@ -101,27 +103,30 @@ void *SwiftFunctionCallExpr_create(void *ctx, void *fn, void *args) { /*implicit*/ false); } -void *SwiftIdentifierExpr_create(void *ctx, const char *base, void *loc) { +void *SwiftIdentifierExpr_create(void *ctx, BridgedIdentifier base, void *loc) { ASTContext &Context = *static_cast(ctx); auto name = DeclNameRef{ - swift::Identifier::getFromOpaquePointer(const_cast(base))}; + swift::Identifier::getFromOpaquePointer(base)}; Expr *E = new (Context) UnresolvedDeclRefExpr( name, DeclRefKind::Ordinary, DeclNameLoc{*(SourceLoc *)&loc}); return E; } -void *SwiftStringLiteralExpr_create(void *ctx, const char *_Nullable string, - long len, void *TokenLoc) { +void *SwiftStringLiteralExpr_create( + void *ctx, const uint8_t *_Nullable string, + long len, void *TokenLoc) { ASTContext &Context = *static_cast(ctx); - return new (Context) StringLiteralExpr(StringRef{string, size_t(len)}, - *(SourceLoc *)&TokenLoc); + return new (Context) StringLiteralExpr( + StringRef{reinterpret_cast(string), size_t(len)}, + *(SourceLoc *)&TokenLoc); } -void *SwiftIntegerLiteralExpr_create(void *ctx, const char *_Nullable string, - long len, void *TokenLoc) { +void *SwiftIntegerLiteralExpr_create( + void *ctx, const uint8_t *_Nullable string, long len, void *TokenLoc) { ASTContext &Context = *static_cast(ctx); - return new (Context) IntegerLiteralExpr(StringRef{string, size_t(len)}, - *(SourceLoc *)&TokenLoc); + return new (Context) IntegerLiteralExpr( + StringRef{reinterpret_cast(string), size_t(len)}, + *(SourceLoc *)&TokenLoc); } void *SwiftBooleanLiteralExpr_create(void *ctx, bool value, void *TokenLoc) { @@ -129,12 +134,12 @@ void *SwiftBooleanLiteralExpr_create(void *ctx, bool value, void *TokenLoc) { return new (Context) BooleanLiteralExpr(value, *(SourceLoc *)&TokenLoc); } -void *SwiftVarDecl_create(void *ctx, const char *_Nullable nameId, +void *SwiftVarDecl_create(void *ctx, BridgedIdentifier _Nullable nameId, void *loc, bool isStatic, bool isLet, void *dc) { ASTContext &Context = *static_cast(ctx); return new (Context) VarDecl(isStatic, isLet ? VarDecl::Introducer::Let : VarDecl::Introducer::Var, - *(SourceLoc *)&loc, Identifier::getFromOpaquePointer((void *)nameId), + *(SourceLoc *)&loc, Identifier::getFromOpaquePointer(nameId), reinterpret_cast(dc)); } @@ -164,10 +169,11 @@ void *BraceStmt_createStmt(void *ctx, void *lbloc, BridgedArrayRef elements, voi *(SourceLoc *)&rbloc); } -void *ParamDecl_create(void *ctx, void *loc, - void *_Nullable argLoc, void *_Nullable argName, - void *_Nullable paramLoc, void *_Nullable paramName, - void *declContext) { +void *ParamDecl_create( + void *ctx, void *loc, + void *_Nullable argLoc, BridgedIdentifier _Nullable argName, + void *_Nullable paramLoc, BridgedIdentifier _Nullable paramName, + void *declContext) { ASTContext &Context = *static_cast(ctx); return new (Context) ParamDecl(*(SourceLoc *)&loc, *(SourceLoc *)&argLoc, Identifier::getFromOpaquePointer(argName), @@ -177,7 +183,7 @@ void *ParamDecl_create(void *ctx, void *loc, } void *FuncDecl_create(void *ctx, void *staticLoc, bool isStatic, void *funcLoc, - const char *name, void *nameLoc, + BridgedIdentifier name, void *nameLoc, bool isAsync, void *_Nullable asyncLoc, bool throws, void *_Nullable throwsLoc, void *paramLLoc, BridgedArrayRef params, void *paramRLoc, @@ -188,7 +194,7 @@ void *FuncDecl_create(void *ctx, void *staticLoc, bool isStatic, void *funcLoc, getArrayRef(params), *(SourceLoc *)¶mRLoc); auto declName = DeclName(*static_cast(ctx), - Identifier::getFromOpaquePointer((void *)name), paramList); + Identifier::getFromOpaquePointer(name), paramList); auto *out = FuncDecl::create( *static_cast(ctx), *(SourceLoc *)&staticLoc, isStatic ? StaticSpellingKind::KeywordStatic : StaticSpellingKind::None, @@ -200,16 +206,18 @@ void *FuncDecl_create(void *ctx, void *staticLoc, bool isStatic, void *funcLoc, return static_cast(out); } -void *SimpleIdentTypeRepr_create(void *ctx, void *loc, const char *id) { +void *SimpleIdentTypeRepr_create(void *ctx, void *loc, BridgedIdentifier id) { ASTContext &Context = *static_cast(ctx); return new (Context) SimpleIdentTypeRepr(DeclNameLoc(*(SourceLoc *)&loc), - DeclNameRef(Identifier::getFromOpaquePointer((void *)id))); + DeclNameRef(Identifier::getFromOpaquePointer(id))); } -void *UnresolvedDotExpr_create(void *ctx, void *base, void *dotLoc, const char *name, void *nameLoc) { +void *UnresolvedDotExpr_create( + void *ctx, void *base, void *dotLoc, BridgedIdentifier name, + void *nameLoc) { ASTContext &Context = *static_cast(ctx); return new (Context) UnresolvedDotExpr((Expr *)base, *(SourceLoc *)&dotLoc, - DeclNameRef(Identifier::getFromOpaquePointer((void *)name)), + DeclNameRef(Identifier::getFromOpaquePointer(name)), DeclNameLoc(*(SourceLoc *)&nameLoc), false); } @@ -235,11 +243,11 @@ void NominalTypeDecl_setMembers(void *decl, BridgedArrayRef members) { ((NominalTypeDecl *)decl)->addMember(m); } -DeclContextAndDecl StructDecl_create(void *ctx, void *loc, const char *name, void *nameLoc, - void *dc) { +DeclContextAndDecl StructDecl_create( + void *ctx, void *loc, BridgedIdentifier name, void *nameLoc, void *dc) { ASTContext &Context = *static_cast(ctx); auto *out = new (Context) StructDecl(SourceLoc(), // *(SourceLoc *)&loc, - Identifier::getFromOpaquePointer((void *)name), + Identifier::getFromOpaquePointer(name), SourceLoc(), // *(SourceLoc *)&nameLoc, {}, nullptr, (DeclContext *)dc); @@ -247,11 +255,11 @@ DeclContextAndDecl StructDecl_create(void *ctx, void *loc, const char *name, voi return {(DeclContext *)out, (NominalTypeDecl *)out, (Decl *)out}; } -DeclContextAndDecl ClassDecl_create(void *ctx, void *loc, const char *name, void *nameLoc, - void *dc) { +DeclContextAndDecl ClassDecl_create( + void *ctx, void *loc, BridgedIdentifier name, void *nameLoc, void *dc) { ASTContext &Context = *static_cast(ctx); auto *out = new (Context) ClassDecl(SourceLoc(), // *(SourceLoc *)&loc, - Identifier::getFromOpaquePointer((void *)name), + Identifier::getFromOpaquePointer(name), SourceLoc(), // *(SourceLoc *)&nameLoc, {}, nullptr, (DeclContext *)dc, false); @@ -263,4 +271,4 @@ void TopLevelCodeDecl_dump(void *decl) { ((TopLevelCodeDecl *)decl)->dump(); } void Expr_dump(void *expr) { ((Expr *)expr)->dump(); } void Decl_dump(void *expr) { ((Decl *)expr)->dump(); } -void Stmt_dump(void *expr) { ((Stmt *)expr)->dump(); } \ No newline at end of file +void Stmt_dump(void *expr) { ((Stmt *)expr)->dump(); } diff --git a/lib/ASTGen/Sources/ASTGen/Decls.swift b/lib/ASTGen/Sources/ASTGen/Decls.swift index 83c2c1e575089..2cc7dc89b92f0 100644 --- a/lib/ASTGen/Sources/ASTGen/Decls.swift +++ b/lib/ASTGen/Sources/ASTGen/Decls.swift @@ -72,7 +72,7 @@ extension ASTGenVisitor { if let nodeFirstName = node.firstName { var text = nodeFirstName.text firstName = text.withUTF8 { buf in - SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count).raw + SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count) } } else { firstName = nil @@ -81,7 +81,7 @@ extension ASTGenVisitor { if let nodeSecondName = node.secondName { var text = nodeSecondName.text secondName = text.withUTF8 { buf in - SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count).raw + SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count) } } else { secondName = nil From 2f61489543969c8ac836c16acabfd428701d0dff Mon Sep 17 00:00:00 2001 From: Doug Gregor Date: Wed, 5 Oct 2022 22:13:08 -0700 Subject: [PATCH 18/29] Don't try to bridge diagnostics from C++ to Swift We'll be going the other way, with diagnostics existentials. --- include/swift/AST/CASTBridging.h | 30 --------------------------- lib/ASTGen/Sources/ASTGen/Decls.swift | 2 +- 2 files changed, 1 insertion(+), 31 deletions(-) diff --git a/include/swift/AST/CASTBridging.h b/include/swift/AST/CASTBridging.h index 64c6d60701aff..f68abb0a036cb 100644 --- a/include/swift/AST/CASTBridging.h +++ b/include/swift/AST/CASTBridging.h @@ -31,28 +31,6 @@ #define _Nullable #endif -//===----------------------------------------------------------------------===// -// Diagnostic Engine -//===----------------------------------------------------------------------===// - -#ifndef __has_attribute // Optional of course. - #define __has_attribute(x) 0 // Compatibility with non-clang compilers. -#endif - -// TODO: Move this to somewhere common header. -#if __has_attribute(enum_extensibility) -#define ENUM_EXTENSIBILITY_ATTR(arg) __attribute__((enum_extensibility(arg))) -#else -#define ENUM_EXTENSIBILITY_ATTR(arg) -#endif - -// NOTE: This must be the same underlying value as C++ 'swift::DiagID' defined -// in 'DiagnosticList.cpp'. -typedef enum ENUM_EXTENSIBILITY_ATTR(open) BridgedDiagID : unsigned { -#define DIAG(KIND, ID, Options, Text, Signature) BridgedDiagID_##ID, -#include "swift/AST/DiagnosticsAll.def" -} BridgedDiagID; - SWIFT_BEGIN_NULLABILITY_ANNOTATIONS typedef long SwiftInt; @@ -68,14 +46,6 @@ typedef struct { SwiftInt byteLength; } BridgedCharSourceRange; -// FIXME: Can we bridge InFlightDiagnostic? -void DiagnosticEngine_diagnose(void *, void *loc, BridgedDiagID diagID, - BridgedArrayRef arguments, - BridgedCharSourceRange highlight, - BridgedArrayRef fixIts); - -int DiagnosticEngine_hadAnyError(void *); - typedef void *BridgedIdentifier; #ifdef __cplusplus diff --git a/lib/ASTGen/Sources/ASTGen/Decls.swift b/lib/ASTGen/Sources/ASTGen/Decls.swift index 2cc7dc89b92f0..682e82df8758b 100644 --- a/lib/ASTGen/Sources/ASTGen/Decls.swift +++ b/lib/ASTGen/Sources/ASTGen/Decls.swift @@ -51,7 +51,7 @@ extension ASTGenVisitor { let isLet = node.letOrVarKeyword.tokenKind == .letKeyword // TODO: don't drop "initializer" on the floor. - return SwiftVarDecl_create(ctx, pattern, loc, isStateic, isLet, declContext) + return SwiftVarDecl_create(ctx, nil, loc, isStateic, isLet, declContext) } public func visit(_ node: CodeBlockSyntax) -> UnsafeMutableRawPointer { From 227bc1a16806a35606cb1814051f16f1df2c0146 Mon Sep 17 00:00:00 2001 From: Doug Gregor Date: Wed, 5 Oct 2022 22:24:07 -0700 Subject: [PATCH 19/29] [ASTGen] Clean up casting with source locations --- lib/AST/CASTBridging.cpp | 96 +++++++++++++++++++++++----------------- 1 file changed, 55 insertions(+), 41 deletions(-) diff --git a/lib/AST/CASTBridging.cpp b/lib/AST/CASTBridging.cpp index c5756d18eee66..795219708c62a 100644 --- a/lib/AST/CASTBridging.cpp +++ b/lib/AST/CASTBridging.cpp @@ -16,6 +16,11 @@ inline llvm::ArrayRef getArrayRef(BridgedArrayRef bridged) { return {static_cast(bridged.data), size_t(bridged.numElements)}; } +static SourceLoc getSourceLocFromPointer(void *loc) { + auto smLoc = llvm::SMLoc::getFromPointer((const char *)loc); + return SourceLoc(smLoc); +} + BridgedIdentifier SwiftASTContext_getIdentifier(void *ctx, const uint8_t *_Nullable str, long len) { return const_cast( @@ -39,14 +44,15 @@ void *SwiftImportDecl_create(void *ctx, void *dc, void *importLoc, char kind, importPath.push_back(ident, loc); } return ImportDecl::create( - Context, static_cast(dc), *(SourceLoc *)&importLoc, - static_cast(kind), *(SourceLoc *)&kindLoc, + Context, static_cast(dc), + getSourceLocFromPointer(importLoc), + static_cast(kind), getSourceLocFromPointer(kindLoc), std::move(importPath).get()); } void *BridgedSourceLoc_advanced(void *loc, long len) { - SourceLoc l = ((SourceLoc *)&loc)->getAdvancedLoc(len); - return &l; // TODO: what? + SourceLoc l = getSourceLocFromPointer(loc).getAdvancedLoc(len); + return const_cast(l.getOpaquePointerValue()); } void *SwiftTopLevelCodeDecl_createStmt(void *ctx, void *DC, void *startLoc, @@ -54,8 +60,8 @@ void *SwiftTopLevelCodeDecl_createStmt(void *ctx, void *DC, void *startLoc, ASTContext &Context = *static_cast(ctx); auto *S = static_cast(element); auto Brace = - BraceStmt::create(Context, *(SourceLoc *)&startLoc, - {S}, *(SourceLoc *)&endLoc, + BraceStmt::create(Context, getSourceLocFromPointer(startLoc), + {S}, getSourceLocFromPointer(endLoc), /*Implicit=*/true); auto *TLCD = new (Context) TopLevelCodeDecl(static_cast(DC), Brace); @@ -67,8 +73,8 @@ void *SwiftTopLevelCodeDecl_createExpr(void *ctx, void *DC, void *startLoc, ASTContext &Context = *static_cast(ctx); auto *E = static_cast(element); auto Brace = - BraceStmt::create(Context, *(SourceLoc *)&startLoc, - {E}, *(SourceLoc *)&endLoc, + BraceStmt::create(Context, getSourceLocFromPointer(startLoc), + {E}, getSourceLocFromPointer(endLoc), /*Implicit=*/true); auto *TLCD = new (Context) TopLevelCodeDecl(static_cast(DC), Brace); @@ -83,8 +89,8 @@ void *SwiftSequenceExpr_create(void *ctx, BridgedArrayRef exprs) { void *SwiftTupleExpr_create(void *ctx, void *lparen, BridgedArrayRef subs, void *rparen) { return TupleExpr::create( - *static_cast(ctx), *(SourceLoc *)&lparen, - getArrayRef(subs), {}, {}, *(SourceLoc *)&rparen, + *static_cast(ctx), getSourceLocFromPointer(lparen), + getArrayRef(subs), {}, {}, getSourceLocFromPointer(rparen), /*Implicit*/ false); } @@ -108,7 +114,7 @@ void *SwiftIdentifierExpr_create(void *ctx, BridgedIdentifier base, void *loc) { auto name = DeclNameRef{ swift::Identifier::getFromOpaquePointer(base)}; Expr *E = new (Context) UnresolvedDeclRefExpr( - name, DeclRefKind::Ordinary, DeclNameLoc{*(SourceLoc *)&loc}); + name, DeclRefKind::Ordinary, DeclNameLoc{getSourceLocFromPointer(loc)}); return E; } @@ -118,7 +124,7 @@ void *SwiftStringLiteralExpr_create( ASTContext &Context = *static_cast(ctx); return new (Context) StringLiteralExpr( StringRef{reinterpret_cast(string), size_t(len)}, - *(SourceLoc *)&TokenLoc); + getSourceLocFromPointer(TokenLoc)); } void *SwiftIntegerLiteralExpr_create( @@ -126,12 +132,13 @@ void *SwiftIntegerLiteralExpr_create( ASTContext &Context = *static_cast(ctx); return new (Context) IntegerLiteralExpr( StringRef{reinterpret_cast(string), size_t(len)}, - *(SourceLoc *)&TokenLoc); + getSourceLocFromPointer(TokenLoc)); } void *SwiftBooleanLiteralExpr_create(void *ctx, bool value, void *TokenLoc) { ASTContext &Context = *static_cast(ctx); - return new (Context) BooleanLiteralExpr(value, *(SourceLoc *)&TokenLoc); + return new (Context) BooleanLiteralExpr( + value, getSourceLocFromPointer(TokenLoc)); } void *SwiftVarDecl_create(void *ctx, BridgedIdentifier _Nullable nameId, @@ -139,22 +146,24 @@ void *SwiftVarDecl_create(void *ctx, BridgedIdentifier _Nullable nameId, ASTContext &Context = *static_cast(ctx); return new (Context) VarDecl(isStatic, isLet ? VarDecl::Introducer::Let : VarDecl::Introducer::Var, - *(SourceLoc *)&loc, Identifier::getFromOpaquePointer(nameId), + getSourceLocFromPointer(loc), + Identifier::getFromOpaquePointer(nameId), reinterpret_cast(dc)); } void *IfStmt_create(void *ctx, void *ifLoc, void *cond, void *_Nullable then, void *_Nullable elseLoc, void *_Nullable elseStmt) { ASTContext &Context = *static_cast(ctx); - return new (Context) IfStmt(*(SourceLoc *)&ifLoc, (Expr *)cond, (Stmt *)then, *(SourceLoc *)&elseLoc, - (Stmt *)elseStmt, None, Context); + return new (Context) IfStmt( + getSourceLocFromPointer(ifLoc), (Expr *)cond, (Stmt *)then, + getSourceLocFromPointer(elseLoc), (Stmt *)elseStmt, None, Context); } void *BraceStmt_createExpr(void *ctx, void *lbloc, BridgedArrayRef elements, void *rbloc) { ASTContext &Context = *static_cast(ctx); - return BraceStmt::create(Context, *(SourceLoc *)&lbloc, + return BraceStmt::create(Context, getSourceLocFromPointer(lbloc), getArrayRef(elements), - *(SourceLoc *)&rbloc); + getSourceLocFromPointer(rbloc)); } void *BraceStmt_createStmt(void *ctx, void *lbloc, BridgedArrayRef elements, void *rbloc) { @@ -164,9 +173,9 @@ void *BraceStmt_createStmt(void *ctx, void *lbloc, BridgedArrayRef elements, voi } ASTContext &Context = *static_cast(ctx); - return BraceStmt::create(Context, *(SourceLoc *)&lbloc, + return BraceStmt::create(Context, getSourceLocFromPointer(lbloc), Context.AllocateCopy(nodes), - *(SourceLoc *)&rbloc); + getSourceLocFromPointer(rbloc)); } void *ParamDecl_create( @@ -175,9 +184,10 @@ void *ParamDecl_create( void *_Nullable paramLoc, BridgedIdentifier _Nullable paramName, void *declContext) { ASTContext &Context = *static_cast(ctx); - return new (Context) ParamDecl(*(SourceLoc *)&loc, *(SourceLoc *)&argLoc, + return new (Context) ParamDecl(getSourceLocFromPointer(loc), + getSourceLocFromPointer(argLoc), Identifier::getFromOpaquePointer(argName), - *(SourceLoc *)¶mLoc, + getSourceLocFromPointer(paramLoc), Identifier::getFromOpaquePointer(paramName), (DeclContext *)declContext); } @@ -190,16 +200,18 @@ void *FuncDecl_create(void *ctx, void *staticLoc, bool isStatic, void *funcLoc, void *_Nullable body, void *_Nullable returnType, void *declContext) { auto *paramList = ParameterList::create( - *static_cast(ctx), *(SourceLoc *)¶mLLoc, - getArrayRef(params), *(SourceLoc *)¶mRLoc); + *static_cast(ctx), getSourceLocFromPointer(paramLLoc), + getArrayRef(params), getSourceLocFromPointer(paramRLoc)); auto declName = DeclName(*static_cast(ctx), Identifier::getFromOpaquePointer(name), paramList); auto *out = FuncDecl::create( - *static_cast(ctx), *(SourceLoc *)&staticLoc, + *static_cast(ctx), getSourceLocFromPointer(staticLoc), isStatic ? StaticSpellingKind::KeywordStatic : StaticSpellingKind::None, - *(SourceLoc *)&funcLoc, declName, *(SourceLoc *)&nameLoc, isAsync, - *(SourceLoc *)&asyncLoc, throws, *(SourceLoc *)&throwsLoc, nullptr, + getSourceLocFromPointer(funcLoc), declName, + getSourceLocFromPointer(nameLoc), isAsync, + getSourceLocFromPointer(asyncLoc), throws, + getSourceLocFromPointer(throwsLoc), nullptr, paramList, (TypeRepr *)returnType, (DeclContext *)declContext); out->setBody((BraceStmt *)body, FuncDecl::BodyKind::Parsed); @@ -208,17 +220,19 @@ void *FuncDecl_create(void *ctx, void *staticLoc, bool isStatic, void *funcLoc, void *SimpleIdentTypeRepr_create(void *ctx, void *loc, BridgedIdentifier id) { ASTContext &Context = *static_cast(ctx); - return new (Context) SimpleIdentTypeRepr(DeclNameLoc(*(SourceLoc *)&loc), - DeclNameRef(Identifier::getFromOpaquePointer(id))); + return new (Context) SimpleIdentTypeRepr( + DeclNameLoc(getSourceLocFromPointer(loc)), + DeclNameRef(Identifier::getFromOpaquePointer(id))); } void *UnresolvedDotExpr_create( void *ctx, void *base, void *dotLoc, BridgedIdentifier name, void *nameLoc) { ASTContext &Context = *static_cast(ctx); - return new (Context) UnresolvedDotExpr((Expr *)base, *(SourceLoc *)&dotLoc, - DeclNameRef(Identifier::getFromOpaquePointer(name)), - DeclNameLoc(*(SourceLoc *)&nameLoc), false); + return new (Context) UnresolvedDotExpr( + (Expr *)base, getSourceLocFromPointer(dotLoc), + DeclNameRef(Identifier::getFromOpaquePointer(name)), + DeclNameLoc(getSourceLocFromPointer(nameLoc)), false); } void *ClosureExpr_create(void *ctx, void *body, void *dc) { @@ -246,9 +260,9 @@ void NominalTypeDecl_setMembers(void *decl, BridgedArrayRef members) { DeclContextAndDecl StructDecl_create( void *ctx, void *loc, BridgedIdentifier name, void *nameLoc, void *dc) { ASTContext &Context = *static_cast(ctx); - auto *out = new (Context) StructDecl(SourceLoc(), // *(SourceLoc *)&loc, + auto *out = new (Context) StructDecl(getSourceLocFromPointer(loc), Identifier::getFromOpaquePointer(name), - SourceLoc(), // *(SourceLoc *)&nameLoc, + getSourceLocFromPointer(nameLoc), {}, nullptr, (DeclContext *)dc); out->setImplicit(); // TODO: remove this. @@ -258,17 +272,17 @@ DeclContextAndDecl StructDecl_create( DeclContextAndDecl ClassDecl_create( void *ctx, void *loc, BridgedIdentifier name, void *nameLoc, void *dc) { ASTContext &Context = *static_cast(ctx); - auto *out = new (Context) ClassDecl(SourceLoc(), // *(SourceLoc *)&loc, + auto *out = new (Context) ClassDecl(getSourceLocFromPointer(loc), Identifier::getFromOpaquePointer(name), - SourceLoc(), // *(SourceLoc *)&nameLoc, + getSourceLocFromPointer(nameLoc), {}, nullptr, (DeclContext *)dc, false); out->setImplicit(); // TODO: remove this. return {(DeclContext *)out, (NominalTypeDecl *)out, (Decl *)out}; } -void TopLevelCodeDecl_dump(void *decl) { ((TopLevelCodeDecl *)decl)->dump(); } +void TopLevelCodeDecl_dump(void *decl) { ((TopLevelCodeDecl *)decl)->dump(llvm::errs()); } -void Expr_dump(void *expr) { ((Expr *)expr)->dump(); } -void Decl_dump(void *expr) { ((Decl *)expr)->dump(); } -void Stmt_dump(void *expr) { ((Stmt *)expr)->dump(); } +void Expr_dump(void *expr) { ((Expr *)expr)->dump(llvm::errs()); } +void Decl_dump(void *expr) { ((Decl *)expr)->dump(llvm::errs()); } +void Stmt_dump(void *expr) { ((Stmt *)expr)->dump(llvm::errs()); } From d4e7371ac43ef5d77030a05c9756b2aa60f954af Mon Sep 17 00:00:00 2001 From: Doug Gregor Date: Wed, 5 Oct 2022 22:33:12 -0700 Subject: [PATCH 20/29] [ASTGen] Make sure we spin the C++ parser even when we don't use it. This is a temporary hack; we shouldn't even need to create the C++ parser here. --- lib/ASTGen/Sources/ASTGen/ASTGen.swift | 1 - lib/Parse/ParseDecl.cpp | 5 +++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/ASTGen/Sources/ASTGen/ASTGen.swift b/lib/ASTGen/Sources/ASTGen/ASTGen.swift index bf91f683d16ec..c9491a6265c8e 100644 --- a/lib/ASTGen/Sources/ASTGen/ASTGen.swift +++ b/lib/ASTGen/Sources/ASTGen/ASTGen.swift @@ -70,7 +70,6 @@ public func parseTopLevelSwift( callback: @convention(c) (UnsafeMutableRawPointer, UnsafeMutableRawPointer) -> Void ) { let syntax = try! Parser.parse(source: String(cString: buffer)) - dump(syntax) declContext = dc ASTGenVisitor(ctx: ctx, base: buffer) .visit(syntax) diff --git a/lib/Parse/ParseDecl.cpp b/lib/Parse/ParseDecl.cpp index 60620404a0aec..bc79658b640f6 100644 --- a/lib/Parse/ParseDecl.cpp +++ b/lib/Parse/ParseDecl.cpp @@ -190,6 +190,11 @@ void Parser::parseTopLevel(SmallVectorImpl &decls) { !SourceMgr.hasCodeCompletionBuffer() && SF.Kind != SourceFileKind::SIL) { parseTopLevelSwift(contents.data(), CurDeclContext, &Context, &decls, appendToVector); + + // Spin the C++ parser to the end; we won't be using it. + while (!Tok.is(tok::eof)) { + consumeToken(); + } return; } #endif From 8d7f4dfdefe86a3d3516ce6361b6000c1e80fb72 Mon Sep 17 00:00:00 2001 From: Doug Gregor Date: Wed, 5 Oct 2022 22:36:25 -0700 Subject: [PATCH 21/29] Remove xcworkspacedata and UserInterfaceState.xcuserstate --- .../contents.xcworkspacedata | 7 ------- .../UserInterfaceState.xcuserstate | Bin 27695 -> 0 bytes 2 files changed, 7 deletions(-) delete mode 100644 lib/ASTGen/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata delete mode 100644 lib/ASTGen/.swiftpm/xcode/package.xcworkspace/xcuserdata/zoecarver.xcuserdatad/UserInterfaceState.xcuserstate diff --git a/lib/ASTGen/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata b/lib/ASTGen/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a6254f0..0000000000000 --- a/lib/ASTGen/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/lib/ASTGen/.swiftpm/xcode/package.xcworkspace/xcuserdata/zoecarver.xcuserdatad/UserInterfaceState.xcuserstate b/lib/ASTGen/.swiftpm/xcode/package.xcworkspace/xcuserdata/zoecarver.xcuserdatad/UserInterfaceState.xcuserstate deleted file mode 100644 index f7c5dfd1ffaf0573330ba5ff7fccec78723c7b6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27695 zcmeHwcU)7~`~N-XE*wCZviAxQ0wGLU2?UG~W*EVN2mw(fNI<2I-ec9a+FHAJRkUiY z9olKtYHO{v!`5wWtJcxI9Mw+ydu}dai0$|D{d_v9=j1xM zy|u;K86SU$LKLQGilJDFqj+j~P1sCxhqcAhW(uqCXqeIhpNwIhmiC%3%jBu%hEA(1 zg%+=@lQ|bx6q>uujhfy<`zZ%%SY<_LeWzJK&$wVKHG&#RjiS6LZz_h0r4&>grKIAi z1WH9EQfexd%BFIta;kzdQk7H{RZZ1UCaQ&+N=>6$sp(W3WufL!bE$dMeCkH(CTcNt zGj%()jJk`un|gqHm|91zr=FlTP)|}DspqK|s28c%sa@0?)NblcY7g}mwU;_feL{Uo zouj^_zM{USzNdbmexrV;u2O#>3NeU9BhW}BLoO&7g`iLrhQd(d+)qk0zrAWI^p{2I@dobR!ZFK?|sl&`oGDx&H8yo<`507to97CG;}dg0`dg&_47&`T*@m2hc%u2z`t`K_}1`=qJoz z77xcV?1DY8H}=6nI2eaxIgZA0ScOyZXqd+~kve*7?g1h2%a@Z_z` zCG!>Y9rHbNk-5bD#QeZ`c*>E<3jbx)(IUCK!u(7OyjboK;BAd>R zW;57KHjB+?3)nI2B(|QN%r>x%teI_Mo7pLB3p@0RR+szVo0echsF#8Dm zDEk<@f?dh3Vtd%t>>BoQ_6hb`b`!gqeU9DAZezEzhuI_SQT7=7A$y$ti2a!TggwEY zWY4f)v0t;_u$R~$*~^?0=gi4C7tWP)t9&XXI(d2xPRC>O?sa}iu5r{vpUj1;=U&*iHd-&D-8vb#9Ex(Rm z&p*LG#Xrx#z;EYY<#+IV`SJZ_O=#b)&>X6}(>7c0$YwK!lJxDoHPLwkxqueOZ>f(yHY36QgE&T5F znN?v8t@T!G59LC+3Rs|fD0j+3Uv!CJYxwtfNAyFnC2!!Bi9_7e)$>@NyDH2r|J%P}Ir1#P(a-8ZEPo^^>*r z9eQh3i?wBPt9fGIjr@-K>E=3FMBfFeWOcp0Xmv~Hl!}(N=2kP@sgp$w9J17QU2#RZ z+1hF8sE3wq%SB#&XMLS45Q=IVI$^!(nW&t&;}~uuhgW zu%p5Caud?x6LV9wij)MMPN7cJr76s!XT zq@$Cw%*EBs-NSQ~m$#3vpMOALKyXNCSa?Kac+`aA3Q2r64Zt{zEuF2P2^SEjbVCxV zC?}WVib{QHhk0g;rORq74@eXh)dBj1s(LFd+*M*BeO`_D(NN#gRwt7cSLC;JSUaJi zc1v5Mxno>$MXre2Vw=uoeLWS`cU!tTt#G@dv%A%7sJBi7<@DW#`Ykt@3(Rfij`~jE z5p^;*`xyH)tIv~$RM63G8v~3^-#B}syuvBf2&)itK^ljM;!Rbsq4 zC^11Dl#rC53Q9|g52}Qrr>9zE?v%#HMhYl1u#cc1cd#KHHJfUuIw&i!7b`Uj_(>Dh zStoNH2)ABb%fi%Y>eRgWgnUJELVS`!os_0lXcDwKMPhtPT70T1Rio0T)yX`duHAb3 z;eAk*s7^{9{TIF?IRz|vWKUYU;4HWao(D6t)Y&;2Fk8?=Lxe!$J zRa)}A1G@ZzF}0E-YXeBsNPn8GptgYn=qbSUgC=72}AIfnsa5#>@lt`EA> z=z41PwxLf5udEY1pl$cRbTGX)MNtDXZ5>M@ND{q|F2A91d~roy3wTFMTYX1&PlJA3 z{A^WYsyR`WmKt9t3law{j=3M^@j<;%7j+i|+}wro0rxKl_MJlM0pD|}g}|dXQZG?E zfHA*MouR1u)!3)P$y>sc0H%MQy-#X8_afLbK5gXfB!$eD_h{wQmE1 z{S~-s3NFD_z(ZSbJGSC3V4pYOxp+Pn@Xfdfzl68ot#~^=i_hcBG@^$CbM&Lb=~y}r zc%zCo(Pm(X%jr$@d-VJCeqen+0Lyb?{Fxv|&cpzpQ!+(N3)9BTVdgVSDBC}bq~BC? z@9*AU%u|B%0V<73r$$p5*TXCLQbSj#xcrDK&uS=^No9dQ6hHMLcbI)))qu2MVbxN( zR35m4e5!yN0}6E$+(EIP!YILO9W1AXR1syMis7$PSWdl#i9($)8UAVz7giZqe8m*Y ztm68aEzR|?^huZcK59D5umHM1smjil)|So|v$eXVv2%)4Oy6d0hq%kq(O;~u=73^i z2YuBiKwG-TmflMCsnk;SRPA-y1l2TH8qIOgY+*}hTwnijeI6YG!h#MK6Xy4spOJ_@i*=lRq_Ge%Ff8Iusr5So~k-9TC_SLY@wVmpsqSsI}Y`(iw2o^$w zP$6s$H4~ipY-*+uE<_4Z@D6ix&u?k%G4R^Mv&g+AgZMcJ{R^UIrIX+17O3 z!d_Av=Eh3>;CAfe5hy}=u3RZZNYGqJEgEdnV2xQ41sl|5g$3{cCU0-%7HSFQxr(|~ zkguYa3eh5a6lvRa>l^^matF1Xx)ae4>)XT(gst;L%^On% z&6yAGgXUaDtRC(t_Q<< zf#UZhPMZ(*1s;(J z-l81x9pk~!ra+cs27vNb@WrdBwUE!)3?BJy>O=6ypF`f_8|pmdD%_ACWGBSTgc_xw z9Hd8us1#L79ryV`xqVpDZ&WWq?H=l0VC=ft?X42$F6ruQZD})CwU}o~xf>A}y|7(P z-ACOo0`XrgUniSfXY4GO zz)Q9@>l*=}Eln*zXr*a9NIhg@l6KeKw;Had9u$qoZXu6=9KrA(r5>YJP%8zc5HBPM zsx>x$w+0-W=<5n;(nQTdiGYa4~=4`J_UU7YhHYc7Tg@HFS1$fcN;z zrX;8MCq?@GtbLkKQO{D*J=D|GGeVM(+(T`mHVY|2f#}b?XLOl6x=ZWDSPlG|wVz~8 zkepX(eJ5ORvp4k;wM~@R%hVR?6>6)HDx?YN!ss>BcIs8&20MieAydc_vc;x7dp!pz zsG`BrZqA)zu~@~J!%uV&x_WE3(V}kymjEuJOdN$RfEZ^RkQm&F(SWP%Qw6MPpxy?X z50X(5E!Ng|HcSx(VKmR~wAD8@!KWi&5bsd$Qtwgwz@@!UeE=lp0CkW$WU6m#m|_vR zuF2M@(cCfJG+k^Yx87>56 zqcDS=v^2DI=CxScTkE?eCS3#Knl2*O*a-s@as>$V1&!!mPf#bRQzi%ttv1RnXu+Xr zJ0L!<=$zhJ2ecdnA>sElb;g!7?ZvOu@Maqx*3)DsG67{2? z7sd*OLeU!P3iT89Gj&BU2*pAPy#Ft)v_N99w9@{?(%3t8#32V*P7yDZu0q3vvj1v1 zMUK>R<|>xqMq8F}*Xe9h-;M zcH8c`fmzlAhiL3y7Qi)!UQ+|wgGJ-o&fOb;sMNOuaT!$EeLysq0^w##Vw#xgfh-<` zK+!9O@itpTu}A^2U9Zt%|?qWVMe_wm4Xh5EIao?!p7tvQB>Q1bE2VscFS}~M>O^lOppF(r2-tV z1Pf8c?Hw)Cf&bcX+cu;c2Qyfp>b4;^1BVyuip&OJ+1ndTprsu$jpChBsWB-=ha&dq z!QQ&L-d0R6vQ=0lApi^Nl|iYvCuRj5UBjNOcD*#B7Vv_|3^8*vnj*9dGlUMoy2chh z8_;y2Qf6q%cPhbVgSz7h9HxmFsUC___uOY;<4VS6{7s9Wr&3(Z8c&}^Yg zm?_K>X0HLeG@!Xu6xd|9a0A4hph4d%P?5;(AUA8CC5DIA^7>g-^{qBq<1_efFMYQy zmN4rWD}_0d0mY%4dqjJ&&)`I@&n2^s2}fv0pen)~z-n$!KmAmd$w)(`3E z36S)Y!eWr~%|b-KdO~yN1`VqFEZQv2a+7fDDr5kih_eJ9X0^1MCI2LG7PzH=qF~HerKjZ8ps4Opn+V)TVe!nl? z5uO${0zZ9Ncvg5u*dRQ01pSPDLBGP}enY>btLP6*VT3UTt&X(x_^!n-T!W!Xm0pb;d2%B`JQYo%}R^<&Ab3=Ux9F|b#nP-|?AvWqz+6Jz$ z+OieW2W4x^WTlhj;yTQ&5J=86gWWtStdWM2hSMuyldHU_2d9a> zgg02G$JMt37l>=@w9ilhd#NJG6w~Y5TADz^buvXCzQwG7#f8F7 z;Z>OGW^fU&3EPDogIokQ;9|Rr5Vi`>*)3PHLnB(W23JC^z8cpE&kHXKFA1;o+v7N! zMZ6$d#CQp&lAx|*G4@N1*bGMWvam&1X-~|_kp1QW3$vS6n`m0XHpz&_{ZEakHx+2N zslj9J2TPj`7~8;t+Pfx0d@s$a*EIjTDjy`7age?0=*{pA)!Q7b!}IWb(3^k>ULc$U zz3mrvf!;n7-WNU?tha@DQJ>!46W$oCx22-qZo{|ZW%v$ZxA2zmw(xGh-tNM8gA(2p z_6REn4hYucUPt?YO|g3ixjM-OKWfw8I|KD+uXG*lt+i=ypQOFo|FHH3h;pE%ueB*} z-+xz4y;KB0i?>qI8}KH)89#@g$1mU)VL$3+*pYfgI3OGp4he^aBf?SPnDC)+T=-}M z-UeqR#GfnpHDsVd@f$#^KL#=-{uqQ)Ai|NtrxL~X>GuPYfyYUCa9f_sZ|F^6O@@{> z2x!_N4!rJd(WT^CU>O0Q1bd#>Eu(J}y^Kiguh$ABtzdV)k5`B>)X-LJ$$MaXo#r@8 zQOH;$z}VI3b+0z2?Y9$o%?pAa*66!e=PY9{edjEu0q4^q{%; z9K=Cqg^0=~=-xW9(N2`iZOxriTt>V(&`kQh_D~D{*5-MC01Li=FM{X2X!E>ZfCXO? zE?nz*FXJnH7W{+omA^IuUpDSXJ}8G)t;BER!jo_kBEx|0;}EU4j%0Q!=*iKhI{^+`HT}& zqkrl#FNpG{!_Xxq}6ni z@RRVX@SE^^zr<7NG?4hu!Y|-62MkHZU00C*9dVDfiTjVg$4L$t>OfhKwaNOAzko7r zw28J_T#V>iynrBQQMLrp;&Mcg(>3c6J%OHRmn}gf31S9Iw^5X?nQo$+=_v%U1n~q7 zBWOgwgr|v13qhQ?whY_}>lHBFE-p$0ISgHu=q{=1@PBPtqUVbeC&=;d5&3{kyn!O0 zFNz#G9XPci4urnNCiSJF1EH7ULW2Axsk?|SgdpE*5q&3pSHIM~3344Q^#??$KS)1B zKTJPDkQ+gs1dSq)uC>Qh^a^^VC{=fYJcO0Ch8Alt+mW&VV_h7j zDCJF(lzj%y1l!gJdK;ul=22nrURPWlj@24__E^=l}appd~DIwWf7FnxqRN*^OAl%Q~eA_=Onv``q%6N51?zkDi6C(!#tTq3lpFObnF(YRZ!-V?R3tPYnr>&x; zUBp4w15B}DS`QN=Myz7edgx8q+7zQ&F;7@0-5nI$Fma5s*Jh3rq$em#vKhz-+Dw^A zLW|Zi$xI59%A_&r%xHqL3CbZzOHdv``2>yWH=n(dd8CWx(Q7h{R=TDUuT7AmKygO` zlA87s1(MO_{)y2sut_2srEaLvF=dj`75o=QcO3gNwahqXJTrlEW+q}krjD6}*D{lt z2H0Hwh-suVfZAj*O%V1&DygFrSaGhUwQG8tblw#*qvke|Di6Ns(l7me;p6 zn~TiiS>4v&grBYrD7KAV%cQy@o$hPS-pjy?*EVNq5cbKOWMK3_A>97x{U@Pe3e!?2 z8wFV(aVy!L1F`3%Rx?wXX(A&2tibj2Rd$F@XDpB*XW9rVTE(;z$ddp0P5{%1qI;Mw zW+p+!1eNur#+hzr-nA)uWII763XP#g-Fi$cY;h-dlXcEEo1WzHj zh2Uufw~A_T*TO`nwOio8meqD99|A=n+7)7>f4$uP~5%;&{y0`YD((R-k8{*edaGQuZa5$ zSC}orQv}ubFk6{z1WhKmLYznBU#0S3ui4(By|tapdsOsB<~8PZW*74YvzvJn6Xq>u zFI~&L!@NsS13_kjnh9zlXc~cCz4r;S5HthGGeK5@x;8TVnD?0vnElKF<{)#3Im{ek zjxxuX4+)w@&{Bd{5VV<~HwXf1@C89X5j>1we}dx))`C9!^P9{GiT8lm|5tbxb4Kb9 zoYVhOQjYmT>Jdz$>)&CL3TrnUVVteBhocqZHbI4St+{)0U9|VSXb7Kb!RQlD2_jnV>qpB&1U)Rm<&l5j z@;AU`nh2Lxg6_A&#UjF`ot+`R2zr2^2c>s_%UD@tXwFC*v!-OJcFo_w0>Ov8K08;0 z%cCM(ZWQ72*ig6(bFo)i$lf8sWf8lWy_vm*y_H?UE@f|HZ)X7|D+yXfP!B-~B5B?&AqiePzG1j`l?ESrXa#g*dbEw)#C zmE9}CWe2;HeT{vc-NnAa?q=U)_pomf^c+FY6Z8T>FB0?;K`#@ug`igm+Dg#24J@3v zvi)4?U5gHgaM|7um)^DLwSUm^H=yN|h?Y+Ydex4Wvm#o~v7d=Af_4zJQ+fyI;v-A4 zYx`UF2MHwKiy(Pj1jz*vB)f)y#D(cwfUa;@gvd|q&+ISkuk3H^@9b6f502tsPii+o zZxXbJAb`tWg5DU@4*Z{*ti-0)- zfZ-G(V2%y}j4L(#XSuzaipvDZaEY9nOX8Bb6fTuZGdk-{z1&&fEYL*wTi1G=&T(vHGmj6Ty6V- zwMY7yW7l#WH(3Hly$FuaL~t~U;P`w9I9$*Id!-hxQ-sD;ZW`ChP3PJ;3)jxg;5s-f zL0=N|6+vGU^bJAZ67(HG-xKr$LFWm&uz~C9g~m*5JDbAI6QOaj7aHNx;S_>?{0A9- z12W(Q)++8cf-c#SaR(sdPq$#W`#3nJ4$PH%Kt#sn9_}H0j-V^znUre+9or5Fw*oDK zGxK(c^l(p!5LwNw;U4GKa_hMD+!Nde?n!PVK|d4p3qijU^cz9H6LgiJKM1A>Mg-#x z+|$>1j~4+Vn7-C~VD2A`{0$g+L&V5#f*CtT-m-ZQ?rmh?-Uj-LS?O(#%-62z54eL8 zP7VN0FfV$L!{9;Sr1Z5oaY6R4Y;woBb0R!G;y&g+;ZATTxl`Py+-dF%cb4Gc1dkwi zB*BgZI}zB^!ZLzg2zDjdZ3Fk29Uk1*+&92Sz7yf$-UkotMX)#U5$y91KK=%L{3hb# zcY-~7@xfDo4<7MYd=czP@F?jW_=x+@GVjnFzg|A#{#h?z_z}F54KTc;2pC@g3@;M_ z<2M8_t`yU=(_YPk4+6;Wp8P1@i}&VzcwgR+_vZunK!O7ZhW8+Xg9#2HIF#Tpg2M@p zAUJXZA8cQA_y|6d3gzV@WW=u;i9b*(hTvEcGKzm7^Ph(dp8}BKQwfIiBesQtA1y*A zgHGc!*d&6Zg}uEXV(l=5YKIbXpW`AWWuujXrb6Tt}ts|ZdcSWPetAerD4f?V)-UjQswB3QEj0n6V2mKh>gItb3NgQZIZ%S>btUj%20s}H;ZR&JBo^B??t z9v)2sOobOjh~$V4qFA3}N)_*i_74s78LJv98!5$gsx zBHn10HpS!qTSu&U$f&L2pCq{04v?osfII^LffvCgB0%5`0OD@f^o#r!2_7$t@F)}E zu~mde`A~S^c6+6r{2NsCYW_9;b$%DYMuMvdu363R=HKM^5L`>}c!DPl+VJMzwe3IQ z$~u{9w!-$sBSovF8NOkaoT5t9CZ%c=nv_&{I$~bFTA@|tB`P$U#Kbg>HbnCCB)~)C#MZ;=!n#iX-Grr zBu$zwJ~2U&3=a{62fZcbE7IV3CyM-}{9G+O@hvquvCjd2$bSUqT=?Szk6VT2!l85k zwYUACgZ%)4{Y;JhTmyfKKiyZ0KSMBl(_ZrapNR_moZyMVoWpR=#E<_9`|@A&-@vy= zRs4Pg(vwNwl{dl(3+em1($jau@BI;6Cr}OqSHt(bZAVV{3;ad+E-xH$8E_iHKA6?~ zCH_b8fX|=Y|I70|{1yJ^z8OgKwqxUW2L#7%_^bRM4iL3WCb)s%#?=nkfp%aBHWS=L zaI<*yMtlOrkW(cU4O8IUi1-M@I$6^73W$$wg74%tLQVL_G90q9Jz_-LEmgGD6Q5r> zq~XEk#SVH0>@eJ6#Gvyw4o(ivgD9y27+gZXXN_MG&m$n@P*C%|10MU97an+f{p(F&%50YInqe}FB}J; z94K!pgo=enW2eJIvCH6L*yE{*@Sxygb{sq=SbQ+>4eVTYK6?{vY25;wS)16m;IY4F zA=CW@Jm&Ws_B-|m_5z1EnuF(%a>KY0oFhE&*M*CPY-1yL2e*lPk9Xpo;i0-oeCEiH zN1hn@`N#_+e{~$@D03X;7~~l280VPjnC+->%yrZ`7C7o13mt16$2(4Roa8v!vC*-~ zaf;(q$9ay+9oIO%79UCz3E>+0$1@0#!Wr0espZ@cby zJ>mMf>zA%yyMF8Xz3We|zqtP9dex0`!)}poW8FI3?sa?FZMWOoZtuG7b35pE*zKs> zhi*T*)9x~NZ+BmJfA>K5VE1VESob*hcz2b%+TGyZ>OR~3cK18n*ST+W-|has`-kpl z+`n`G+5K1d-`%fzP#)NW@$m3acqDs__Q>?e_Rx6bdK7t7dDM7J^XT+g>~XuteI6@3 zUh>%HameEvkMkbCc=~zbb=8G0&Gg z4|tyRJmvYR=NZqdqehH!8YLU$Hp*kvs8Om>qes<@svR}ni}!N(3ib;13ipcil6%E? zDZJ9XGQ6_9a=f%&d0zQmW4xw$E%(~!^}5#=UVnIddIx$3d53t%c&B@7y!GDY-WA@J z-V?p2dAE7Ddt1G`yk~ho?7hbOaqo5B&w6k7KIDDG`^zrub^9k@#`_%hbedhbz?(?|MJ3c3Uv2VEV7~e|Y ziN2G3C;K+~Hu+k7XZTuuyL@N)cKa^yeaQE5-)DTc`R?}JizE}Nx{j&V3{U-U<`!)Er`pxj0???P@@>}e8i{BEz$Nbj$ZS;HE?^(aiemnf$ z^n1(iZNGQ@4*DJTJL>nL-$#C5`d#)P=I`q7>mTK>^iS|l^iT57@Xzwk@z?t2`4{_F z`#1VG`?vVF`nUPF`!Dpr!~ahIyZs;WU*W&Xf3^R!{@eX`_`l}A%YV239{;`mNBocZ zANT*n|D^wE|Fiy|`JWG91AGJI0Z9Rs0o4JG0WAU30;UIa1at<>3g`}47O*N{L%^1R ztpVEub_Bc@uq)urfV~0l1bh?d5EvVn6*xYyJ#cQ|LxGP3J{Gt#uqSX$;M&0Tfg1vM z1s(}J7x;USEGRZ8PJB{lkUA(iC^cwmkTqy_&<#OzgXRY<4Z1Jrk)X$dRtEJ1JsY$o z=vdGvLB9nL3my^d80;ME85|m{3{DFk9h@1Q9ehXd1Hn%RKNq|=_(1R{!6$=14T%X+ zhvbClLdrsFLl%WB33(yp^^mtij)WWwIUe$H$hnZOLw*SL3LO(#6*?)jB~%Dq6#7W$ z_Rt-nuZ8Xk-5t6obZ_W8q3?x$7Wzf#SE1j8ei!;f=!MW)`ge?p^9rk_L`LK&& zKZcJ8A00j>+!)>!J}bOCd`|eh@EgNP_)X!9!XFD?8Qv4VCVXx9`tS|m&xLObe>Hq( z`0L?sgufYnF#K@%(eMw$&xL;;ekuHN_)p=#M4$+#2w8+{gnNWvgghc9LJ^^i$cV^_ z$cfNKtcchc@pQzq5t}1UM|>a2L~@Z1k;5ZLMmj~xB3&chBRwO%A{CL!$b`tm$fU@W z$h64Ok(rU%k($Wd$VrhmMy`(B9rJrwmw)MHWWqMnV~9QAzE zi%~B}y%M!8>eZ+{QHP>FjQS|*lc>{CXQMug`XcJPsNdz3e5Bk{o+3|^kCtc3v*j9j zu3RTCkWZ3NmN&|qu z!P2Celq&0=x3rg zML!??QuLPS1JQ?~k3=7fJ|6vX^oi)tqko9L5Pd27a`aEpzr^q{!(v9nIL3I#_{K!V zz(bT{;$lX}WX5F2XkvpLj-C{jr<6;wH)v?L3sj=y?8L_(9;@GlSV{CP7ZS45ime|(Vw%GRAxv{s#-WIzo zc6sdmv1?-2#Xb@HWbAXXJ7ZsueIxeG*n_c0VvofhSEMNN6#0rVib6%TVzy$AVxHng z#RA1b#bU*+ilvG*igk(&ij9h=70)U*E4C`$Q0!5>t$0uIf#QJTq~f&VoZ@rE1;wQ} z6i3IgaeSP6oM)U@oKIY2oIEZjP7#+Lml>BGr-^$sZbRJ0xToVb#chjwHEvJb+i~y3 zy&rch?qb~KxSy3iNTf!3wn-gA0csb#fgk1^mChSZ2AmKp5p@bs|XA-_h_$uMsgbN9m5-unF zq~cXBDj$_fm7*$9)vIn$%~J`g1*(Or#j0CXcd1sWdQ^|A)~lXWJ+0cLdQP=dwM(^I zwMTVGbyW4C>Lb;cs>`aMRlll!PaKx$ndqJ9o9Ley29HTsCnm!qp>q-qi6x0;i4}=+ z6Yox3pSUgY{lwFWSJWfaj%sJMi`rf7sSZ>}skLgoxR#kfiXW z$fUF+ZBlhoW76!TrAf<@?oV2sv_9$iq}P&OPui8VJLy2ur%7j%K2Q28>D#0qk}f7) zPG*z&rn(Pb7bud?v*) z#U~{(B{?N6B_ky}1;WXcf|Ri-hLqBjij=ApOG-ydSIX>^IVtl~NXo*Ln^Tsg+@7*L zbO?6N8O!ZEkmAWu>aq2CpOVj8yS(!VbdtU-eR=v_>G!6eOTUnQDgAQ#&!gv#zIF7{(YKFYp220fWq4$a z%J9jUm9a46!Hh>TR%G;KJf5*W#_^1gGfrfD znsFxMTqe#8&eUZ#XD-d$lzBMwQkGj*d{$akMpkx~CTna~MOIaoDQkRIT~>WoLzX$K zIjcQuUe&~pZvwE@~&)S@|C+qF3_p(07I+%4N>%**%vrcB6&N`R% zOV;mMe`KRvfXL-(DIrro|nzJHjW6q|W=W<@m*_yLGXJ^jqIs0=C<$RiRIp^n` z-*W!YU=6Er(2USHX0G`X5dnj1B%HM=!mYMr%- z+H&m-?K18C+K04{YFB92Yd2}1*S@ITqTQ<9uHC8Kt9@7dq4tFKl=h7F3+-3hZ?)fR zujbOZvfS|8sN9&`xZH$X_>UKI({nR(b8>TYYjVfsPROmxtg-pf0ZcQWsE-nqOl^1jadHt+kq^LbZw zw2sv|=p1#$E>stxOVo|g73zw0Wjdp-T34%^pqr#?&^77i=;rGL-2&Z0-D2IX zy4!Tiba(3R*4?YytlO{qF@IG4==}QpMfq#;cjceT|1$rZ{O|M6=l@bb7jOl`3Pu(< z7q}F-7kCx~7K9Wi3)BV41!)CY1vv$|1-b%bfvKRWU{1mO0#dNB;O2rQ1-BP0FSxtl zzJdn}o-Wu_@La(Q1uqqBDcDxXY;-`ZWD$eWpHJU!*V7SLmzs3g0Q*SGd3MP~p+SZwkLJJYRUR@W;X{g})U3R(Q1t712d( zQAm-d$Xs-D(UV2{i+(h?8xjqr29sgDq0Ufmm};;Zx(u@oHyGv_ZZr_XGQ-`5dkqg5 z9yP2m^cdC{o-@2?*kw3o_{ea=@TuXf;d8@RhHni&7%mzv7mp}*DwY+y7P}XF7JC=_ z6$cat7l#&y7i){_ix(BID}JZ=e2GVix}>6{y`;NjZpn=$q-06S-6i*xJXrEb$%>Ly zC2LC7mON9kxnxJl8zpa+>@C?>@wKmPpN-tP-$ps zM5(+qt5j2(TdFH9DAku1m6nv2l^RQ{N^45HO7AIsx%7DH)v~a%F=fqVi_2D*Z7h4H zY;)Q3W!uZ%EZbZ5PT9V){bdKs4ws!MJ5}~=*@d!8Wmn36EBm7ymow#V<(}oC<*DVP z%d^Tg<$2`=h>)0JFhRAo_RN9BE$FH|0?JYV@skplJ*WEq>NVBtsy9?WRsC%B=IX80uU5ZSy{r0I z_1D!uR{vD}OZBhSS8Gts@S4z?=$hObQ%zG%OHFHyrDjHrwMMA9xn@bt?KR75?yq^M z=Fys!H9a-EYJN3^nG#GYQ=%!!q&4N5@=W=r3X{=PX{t6&GBudYre;&8X_l$mG}m;a ziI|p{Za3Xwy3_QK>0#5OrnRQ6rtPMkrq@loO>ddrHoa&1z;wWL*mTr%*7TX_3)9!N mQ)_3{cGu3SonL!t92!TDW5+p2+eR2mza6yFZ~ObWrT-7*SnD?c From f516223c6015f78d800ea3b224011fbe0118ba06 Mon Sep 17 00:00:00 2001 From: Doug Gregor Date: Wed, 5 Oct 2022 22:41:28 -0700 Subject: [PATCH 22/29] [ASTGen] Do a little property-wrapper dance to move DeclContext into the visitor --- lib/ASTGen/Sources/ASTGen/ASTGen.swift | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/lib/ASTGen/Sources/ASTGen/ASTGen.swift b/lib/ASTGen/Sources/ASTGen/ASTGen.swift index c9491a6265c8e..c5d4e7e7f4768 100644 --- a/lib/ASTGen/Sources/ASTGen/ASTGen.swift +++ b/lib/ASTGen/Sources/ASTGen/ASTGen.swift @@ -17,15 +17,21 @@ extension UnsafePointer { } } -// TODO: :( -var declContext: UnsafeMutableRawPointer! = nil +/// Little utility wrapper that lets us +@propertyWrapper +class Boxed { + var wrappedValue: Value + + init(wrappedValue: Value) { + self.wrappedValue = wrappedValue + } +} struct ASTGenVisitor: SyntaxTransformVisitor { let ctx: UnsafeMutableRawPointer let base: UnsafePointer - // TOOD: we need to be up updating this. -// var declContext: UnsafeMutableRawPointer + @Boxed var declContext: UnsafeMutableRawPointer // TODO: this some how messes up the witness table when I uncomment it locally :/ // public func visit(_ node: T?) -> [UnsafeMutableRawPointer]? { @@ -70,8 +76,7 @@ public func parseTopLevelSwift( callback: @convention(c) (UnsafeMutableRawPointer, UnsafeMutableRawPointer) -> Void ) { let syntax = try! Parser.parse(source: String(cString: buffer)) - declContext = dc - ASTGenVisitor(ctx: ctx, base: buffer) + ASTGenVisitor(ctx: ctx, base: buffer, declContext: dc) .visit(syntax) .forEach { callback($0, outputContext) } } From c95b6c40c9a8518d55b053b7218c1ab7acdd014d Mon Sep 17 00:00:00 2001 From: Doug Gregor Date: Thu, 6 Oct 2022 10:04:16 -0700 Subject: [PATCH 23/29] [ASTGen] Fix integer and string literal mapping --- lib/ASTGen/Sources/ASTGen/Literals.swift | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/lib/ASTGen/Sources/ASTGen/Literals.swift b/lib/ASTGen/Sources/ASTGen/Literals.swift index 9c7fc7217f1b6..f52285f2f406e 100644 --- a/lib/ASTGen/Sources/ASTGen/Literals.swift +++ b/lib/ASTGen/Sources/ASTGen/Literals.swift @@ -8,8 +8,7 @@ extension ASTGenVisitor { let loc = self.base.advanced(by: node.position.utf8Offset).raw var segment = node.segments.first!.as(StringSegmentSyntax.self)!.content.text return segment.withUTF8 { buf in - let id = SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count) - return SwiftStringLiteralExpr_create(ctx, id, buf.count, loc) + return SwiftStringLiteralExpr_create(ctx, buf.baseAddress, buf.count, loc) } } @@ -17,8 +16,7 @@ extension ASTGenVisitor { let loc = self.base.advanced(by: node.position.utf8Offset).raw var segment = node.digits.text return segment.withUTF8 { buf in - let id = SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count) - return SwiftIntegerLiteralExpr_create(ctx, id, buf.count, loc) + return SwiftIntegerLiteralExpr_create(ctx, buf.baseAddress, buf.count, loc) } } From a449dc1413efe29fd0dfc7f35990caf7e60754e3 Mon Sep 17 00:00:00 2001 From: Doug Gregor Date: Thu, 6 Oct 2022 10:08:42 -0700 Subject: [PATCH 24/29] Bring back an important assertion --- lib/AST/DeclContext.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/AST/DeclContext.cpp b/lib/AST/DeclContext.cpp index 697b949c2c178..758b60ceefabd 100644 --- a/lib/AST/DeclContext.cpp +++ b/lib/AST/DeclContext.cpp @@ -882,7 +882,7 @@ void IterableDeclContext::addMember(Decl *member, Decl *hint, bool insertAtHead) void IterableDeclContext::addMemberSilently(Decl *member, Decl *hint, bool insertAtHead) const { -// assert(!isa(member) && "Accessors should not be added here"); + assert(!isa(member) && "Accessors should not be added here"); assert(!member->NextDecl && "Already added to a container"); #ifndef NDEBUG From 5a0d775fa5c476791708c7793b1b6f4c9166330a Mon Sep 17 00:00:00 2001 From: Doug Gregor Date: Thu, 6 Oct 2022 10:09:34 -0700 Subject: [PATCH 25/29] [ASTGen] Add a comment about the purporse of its Package.swift --- lib/ASTGen/Package.swift | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lib/ASTGen/Package.swift b/lib/ASTGen/Package.swift index 9ac8295bce651..db5a32a074a54 100644 --- a/lib/ASTGen/Package.swift +++ b/lib/ASTGen/Package.swift @@ -1,5 +1,12 @@ // swift-tools-version: 5.6 +// The CMake build system is the only one that's able to produce a working +// compiler. This Package.swift makes it easier to build and work with the +// swiftASTGen library within IDEs, but it's mainly there for editing---it +// won't create something that can be meaningfully executed. Most things with +// the new Swift parser are better implemented/tested within or on top of the +// swift-syntax package. + import PackageDescription let package = Package( From 4b4751cc077f21e5827fce43d2d486f998541e2c Mon Sep 17 00:00:00 2001 From: Doug Gregor Date: Thu, 6 Oct 2022 10:12:38 -0700 Subject: [PATCH 26/29] [CMake] Only add swiftCore dependency when the new Swift parser is included. --- tools/driver/CMakeLists.txt | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/tools/driver/CMakeLists.txt b/tools/driver/CMakeLists.txt index 4cacba0ae4731..a732779a2bab3 100644 --- a/tools/driver/CMakeLists.txt +++ b/tools/driver/CMakeLists.txt @@ -14,10 +14,15 @@ if(${BOOTSTRAPPING_MODE} MATCHES "BOOTSTRAPPING.*") ) target_link_libraries(swift-frontend-bootstrapping0 PRIVATE - swiftCore swiftDriverTool swiftCompilerStub) + if(SWIFT_SWIFT_PARSER) + target_link_libraries(swift-frontend-bootstrapping0 + PRIVATE + swiftCore) + endif() + swift_create_post_build_symlink(swift-frontend-bootstrapping0 SOURCE "swift-frontend${CMAKE_EXECUTABLE_SUFFIX}" DESTINATION "swiftc${CMAKE_EXECUTABLE_SUFFIX}" @@ -34,10 +39,15 @@ if(${BOOTSTRAPPING_MODE} MATCHES "BOOTSTRAPPING.*") ) target_link_libraries(swift-frontend-bootstrapping1 PRIVATE - swiftCore swiftDriverTool swiftCompilerModules-bootstrapping1) + if(SWIFT_SWIFT_PARSER) + target_link_libraries(swift-frontend-bootstrapping1 + PRIVATE + swiftCore) + endif() + swift_create_post_build_symlink(swift-frontend-bootstrapping1 SOURCE "swift-frontend${CMAKE_EXECUTABLE_SUFFIX}" DESTINATION "swiftc${CMAKE_EXECUTABLE_SUFFIX}" @@ -51,10 +61,15 @@ add_swift_host_tool(swift-frontend ) target_link_libraries(swift-frontend PUBLIC - swiftCore swiftDriverTool swiftCompilerModules) +if(SWIFT_SWIFT_PARSER) + target_link_libraries(swift-frontend + PRIVATE + swiftCore) +endif() + _add_swift_runtime_link_flags(swift-frontend "../../lib" "") # Create a `swift-driver` executable adjacent to the `swift-frontend` executable From 7478df009ddcefd8eeb08534021a50d4216793c7 Mon Sep 17 00:00:00 2001 From: Doug Gregor Date: Fri, 7 Oct 2022 15:47:29 -0700 Subject: [PATCH 27/29] [CMake] Ensure that the SourceKit framework links Swift as needed --- tools/SourceKit/cmake/modules/AddSwiftSourceKit.cmake | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tools/SourceKit/cmake/modules/AddSwiftSourceKit.cmake b/tools/SourceKit/cmake/modules/AddSwiftSourceKit.cmake index b189501bebb3b..48ab4d81f7025 100644 --- a/tools/SourceKit/cmake/modules/AddSwiftSourceKit.cmake +++ b/tools/SourceKit/cmake/modules/AddSwiftSourceKit.cmake @@ -362,6 +362,11 @@ macro(add_sourcekit_framework name) set(lib_dir ${SOURCEKIT_LIBRARY_OUTPUT_INTDIR}) set(framework_location "${lib_dir}/${name}.framework") + # Once the new Swift parser is linked, everything has Swift modules. + if (SWIFT_SWIFT_PARSER) + set(SOURCEKITFW_HAS_SWIFT_MODULES ON) + endif() + if (NOT SOURCEKIT_DEPLOYMENT_OS MATCHES "^macosx") set(FLAT_FRAMEWORK_NAME "${name}") set(FLAT_FRAMEWORK_IDENTIFIER "com.apple.${name}") From 7fd7e4fba50c9846463d5e18a6495f024424ea8a Mon Sep 17 00:00:00 2001 From: Doug Gregor Date: Fri, 7 Oct 2022 16:01:44 -0700 Subject: [PATCH 28/29] [CMake Export swiftASTGen so the LLDB target can use it --- lib/ASTGen/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/ASTGen/CMakeLists.txt b/lib/ASTGen/CMakeLists.txt index 6531a00f2d91c..d2149fd9a0395 100644 --- a/lib/ASTGen/CMakeLists.txt +++ b/lib/ASTGen/CMakeLists.txt @@ -33,4 +33,6 @@ if (SWIFT_SWIFT_PARSER) "${SWIFT_PATH_TO_EARLYSWIFTSYNTAX_BUILD_DIR}/swift") add_dependencies(swiftASTGen swiftAST) + + set_property(GLOBAL APPEND PROPERTY SWIFT_EXPORTS swiftASTGen) endif() From aed4f74f3fde84e09e0ddc8908cca0054a3d22de Mon Sep 17 00:00:00 2001 From: Doug Gregor Date: Fri, 7 Oct 2022 21:49:34 -0700 Subject: [PATCH 29/29] [ASTGen] Set the target triple for swiftASTGen. Builds of Swift sources via CMake are not getting a target triple set, so they pick up the host triple. This leads to spurious warnings about linking in code built for a newer OS version (e.g., the one you're on) into libraries with an older deployment target. It also breaks building a cross-compiler. Always set the target triple. --- lib/ASTGen/CMakeLists.txt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/lib/ASTGen/CMakeLists.txt b/lib/ASTGen/CMakeLists.txt index d2149fd9a0395..9435aef15904e 100644 --- a/lib/ASTGen/CMakeLists.txt +++ b/lib/ASTGen/CMakeLists.txt @@ -8,6 +8,21 @@ if (SWIFT_SWIFT_PARSER) Sources/ASTGen/Stmts.swift ) + # Set the appropriate target triple. + if(SWIFT_HOST_VARIANT_SDK IN_LIST SWIFT_DARWIN_PLATFORMS) + set(DEPLOYMENT_VERSION "${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_DEPLOYMENT_VERSION}") + endif() + + if(SWIFT_HOST_VARIANT_SDK STREQUAL ANDROID) + set(DEPLOYMENT_VERSION ${SWIFT_ANDROID_API_LEVEL}) + endif() + + get_target_triple(target target_variant "${SWIFT_HOST_VARIANT_SDK}" "${SWIFT_HOST_VARIANT_ARCH}" + MACCATALYST_BUILD_FLAVOR "" + DEPLOYMENT_VERSION "${DEPLOYMENT_VERSION}") + + target_compile_options(swiftASTGen PRIVATE $<$:-target;${target}>) + # Link against the SwiftSyntax parser and libraries it depends on. The actual # formulation of this is a hack to work around a CMake bug in Ninja file # generation that results in multiple Ninja targets producing the same file in