diff --git a/SwiftCompilerSources/CMakeLists.txt b/SwiftCompilerSources/CMakeLists.txt index 138d208d9a3a9..44ed3a90d0546 100644 --- a/SwiftCompilerSources/CMakeLists.txt +++ b/SwiftCompilerSources/CMakeLists.txt @@ -241,15 +241,9 @@ else() #include \"Basic/BasicBridging.h\" #include \"Basic/SourceLoc.h\" -#include \"AST/ASTBridging.h\" -#include \"AST/DiagnosticEngine.h\" -#include \"AST/DiagnosticConsumer.h\" - #include \"SIL/SILBridging.h\" #include \"SILOptimizer/OptimizerBridging.h\" - -#include \"Parse/RegexParserBridging.h\" ") add_custom_command( OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/HeaderDependencies.cpp" diff --git a/SwiftCompilerSources/Package.swift b/SwiftCompilerSources/Package.swift index 3b1a3817cb686..5785c411c1907 100644 --- a/SwiftCompilerSources/Package.swift +++ b/SwiftCompilerSources/Package.swift @@ -48,39 +48,22 @@ let package = Package( .library( name: "swiftCompilerModules", type: .static, - targets: ["Basic", "AST", "Parse", "SIL", "Optimizer", "_CompilerRegexParser"]), + targets: ["Basic", "SIL", "Optimizer"]), ], dependencies: [ ], // Note that targets and their dependencies must align with // 'SwiftCompilerSources/Sources/CMakeLists.txt' targets: [ - .compilerModuleTarget( - name: "_CompilerRegexParser", - dependencies: [], - path: "_RegexParser_Sources", - swiftSettings: [ - // Workaround until `_CompilerRegexParser` is imported as implementation-only - // by `_StringProcessing`. - .unsafeFlags([ - "-Xfrontend", - "-disable-implicit-string-processing-module-import" - ])]), .compilerModuleTarget( name: "Basic", dependencies: []), - .compilerModuleTarget( - name: "AST", - dependencies: ["Basic"]), - .compilerModuleTarget( - name: "Parse", - dependencies: ["Basic", "AST", "_CompilerRegexParser"]), .compilerModuleTarget( name: "SIL", dependencies: ["Basic"]), .compilerModuleTarget( name: "Optimizer", - dependencies: ["Basic", "SIL", "Parse"]), + dependencies: ["Basic", "SIL"]), ], cxxLanguageStandard: .cxx17 ) diff --git a/SwiftCompilerSources/Sources/AST/CMakeLists.txt b/SwiftCompilerSources/Sources/AST/CMakeLists.txt deleted file mode 100644 index 3d814cad0a6c4..0000000000000 --- a/SwiftCompilerSources/Sources/AST/CMakeLists.txt +++ /dev/null @@ -1,14 +0,0 @@ -# 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 http://swift.org/LICENSE.txt for license information -# See http://swift.org/CONTRIBUTORS.txt for Swift project authors - -add_swift_compiler_module(AST - DEPENDS - Basic - SOURCES - DiagnosticEngine.swift) - diff --git a/SwiftCompilerSources/Sources/AST/DiagnosticEngine.swift b/SwiftCompilerSources/Sources/AST/DiagnosticEngine.swift deleted file mode 100644 index 69d4c8b77f8a7..0000000000000 --- a/SwiftCompilerSources/Sources/AST/DiagnosticEngine.swift +++ /dev/null @@ -1,122 +0,0 @@ -//===--- DiagnosticEngine.swift -------------------------------------------===// -// -// 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 -// -//===----------------------------------------------------------------------===// - -import ASTBridging - -import Basic - -public typealias DiagID = BridgedDiagID - -public protocol DiagnosticArgument { - func _withBridgedDiagnosticArgument(_ fn: (swift.DiagnosticArgument) -> Void) -} -extension String: DiagnosticArgument { - public func _withBridgedDiagnosticArgument(_ fn: (swift.DiagnosticArgument) -> Void) { - _withStringRef { fn(swift.DiagnosticArgument($0)) } - } -} -extension Int: DiagnosticArgument { - public func _withBridgedDiagnosticArgument(_ fn: (swift.DiagnosticArgument) -> Void) { - fn(swift.DiagnosticArgument(Int32(self))) - } -} - -public struct DiagnosticFixIt { - public let start: SourceLoc - public let byteLength: Int - public let text: String - - public init(start: SourceLoc, byteLength: Int, replacement text: String) { - self.start = start - self.byteLength = byteLength - self.text = text - } - - func withBridgedDiagnosticFixIt(_ fn: (swift.DiagnosticInfo.FixIt) -> Void) { - text._withStringRef { bridgedTextRef in - let bridgedDiagnosticFixIt = swift.DiagnosticInfo.FixIt( - swift.CharSourceRange(start.bridged, UInt32(byteLength)), - bridgedTextRef, - ArrayRefOfDiagnosticArgument()) - fn(bridgedDiagnosticFixIt) - } - } -} - -public struct DiagnosticEngine { - private let bridged: BridgedDiagnosticEngine - - public init(bridged: BridgedDiagnosticEngine) { - self.bridged = bridged - } - public init?(bridged: BridgedOptionalDiagnosticEngine) { - guard let object = bridged.object else { - return nil - } - self.bridged = BridgedDiagnosticEngine(object: object) - } - - public func diagnose(_ position: SourceLoc?, - _ id: DiagID, - _ args: [DiagnosticArgument], - highlight: CharSourceRange? = nil, - fixIts: [DiagnosticFixIt] = []) { - - let bridgedSourceLoc: swift.SourceLoc = position.bridged - let bridgedHighlightRange: swift.CharSourceRange = highlight.bridged - var bridgedArgs: [swift.DiagnosticArgument] = [] - var bridgedFixIts: [swift.DiagnosticInfo.FixIt] = [] - - // Build a higher-order function to wrap every 'withBridgedXXX { ... }' - // calls, so we don't escape anything from the closure. 'bridgedArgs' and - // 'bridgedFixIts' are temporary storage to store bridged values. So they - // should not be used after the closure is executed. - - var closure: () -> Void = { - bridgedArgs.withBridgedArrayRef { bridgedArgsRef in - bridgedFixIts.withBridgedArrayRef { bridgedFixItsRef in - DiagnosticEngine_diagnose(bridged, bridgedSourceLoc, - id, bridgedArgsRef, - bridgedHighlightRange, bridgedFixItsRef) - } - } - } - // 'reversed()' because the closure should be wrapped in that order. - for arg in args.reversed() { - closure = { [closure, arg] in - arg._withBridgedDiagnosticArgument { bridgedArg in - bridgedArgs.append(bridgedArg) - closure() - } - } - } - // 'reversed()' because the closure should be wrapped in that order. - for fixIt in fixIts.reversed() { - closure = { [closure, fixIt] in - fixIt.withBridgedDiagnosticFixIt { bridgedFixIt in - bridgedFixIts.append(bridgedFixIt) - closure() - } - } - } - - closure() - } - - public func diagnose(_ position: SourceLoc?, - _ id: DiagID, - _ args: DiagnosticArgument..., - highlight: CharSourceRange? = nil, - fixIts: DiagnosticFixIt...) { - diagnose(position, id, args, highlight: highlight, fixIts: fixIts) - } -} diff --git a/SwiftCompilerSources/Sources/CMakeLists.txt b/SwiftCompilerSources/Sources/CMakeLists.txt index af6900ff8d0e9..622fa883889a9 100644 --- a/SwiftCompilerSources/Sources/CMakeLists.txt +++ b/SwiftCompilerSources/Sources/CMakeLists.txt @@ -8,11 +8,6 @@ # NOTE: Subdirectories must be added in dependency order. -if(SWIFT_BUILD_REGEX_PARSER_IN_COMPILER) - add_subdirectory(_RegexParser) -endif() add_subdirectory(Basic) -add_subdirectory(AST) -add_subdirectory(Parse) add_subdirectory(SIL) add_subdirectory(Optimizer) diff --git a/SwiftCompilerSources/Sources/Optimizer/CMakeLists.txt b/SwiftCompilerSources/Sources/Optimizer/CMakeLists.txt index acce165e1ee79..48b74e373e115 100644 --- a/SwiftCompilerSources/Sources/Optimizer/CMakeLists.txt +++ b/SwiftCompilerSources/Sources/Optimizer/CMakeLists.txt @@ -7,7 +7,7 @@ # See http://swift.org/CONTRIBUTORS.txt for Swift project authors set(dependencies) -list(APPEND dependencies Basic SIL Parse) +list(APPEND dependencies Basic SIL) add_swift_compiler_module(Optimizer DEPENDS ${dependencies}) diff --git a/SwiftCompilerSources/Sources/Optimizer/PassManager/PassRegistration.swift b/SwiftCompilerSources/Sources/Optimizer/PassManager/PassRegistration.swift index 3bf42ccf4c3bb..bd4d7aeb5dd30 100644 --- a/SwiftCompilerSources/Sources/Optimizer/PassManager/PassRegistration.swift +++ b/SwiftCompilerSources/Sources/Optimizer/PassManager/PassRegistration.swift @@ -12,14 +12,12 @@ import SIL import OptimizerBridging -import Parse -@_cdecl("initializeSwiftModules") -public func initializeSwiftModules() { +@_cdecl("initializeSwiftSILModules") +public func initializeSwiftSILModules() { registerSILClasses() registerSwiftAnalyses() registerSwiftPasses() - initializeSwiftParseModules() registerSILTests() } diff --git a/SwiftCompilerSources/Sources/Parse/CMakeLists.txt b/SwiftCompilerSources/Sources/Parse/CMakeLists.txt deleted file mode 100644 index 7e5c1c7d97717..0000000000000 --- a/SwiftCompilerSources/Sources/Parse/CMakeLists.txt +++ /dev/null @@ -1,19 +0,0 @@ -# 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 http://swift.org/LICENSE.txt for license information -# See http://swift.org/CONTRIBUTORS.txt for Swift project authors - -set(dependencies Basic AST) -if(SWIFT_BUILD_REGEX_PARSER_IN_COMPILER) - list(APPEND dependencies _CompilerRegexParser) -endif() - -add_swift_compiler_module(Parse - DEPENDS - ${dependencies} - SOURCES - Parse.swift - Regex.swift) diff --git a/SwiftCompilerSources/Sources/Parse/Parse.swift b/SwiftCompilerSources/Sources/Parse/Parse.swift deleted file mode 100644 index a8a79489fc5a8..0000000000000 --- a/SwiftCompilerSources/Sources/Parse/Parse.swift +++ /dev/null @@ -1,16 +0,0 @@ -//===--- Parse.swift - SourceLoc bridiging utilities ------------------===// -// -// 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 -// -//===----------------------------------------------------------------------===// - -@_cdecl("initializeSwiftParseModules") -public func initializeSwiftParseModules() { - registerRegexParser() -} diff --git a/SwiftCompilerSources/Sources/_RegexParser/CMakeLists.txt b/SwiftCompilerSources/Sources/_RegexParser/CMakeLists.txt deleted file mode 100644 index d202c421e84d1..0000000000000 --- a/SwiftCompilerSources/Sources/_RegexParser/CMakeLists.txt +++ /dev/null @@ -1,20 +0,0 @@ -# This source file is part of the Swift.org open source project -# -# Copyright (c) 2014 - 2021 Apple Inc. and the Swift project authors -# Licensed under Apache License v2.0 with Runtime Library Exception -# -# See http://swift.org/LICENSE.txt for license information -# See http://swift.org/CONTRIBUTORS.txt for Swift project authors - -file(GLOB_RECURSE _LIBSWIFT_REGEX_PARSER_SOURCES - "${SWIFT_PATH_TO_STRING_PROCESSING_SOURCE}/Sources/_RegexParser/*.swift") -set(LIBSWIFT_REGEX_PARSER_SOURCES) -foreach(source ${_LIBSWIFT_REGEX_PARSER_SOURCES}) - file(TO_CMAKE_PATH "${source}" source) - list(APPEND LIBSWIFT_REGEX_PARSER_SOURCES ${source}) -endforeach() -message(STATUS "Using Experimental String Processing library for libswift _RegexParser (${SWIFT_PATH_TO_STRING_PROCESSING_SOURCE}).") - -add_swift_compiler_module(_CompilerRegexParser - SOURCES - "${LIBSWIFT_REGEX_PARSER_SOURCES}") diff --git a/SwiftCompilerSources/_RegexParser_Sources b/SwiftCompilerSources/_RegexParser_Sources deleted file mode 120000 index 8c4799dab65a6..0000000000000 --- a/SwiftCompilerSources/_RegexParser_Sources +++ /dev/null @@ -1 +0,0 @@ -../../swift-experimental-string-processing/Sources/_RegexParser \ No newline at end of file diff --git a/SwiftCompilerSources/stubs.cpp b/SwiftCompilerSources/stubs.cpp index 36df93a14d970..1346074f7bc6a 100644 --- a/SwiftCompilerSources/stubs.cpp +++ b/SwiftCompilerSources/stubs.cpp @@ -12,10 +12,8 @@ extern "C" { -void initializeSwiftModules(); -void initializeSwiftParseModules(); +void initializeSwiftSILModules(); } -void initializeSwiftModules() {} -void initializeSwiftParseModules() {} +void initializeSwiftSILModules() {} diff --git a/include/module.modulemap b/include/module.modulemap index 2e421469dd1dd..4c8a45e88c69b 100644 --- a/include/module.modulemap +++ b/include/module.modulemap @@ -12,10 +12,7 @@ module CBasicBridging { module ASTBridging { header "swift/AST/AnyFunctionRef.h" - header "swift/AST/ASTBridging.h" header "swift/AST/Builtins.h" - header "swift/AST/DiagnosticEngine.h" - header "swift/AST/DiagnosticConsumer.h" header "swift/AST/ForeignAsyncConvention.h" header "swift/AST/ForeignErrorConvention.h" header "swift/AST/SubstitutionMap.h" @@ -41,8 +38,3 @@ module OptimizerBridging { header "swift/SILOptimizer/OptimizerBridging.h" export * } - -module _RegexParserBridging { - header "swift/Parse/RegexParserBridging.h" - export * -} diff --git a/include/swift/AST/ASTBridging.h b/include/swift/AST/ASTBridging.h deleted file mode 100644 index d02968cf85c34..0000000000000 --- a/include/swift/AST/ASTBridging.h +++ /dev/null @@ -1,56 +0,0 @@ -//===--- 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_AST_ASTBRIDGING_H -#define SWIFT_AST_ASTBRIDGING_H - -#include "swift/AST/DiagnosticEngine.h" -#include "swift/Basic/BasicBridging.h" -#include "swift/Basic/Compiler.h" -#include "swift/Basic/Nullability.h" -#include -#include - -SWIFT_BEGIN_NULLABILITY_ANNOTATIONS - -//===----------------------------------------------------------------------===// -// Diagnostic Engine -//===----------------------------------------------------------------------===// - -// NOTE: This must be the same underlying value as C++ 'swift::DiagID' defined -// in 'DiagnosticList.cpp'. -typedef enum ENUM_EXTENSIBILITY_ATTR(open) BridgedDiagID : uint32_t { -#define DIAG(KIND, ID, Options, Text, Signature) BridgedDiagID_##ID, -#include "swift/AST/DiagnosticsAll.def" -} BridgedDiagID; - -typedef struct { - void * _Nonnull object; -} BridgedDiagnosticEngine; - -typedef struct { - void *_Nullable object; -} BridgedOptionalDiagnosticEngine; - -// FIXME: Can we bridge InFlightDiagnostic? -void DiagnosticEngine_diagnose(BridgedDiagnosticEngine, swift::SourceLoc loc, - BridgedDiagID diagID, BridgedArrayRef arguments, - swift::CharSourceRange highlight, - BridgedArrayRef fixIts); - -bool DiagnosticEngine_hadAnyError(BridgedDiagnosticEngine); - -using ArrayRefOfDiagnosticArgument = llvm::ArrayRef; - -SWIFT_END_NULLABILITY_ANNOTATIONS - -#endif // SWIFT_AST_ASTBRIDGING_H diff --git a/include/swift/AST/BridgingUtils.h b/include/swift/AST/BridgingUtils.h deleted file mode 100644 index 6f5a0dfbbbe90..0000000000000 --- a/include/swift/AST/BridgingUtils.h +++ /dev/null @@ -1,32 +0,0 @@ -//===--- BridgingUtils.h - utilities for swift bridging -------------------===// -// -// 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_AST_BRIDGINGUTILS_H -#define SWIFT_AST_BRIDGINGUTILS_H - -#include "swift/AST/ASTBridging.h" -#include "swift/AST/DiagnosticEngine.h" - -namespace swift { - -inline BridgedDiagnosticEngine getBridgedDiagnosticEngine(DiagnosticEngine *D) { - return {(void *)D}; -} -inline BridgedOptionalDiagnosticEngine -getBridgedOptionalDiagnosticEngine(DiagnosticEngine *D) { - return {(void *)D}; -} - -} // namespace swift - -#endif - diff --git a/include/swift/AST/CASTBridging.h b/include/swift/AST/CASTBridging.h index 84bf3cf500a2e..cdcc5d6614fdf 100644 --- a/include/swift/AST/CASTBridging.h +++ b/include/swift/AST/CASTBridging.h @@ -118,7 +118,7 @@ typedef struct BridgedDiagnostic { } BridgedDiagnostic; typedef struct BridgedDiagnosticEngine { - void *raw; + void * _Nullable raw; } BridgedDiagnosticEngine; typedef enum ENUM_EXTENSIBILITY_ATTR(open) BridgedMacroDefinitionKind : SwiftInt { @@ -624,6 +624,53 @@ void Decl_dump(void *decl); void Stmt_dump(void *statement); void Type_dump(void *type); +//===----------------------------------------------------------------------===// +// Regular expression literal parsing hooks +//===----------------------------------------------------------------------===// + +/// Attempt to lex a regex literal string. Takes the following arguments: +/// +/// - CurPtrPtr: A pointer to the current pointer of lexer, which should be the +/// start of the literal. This will be advanced to the point at +/// which the lexer should resume, or will remain the same if this +/// is not a regex literal. +/// - BufferEnd: A pointer to the end of the buffer, which should not be lexed +/// past. +/// - MustBeRegex: whether an error during lexing should be considered a regex +/// literal, or some thing else. +/// - BridgedDiagnosticEngine: RegexLiteralLexingFn should diagnose the +/// token using this engine. +/// +/// Returns: A bool indicating whether lexing was completely erroneous, and +/// cannot be recovered from, or false if there either was no error, +/// or there was a recoverable error. +typedef _Bool (*RegexLiteralLexingFn)( + /*CurPtrPtr*/ const char *_Nonnull *_Nonnull, + /*BufferEnd*/ const char *_Nonnull, + /*MustBeRegex*/ _Bool, BridgedDiagnosticEngine); +void Parser_registerRegexLiteralLexingFn(RegexLiteralLexingFn _Nullable fn); + +/// Parse a regex literal string. Takes the following arguments: +/// +/// - InputPtr: A null-terminated C string of the regex literal. +/// - VersionOut: A buffer accepting a regex literal format version. +/// - CaptureStructureOut: A buffer accepting a byte sequence representing the +/// capture structure of the literal. +/// - CaptureStructureSize: The size of the capture structure buffer. Must be +/// greater than or equal to `strlen(InputPtr) + 3`. +/// - DiagnosticBaseLoc: Start location of the regex literal. +/// - BridgedDiagnosticEngine: RegexLiteralParsingFn should diagnose the +/// parsing errors using this engine. +/// +/// Returns: A bool value indicating if there was an error while parsing. +typedef _Bool (*RegexLiteralParsingFn)(/*InputPtr*/ const char *_Nonnull, + /*VersionOut*/ unsigned *_Nonnull, + /*CaptureStructureOut*/ void *_Nonnull, + /*CaptureStructureSize*/ unsigned, + /*DiagnosticBaseLoc*/ BridgedSourceLoc, + BridgedDiagnosticEngine); +void Parser_registerRegexLiteralParsingFn(RegexLiteralParsingFn _Nullable fn); + //===----------------------------------------------------------------------===// // Plugins //===----------------------------------------------------------------------===// diff --git a/include/swift/Basic/InitializeSwiftModules.h b/include/swift/Basic/InitializeSwiftModules.h index e627525be031a..b032747c06731 100644 --- a/include/swift/Basic/InitializeSwiftModules.h +++ b/include/swift/Basic/InitializeSwiftModules.h @@ -17,7 +17,7 @@ extern "C" { #endif -void initializeSwiftModules(); +void initializeSwiftSILModules(); void initializeSwiftParseModules(); #ifdef __cplusplus diff --git a/include/swift/Parse/RegexParserBridging.h b/include/swift/Parse/RegexParserBridging.h deleted file mode 100644 index 35ea10eeadbfc..0000000000000 --- a/include/swift/Parse/RegexParserBridging.h +++ /dev/null @@ -1,64 +0,0 @@ -//===-- RegexParserBridging.h --- Regex parser interface -*- C++ -*-===// -// -// This source file is part of the Swift.org open source project -// -// Copyright (c) 2014 - 2017 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 REGEX_PARSER_BRIDGING -#define REGEX_PARSER_BRIDGING - -#include "swift/AST/ASTBridging.h" -#include "swift/Basic/Nullability.h" -#include - -/// Attempt to lex a regex literal string. Takes the following arguments: -/// -/// - CurPtrPtr: A pointer to the current pointer of lexer, which should be the -/// start of the literal. This will be advanced to the point at -/// which the lexer should resume, or will remain the same if this -/// is not a regex literal. -/// - BufferEnd: A pointer to the end of the buffer, which should not be lexed -/// past. -/// - MustBeRegex: whether an error during lexing should be considered a regex -/// literal, or some thing else. -/// - BridgedOptionalDiagnosticEngine: RegexLiteralLexingFn should diagnose the -/// token using this engine. -/// -/// Returns: A bool indicating whether lexing was completely erroneous, and -/// cannot be recovered from, or false if there either was no error, -/// or there was a recoverable error. -typedef bool (*RegexLiteralLexingFn)( - /*CurPtrPtr*/ const char *_Nonnull *_Nonnull, - /*BufferEnd*/ const char *_Nonnull, - /*MustBeRegex*/ bool, BridgedOptionalDiagnosticEngine); -void Parser_registerRegexLiteralLexingFn(RegexLiteralLexingFn _Nullable fn); - -/// Parse a regex literal string. Takes the following arguments: -/// -/// - InputPtr: A null-terminated C string of the regex literal. -/// - VersionOut: A buffer accepting a regex literal format version. -/// - CaptureStructureOut: A buffer accepting a byte sequence representing the -/// capture structure of the literal. -/// - CaptureStructureSize: The size of the capture structure buffer. Must be -/// greater than or equal to `strlen(InputPtr) + 3`. -/// - DiagnosticBaseLoc: Start location of the regex literal. -/// - BridgedDiagnosticEngine: RegexLiteralParsingFn should diagnose the -/// parsing errors using this engine. -/// -/// Returns: A bool value indicating if there was an error while parsing. -typedef bool (*RegexLiteralParsingFn)(/*InputPtr*/ const char *_Nonnull, - /*VersionOut*/ unsigned *_Nonnull, - /*CaptureStructureOut*/ void *_Nonnull, - /*CaptureStructureSize*/ unsigned, - /*DiagnosticBaseLoc*/ swift::SourceLoc, - BridgedDiagnosticEngine); -void Parser_registerRegexLiteralParsingFn(RegexLiteralParsingFn _Nullable fn); - -#endif // REGEX_PARSER_BRIDGING diff --git a/lib/AST/ASTBridging.cpp b/lib/AST/ASTBridging.cpp deleted file mode 100644 index 4b924f801637a..0000000000000 --- a/lib/AST/ASTBridging.cpp +++ /dev/null @@ -1,59 +0,0 @@ -//===--- ASTBridging.cpp - AST bridging functions -------------------------===// -// -// 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 -// -//===----------------------------------------------------------------------===// - -#include "swift/AST/ASTBridging.h" - -#include "swift/AST/DiagnosticEngine.h" -#include "swift/Basic/BridgingUtils.h" - -using namespace swift; - -namespace { -/// BridgedDiagnosticEngine -> DiagnosticEngine *. -DiagnosticEngine *getDiagnosticEngine(const BridgedDiagnosticEngine &bridged) { - return static_cast(bridged.object); -} - -} // namespace - -void DiagnosticEngine_diagnose( - BridgedDiagnosticEngine bridgedEngine, SourceLoc loc, - BridgedDiagID bridgedDiagID, - BridgedArrayRef /*DiagnosticArgument*/ bridgedArguments, - CharSourceRange highlight, - BridgedArrayRef /*DiagnosticInfo::FixIt*/ bridgedFixIts) { - auto *D = getDiagnosticEngine(bridgedEngine); - - auto diagID = static_cast(bridgedDiagID); - SmallVector arguments; - for (auto arg : getArrayRef(bridgedArguments)) { - arguments.push_back(arg); - } - auto inflight = D->diagnose(loc, diagID, arguments); - - // Add highlight. - if (highlight.isValid()) { - inflight.highlightChars(highlight.getStart(), highlight.getEnd()); - } - - // Add fix-its. - for (auto fixIt : getArrayRef(bridgedFixIts)) { - auto range = fixIt.getRange(); - auto text = fixIt.getText(); - inflight.fixItReplaceChars(range.getStart(), range.getEnd(), text); - } -} - -bool DiagnosticEngine_hadAnyError(BridgedDiagnosticEngine bridgedEngine) { - auto *D = getDiagnosticEngine(bridgedEngine); - return D->hadAnyError(); -} diff --git a/lib/AST/CMakeLists.txt b/lib/AST/CMakeLists.txt index 4bf20a642f0f8..08d04d3dbfce1 100644 --- a/lib/AST/CMakeLists.txt +++ b/lib/AST/CMakeLists.txt @@ -10,7 +10,6 @@ add_swift_host_library(swiftAST STATIC AccessNotes.cpp AccessRequests.cpp ArgumentList.cpp - ASTBridging.cpp ASTContext.cpp ASTDemangler.cpp ASTDumper.cpp diff --git a/lib/ASTGen/CMakeLists.txt b/lib/ASTGen/CMakeLists.txt index 736970051e359..6acd2999e8884 100644 --- a/lib/ASTGen/CMakeLists.txt +++ b/lib/ASTGen/CMakeLists.txt @@ -5,6 +5,26 @@ add_pure_swift_host_library(swiftLLVMJSON STATIC EMIT_MODULE swiftBasic ) +set(ASTGen_Swift_dependencies) + +# If requested, build the regular expression parser into the compiler itself. +if(SWIFT_BUILD_REGEX_PARSER_IN_COMPILER) + file(GLOB_RECURSE _LIBSWIFT_REGEX_PARSER_SOURCES + "${SWIFT_PATH_TO_STRING_PROCESSING_SOURCE}/Sources/_RegexParser/*.swift") + set(LIBSWIFT_REGEX_PARSER_SOURCES) + foreach(source ${_LIBSWIFT_REGEX_PARSER_SOURCES}) + file(TO_CMAKE_PATH "${source}" source) + list(APPEND LIBSWIFT_REGEX_PARSER_SOURCES ${source}) + endforeach() + message(STATUS "Using Experimental String Processing library for libswift _RegexParser (${SWIFT_PATH_TO_STRING_PROCESSING_SOURCE}).") + + add_pure_swift_host_library(_CompilerRegexParser STATIC EMIT_MODULE + "${LIBSWIFT_REGEX_PARSER_SOURCES}" + ) + + list(APPEND ASTGen_Swift_dependencies _CompilerRegexParser) +endif() + add_pure_swift_host_library(swiftASTGen STATIC Sources/ASTGen/ASTGen.swift Sources/ASTGen/Bridge.swift @@ -17,6 +37,7 @@ add_pure_swift_host_library(swiftASTGen STATIC Sources/ASTGen/Macros.swift Sources/ASTGen/ParameterClause.swift Sources/ASTGen/PluginHost.swift + Sources/ASTGen/Regex.swift Sources/ASTGen/SourceFile.swift Sources/ASTGen/SourceManager.swift Sources/ASTGen/SourceManager+MacroExpansionContext.swift @@ -37,4 +58,5 @@ add_pure_swift_host_library(swiftASTGen STATIC SwiftSyntaxMacros SwiftSyntaxMacroExpansion swiftLLVMJSON + ${ASTGen_Swift_dependencies} ) diff --git a/lib/ASTGen/Package.swift b/lib/ASTGen/Package.swift index 151ea07f960ba..4965d3be9b2ca 100644 --- a/lib/ASTGen/Package.swift +++ b/lib/ASTGen/Package.swift @@ -24,6 +24,7 @@ let package = Package( products: [ .library(name: "swiftASTGen", targets: ["swiftASTGen"]), .library(name: "swiftLLVMJSON", targets: ["swiftLLVMJSON"]), + .library(name: "_CompilerRegexParser", targets: ["_CompilerRegexParser"]), ], dependencies: [ .package(path: "../../../swift-syntax") @@ -42,7 +43,8 @@ let package = Package( .product(name: "SwiftSyntaxBuilder", package: "swift-syntax"), .product(name: "SwiftSyntaxMacros", package: "swift-syntax"), .product(name: "SwiftSyntaxMacroExpansion", package: "swift-syntax"), - "swiftLLVMJSON" + "swiftLLVMJSON", + "_CompilerRegexParser", ], path: "Sources/ASTGen", swiftSettings: swiftSetttings @@ -53,5 +55,11 @@ let package = Package( path: "Sources/LLVMJSON", swiftSettings: swiftSetttings ), + .target( + name: "_CompilerRegexParser", + dependencies: [], + path: "_RegexParser_Sources", + swiftSettings: swiftSetttings + ), ] ) diff --git a/SwiftCompilerSources/Sources/Parse/Regex.swift b/lib/ASTGen/Sources/ASTGen/Regex.swift similarity index 81% rename from SwiftCompilerSources/Sources/Parse/Regex.swift rename to lib/ASTGen/Sources/ASTGen/Regex.swift index a2229bc6fbc24..9c2dbc827bd18 100644 --- a/SwiftCompilerSources/Sources/Parse/Regex.swift +++ b/lib/ASTGen/Sources/ASTGen/Regex.swift @@ -10,14 +10,14 @@ // //===----------------------------------------------------------------------===// -import _RegexParserBridging -import AST -import Basic +import CBasicBridging +import CASTBridging #if canImport(_CompilerRegexParser) @_spi(CompilerInterface) import _CompilerRegexParser -func registerRegexParser() { +@_cdecl("initializeSwiftParseModules") +public func initializeSwiftParseModules() { Parser_registerRegexLiteralParsingFn(_RegexLiteralParsingFn) Parser_registerRegexLiteralLexingFn(_RegexLiteralLexingFn) } @@ -46,8 +46,8 @@ private func _RegexLiteralLexingFn( _ curPtrPtr: UnsafeMutablePointer>, _ bufferEndPtr: UnsafePointer, _ mustBeRegex: CBool, - _ bridgedDiagnosticEngine: BridgedOptionalDiagnosticEngine -) -> /*CompletelyErroneous*/ CBool { + _ bridgedDiagnosticEngine: BridgedDiagnosticEngine +) -> /*CompletelyErroneous*/ Bool { let inputPtr = curPtrPtr.pointee guard let (resumePtr, error) = swiftCompilerLexRegexLiteral( @@ -62,10 +62,16 @@ private func _RegexLiteralLexingFn( if let error = error { // Emit diagnostic if diagnostics are enabled. - if let diagEngine = DiagnosticEngine(bridged: bridgedDiagnosticEngine) { - let startLoc = SourceLoc( - locationInFile: error.location.assumingMemoryBound(to: UInt8.self))! - diagEngine.diagnose(startLoc, .foreign_diagnostic, error.message) + if bridgedDiagnosticEngine.raw != nil { + let startLoc = BridgedSourceLoc(raw: error.location) + var message = error.message + let diag = message.withBridgedString { bridgedMessage in + Diagnostic_create( + bridgedDiagnosticEngine, .error, startLoc, + bridgedMessage + ) + } + Diagnostic_finish(diag) } return error.completelyErroneous } @@ -92,7 +98,7 @@ public func _RegexLiteralParsingFn( _ versionOut: UnsafeMutablePointer, _ captureStructureOut: UnsafeMutableRawPointer, _ captureStructureSize: CUnsignedInt, - _ bridgedDiagnosticBaseLoc: swift.SourceLoc, + _ bridgedDiagnosticBaseLoc: BridgedSourceLoc, _ bridgedDiagnosticEngine: BridgedDiagnosticEngine ) -> Bool { let str = String(cString: inputPtr) @@ -106,13 +112,20 @@ public func _RegexLiteralParsingFn( versionOut.pointee = CUnsignedInt(version) return false } catch let error as CompilerParseError { - var diagLoc = SourceLoc(bridged: bridgedDiagnosticBaseLoc) - let diagEngine = DiagnosticEngine(bridged: bridgedDiagnosticEngine) - if let _diagLoc = diagLoc, let errorLoc = error.location { + var diagLoc = bridgedDiagnosticBaseLoc + if diagLoc.raw != nil, let errorLoc = error.location { let offset = str.utf8.distance(from: str.startIndex, to: errorLoc) - diagLoc = _diagLoc.advanced(by: offset) + diagLoc = SourceLoc_advanced(diagLoc, SwiftInt(offset)) + } + + var message = error.message + let diag = message.withBridgedString { bridgedMessage in + Diagnostic_create( + bridgedDiagnosticEngine, .error, diagLoc, + bridgedMessage + ) } - diagEngine.diagnose(diagLoc, .foreign_diagnostic, error.message) + Diagnostic_finish(diag) return true } catch { fatalError("Expected CompilerParseError") diff --git a/lib/ASTGen/_RegexParser_Sources b/lib/ASTGen/_RegexParser_Sources new file mode 120000 index 0000000000000..b52a98d0897ed --- /dev/null +++ b/lib/ASTGen/_RegexParser_Sources @@ -0,0 +1 @@ +../../../swift-experimental-string-processing/Sources/_RegexParser \ No newline at end of file diff --git a/lib/DriverTool/driver.cpp b/lib/DriverTool/driver.cpp index af3b576aef2a2..7c7044010966a 100644 --- a/lib/DriverTool/driver.cpp +++ b/lib/DriverTool/driver.cpp @@ -220,9 +220,11 @@ static llvm::SmallVector eraseFirstArg(ArrayRef static int run_driver(StringRef ExecName, ArrayRef argv, const ArrayRef originalArgv) { + initializeSwiftParseModules(); + // This is done here and not done in FrontendTool.cpp, because // FrontendTool.cpp is linked to tools, which don't use swift modules. - initializeSwiftModules(); + initializeSwiftSILModules(); bool isRepl = false; diff --git a/lib/DriverTool/sil_opt_main.cpp b/lib/DriverTool/sil_opt_main.cpp index 4261b68e493ab..e4094f6facb39 100644 --- a/lib/DriverTool/sil_opt_main.cpp +++ b/lib/DriverTool/sil_opt_main.cpp @@ -20,7 +20,6 @@ #include "swift/AST/SILOptions.h" #include "swift/Basic/FileTypes.h" #include "swift/Basic/LLVMInitialize.h" -#include "swift/Basic/InitializeSwiftModules.h" #include "swift/Basic/QuotedString.h" #include "swift/Frontend/DiagnosticVerifier.h" #include "swift/Frontend/Frontend.h" diff --git a/lib/Parse/Lexer.cpp b/lib/Parse/Lexer.cpp index 80e0a7182b711..3ebc09aa4d7ab 100644 --- a/lib/Parse/Lexer.cpp +++ b/lib/Parse/Lexer.cpp @@ -15,13 +15,12 @@ //===----------------------------------------------------------------------===// #include "swift/Parse/Lexer.h" -#include "swift/AST/BridgingUtils.h" +#include "swift/AST/CASTBridging.h" #include "swift/AST/DiagnosticsParse.h" #include "swift/AST/Identifier.h" #include "swift/Basic/LangOptions.h" #include "swift/Basic/SourceManager.h" #include "swift/Parse/Confusables.h" -#include "swift/Parse/RegexParserBridging.h" #include "llvm/ADT/SmallString.h" #include "llvm/ADT/StringSwitch.h" #include "llvm/ADT/Twine.h" @@ -35,9 +34,12 @@ // Regex lexing delivered via libSwift. static RegexLiteralLexingFn regexLiteralLexingFn = nullptr; + +#if SWIFT_BUILD_SWIFT_SYNTAX void Parser_registerRegexLiteralLexingFn(RegexLiteralLexingFn fn) { regexLiteralLexingFn = fn; } +#endif using namespace swift; @@ -2090,7 +2092,7 @@ const char *Lexer::tryScanRegexLiteral(const char *TokStart, bool MustBeRegex, // recovered from. auto *Ptr = TokStart; CompletelyErroneous = regexLiteralLexingFn( - &Ptr, BufferEnd, MustBeRegex, getBridgedOptionalDiagnosticEngine(Diags)); + &Ptr, BufferEnd, MustBeRegex, BridgedDiagnosticEngine{Diags}); // If we didn't make any lexing progress, this isn't a regex literal and we // should fallback to lexing as something else. diff --git a/lib/Parse/ParseRegex.cpp b/lib/Parse/ParseRegex.cpp index 5ed804653d3e0..f5d8e8852bb6c 100644 --- a/lib/Parse/ParseRegex.cpp +++ b/lib/Parse/ParseRegex.cpp @@ -14,17 +14,20 @@ // //===----------------------------------------------------------------------===// -#include "swift/AST/BridgingUtils.h" #include "swift/AST/DiagnosticsParse.h" -#include "swift/Basic/BridgingUtils.h" #include "swift/Parse/Parser.h" +#include "swift/AST/CASTBridging.h" // Regex parser delivered via Swift modules. -#include "swift/Parse/RegexParserBridging.h" static RegexLiteralParsingFn regexLiteralParsingFn = nullptr; + +#if SWIFT_BUILD_SWIFT_SYNTAX void Parser_registerRegexLiteralParsingFn(RegexLiteralParsingFn fn) { regexLiteralParsingFn = fn; } +#else +extern "C" void initializeSwiftParseModules() { } +#endif using namespace swift; @@ -44,8 +47,8 @@ ParserResult Parser::parseExprRegexLiteral() { regexLiteralParsingFn(regexText.str().c_str(), &version, /*captureStructureOut*/ capturesBuf.data(), /*captureStructureSize*/ capturesBuf.size(), - /*diagBaseLoc*/ Tok.getLoc(), - getBridgedDiagnosticEngine(&Diags)); + /*diagBaseLoc*/ BridgedSourceLoc{Tok.getLoc().getOpaquePointerValue()}, + BridgedDiagnosticEngine{&Diags}); auto loc = consumeToken(); SourceMgr.recordRegexLiteralStartLoc(loc); diff --git a/lib/SIL/Utils/SILBridging.cpp b/lib/SIL/Utils/SILBridging.cpp index c212157a03970..ba40b10a5a0fa 100644 --- a/lib/SIL/Utils/SILBridging.cpp +++ b/lib/SIL/Utils/SILBridging.cpp @@ -29,12 +29,12 @@ namespace { bool nodeMetatypesInitialized = false; -// Filled in by class registration in initializeSwiftModules(). +// Filled in by class registration in initializeSwiftSILModules(). SwiftMetatype nodeMetatypes[(unsigned)SILNodeKind::Last_SILNode + 1]; } -// Does return null if initializeSwiftModules() is never called. +// Does return null if initializeSwiftSILModules() is never called. SwiftMetatype SILNode::getSILNodeMetatype(SILNodeKind kind) { SwiftMetatype metatype = nodeMetatypes[(unsigned)kind]; assert((!nodeMetatypesInitialized || metatype) && @@ -62,7 +62,7 @@ static void setUnimplementedRange(SwiftMetatype metatype, } /// Registers the metatype of a swift SIL class. -/// Called by initializeSwiftModules(). +/// Called by initializeSwiftSILModules(). void registerBridgedClass(StringRef className, SwiftMetatype metatype) { nodeMetatypesInitialized = true; diff --git a/lib/SILOptimizer/PassManager/Passes.cpp b/lib/SILOptimizer/PassManager/Passes.cpp index 7f04f625a47bf..4397aeac6070b 100644 --- a/lib/SILOptimizer/PassManager/Passes.cpp +++ b/lib/SILOptimizer/PassManager/Passes.cpp @@ -273,7 +273,7 @@ static void runBridgedFunctionPass(BridgedFunctionPassRunFn &runFunction, runFunction({{f}, {passManager->getSwiftPassInvocation()}}); } -// Called from initializeSwiftModules(). +// Called from initializeSwiftSILModules(). void SILPassManager_registerModulePass(llvm::StringRef name, BridgedModulePassRunFn runFn) { bridgedModulePassRunFunctions[name] = runFn; diff --git a/lib/SILOptimizer/SILCombiner/SILCombine.cpp b/lib/SILOptimizer/SILCombiner/SILCombine.cpp index 599855125c9f8..05a06675155ca 100644 --- a/lib/SILOptimizer/SILCombiner/SILCombine.cpp +++ b/lib/SILOptimizer/SILCombiner/SILCombine.cpp @@ -539,7 +539,7 @@ void SILCombiner::runSwiftInstructionPass(SILInstruction *inst, static llvm::StringMap swiftInstPasses; static bool passesRegistered = false; -// Called from initializeSwiftModules(). +// Called from initializeSwiftSILModules(). void SILCombine_registerInstructionPass(llvm::StringRef instClassName, BridgedInstructionPassRunFn runFn) { swiftInstPasses[instClassName] = runFn; diff --git a/test/IDE/complete_regex.swift b/test/IDE/complete_regex.swift index 587c3b24324ca..c5da4e05e02f9 100644 --- a/test/IDE/complete_regex.swift +++ b/test/IDE/complete_regex.swift @@ -1,4 +1,4 @@ -// REQUIRES: swift_in_compiler +// REQUIRES: swift_swift_parser // RUN: %empty-directory(%t) // RUN: %target-swift-ide-test -enable-bare-slash-regex -batch-code-completion -source-filename %s -filecheck %raw-FileCheck -completion-output-dir %t diff --git a/test/SourceKit/CodeComplete/rdar95772803.swift b/test/SourceKit/CodeComplete/rdar95772803.swift index b68bca2571ad9..eec4f67e38ad2 100644 --- a/test/SourceKit/CodeComplete/rdar95772803.swift +++ b/test/SourceKit/CodeComplete/rdar95772803.swift @@ -11,4 +11,4 @@ var qux: Regex { / x}/ } // RUN: -req=complete -pos=4:28 %s -- -enable-bare-slash-regex %s == \ // RUN: -req=complete -pos=5:28 %s -- -enable-bare-slash-regex %s -// REQUIRES: swift_in_compiler +// REQUIRES: swift_swift_parser diff --git a/test/SourceKit/Sema/sema_regex.swift b/test/SourceKit/Sema/sema_regex.swift index 2c657b36d4b7b..8620b9f13cf95 100644 --- a/test/SourceKit/Sema/sema_regex.swift +++ b/test/SourceKit/Sema/sema_regex.swift @@ -2,7 +2,7 @@ public func retRegex() -> Regex { /foo/ } -// REQUIRES: swift_in_compiler +// REQUIRES: swift_swift_parser // RUN: %sourcekitd-test -req=sema %s -- %s -Xfrontend -enable-bare-slash-regex -Xfrontend -disable-availability-checking | %FileCheck %s // CHECK: [ diff --git a/test/StringProcessing/Frontend/enable-flag.swift b/test/StringProcessing/Frontend/enable-flag.swift index 601cdb71e1a59..b1768a913dcc6 100644 --- a/test/StringProcessing/Frontend/enable-flag.swift +++ b/test/StringProcessing/Frontend/enable-flag.swift @@ -2,7 +2,7 @@ // RUN: %target-typecheck-verify-swift -disable-availability-checking -enable-experimental-string-processing -enable-bare-slash-regex // RUN: %target-typecheck-verify-swift -disable-availability-checking -disable-experimental-string-processing -enable-experimental-string-processing -enable-bare-slash-regex -// REQUIRES: swift_in_compiler +// REQUIRES: swift_swift_parser prefix operator / diff --git a/test/StringProcessing/Parse/forward-slash-regex-disabled.swift b/test/StringProcessing/Parse/forward-slash-regex-disabled.swift index 4c491a4a863a0..db403c97dfea8 100644 --- a/test/StringProcessing/Parse/forward-slash-regex-disabled.swift +++ b/test/StringProcessing/Parse/forward-slash-regex-disabled.swift @@ -1,6 +1,6 @@ // RUN: %target-typecheck-verify-swift -disable-availability-checking -// REQUIRES: swift_in_compiler +// REQUIRES: swift_swift_parser prefix operator / prefix operator ^/ diff --git a/test/StringProcessing/Parse/forward-slash-regex-skipping-allowed.swift b/test/StringProcessing/Parse/forward-slash-regex-skipping-allowed.swift index e9b9c2b122c47..1974bd55c6044 100644 --- a/test/StringProcessing/Parse/forward-slash-regex-skipping-allowed.swift +++ b/test/StringProcessing/Parse/forward-slash-regex-skipping-allowed.swift @@ -4,7 +4,7 @@ // RUN: %{python} %utils/process-stats-dir.py --set-csv-baseline %t/stats.csv %t // RUN: %FileCheck -input-file %t/stats.csv %s -// REQUIRES: swift_in_compiler +// REQUIRES: swift_swift_parser // Make sure we can skip in all of the below cases. diff --git a/test/StringProcessing/Parse/forward-slash-regex-skipping-invalid.swift b/test/StringProcessing/Parse/forward-slash-regex-skipping-invalid.swift index ccebc28bee855..23e3e8c16f9f0 100644 --- a/test/StringProcessing/Parse/forward-slash-regex-skipping-invalid.swift +++ b/test/StringProcessing/Parse/forward-slash-regex-skipping-invalid.swift @@ -2,7 +2,7 @@ // RUN: %target-typecheck-verify-swift -enable-bare-slash-regex -disable-availability-checking -experimental-skip-non-inlinable-function-bodies-without-types // RUN: %target-typecheck-verify-swift -enable-bare-slash-regex -disable-availability-checking -experimental-skip-non-inlinable-function-bodies -// REQUIRES: swift_in_compiler +// REQUIRES: swift_swift_parser // We don't consider this a regex literal when skipping as it has an initial // space. diff --git a/test/StringProcessing/Parse/forward-slash-regex-skipping.swift b/test/StringProcessing/Parse/forward-slash-regex-skipping.swift index e3e9c9d07048b..031bef3a1ef20 100644 --- a/test/StringProcessing/Parse/forward-slash-regex-skipping.swift +++ b/test/StringProcessing/Parse/forward-slash-regex-skipping.swift @@ -2,7 +2,7 @@ // RUN: %target-typecheck-verify-swift -enable-bare-slash-regex -disable-availability-checking -experimental-skip-non-inlinable-function-bodies-without-types // RUN: %target-typecheck-verify-swift -enable-bare-slash-regex -disable-availability-checking -experimental-skip-non-inlinable-function-bodies -// REQUIRES: swift_in_compiler +// REQUIRES: swift_swift_parser // Make sure we properly handle `/.../` regex literals in skipped function // bodies. Currently we detect them and avoid skipping, but in the future we diff --git a/test/StringProcessing/Parse/forward-slash-regex.swift b/test/StringProcessing/Parse/forward-slash-regex.swift index 22c6a654e6da0..f4990d4fcb4d4 100644 --- a/test/StringProcessing/Parse/forward-slash-regex.swift +++ b/test/StringProcessing/Parse/forward-slash-regex.swift @@ -1,5 +1,5 @@ // RUN: %target-typecheck-verify-swift -enable-bare-slash-regex -disable-availability-checking -typo-correction-limit 0 -// REQUIRES: swift_in_compiler +// REQUIRES: swift_swift_parser // REQUIRES: concurrency prefix operator / diff --git a/test/StringProcessing/Parse/prefix-slash.swift b/test/StringProcessing/Parse/prefix-slash.swift index 4be97f55397e2..dbe33cac8d91c 100644 --- a/test/StringProcessing/Parse/prefix-slash.swift +++ b/test/StringProcessing/Parse/prefix-slash.swift @@ -1,5 +1,5 @@ // RUN: %target-typecheck-verify-swift -enable-bare-slash-regex -disable-availability-checking -// REQUIRES: swift_in_compiler +// REQUIRES: swift_swift_parser // Test the behavior of prefix '/' with regex literals enabled. diff --git a/test/StringProcessing/Parse/regex.swift b/test/StringProcessing/Parse/regex.swift index 797fc2af85eec..a25db9de0019c 100644 --- a/test/StringProcessing/Parse/regex.swift +++ b/test/StringProcessing/Parse/regex.swift @@ -1,5 +1,5 @@ // RUN: %target-typecheck-verify-swift -enable-bare-slash-regex -disable-availability-checking -// REQUIRES: swift_in_compiler +// REQUIRES: swift_swift_parser _ = /abc/ _ = #/abc/# diff --git a/test/StringProcessing/Parse/regex_parse_end_of_buffer.swift b/test/StringProcessing/Parse/regex_parse_end_of_buffer.swift index 5c62181c0c8c2..177dcd66bbf35 100644 --- a/test/StringProcessing/Parse/regex_parse_end_of_buffer.swift +++ b/test/StringProcessing/Parse/regex_parse_end_of_buffer.swift @@ -1,7 +1,7 @@ // RUN: %target-typecheck-verify-swift -enable-bare-slash-regex -disable-availability-checking -// REQUIRES: swift_in_compiler +// REQUIRES: swift_swift_parser // Note there is purposefully no trailing newline here. // expected-error@+2:20 {{unterminated regex literal}} // expected-error@+1:25 {{cannot parse regular expression: expected ')'}} -var unterminated = #/(xy \ No newline at end of file +var unterminated = #/(xy diff --git a/test/StringProcessing/Parse/regex_parse_error.swift b/test/StringProcessing/Parse/regex_parse_error.swift index c719e33ad9b80..ffa05d1ac9a8c 100644 --- a/test/StringProcessing/Parse/regex_parse_error.swift +++ b/test/StringProcessing/Parse/regex_parse_error.swift @@ -1,5 +1,5 @@ // RUN: %target-typecheck-verify-swift -enable-bare-slash-regex -disable-availability-checking -// REQUIRES: swift_in_compiler +// REQUIRES: swift_swift_parser _ = /(/ // expected-error@:7 {{expected ')'}} _ = #/(/# // expected-error@:8 {{expected ')'}} diff --git a/test/StringProcessing/Runtime/regex_basic.swift b/test/StringProcessing/Runtime/regex_basic.swift index 9ad6c31d30662..498894cd1dff6 100644 --- a/test/StringProcessing/Runtime/regex_basic.swift +++ b/test/StringProcessing/Runtime/regex_basic.swift @@ -1,6 +1,6 @@ // RUN: %target-run-simple-swift(-Xfrontend -enable-bare-slash-regex) -// REQUIRES: swift_in_compiler,string_processing,executable_test +// REQUIRES: swift_swift_parser,string_processing,executable_test import StdlibUnittest diff --git a/test/StringProcessing/SILGen/regex_literal_silgen.swift b/test/StringProcessing/SILGen/regex_literal_silgen.swift index 7d16c82d81040..3cfa2bba161af 100644 --- a/test/StringProcessing/SILGen/regex_literal_silgen.swift +++ b/test/StringProcessing/SILGen/regex_literal_silgen.swift @@ -1,5 +1,5 @@ // RUN: %target-swift-frontend -emit-silgen -enable-bare-slash-regex -disable-availability-checking %s | %FileCheck %s -// REQUIRES: swift_in_compiler +// REQUIRES: swift_swift_parser var s = #/abc/# // CHECK: [[REGEX_STR_LITERAL:%[0-9]+]] = string_literal utf8 "#/abc/#" diff --git a/test/StringProcessing/Sema/regex_builder_fix_import_after_imports.swift b/test/StringProcessing/Sema/regex_builder_fix_import_after_imports.swift index 29e7881822ac1..acaf229511b91 100644 --- a/test/StringProcessing/Sema/regex_builder_fix_import_after_imports.swift +++ b/test/StringProcessing/Sema/regex_builder_fix_import_after_imports.swift @@ -7,7 +7,7 @@ // RUN: %target-typecheck-verify-swift -enable-bare-slash-regex -disable-availability-checking -I %t -// REQUIRES: swift_in_compiler +// REQUIRES: swift_swift_parser import A diff --git a/test/StringProcessing/Sema/regex_builder_fix_import_decl.swift b/test/StringProcessing/Sema/regex_builder_fix_import_decl.swift index 31feb6744497d..a0df60f6cdfd3 100644 --- a/test/StringProcessing/Sema/regex_builder_fix_import_decl.swift +++ b/test/StringProcessing/Sema/regex_builder_fix_import_decl.swift @@ -1,6 +1,6 @@ // RUN: %target-typecheck-verify-swift -enable-bare-slash-regex -disable-availability-checking -// REQUIRES: swift_in_compiler +// REQUIRES: swift_swift_parser struct S { func foo() { diff --git a/test/StringProcessing/Sema/regex_builder_fix_import_top_level.swift b/test/StringProcessing/Sema/regex_builder_fix_import_top_level.swift index eaae05546891c..155b43f50d71a 100644 --- a/test/StringProcessing/Sema/regex_builder_fix_import_top_level.swift +++ b/test/StringProcessing/Sema/regex_builder_fix_import_top_level.swift @@ -1,6 +1,6 @@ // RUN: %target-typecheck-verify-swift -enable-bare-slash-regex -disable-availability-checking -// REQUIRES: swift_in_compiler +// REQUIRES: swift_swift_parser Regex {} // expected-error {{regex builder requires the 'RegexBuilder' module be imported'}} {{5:1-1=import RegexBuilder\n\n}} diff --git a/test/StringProcessing/Sema/regex_builder_unavailable.swift b/test/StringProcessing/Sema/regex_builder_unavailable.swift index 38bf6049b31d3..7167315c87a34 100644 --- a/test/StringProcessing/Sema/regex_builder_unavailable.swift +++ b/test/StringProcessing/Sema/regex_builder_unavailable.swift @@ -1,6 +1,6 @@ // RUN: %target-typecheck-verify-swift -enable-bare-slash-regex -target %target-cpu-apple-macosx12.0 -// REQUIRES: swift_in_compiler +// REQUIRES: swift_swift_parser // REQUIRES: OS=macosx import RegexBuilder diff --git a/test/StringProcessing/Sema/regex_literal_availability.swift b/test/StringProcessing/Sema/regex_literal_availability.swift index ec68855876783..bcf8cdce2d0fb 100644 --- a/test/StringProcessing/Sema/regex_literal_availability.swift +++ b/test/StringProcessing/Sema/regex_literal_availability.swift @@ -1,6 +1,6 @@ // RUN: %target-typecheck-verify-swift -enable-bare-slash-regex -target %target-cpu-apple-macosx12.0 -// REQUIRES: swift_in_compiler +// REQUIRES: swift_swift_parser // REQUIRES: OS=macosx _ = /x/ // expected-error {{'Regex' is only available in}} diff --git a/test/StringProcessing/Sema/regex_literal_diagnostics.swift b/test/StringProcessing/Sema/regex_literal_diagnostics.swift index 0a0f0629669ba..e3ec4b77c70dd 100644 --- a/test/StringProcessing/Sema/regex_literal_diagnostics.swift +++ b/test/StringProcessing/Sema/regex_literal_diagnostics.swift @@ -1,6 +1,6 @@ // RUN: %target-typecheck-verify-swift -enable-bare-slash-regex -disable-availability-checking -// REQUIRES: swift_in_compiler +// REQUIRES: swift_swift_parser postfix operator ^^ postfix func ^^ (_ x: T) -> T { x } diff --git a/test/StringProcessing/Sema/regex_literal_type_inference.swift b/test/StringProcessing/Sema/regex_literal_type_inference.swift index 9cce7a1b0e76e..5ea94df139e08 100644 --- a/test/StringProcessing/Sema/regex_literal_type_inference.swift +++ b/test/StringProcessing/Sema/regex_literal_type_inference.swift @@ -1,5 +1,5 @@ // RUN: %target-typecheck-verify-swift -enable-bare-slash-regex -disable-availability-checking -// REQUIRES: swift_in_compiler +// REQUIRES: swift_swift_parser let r0 = #/./# let _: Regex = r0 diff --git a/test/StringProcessing/Sema/string_processing_import.swift b/test/StringProcessing/Sema/string_processing_import.swift index 5a83931364d6b..200e0729f8b78 100644 --- a/test/StringProcessing/Sema/string_processing_import.swift +++ b/test/StringProcessing/Sema/string_processing_import.swift @@ -1,5 +1,5 @@ // RUN: %target-typecheck-verify-swift -disable-implicit-string-processing-module-import -disable-availability-checking -// REQUIRES: swift_in_compiler +// REQUIRES: swift_swift_parser // expected-error @+1 {{missing 'Regex' declaration, probably because the '_StringProcessing' module was not imported properly}} let r0 = #/./# diff --git a/test/stmt/then_stmt.swift b/test/stmt/then_stmt.swift index ab81db4116b93..213aee7987a20 100644 --- a/test/stmt/then_stmt.swift +++ b/test/stmt/then_stmt.swift @@ -4,7 +4,7 @@ // REQUIRES: asserts // Required for regex -// REQUIRES: swift_in_compiler +// REQUIRES: swift_swift_parser func then(_: Int = 0, x: Int = 0, fn: () -> Void = {}) {} diff --git a/tools/SourceKit/tools/sourcekitd/lib/Service/Requests.cpp b/tools/SourceKit/tools/sourcekitd/lib/Service/Requests.cpp index dc9990e4ff141..339caaf014914 100644 --- a/tools/SourceKit/tools/sourcekitd/lib/Service/Requests.cpp +++ b/tools/SourceKit/tools/sourcekitd/lib/Service/Requests.cpp @@ -111,7 +111,8 @@ void sourcekitd::initializeService( StringRef diagnosticDocumentationPath, std::function postNotification) { INITIALIZE_LLVM(); - initializeSwiftModules(); + initializeSwiftParseModules(); + initializeSwiftSILModules(); llvm::EnablePrettyStackTrace(); GlobalCtx = new SourceKit::Context(swiftExecutablePath, runtimeLibPath, diagnosticDocumentationPath, diff --git a/tools/swift-ide-test/swift-ide-test.cpp b/tools/swift-ide-test/swift-ide-test.cpp index b3323a583637f..d73c12783c8c2 100644 --- a/tools/swift-ide-test/swift-ide-test.cpp +++ b/tools/swift-ide-test/swift-ide-test.cpp @@ -4240,7 +4240,8 @@ std::string getDriverPath(StringRef MainExecutablePath) { int main(int argc, char *argv[]) { PROGRAM_START(argc, argv); INITIALIZE_LLVM(); - initializeSwiftModules(); + initializeSwiftParseModules(); + initializeSwiftSILModules(); std::string mainExecutablePath = llvm::sys::fs::getMainExecutable( argv[0], reinterpret_cast(&anchorForGetMainExecutable));