TOC
In the main module there are 4 generic Typealiases defined:
// FRAMEWORK
public typealias PalauDefaultsEntry<T: PalauDefaultable> = PalauEntry<PalauOptional<PalauSingle<T>>>
public typealias PalauDefaultsEntryEnsured<T: PalauDefaultable> = PalauEntry<PalauEnsured<PalauSingle<T>>>
public typealias PalauDefaultsArrayEntry<T: PalauDefaultable> = PalauEntry<PalauOptional<PalauList<T>>>
public typealias PalauDefaultsArrayEntryEnsured<T: PalauDefaultable> = PalauEntry<PalauEnsured<PalauList<T>>>Using them in them in the module where they are defined works perfectly:
// FRAMEWORK
// first one defined public in order to test outside of module
public let p1: PalauDefaultsEntry<Bool> = PalauDefaults.value("")
let p2: PalauDefaultsEntryEnsured<Bool> = PalauDefaults.value("", whenNil: true)
let p3: PalauDefaultsArrayEntry<Bool> = PalauDefaults.value("")
let p4: PalauDefaultsArrayEntryEnsured<Bool> = PalauDefaults.value("", whenNil: [true])The PalauEntry looks pretty straight forward:
// FRAMEWORK
public struct PalauEntry<Strategy>: PalauEntryBase
where
Strategy: PalauStrategy,
Strategy.QuantifierType.DefaultableType: PalauDefaultable {
public typealias EntryType = Strategy.ReturnType
public typealias EnsureFunction = (EntryType) -> EntryType
public typealias DidSetFunction = (EntryType, EntryType) -> ()
public let key: String
public let strategy: Strategy
public let defaults: NSUD
}When importing the module it seems like the generic typealias is not found.
- Using the typealias from the module: ❌
- Using the nested generic from the module: ✅
- Using the redefined typealias: ✅
// TEST
// defining them again for testing
public typealias PalauDefaultsEntry2<T: PalauDefaultable> = PalauEntry<PalauOptional<PalauSingle<T>>>
public typealias PalauDefaultsEntryEnsured2<T: PalauDefaultable> = PalauEntry<PalauEnsured<PalauSingle<T>>>
public typealias PalauDefaultsArrayEntry2<T: PalauDefaultable> = PalauEntry<PalauOptional<PalauList<T>>>
public typealias PalauDefaultsArrayEntryEnsured2<T: PalauDefaultable> = PalauEntry<PalauEnsured<PalauList<T>>>
// This is not working
// p1 should be of type PalauDefaultsEntry<Bool>
//let p0x = p1
struct PD {
// ✅ this is working
public static var boolValues: PalauEntry<PalauOptional<PalauSingle<Bool>>> {
get { return PalauDefaults.value("boolValues") }
set { }
}
// ❌ this is not working
public static var boolValue2: PalauDefaultsEntry<Bool> {
get { return PalauDefaults.value("boolValues") }
set { }
}
// ✅ But wait this is working too
public static var boolValue3: PalauDefaultsEntry2<Bool> {
get { return PalauDefaults.value("boolValues") }
set { }
}
}- clone: Palau-2 Branch
- Open: Tests/PalauDefaultsArrayTest.swift
- Re-enable: Lines 371-375
- Build Test
Sorry for missing comments. 😬 This totally WIP
In case you are wondering how PalauDefaults.value is defined:
// FRAMEWORK
public struct PalauDefaults {
/// The underlying defaults
public static var defaults: NSUD {
return NSUD.standard
}
public static func value<T>(_ key: String) -> PalauDefaultsEntry<T>
where T: PalauDefaultable, T.StoredType == T {
return PalauEntry(key:key, defaults:defaults)
}
public static func value<T>(_ key: String, whenNil fallback: @autoclosure(escaping) () -> T) -> PalauDefaultsEntryEnsured<T>
where T: PalauDefaultable, T.StoredType == T {
return PalauEntry(key:key, defaults:defaults, fallback: fallback())
}
public static func value<T>(_ key: String) -> PalauDefaultsArrayEntry<T>
where T: PalauDefaultable, T.StoredType == T {
return PalauEntry(key:key, defaults:defaults)
}
public static func value<T>(_ key: String, whenNil fallback: @autoclosure(escaping) () -> [T]) -> PalauDefaultsArrayEntryEnsured<T>
where T: PalauDefaultable, T.StoredType == T {
return PalauEntry(key:key, defaults:defaults, fallback: fallback())
}
}0 swift 0x00000001106b1e3d PrintStackTraceSignalHandler(void*) + 45
1 swift 0x00000001106b1886 SignalHandler(int) + 470
2 libsystem_platform.dylib 0x00007fff868f552a _sigtramp + 26
3 libsystem_platform.dylib 000000000000000000 _sigtramp + 2037426928
4 swift 0x000000010df5417d swift::ModuleFile::getType(llvm::PointerEmbeddedInt<unsigned int, 31>) + 2301
5 swift 0x000000010df5414c swift::ModuleFile::getType(llvm::PointerEmbeddedInt<unsigned int, 31>) + 2252
6 swift 0x000000010df54e7f swift::ModuleFile::getType(llvm::PointerEmbeddedInt<unsigned int, 31>) + 5631
7 swift 0x000000010df54e7f swift::ModuleFile::getType(llvm::PointerEmbeddedInt<unsigned int, 31>) + 5631
8 swift 0x000000010df54e7f swift::ModuleFile::getType(llvm::PointerEmbeddedInt<unsigned int, 31>) + 5631
9 swift 0x000000010df54168 swift::ModuleFile::getType(llvm::PointerEmbeddedInt<unsigned int, 31>) + 2280
10 swift 0x000000010df4c8b4 swift::ModuleFile::getDecl(llvm::PointerEmbeddedInt<unsigned int, 31>, llvm::Optional<swift::DeclContext*>) + 18420
11 swift 0x000000010df57f7a swift::ModuleFile::maybeReadPattern() + 682
12 swift 0x000000010df5807e swift::ModuleFile::maybeReadPattern() + 942
13 swift 0x000000010df4b51e swift::ModuleFile::getDecl(llvm::PointerEmbeddedInt<unsigned int, 31>, llvm::Optional<swift::DeclContext*>) + 13406
14 swift 0x000000010df5c637 swift::ModuleFile::loadAllMembers(swift::Decl*, unsigned long long) + 647
15 swift 0x000000010e2c342a (anonymous namespace)::Traversal::visitNominalTypeDecl(swift::NominalTypeDecl*) + 314
16 swift 0x000000010e2c139a (anonymous namespace)::Traversal::doIt(swift::Decl*) + 234
17 swift 0x000000010dcb038f swift::SILPassManager::SILPassManager(swift::SILModule*, llvm::StringRef) + 1439
18 swift 0x000000010dcb50df swift::runSILDiagnosticPasses(swift::SILModule&) + 159
19 swift 0x000000010d9863d7 performCompile(swift::CompilerInstance&, swift::CompilerInvocation&, llvm::ArrayRef<char const*>, int&, swift::FrontendObserver*) + 19079
20 swift 0x000000010d97f679 swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) + 18137
21 swift 0x000000010d93c4a0 main + 10240
22 libdyld.dylib 0x00007fff82ca35ad start + 1
23 libdyld.dylib 0x000000000000003b start + 2100677263
Stack dump:
0. Program arguments: /Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift -frontend -emit-module /Users/elkr/Library/Developer/Xcode/DerivedData/Palau-belahwbrdteddtcugspivsutaljf/Build/Intermediates/Palau.build/Debug-iphonesimulator/Palau iOS Tests.build/Objects-normal/x86_64/PalauDefaultsArrayTest~partial.swiftmodule /Users/elkr/Library/Developer/Xcode/DerivedData/Palau-belahwbrdteddtcugspivsutaljf/Build/Intermediates/Palau.build/Debug-iphonesimulator/Palau iOS Tests.build/Objects-normal/x86_64/PalauTestHelpers~partial.swiftmodule -parse-as-library -target x86_64-apple-ios8.0 -enable-objc-interop -sdk /Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator10.0.sdk -I /Users/elkr/Library/Developer/Xcode/DerivedData/Palau-belahwbrdteddtcugspivsutaljf/Build/Products/Debug-iphonesimulator -F /Users/elkr/Library/Developer/Xcode/DerivedData/Palau-belahwbrdteddtcugspivsutaljf/Build/Products/Debug-iphonesimulator -F /Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Frameworks -enable-testing -g -module-cache-path /Users/elkr/Library/Developer/Xcode/DerivedData/ModuleCache -serialize-debugging-options -serialize-debugging-options -Xcc -I/Users/elkr/Library/Developer/Xcode/DerivedData/Palau-belahwbrdteddtcugspivsutaljf/Build/Intermediates/Palau.build/Debug-iphonesimulator/Palau iOS Tests.build/swift-overrides.hmap -Xcc -iquote -Xcc /Users/elkr/Library/Developer/Xcode/DerivedData/Palau-belahwbrdteddtcugspivsutaljf/Build/Intermediates/Palau.build/Debug-iphonesimulator/Palau iOS Tests.build/Palau iOS Tests-generated-files.hmap -Xcc -I/Users/elkr/Library/Developer/Xcode/DerivedData/Palau-belahwbrdteddtcugspivsutaljf/Build/Intermediates/Palau.build/Debug-iphonesimulator/Palau iOS Tests.build/Palau iOS Tests-own-target-headers.hmap -Xcc -I/Users/elkr/Library/Developer/Xcode/DerivedData/Palau-belahwbrdteddtcugspivsutaljf/Build/Intermediates/Palau.build/Debug-iphonesimulator/Palau iOS Tests.build/Palau iOS Tests-all-non-framework-target-headers.hmap -Xcc -ivfsoverlay -Xcc /Users/elkr/Library/Developer/Xcode/DerivedData/Palau-belahwbrdteddtcugspivsutaljf/Build/Intermediates/Palau.build/all-product-headers.yaml -Xcc -iquote -Xcc /Users/elkr/Library/Developer/Xcode/DerivedData/Palau-belahwbrdteddtcugspivsutaljf/Build/Intermediates/Palau.build/Debug-iphonesimulator/Palau iOS Tests.build/Palau iOS Tests-project-headers.hmap -Xcc -I/Users/elkr/Library/Developer/Xcode/DerivedData/Palau-belahwbrdteddtcugspivsutaljf/Build/Products/Debug-iphonesimulator/include -Xcc -I/Users/elkr/Library/Developer/Xcode/DerivedData/Palau-belahwbrdteddtcugspivsutaljf/Build/Intermediates/Palau.build/Debug-iphonesimulator/Palau iOS Tests.build/DerivedSources/x86_64 -Xcc -I/Users/elkr/Library/Developer/Xcode/DerivedData/Palau-belahwbrdteddtcugspivsutaljf/Build/Intermediates/Palau.build/Debug-iphonesimulator/Palau iOS Tests.build/DerivedSources -Xcc -DDEBUG=1 -Xcc -working-directory/xcode-common/workspace/Palau -emit-module-doc-path /Users/elkr/Library/Developer/Xcode/DerivedData/Palau-belahwbrdteddtcugspivsutaljf/Build/Intermediates/Palau.build/Debug-iphonesimulator/Palau iOS Tests.build/Objects-normal/x86_64/Palau_iOS_Tests.swiftdoc -module-name Palau_iOS_Tests -emit-objc-header-path /Users/elkr/Library/Developer/Xcode/DerivedData/Palau-belahwbrdteddtcugspivsutaljf/Build/Intermediates/Palau.build/Debug-iphonesimulator/Palau iOS Tests.build/Objects-normal/x86_64/Palau_iOS_Tests-Swift.h -o /Users/elkr/Library/Developer/Xcode/DerivedData/Palau-belahwbrdteddtcugspivsutaljf/Build/Intermediates/Palau.build/Debug-iphonesimulator/Palau iOS Tests.build/Objects-normal/x86_64/Palau_iOS_Tests.swiftmodule
1. While loading members for 'PD' at <invalid loc>
2. While deserializing decl #84 (PATTERN_BINDING_DECL)
3. While deserializing decl #85 (VAR_DECL)