Files
swift-mirror/SwiftCompilerSources/Sources/Basic/SourceLoc.swift
Rintaro Ishizaki 47f18d492e [ASTGen] Move regex literal parsing from SwiftCompilerSources to ASTGen
ASTGen always builds with the host Swift compiler, without requiring
bootstrapping, and is enabled in more places. Move the regex literal
parsing logic there so it is enabled in more host environments, and
makes use of CMake's Swift support. Enable all of the regex literal
tests when ASTGen is built, to ensure everything is working.

Remove the "AST" and "Parse" Swift modules from SwiftCompilerSources,
because they are no longer needed.
2023-11-16 10:59:23 -08:00

55 lines
1.4 KiB
Swift

//===--- SourceLoc.swift - SourceLoc bridging 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
//
//===----------------------------------------------------------------------===//
import BasicBridging
public struct SourceLoc {
/// Points into a source file.
public let bridged: BridgedSourceLoc
public init?(bridged: BridgedSourceLoc) {
guard bridged.isValid else {
return nil
}
self.bridged = bridged
}
}
extension SourceLoc {
public func advanced(by n: Int) -> SourceLoc {
SourceLoc(bridged: bridged.advanced(by: n))!
}
}
extension Optional where Wrapped == SourceLoc {
public var bridged: BridgedSourceLoc {
self?.bridged ?? .init()
}
}
public struct CharSourceRange {
public let start: SourceLoc
public let byteLength: UInt32
public init(start: SourceLoc, byteLength: UInt32) {
self.start = start
self.byteLength = byteLength
}
public init?(bridgedStart: BridgedSourceLoc, byteLength: UInt32) {
guard let start = SourceLoc(bridged: bridgedStart) else {
return nil
}
self.init(start: start, byteLength: byteLength)
}
}