File: dynamic_cast_functions.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 (148 lines) | stat: -rw-r--r-- 4,965 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
137
138
139
140
141
142
143
144
145
146
147
148
// RUN: %target-run-simple-swift | %FileCheck %s
// REQUIRES: executable_test

let a: ((Int, Int)) -> Void = { x in }
let b: Any = a

let cast1 = b as? (Int, Int) -> Void
let cast2 = b as? ((Int, Int)) -> Void

// CHECK: ok
print((cast1 == nil) ? "ok" : "fail")
// CHECK: ok
print((cast2 != nil) ? "ok" : "fail")

let c: () -> Void = { }
let d: (()) -> Void = { x in }

let e: Any = c
let f: Any = d

let cast3 = e as? () -> Void
let cast4 = e as? (()) -> Void
let cast5 = f as? () -> Void
let cast6 = f as? (()) -> Void

// CHECK: ok
print((cast3 != nil) ? "ok" : "fail")
// CHECK: ok
print((cast4 == nil) ? "ok" : "fail")
// CHECK: ok
print((cast5 == nil) ? "ok" : "fail")
// CHECK: ok
print((cast6 != nil) ? "ok" : "fail")

let g: (Int, Int) -> Void = { x, y in }
let h: Any = g

let cast7 = h as? ((Int, Int)) -> Void
let cast8 = h as? (Int, Int) -> Void

// CHECK: ok
print((cast7 == nil) ? "ok" : "fail")
// CHECK: ok
print((cast8 != nil) ? "ok" : "fail")

let t1: Any.Type = ((Int, Int) -> ()).self
let t2: Any.Type = (((Int, Int)) -> ()).self

// CHECK: ok
print((t1 == t2) ? "fail" : "ok")

let i: (inout Int) -> Void = { _ in }
let j: (__shared Int) -> Void = { _ in }
let k: (Int, inout Int) -> Void = { _,_ in }
let l: (inout Int, Float, inout String) -> Void = { _,_,_ in }
let m: (__shared Int, String, inout Float, Double) -> Void = { _,_,_,_ in }
let n: () -> Int = { 42 }
let o: (@autoclosure () -> Int) -> Void = { (x: @autoclosure () -> Int) -> Void in }
let p: (@autoclosure @escaping () -> Int) -> Void = { (x: @autoclosure @escaping () -> Int) -> Void in }

let i_any: Any = i
let j_any: Any = j
let k_any: Any = k
let l_any: Any = l
let m_any: Any = m
let n_any: Any = n
let o_any: Any = o
let p_any: Any = p

// CHECK: ok
print((i_any as? (Int) -> Void) != nil ? "fail" : "ok")
// CHECK: ok
print((i_any as? (__shared Int) -> Void) != nil ? "fail" : "ok")
// CHECK: ok
print((i_any as? (inout Int) -> Void) != nil ? "ok" : "fail")

// CHECK: ok
print((j_any as? (Int) -> Void) != nil ? "fail" : "ok")
// CHECK: ok
print((j_any as? (inout Int) -> Void) != nil ? "fail" : "ok")
// CHECK: ok
print((j_any as? (__shared Int) -> Void) != nil ? "ok" : "fail")

// CHECK: ok
print((k_any as? (Int, Int) -> Void) != nil ? "fail" : "ok")
// CHECK: ok
print((k_any as? (Int, inout Int) -> Void) != nil ? "ok" : "fail")
// CHECK: ok
print((k_any as? (inout Int, Int) -> Void) != nil ? "fail" : "ok")
// CHECK: ok
print((k_any as? (inout Int, __shared Int) -> Void) != nil ? "fail" : "ok")

// CHECK: ok
print((l_any as? (Int, Float, String) -> Void) != nil ? "fail" : "ok")
// CHECK: ok
print((l_any as? (Int, Float, inout String) -> Void) != nil ? "fail" : "ok")
// CHECK: ok
print((l_any as? (Int, inout Float, String) -> Void) != nil ? "fail" : "ok")
// CHECK: ok
print((l_any as? (inout Int, Float, String) -> Void) != nil ? "fail" : "ok")
// CHECK: ok
print((l_any as? (inout Int, inout Float, String) -> Void) != nil ? "fail" : "ok")
// CHECK: ok
print((l_any as? (inout Int, Float, __shared String) -> Void) != nil ? "fail" : "ok")
// CHECK: ok
print((l_any as? (inout Int, Float, inout String) -> Void) != nil ? "ok" : "fail")

// CHECK: ok
print((m_any as? (Int, String, Float, Double) -> Void) != nil ? "fail" : "ok")
// CHECK: ok
print((m_any as? (Int, String, Float, inout Double) -> Void) != nil ? "fail" : "ok")
// CHECK: ok
print((m_any as? (Int, String, Float, __shared Double) -> Void) != nil ? "fail" : "ok")
// CHECK: ok
print((m_any as? (Int, String, inout Float, Double) -> Void) != nil ? "fail" : "ok")
// CHECK: ok
print((m_any as? (Int, __shared String, Float, Double) -> Void) != nil ? "fail" : "ok")
// CHECK: ok
print((m_any as? (inout Int, String, __shared Float, Double) -> Void) != nil ? "fail" : "ok")
// CHECK: ok
print((m_any as? (__shared Int, String, Float, inout Double) -> Void) != nil ? "fail" : "ok")
// CHECK: ok
print((m_any as? (Int, __shared String, inout Float, Double) -> Void) != nil ? "fail" : "ok")
// CHECK: ok
print((m_any as? (__shared Int, String, inout Float, Double) -> Void) != nil ? "ok" : "fail")
// CHECK: ok
print((n_any as? () -> Int) != nil ? "ok" : "fail")
// CHECK: ok
print((n_any as? () -> Void) != nil ? "fail" : "ok")
// CHECK: ok
print((n_any as? (Int) -> Int) != nil ? "fail" : "ok")

// CHECK: ok
print((o_any as? (() -> Int) -> Void) != nil ? "fail" : "ok")
// CHECK: ok
print((o_any as? (inout () -> Int) -> Void) != nil ? "fail" : "ok")
// CHECK: ok
print((o_any as? (@escaping () -> Int) -> Void) != nil ? "fail" : "ok")
// CHECK: ok
print((o_any as? (@autoclosure () -> Int) -> Void) != nil ? "ok" : "fail")
// CHECK: ok
print((o_any as? (@autoclosure @escaping () -> Int) -> Void) != nil ? "fail" : "ok")
// CHECK: ok
print((p_any as? (@escaping () -> Int) -> Void) != nil ? "fail" : "ok")
// CHECK: ok
print((p_any as? (@autoclosure () -> Int) -> Void) != nil ? "fail" : "ok")
// CHECK: ok
print((p_any as? (@autoclosure @escaping () -> Int) -> Void) == nil ? "fail" : "ok")