File: mixed_mode_class_with_missing_properties.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 (75 lines) | stat: -rw-r--r-- 2,314 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
// RUN: %empty-directory(%t)
// RUN: cp %s %t/main.swift

// CMO does not work because of a deserialization failure: rdar://86575886
// RUN: %target-build-swift -Xllvm -sil-disable-pass=cmo -whole-module-optimization -emit-module-path %t/UsingObjCStuff.swiftmodule -c -o %t/UsingObjCStuff.o -module-name UsingObjCStuff -I %t -I %S/Inputs/mixed_mode -swift-version 5 -parse-as-library %S/Inputs/mixed_mode/UsingObjCStuff.swift
// RUN: %target-build-swift -o %t/a.out.v4 -I %t -I %S/Inputs/mixed_mode -module-name main -swift-version 4 %t/main.swift %t/UsingObjCStuff.o
// RUN: %target-build-swift -o %t/a.out.v5 -I %t -I %S/Inputs/mixed_mode -module-name main -swift-version 5 %t/main.swift %t/UsingObjCStuff.o
// RUN: %target-codesign %t/a.out.v4
// RUN: %target-codesign %t/a.out.v5
// RUN: %target-run %t/a.out.v4 | %FileCheck %s
// RUN: %target-run %t/a.out.v5 | %FileCheck %s

// REQUIRES: objc_interop
// REQUIRES: executable_test

import UsingObjCStuff

print("Let's go") // CHECK: Let's go

let holder = ButtHolder()
holder.x += 17
print(holder.x) // CHECK-NEXT: 17
holder.x += 38
print(holder.x) // CHECK-NEXT: 55
holder.z += "hello"
print(holder.z) // CHECK-NEXT: hello
holder.z += " world"
print(holder.z) // CHECK-NEXT: hello world

holder.virtual() // CHECK-NEXT: 55 [:] hello world

class SubButtHolder: ButtHolder {
  final var w: Double = 0

  override func virtual() {
    print("~* ", terminator: "")
    super.virtual()
    print(" \(w) *~")
  }

  func subVirtual() {
    print("~* \(x) ~*~ \(z) ~*~ \(w) *~")
  }
}

class SubSubButtHolder: SubButtHolder {
  override func virtual() {
    print("!!! ", terminator: "")
    super.virtual()
    print(" !!!")
  }
  override func subVirtual() {
    print("!!! ", terminator: "")
    super.subVirtual()
    print(" !!!")
  }
}

@inline(never)
func exerciseSubHolder(with subHolder: SubButtHolder) {
  subHolder.x = 679
  subHolder.z = "goodbye folks"
  subHolder.w = 90.5

  subHolder.virtual() // CHECK-NEXT: !!! ~* 679 [:] goodbye folks
                      // CHECK-NEXT: 90.5 *~
                      // CHECK-NEXT: !!!
  subHolder.subVirtual() // CHECK-NEXT: !!! ~* 679 ~*~ goodbye folks ~*~ 90.5 *~
                         // CHECK-NEXT: !!!
}

exerciseSubHolder(with: SubSubButtHolder())


print("OK that's it") // CHECK-NEXT: OK that's it