Skip to content

Commit e2c7ebc

Browse files
committed
Update metadata.cpp
1 parent b1897c9 commit e2c7ebc

File tree

5 files changed

+110
-47
lines changed

5 files changed

+110
-47
lines changed

Package.swift

Lines changed: 25 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,22 @@ func envEnable(_ key: String, default defaultValue: Bool = false) -> Bool {
2222
let isXcodeEnv = Context.environment["__CFBundleIdentifier"] == "com.apple.dt.Xcode"
2323
let development = envEnable("OPENGRAPH_DEVELOPMENT", default: false)
2424

25-
let releaseVersion = Context.environment["OPENGRAPH_TARGET_RELEASE"].flatMap { Int($0) } ?? 2024
26-
2725
let swiftBinPath = Context.environment["_"] ?? "/usr/bin/swift"
2826
let swiftBinURL = URL(fileURLWithPath: swiftBinPath)
2927
let SDKPath = swiftBinURL.deletingLastPathComponent().deletingLastPathComponent().deletingLastPathComponent().path
3028
let includePath = SDKPath.appending("/usr/lib/swift")
3129

32-
// MARK: - C/CXX Settings
30+
var sharedCSettings: [CSetting] = [
31+
.unsafeFlags(["-I", includePath], .when(platforms: .nonDarwinPlatforms)),
32+
.define("__COREFOUNDATION_FORSWIFTFOUNDATIONONLY__", to: "1", .when(platforms: .nonDarwinPlatforms)),
33+
]
34+
35+
var sharedSwiftSettings: [SwiftSetting] = [
36+
.enableUpcomingFeature("InternalImportsByDefault"),
37+
.swiftLanguageMode(.v5),
38+
]
39+
40+
// MARK: [env] OPENGRAPH_SWIFT_TOOLCHAIN_PATH
3341

3442
// Modified from: https://github.com/swiftlang/swift/blob/main/SwiftCompilerSources/Package.swift
3543
//
@@ -44,15 +52,7 @@ let includePath = SDKPath.appending("/usr/lib/swift")
4452
//
4553
// where <$OPENGRAPH_SWIFT_TOOLCHAIN_PATH> is the parent directory of the swift repository.
4654

47-
let swiftToolchainVersion = Context.environment["OPENGRAPH_SWIFT_TOOLCHAIN_VERSION"] ?? (development ? "6.0.2" : "")
4855
let swiftToolchainPath = Context.environment["OPENGRAPH_SWIFT_TOOLCHAIN_PATH"] ?? (development ? "/Volumes/BuildMachine/swift-project" : "")
49-
let swiftToolchainSupported = envEnable("OPENGRAPH_SWIFT_TOOLCHAIN_SUPPORTED", default: !swiftToolchainVersion.isEmpty)
50-
51-
var sharedCSettings: [CSetting] = [
52-
.unsafeFlags(["-I", includePath], .when(platforms: .nonDarwinPlatforms)),
53-
.define("__COREFOUNDATION_FORSWIFTFOUNDATIONONLY__", to: "1", .when(platforms: .nonDarwinPlatforms)),
54-
]
55-
5656
if !swiftToolchainPath.isEmpty {
5757
sharedCSettings.append(
5858
.unsafeFlags(
@@ -74,38 +74,36 @@ if !swiftToolchainPath.isEmpty {
7474
)
7575
}
7676

77+
// MARK: [env] OPENGRAPH_SWIFT_TOOLCHAIN_VERSION
78+
79+
let swiftToolchainVersion = Context.environment["OPENGRAPH_SWIFT_TOOLCHAIN_VERSION"] ?? (development ? "6.0.2" : "")
7780
if !swiftToolchainVersion.isEmpty {
7881
sharedCSettings.append(
7982
.define("OPENGRAPH_SWIFT_TOOLCHAIN_VERSION", to: swiftToolchainVersion)
8083
)
8184
}
8285

83-
if swiftToolchainSupported {
84-
sharedCSettings.append(
85-
.define("OPENGRAPH_SWIFT_TOOLCHAIN_SUPPORTED")
86-
)
87-
}
88-
89-
// MARK: - Swift Settings
90-
91-
var sharedSwiftSettings: [SwiftSetting] = [
92-
.enableUpcomingFeature("InternalImportsByDefault"),
93-
.define("OPENGRAPH_RELEASE_\(releaseVersion)"),
94-
.swiftLanguageMode(.v5),
95-
]
86+
// MARK: - [env] OPENGRAPH_SWIFT_TOOLCHAIN_SUPPORTED
9687

88+
let swiftToolchainSupported = envEnable("OPENGRAPH_SWIFT_TOOLCHAIN_SUPPORTED", default: !swiftToolchainVersion.isEmpty)
9789
if swiftToolchainSupported {
98-
sharedSwiftSettings.append(
99-
.define("OPENGRAPH_SWIFT_TOOLCHAIN_SUPPORTED")
100-
)
90+
sharedCSettings.append(.define("OPENGRAPH_SWIFT_TOOLCHAIN_SUPPORTED"))
91+
sharedSwiftSettings.append(.define("OPENGRAPH_SWIFT_TOOLCHAIN_SUPPORTED"))
10192
}
10293

94+
// MARK: - [env] OPENGRAPH_TARGET_RELEASE
95+
96+
let releaseVersion = Context.environment["OPENGRAPH_TARGET_RELEASE"].flatMap { Int($0) } ?? 2024
97+
sharedCSettings.append(.define("OPENGRAPH_RELEASE", to: "\(releaseVersion)"))
98+
sharedSwiftSettings.append(.define("OPENGRAPH_RELEASE_\(releaseVersion)"))
10399
if releaseVersion >= 2021 {
104100
for year in 2021 ... releaseVersion {
105101
sharedSwiftSettings.append(.define("OPENGRAPH_SUPPORT_\(year)_API"))
106102
}
107103
}
108104

105+
// MARK: - [env] OPENGRAPH_WERROR
106+
109107
let warningsAsErrorsCondition = envEnable("OPENGRAPH_WERROR", default: isXcodeEnv && development)
110108
if warningsAsErrorsCondition {
111109
sharedSwiftSettings.append(.unsafeFlags(["-warnings-as-errors"]))
Lines changed: 47 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
//
22
// OGTypeID.cpp
3+
// OpenGraph_SPI
34
//
4-
//
5-
// Created by Kyle on 2024/1/7.
6-
//
5+
// Audited for iOS 18.0
6+
// Status: WIP
77

88
#include "OGTypeID.h"
99
#include "metadata.hpp"
@@ -14,23 +14,23 @@
1414

1515
OGTypeKind OGTypeGetKind(OGTypeID typeID) {
1616
#ifdef OPENGRAPH_SWIFT_TOOLCHAIN_SUPPORTED
17-
const swift::Metadata *type = reinterpret_cast<const swift::Metadata *>(typeID);
18-
switch (type->getKind()) {
19-
case swift::MetadataKind::Class:
17+
OG::swift::metadata const *metadata = reinterpret_cast<OG::swift::metadata const*>(typeID);
18+
switch (metadata->getKind()) {
19+
case swift::MetadataKind::Class: // 0x0
2020
return OGTypeKindClass;
21-
case swift::MetadataKind::Struct:
21+
case swift::MetadataKind::Struct: // 0x200
2222
return OGTypeKindStruct;
23-
case swift::MetadataKind::Enum:
23+
case swift::MetadataKind::Enum: // 0x201
2424
return OGTypeKindEnum;
25-
case swift::MetadataKind::Optional:
25+
case swift::MetadataKind::Optional: // 0x202
2626
return OGTypeKindOptional;
27-
case swift::MetadataKind::Tuple:
27+
case swift::MetadataKind::Tuple: // 0x301
2828
return OGTypeKindTuple;
29-
case swift::MetadataKind::Function:
29+
case swift::MetadataKind::Function: // 0x302
3030
return OGTypeKindFunction;
31-
case swift::MetadataKind::Existential:
31+
case swift::MetadataKind::Existential: // 0x303
3232
return OGTypeKindExistential;
33-
case swift::MetadataKind::Metatype:
33+
case swift::MetadataKind::Metatype: // 0x304
3434
return OGTypeKindMetatype;
3535
default:
3636
return OGTypeKindNone;
@@ -40,15 +40,46 @@ OGTypeKind OGTypeGetKind(OGTypeID typeID) {
4040
#endif
4141
}
4242

43-
CFStringRef OGTypeDescription(OGTypeID id) {
43+
#if OPENGRAPH_RELEASE >= 2024
44+
45+
void const* OGTypeGetSignature(OGTypeID typeID) {
46+
#ifdef OPENGRAPH_SWIFT_TOOLCHAIN_SUPPORTED
47+
OG::swift::metadata const *metadata = reinterpret_cast<OG::swift::metadata const*>(typeID);
48+
// TODO
49+
return nullptr;
50+
#else
51+
return nullptr;
52+
#endif
53+
}
54+
void const* OGTypeGetDescriptor(OGTypeID typeID) {
55+
#ifdef OPENGRAPH_SWIFT_TOOLCHAIN_SUPPORTED
56+
OG::swift::metadata const *metadata = reinterpret_cast<OG::swift::metadata const*>(typeID);
57+
return metadata->descriptor();
58+
#else
59+
return nullptr;
60+
#endif
61+
}
62+
63+
#endif /* OPENGRAPH_RELEASE */
64+
65+
CFStringRef OGTypeDescription(OGTypeID typeID) {
4466
CFMutableStringRef ref = CFStringCreateMutable(CFAllocatorGetDefault(), 0);
4567
#ifdef OPENGRAPH_SWIFT_TOOLCHAIN_SUPPORTED
46-
OG::swift::metadata const *metadata = reinterpret_cast<OG::swift::metadata const*>(id);
68+
OG::swift::metadata const *metadata = reinterpret_cast<OG::swift::metadata const*>(typeID);
4769
metadata->append_description(ref);
4870
#endif
4971
return ref;
5072
}
5173

52-
const void * OGTypeNominalDescriptor(OGTypeID typeID) {
74+
void const* OGTypeNominalDescriptor(OGTypeID typeID) {
75+
#ifdef OPENGRAPH_SWIFT_TOOLCHAIN_SUPPORTED
76+
OG::swift::metadata const *metadata = reinterpret_cast<OG::swift::metadata const*>(typeID);
77+
return metadata->nominal_descriptor();
78+
#else
5379
return nullptr;
80+
#endif
81+
}
82+
83+
CFStringRef OGTypeNominalDescriptorName(OGTypeID typeID) {
84+
// TODO
5485
}

Sources/OpenGraph_SPI/Runtime/OGTypeID.h

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,19 +27,35 @@ typedef OG_ENUM(uint32_t, OGTypeKind) {
2727
OGTypeKindFunction,
2828
OGTypeKindExistential,
2929
OGTypeKindMetatype,
30-
};
30+
} OG_SWIFT_NAME(Metadata.Kind);
3131

3232
OG_EXPORT
3333
OG_REFINED_FOR_SWIFT
34-
OGTypeKind OGTypeGetKind(OGTypeID typeID) OG_SWIFT_NAME(getter:OGTypeID.kind(self:));
34+
OGTypeKind OGTypeGetKind(OGTypeID typeID) OG_SWIFT_NAME(getter:Metadata.kind(self:));
35+
36+
#if OPENGRAPH_RELEASE >= 2024
37+
38+
OG_EXPORT
39+
OG_REFINED_FOR_SWIFT
40+
void const* OGTypeGetSignature(OGTypeID typeID) OG_SWIFT_NAME(getter:Metadata.signature(self:));
41+
42+
OG_EXPORT
43+
OG_REFINED_FOR_SWIFT
44+
void const* OGTypeGetDescriptor(OGTypeID typeID) OG_SWIFT_NAME(getter:Metadata.descriptor(self:));
45+
46+
#endif /* OPENGRAPH_RELEASE */
47+
48+
OG_EXPORT
49+
OG_REFINED_FOR_SWIFT
50+
CFStringRef OGTypeDescription(OGTypeID typeID);
3551

3652
OG_EXPORT
3753
OG_REFINED_FOR_SWIFT
38-
CFStringRef OGTypeDescription(OGTypeID type);
54+
void const* OGTypeNominalDescriptor(OGTypeID typeID) OG_SWIFT_NAME(getter:Metadata.nominalDescriptor(self:));
3955

4056
OG_EXPORT
4157
OG_REFINED_FOR_SWIFT
42-
const void * OGTypeNominalDescriptor(OGTypeID typeID) OG_SWIFT_NAME(getter:OGTypeID.nominalDescriptor(self:));
58+
CFStringRef OGTypeNominalDescriptorName(OGTypeID typeID) OG_SWIFT_NAME(getter:Metadata.nominalDescriptorName(self:));
4359

4460
OG_EXTERN_C_END
4561

Sources/OpenGraph_SPI/Runtime/metadata.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,21 @@
1111

1212
using OG::swift::metadata;
1313

14+
void const* metadata::descriptor() const OG_NOEXCEPT {
15+
// TODO
16+
return nullptr;
17+
}
18+
19+
void const* metadata::nominal_descriptor() const OG_NOEXCEPT {
20+
void const* descriptor = this->descriptor();
21+
if (descriptor == nullptr) {
22+
return nullptr;
23+
}
24+
// TODO
25+
return nullptr;
26+
}
27+
28+
1429
void metadata::append_description(CFMutableStringRef description) const OG_NOEXCEPT {
1530
// TODO
1631
}

Sources/OpenGraph_SPI/Runtime/metadata.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ namespace swift {
1919
#ifdef OPENGRAPH_SWIFT_TOOLCHAIN_SUPPORTED
2020
class metadata: public ::swift::Metadata {
2121
public:
22+
void const* descriptor() const OG_NOEXCEPT;
23+
void const* nominal_descriptor() const OG_NOEXCEPT;
24+
2225
void append_description(CFMutableStringRef description) const OG_NOEXCEPT;
2326
}; /* OG::swift::metadata */
2427
#else

0 commit comments

Comments
 (0)