File: subscripts.swift

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (136 lines) | stat: -rw-r--r-- 2,291 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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
// RUN: %target-swift-emit-silgen -o /dev/null %s

func inoutFunc(_ x: inout Int) {}

// <rdar://22000564> Crash on Subscript taking a tuple argument list
class TupleSubscript {
  subscript (position: (Int, Int)) -> Int {
    get { return 32 }
    set {}
  }
  subscript(native native: Int) -> Int {
    get { return native }
    set {}
  }
  subscript (position position: (Int, Int)) -> Int {
    get { return 32 }
    set {}
  }
}

do {
  let t = TupleSubscript()

  _ = t[(1, 2)]
  t[(1, 2)] = 3
  inoutFunc(&t[(1, 2)])

  _ = t[native: 0]
  t[native: 0] = 1
  inoutFunc(&t[native: 0])

  _ = t[position: (1, 2)]
  t[position: (1, 2)] = 1
  inoutFunc(&t[position: (1, 2)])
}

// <rdar://problem/16189360> [DF] Assert on subscript with variadic parameter
class VariadicSubscript1 {
  subscript(subs: Int...) -> Int {
    get {
      return 42
    }
    set {}
  }
}

do {
  let v = VariadicSubscript1()

  _ = v[]
  v[] = 0
  inoutFunc(&v[])

  _ = v[1]
  v[1] = 0
  inoutFunc(&v[1])

  _ = v[0, 1, 2]
  v[0, 1, 2] = 3
  inoutFunc(&v[0, 1, 2])
}

class VariadicSubscript2 {
  subscript(x: String, subs: Int...) -> Int {
    get {
      return 42
    }
    set {}
  }
}

do {
  let v = VariadicSubscript2()

  _ = v[""]
  v[""] = 0
  inoutFunc(&v[""])

  _ = v["", 0, 1, 2]
  v["", 0, 1, 2] = 3
  inoutFunc(&v["", 0, 1, 2])
}

struct VariadicSubscript3 {
  subscript(indices: (Int, Int)...) -> Int {
    get { return 0 }
    set {}
  }
}

do {
  var b = VariadicSubscript3()
  _ = b[]
  b[] = 1
  inoutFunc(&b[])

  _ = b[(1, 2)]
  b[(1,2)] = 1
  inoutFunc(&b[(1,2)])

  _ = b[(1, 2),(2,3)]
  b[(1,2),(2,3)] = 1
  inoutFunc(&b[(1,2),(2,3)])
}

// https://github.com/apple/swift/issues/44425

public struct Flags: OptionSet {
  public var rawValue: Int
  public init(rawValue: Int) { self.rawValue = rawValue }

  public static let flag = Flags(rawValue: 1 << 0)
}

class VariadicSubscript4 {
  subscript(_ values: Int..., flags flags: Flags) -> Int {
    get { return 0 }
    set { }
  }
}

do {
  let t = VariadicSubscript4()

  _ = t[flags: .flag]
  t[flags: .flag] = 0
  inoutFunc(&t[flags: .flag])

  _ = t[1, flags: .flag]
  t[1, flags: .flag] = 0
  inoutFunc(&t[1, flags: .flag])

  _ = t[1, 2, 3, flags: .flag]
  t[1, 2, 3, flags: .flag] = 0
  inoutFunc(&t[1, 2, 3, flags: .flag])
}