File: IfConfigFunctions.swift

package info (click to toggle)
swiftlang 6.1.3-1
  • links: PTS, VCS
  • area: main
  • in suites: forky
  • size: 2,791,532 kB
  • sloc: cpp: 9,901,743; ansic: 2,201,431; asm: 1,091,827; python: 308,252; objc: 82,166; f90: 80,126; lisp: 38,358; pascal: 25,559; sh: 20,429; ml: 5,058; perl: 4,745; makefile: 4,484; awk: 3,535; javascript: 3,018; xml: 918; fortran: 664; cs: 573; ruby: 396
file content (76 lines) | stat: -rw-r--r-- 2,770 bytes parent folder | download | duplicates (2)
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
//===----------------------------------------------------------------------===//
//
// 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
//
//===----------------------------------------------------------------------===//

/// Enum capturing all of the functions that can be used in an `#if` condition.
enum IfConfigFunctions: String {
  /// A check for a specific attribute via `hasAttribute(<name>)`.
  case hasAttribute

  /// A check for a specific named feature via `hasFeature(<name>)`.
  case hasFeature

  /// A check for the Swift language version via `swift(>=version).`
  case swift

  /// A check for the Swift compiler version via `compiler(>=version)`.
  case compiler

  /// A check to determine whether a given module can be imported via `canImport(<import path>)`.
  case canImport

  /// A check for the target Operating System kind (e.g., Linux, iOS) via `os(<name>)`
  case os

  /// A check for the target architecture (e.g., arm64, x86_64) via `arch(<name>)`.
  case arch

  /// A check for the target environment (e.g., simulator) via `targetEnvironment(<environment>)`.
  case targetEnvironment

  /// A check to determine whether the platform supports atomic operations
  /// with the given bitwidth, e.g., `_hasAtomicBitWidth(_64)`.
  case _hasAtomicBitWidth

  /// A historical check against a specific compiler build version via `_compiler_version("<version>")`.
  case _compiler_version

  /// A check for the target endianness (e.g., big or little) via `_endian(big|little)`.
  case _endian

  /// A check for the target bit width of a pointer (e.g., _64)
  case _pointerBitWidth

  /// A check for the target runtime paired with the Swift runtime (e.g., _ObjC)
  /// via `_runtime(<name>)`.
  case _runtime

  /// A check for the target's pointer authentication scheme (e.g., _arm64e)
  /// via `_ptrauth(<name>)`.
  case _ptrauth

  /// An unsupported function used by C preprocessor macros (e.g. `#if defined(FOO)`)
  case defined

  /// Whether uses of this function consitutes a check that guards new syntax.
  /// When such a check fails, the compiler should not diagnose syntax errors
  /// within the covered block.
  var syntaxErrorsAllowed: Bool {
    switch self {
    case .swift, .compiler, ._compiler_version:
      return true

    case .hasAttribute, .hasFeature, .canImport, .os, .arch, .targetEnvironment,
      ._hasAtomicBitWidth, ._endian, ._pointerBitWidth, ._runtime, ._ptrauth, .defined:
      return false
    }
  }
}