File: import_as_member.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 (72 lines) | stat: -rw-r--r-- 3,050 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
// RUN: %target-swift-emit-silgen -I %S/../IDE/Inputs/custom-modules %s | %FileCheck %s
// REQUIRES: objc_interop
import ImportAsMember.A
import ImportAsMember.Class
import Foundation

public func returnGlobalVar() -> Double {
	return Struct1.globalVar
}
// CHECK-LABEL: sil {{.*}}returnGlobalVar{{.*}} () -> Double {
// CHECK:   %0 = global_addr @IAMStruct1GlobalVar : $*Double
// CHECK:   [[READ:%.*]] = begin_access [read] [dynamic] %0 : $*Double
// CHECK:   [[VAL:%.*]] = load [trivial] [[READ]] : $*Double
// CHECK:   return [[VAL]] : $Double
// CHECK-NEXT: }

// N.B. Whether by design or due to a bug, nullable NSString globals
// still import as non-null.
public func returnStringGlobalVar() -> String {
  return Panda.cutenessFactor
}
// CHECK-LABEL: sil [ossa] {{.*}}returnStringGlobalVar{{.*}} () -> @owned String {
// CHECK:   %0 = global_addr @PKPandaCutenessFactor : $*NSString
// CHECK:   [[VAL:%.*]] = load [copy] %0 : $*NSString
// CHECK:   [[BRIDGE:%.*]] = function_ref @$sSS10FoundationE36_unconditionallyBridgeFromObjectiveCySSSo8NSStringCSgFZ
// CHECK:   [[RESULT:%.*]] = apply [[BRIDGE]](
// CHECK:   return [[RESULT]] : $String
// CHECK-NEXT: }

public func returnNullableStringGlobalVar() -> String? {
  return Panda.cuddlynessFactor
}
// CHECK-LABEL: sil [ossa] {{.*}}returnNullableStringGlobalVar{{.*}} () -> @owned Optional<String> {
// CHECK:   %0 = global_addr @PKPandaCuddlynessFactor : $*NSString
// CHECK:   [[VAL:%.*]] = load [copy] %0 : $*NSString
// CHECK:   [[BRIDGE:%.*]] = function_ref @$sSS10FoundationE36_unconditionallyBridgeFromObjectiveCySSSo8NSStringCSgFZ
// CHECK:   [[RESULT:%.*]] = apply [[BRIDGE]](
// CHECK:   [[SOME:%.*]] = enum $Optional<String>, #Optional.some!enumelt, [[RESULT]]
// CHECK:   return [[SOME]] : $Optional<String>
// CHECK-NEXT: }

// CHECK-LABEL: sil {{.*}}useClass{{.*}}
// CHECK: bb0([[D:%[0-9]+]] : $Double, [[OPTS:%[0-9]+]] : $SomeClass.Options):
public func useClass(d: Double, opts: SomeClass.Options) {
  // CHECK: [[CTOR:%[0-9]+]] = function_ref @MakeIAMSomeClass : $@convention(c) (Double) -> @autoreleased SomeClass
  // CHECK: [[OBJ:%[0-9]+]] = apply [[CTOR]]([[D]])
  let o = SomeClass(value: d)

  // CHECK: [[MOVED_OBJ:%.*]] = move_value [lexical] [var_decl] [[OBJ]]
  // CHECK: [[BORROWED_OBJ:%.*]] = begin_borrow [[MOVED_OBJ]]
  // CHECK: [[APPLY_FN:%[0-9]+]] = function_ref @IAMSomeClassApplyOptions : $@convention(c) (SomeClass, SomeClass.Options) -> ()
  // CHECK: apply [[APPLY_FN]]([[BORROWED_OBJ]], [[OPTS]])
  // CHECK: end_borrow [[BORROWED_OBJ]]
  // CHECK: destroy_value [[MOVED_OBJ]]
  o.applyOptions(opts)
}

extension SomeClass {
  // CHECK-LABEL: sil hidden [ossa] @$sSo12IAMSomeClassC16import_as_memberE6doubleABSd_tcfC
  // CHECK: bb0([[DOUBLE:%[0-9]+]] : $Double
  // CHECK-NOT: value_metatype
  // CHECK: [[FNREF:%[0-9]+]] = function_ref @MakeIAMSomeClass
  // CHECK: apply [[FNREF]]([[DOUBLE]])
  convenience init(double: Double) {
    self.init(value: double)
  }
}

public func useSpecialInit() -> Struct1 {
  return Struct1(specialLabel:())
}