Skip to content

Commit 17ba4ae

Browse files
authored
Merge pull request #68820 from kubamracek/embedded-static-object
[embedded] Add swift_initStaticObject to the embedded runtime
2 parents 967bc84 + 85f3b24 commit 17ba4ae

File tree

2 files changed

+34
-0
lines changed

2 files changed

+34
-0
lines changed

stdlib/public/core/EmbeddedRuntime.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,13 @@ public func swift_deallocClassInstance(object: UnsafeMutablePointer<HeapObject>,
8080
free(object)
8181
}
8282

83+
@_silgen_name("swift_initStaticObject")
84+
public func swift_initStaticObject(metadata: UnsafeMutablePointer<ClassMetadata>, object: UnsafeMutablePointer<HeapObject>) -> UnsafeMutablePointer<HeapObject> {
85+
object.pointee.metadata = metadata
86+
object.pointee.refcount = HeapObject.immortalRefCount
87+
return object
88+
}
89+
8390
@_silgen_name("swift_initStackObject")
8491
public func swift_initStackObject(metadata: UnsafeMutablePointer<ClassMetadata>, object: UnsafeMutablePointer<HeapObject>) -> UnsafeMutablePointer<HeapObject> {
8592
object.pointee.metadata = metadata

test/embedded/static-object.swift

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
// RUN: %target-swift-frontend -O -emit-irgen %s %S/Inputs/print.swift -module-name main -parse-as-library -enable-experimental-feature Embedded | %FileCheck %s --check-prefix CHECK-IR
2+
// RUN: %target-run-simple-swift(-O %S/Inputs/print.swift -enable-experimental-feature Embedded -parse-as-library -runtime-compatibility-version none -wmo -Xfrontend -disable-objc-interop) | %FileCheck %s
3+
4+
// REQUIRES: executable_test
5+
// REQUIRES: optimized_stdlib
6+
// REQUIRES: VENDOR=apple
7+
// REQUIRES: OS=macosx
8+
9+
public func stringArray() -> [StaticString] {
10+
return ["a", "b", "c", "d"]
11+
}
12+
// CHECK-IR: define {{.*}}@"$s4main11stringArraySays12StaticStringVGyF"
13+
// CHECK-IR-NEXT: entry:
14+
// CHECK-IR-NEXT: call {{.*}}@swift_initStaticObject
15+
16+
@main
17+
struct Main {
18+
static func main() {
19+
for c in stringArray() {
20+
print(c)
21+
// CHECK: a
22+
// CHECK: b
23+
// CHECK: c
24+
// CHECK: d
25+
}
26+
}
27+
}

0 commit comments

Comments
 (0)