File: Utils.swift

package info (click to toggle)
swiftlang 6.2.3-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,856,264 kB
  • sloc: cpp: 9,995,718; ansic: 2,234,019; asm: 1,092,167; python: 313,940; objc: 82,726; f90: 80,126; lisp: 38,373; pascal: 25,580; sh: 20,378; ml: 5,058; perl: 4,751; makefile: 4,725; awk: 3,535; javascript: 3,018; xml: 918; fortran: 664; cs: 573; ruby: 396
file content (104 lines) | stat: -rw-r--r-- 4,298 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2023 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
//
//===----------------------------------------------------------------------===//

@available(*, deprecated, renamed: "SourceEdit")
public typealias IncrementalEdit = SourceEdit

@available(*, deprecated, message: "Use Range<AbsolutePosition> instead")
public typealias ByteSourceRange = Range<AbsolutePosition>

extension Range<AbsolutePosition> {
  @available(*, deprecated, message: "Use lowerBound.utf8Offset instead")
  public var offset: Int { lowerBound.utf8Offset }

  @available(*, deprecated, message: "Construct a Range<AbsolutePosition> instead")
  public init(offset: Int, length: Int) {
    self = AbsolutePosition(utf8Offset: offset)..<AbsolutePosition(utf8Offset: offset + length)
  }

  @available(*, deprecated, message: "Use upperBound.utf8Offset instead")
  public var endOffset: Int {
    return upperBound.utf8Offset
  }

  /// Returns the range for the overlapping region between two ranges.
  ///
  /// If the intersection is empty, this returns a range starting at offset 0 and having length 0.
  public func intersected(_ other: Range<AbsolutePosition>) -> Range<AbsolutePosition> {
    return self.clamped(to: other)
  }
}

extension Range<AbsolutePosition> {
  /// The number of bytes between the range's lower bound and its upper bound
  public var length: SourceLength { return SourceLength(utf8Length: upperBound.utf8Offset - lowerBound.utf8Offset) }

  public init(position: AbsolutePosition, length: SourceLength) {
    self = position..<(position + length)
  }

  // Returns `true` if the intersection between this range and `other` is non-empty or if the two ranges are directly
  /// adjacent to each other.
  public func overlapsOrTouches(_ other: Range<AbsolutePosition>) -> Bool {
    return self.upperBound >= other.lowerBound && self.lowerBound <= other.upperBound
  }

  /// Returns `true` if the intersection between this range and `other` is non-empty or if the two ranges are directly
  /// adjacent to each other.
  @available(*, deprecated, renamed: "overlapsOrTouches(_:)")
  public func intersectsOrTouches(_ other: Range<AbsolutePosition>) -> Bool {
    return self.upperBound >= other.lowerBound && self.lowerBound <= other.upperBound
  }

  /// Returns `true` if the intersection between this range and `other` is non-empty.
  @available(*, deprecated, renamed: "overlaps(_:)")
  public func intersects(_ other: Range<AbsolutePosition>) -> Bool {
    return self.upperBound > other.lowerBound && self.lowerBound < other.upperBound
  }

  /// Returns the range for the overlapping region between two ranges.
  ///
  /// If the intersection is empty, this returns `nil`.
  @available(*, deprecated, message: "Use clamped(to:) instead")
  public func intersecting(_ other: Range<AbsolutePosition>) -> Range<AbsolutePosition>? {
    let lowerBound = Swift.max(self.lowerBound, other.lowerBound)
    let upperBound = Swift.min(self.upperBound, other.upperBound)
    if lowerBound > upperBound {
      return nil
    } else {
      return lowerBound..<upperBound
    }
  }
}

extension RawUnexpectedNodesSyntax {
  /// Construct a ``RawUnexpectedNodesSyntax``with the given `elements`.
  ///
  /// If `isMaximumNestingLevelOverflow` is `true`, the node has the
  /// `isMaximumNestingLevelOverflow` error bit set, indicating that the parser
  /// overflowed its maximum nesting level and thus aborted parsing.
  public init(elements: [RawSyntax], isMaximumNestingLevelOverflow: Bool, arena: __shared RawSyntaxArena) {
    let raw = RawSyntax.makeLayout(
      kind: .unexpectedNodes,
      uninitializedCount: elements.count,
      isMaximumNestingLevelOverflow: isMaximumNestingLevelOverflow,
      arena: arena
    ) { layout in
      guard var ptr = layout.baseAddress else { return }
      for elem in elements {
        ptr.initialize(to: elem.raw)
        ptr += 1
      }
    }
    self.init(raw: raw)
  }
}