File: MetadataPruning.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 (133 lines) | stat: -rw-r--r-- 2,719 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
// RUN: %target-run-simple-swift
// RUN: %target-run-simple-swift(-Xfrontend -disable-reflection-metadata)
// RUN: %target-run-simple-swift(-Xfrontend -reflection-metadata-for-debugger-only)
// RUN: %target-run-simple-swift(-Xfrontend -disable-reflection-names)
//
// REQUIRES: executable_test

import StdlibUnittest

var tests = TestSuite("MetadataPruning")

struct TestStruct {
  var int = 0
  var double = 0.0
  var bool = false
}

struct GenericStruct<T> {
  var int = 0
  var first: T
  var second: T
}

enum TestEnum {
  case one
  case two
  case three(TestStruct)
}

class BaseClass {
  var superInt = 0
  init() {}
}

class TestClass: BaseClass {
  var int = 0
  var double = 0.0
  var bool = false
  override init() {}
}

class TestSubclass: TestClass {
  var strings: [String] = []
  override init() {}
}

class GenericClass<T, U>: BaseClass {
  var first: T
  var second: U

  init(_ t: T, _ u: U) {
    self.first = t
    self.second = u
  }
}

class GenericSubclass<V, W>: GenericClass<V, Bool> {
  var third: W

  init(_ v: V, _ w: W) {
    self.third = w
    super.init(v, false)
  }
}

class OwnershipTestClass: BaseClass {
  weak var test1: TestClass?
  unowned var test2: TestClass
  unowned(unsafe) var test3: TestClass

  init(_ t: TestClass) {
    self.test1 = t
    self.test2 = t
    self.test3 = t
  }
}

struct ContainsObject {
  var obj: TestClass
}

#if _runtime(_ObjC)
import Foundation

class NSObjectSubclass: NSObject {
  var point: (Double, Double)

  init(x: Double, y: Double) {
    self.point = (x, y)
  }
}

class EmptyNSObject: NSObject {}
#endif


func printAddress(_ obj: AnyObject) {
  print("\(obj) address: \(Unmanaged.passUnretained(obj).toOpaque())")
}

tests.test("Allocate types without metadata") {
  let testStruct = TestStruct()
  let genericStruct = GenericStruct<Double>(first: 1.3, second: 3.7)
  let testEnum = TestEnum.three(testStruct)
  let baseClass = BaseClass()
  let testClass = TestClass()
  let testSubclass = TestSubclass()
  let genericClass = GenericClass<Int, String>(5, "bla")
  let genericSubclass = GenericSubclass<Double, TestClass>(1.1, testClass)
  let ownershipTestClass = OwnershipTestClass(testClass)
  let containsObject = ContainsObject(obj: testClass)

  print("\(testStruct)")
  print("\(genericStruct)")
  print("\(testEnum)")
  printAddress(baseClass)
  printAddress(testClass)
  printAddress(testSubclass)
  printAddress(genericClass)
  printAddress(genericSubclass)
  printAddress(ownershipTestClass)
  print("\(containsObject)")

#if _runtime(_ObjC)
  let nsObjectSubclass = NSObjectSubclass(x: 1.2, y: 3.4)
  let emptyNSObject = EmptyNSObject()

  printAddress(nsObjectSubclass)
  printAddress(emptyNSObject)
#endif
}

runAllTests()