Skip to content

Commit 46588af

Browse files
committed
Fix a bunch of CFArray/CFDictionary generics
Generics in things such as blocks are currently still wrong.
1 parent 5143534 commit 46588af

45 files changed

Lines changed: 873 additions & 20 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

crates/header-translator/src/config.rs

Lines changed: 90 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -964,7 +964,27 @@ pub struct ItemGeneric {
964964
impl FromStr for ItemGeneric {
965965
type Err = Box<dyn Error>;
966966
fn from_str(s: &str) -> Result<Self, Self::Err> {
967-
if let Some((id, generics)) = s.rsplit_once('<') {
967+
fn split_top_level_commas(s: &str) -> Vec<&str> {
968+
let mut parts = Vec::new();
969+
let mut depth = 0usize;
970+
let mut start = 0;
971+
972+
for (i, c) in s.char_indices() {
973+
match c {
974+
'<' => depth += 1,
975+
'>' => depth = depth.saturating_sub(1),
976+
',' if depth == 0 => {
977+
parts.push(s[start..i].trim());
978+
start = i + 1;
979+
}
980+
_ => {}
981+
}
982+
}
983+
parts.push(s[start..].trim());
984+
parts
985+
}
986+
987+
if let Some((id, generics)) = s.split_once('<') {
968988
let (generics, rest) = generics
969989
.rsplit_once('>')
970990
.ok_or_else(|| std::io::Error::other("missing closing >"))?;
@@ -973,10 +993,9 @@ impl FromStr for ItemGeneric {
973993
}
974994
Ok(Self {
975995
id: ItemIdentifier::from_str(id)?,
976-
// Simplistic, only handles one level
977-
generics: generics
978-
.split(",")
979-
.map(|generic| generic.trim().parse::<ItemGeneric>())
996+
generics: split_top_level_commas(generics)
997+
.into_iter()
998+
.map(|g| g.parse::<ItemGeneric>())
980999
.collect::<Result<Vec<_>, _>>()?,
9811000
})
9821001
} else {
@@ -1013,3 +1032,69 @@ impl<'de> de::Deserialize<'de> for ItemGeneric {
10131032
deserializer.deserialize_str(ItemGenericVisitor)
10141033
}
10151034
}
1035+
1036+
#[cfg(test)]
1037+
mod tests {
1038+
use super::*;
1039+
1040+
#[test]
1041+
fn item_generic_parse() {
1042+
assert_eq!(
1043+
ItemGeneric::from_str("Foo.Bar").unwrap(),
1044+
ItemGeneric {
1045+
id: ItemIdentifier::from_str("Foo.Bar").unwrap(),
1046+
generics: vec![],
1047+
}
1048+
);
1049+
1050+
assert_eq!(
1051+
ItemGeneric::from_str("Foo.Bar<X.Y.Z, A.B.C>").unwrap(),
1052+
ItemGeneric {
1053+
id: ItemIdentifier::from_str("Foo.Bar").unwrap(),
1054+
generics: vec![
1055+
ItemGeneric {
1056+
id: ItemIdentifier::from_str("X.Y.Z").unwrap(),
1057+
generics: vec![],
1058+
},
1059+
ItemGeneric {
1060+
id: ItemIdentifier::from_str("A.B.C").unwrap(),
1061+
generics: vec![],
1062+
},
1063+
],
1064+
}
1065+
);
1066+
1067+
assert_eq!(
1068+
ItemGeneric::from_str(
1069+
"Foo.Bar<X.Y.Z, Inner.Item<With.Generic, Second.Generic>, A.B.C>"
1070+
)
1071+
.unwrap(),
1072+
ItemGeneric {
1073+
id: ItemIdentifier::from_str("Foo.Bar").unwrap(),
1074+
generics: vec![
1075+
ItemGeneric {
1076+
id: ItemIdentifier::from_str("X.Y.Z").unwrap(),
1077+
generics: vec![],
1078+
},
1079+
ItemGeneric {
1080+
id: ItemIdentifier::from_str("Inner.Item").unwrap(),
1081+
generics: vec![
1082+
ItemGeneric {
1083+
id: ItemIdentifier::from_str("With.Generic").unwrap(),
1084+
generics: vec![],
1085+
},
1086+
ItemGeneric {
1087+
id: ItemIdentifier::from_str("Second.Generic").unwrap(),
1088+
generics: vec![],
1089+
}
1090+
],
1091+
},
1092+
ItemGeneric {
1093+
id: ItemIdentifier::from_str("A.B.C").unwrap(),
1094+
generics: vec![],
1095+
},
1096+
],
1097+
}
1098+
);
1099+
}
1100+
}

framework-crates/objc2-application-services/Cargo.toml

Lines changed: 8 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

framework-crates/objc2-application-services/translation-config.toml

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,38 @@ fn.ATSFontFamilyGetName.arguments.2.lifetime = "out-pointer-not-retained"
166166
fn.ATSFontGetName.arguments.2.lifetime = "out-pointer-not-retained"
167167
fn.ATSFontGetPostScriptName.arguments.2.lifetime = "out-pointer-not-retained"
168168

169+
##
170+
## Generics
171+
##
172+
173+
fn.ProcessInformationCopyDictionary.return.generics = ["CoreFoundation.CFString.CFString", "CoreFoundation.CFType"]
174+
fn.PasteboardCopyItemFlavors.arguments.2.generics = ["CoreFoundation.CFString.CFString"]
175+
fn.TranslationCreateWithSourceArray.arguments.0.generics = ["CoreFoundation.CFString.CFString"]
176+
fn.TranslationCreateWithSourceArray.arguments.2.generics = ["CoreFoundation.CFString.CFString"]
177+
fn.TranslationCreateWithSourceArray.arguments.3.generics = ["CoreFoundation.CFString.CFString", "ApplicationServices.HIServices.TranslationServices.Translation"]
178+
fn.AXIsProcessTrustedWithOptions.arguments.0.generics = ["CoreFoundation.CFString.CFString", "CoreFoundation.CFType"]
179+
fn.AXUIElementCopyAttributeNames.arguments.1.generics = ["CoreFoundation.CFString.CFString"]
180+
fn.AXUIElementCopyAttributeValues.arguments.4.generics = ["CoreFoundation.CFType"]
181+
fn.AXUIElementCopyMultipleAttributeValues.arguments.1.generics = ["CoreFoundation.CFString.CFString"]
182+
fn.AXUIElementCopyMultipleAttributeValues.arguments.3.generics = ["CoreFoundation.CFType"]
183+
fn.AXUIElementCopyParameterizedAttributeNames.arguments.1.generics = ["CoreFoundation.CFString.CFString"]
184+
fn.AXUIElementCopyActionNames.arguments.1.generics = ["CoreFoundation.CFString.CFString"]
185+
fn.PMSessionCopyOutputFormatList.arguments.2.generics = ["CoreFoundation.CFString.CFString"]
186+
fn.PMSessionCreatePageFormatList.arguments.2.generics = ["ApplicationServices.PMDefinitions.OpaquePMPageFormat"] # CFArrayRef of PMPageFormat
187+
fn.PMSessionCreatePrinterList.arguments.1.generics = ["ApplicationServices.PMDefinitions.OpaquePMPrinter"] # CFArrayRef of PMPrinter
188+
fn.PMPrintSettingsCopyAsDictionary.arguments.1.generics = ["CoreFoundation.CFString.CFString", "CoreFoundation.CFType"]
189+
fn.PMPrintSettingsCopyKeys.arguments.1.generics = ["CoreFoundation.CFString.CFString"]
190+
fn.PMServerCreatePrinterList.arguments.1.generics = ["ApplicationServices.PMDefinitions.OpaquePMPrinter"] # CFArrayRef of PMPrinter
191+
fn.PMServerLaunchPrinterBrowser.arguments.1.generics = ["CoreFoundation.CFString.CFString", "CoreFoundation.CFType"] # Probably?
192+
fn.PMPrinterCopyPresets.arguments.1.generics = ["ApplicationServices.PMDefinitions.OpaquePMPreset"] # CFArrayRef of PMPreset
193+
fn.PMPrinterGetMimeTypes.arguments.2.generics = ["CoreFoundation.CFString.CFString"]
194+
fn.PMPrinterGetPaperList.arguments.1.generics = ["ApplicationServices.PMDefinitions.OpaquePMPaper"] # CFArrayRef of PMPaper
195+
fn.PMPresetGetAttributes.arguments.1.generics = ["CoreFoundation.CFString.CFString", "CoreFoundation.CFType"] # Probably?
196+
fn.PMWorkflowCopyItems.arguments.0.generics = ["CoreFoundation.CFDictionary.CFDictionary<CoreFoundation.CFString.CFString, CoreFoundation.CFType>"]
197+
fn.PMPrinterSendCommand.arguments.3.generics = ["CoreFoundation.CFString.CFString", "CoreFoundation.CFType"] # Reserved, though probably this.
198+
fn.PMPrinterCopyState.arguments.1.generics = ["CoreFoundation.CFString.CFString", "CoreFoundation.CFType"]
199+
fn.PMCopyAvailablePPDs.arguments.1.generics = ["CoreFoundation.CFURL.CFURL"]
200+
169201
##
170202
## Safety
171203
##

framework-crates/objc2-carbon/Cargo.toml

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

framework-crates/objc2-carbon/translation-config.toml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,16 @@ const.kTXNQDFontColorAttributeSize.skipped = true
6969
# Private.
7070
const._KeyboardDispatch.skipped = true
7171

72+
##
73+
## Generics
74+
##
75+
76+
fn.HIObjectCopyDelegates.arguments.1.generics = ["CoreFoundation.CFString.CFString", "CoreFoundation.CFArray.CFArray<Carbon.HIToolbox.HIObject.HIObject>"]
77+
fn.CopySymbolicHotKeys.arguments.0.generics = ["CoreFoundation.CFDictionary.CFDictionary<CoreFoundation.CFString.CFString, CoreFoundation.CFType>"]
78+
fn.TISCreateInputSourceList.arguments.0.generics = ["CoreFoundation.CFString.CFString", "CoreFoundation.CFType"]
79+
fn.TISCreateInputSourceList.return.generics = ["Carbon.HIToolbox.TextInputSources.TISInputSource"]
80+
fn.TISCreateASCIICapableInputSourceList.return.generics = ["Carbon.HIToolbox.TextInputSources.TISInputSource"]
81+
7282
##
7383
## Nullability, lifetime and pointer bounds.
7484
##

framework-crates/objc2-cf-network/Cargo.toml

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

framework-crates/objc2-cf-network/translation-config.toml

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,27 @@ maccatalyst = "13.0"
77
ios = "2.0"
88
tvos = "9.0"
99
visionos = "1.0"
10+
11+
##
12+
## Generics
13+
##
14+
15+
fn.CFFTPCreateParsedResourceListing.arguments.3.generics = ["CoreFoundation.CFString.CFString", "CoreFoundation.CFType"]
16+
17+
fn.CFHostGetAddressing.return.generics = ["CoreFoundation.CFData.CFData"]
18+
fn.CFHostGetNames.return.generics = ["CoreFoundation.CFString.CFString"]
19+
20+
fn.CFHTTPMessageApplyCredentialDictionary.arguments.2.generics = ["CoreFoundation.CFString.CFString", "CoreFoundation.CFType"]
21+
fn.CFHTTPAuthenticationCopyDomains.return.generics = ["CoreFoundation.CFURL.CFURL"] # Probably
22+
23+
fn.CFHTTPMessageCopyAllHeaderFields.return.generics = ["CoreFoundation.CFString.CFString", "CoreFoundation.CFType"] # Maybe CFString value?
24+
25+
fn.CFNetServiceGetAddressing.return.generics = ["CoreFoundation.CFData.CFData"]
26+
fn.CFNetServiceCreateDictionaryWithTXTData.return.generics = ["CoreFoundation.CFString.CFString", "CoreFoundation.CFData.CFData"]
27+
# Dict values can also be CFString for convenience, but let's not support that to allow passing ^ directly to this.
28+
fn.CFNetServiceCreateTXTDataWithDictionary.arguments.1.generics = ["CoreFoundation.CFString.CFString", "CoreFoundation.CFData.CFData"]
29+
30+
fn.CFNetworkCopySystemProxySettings.return.generics = ["CoreFoundation.CFString.CFString", "CoreFoundation.CFType"]
31+
fn.CFNetworkCopyProxiesForURL.arguments.1.generics = ["CoreFoundation.CFString.CFString", "CoreFoundation.CFType"]
32+
fn.CFNetworkCopyProxiesForURL.return.generics = ["CoreFoundation.CFDictionary.CFDictionary<CoreFoundation.CFString.CFString, CoreFoundation.CFType>"]
33+
fn.CFNetworkCopyProxiesForAutoConfigurationScript.return.generics = ["CoreFoundation.CFDictionary.CFDictionary<CoreFoundation.CFString.CFString, CoreFoundation.CFType>"]

framework-crates/objc2-color-sync/Cargo.toml

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

framework-crates/objc2-color-sync/translation-config.toml

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,28 @@ visionos = "1.0"
1212
const.icVersion4Number.skipped = false
1313
const.COLORSYNC_PROFILE_INSTALL_ENTITLEMENT.skipped = false
1414
const.COLORSYNC_MD5_LENGTH.skipped = false
15+
16+
##
17+
## Generics
18+
##
19+
20+
# ColorSyncProfile
21+
fn.ColorSyncProfileCreateWithURLAndOptions.arguments.1.generics = ["CoreFoundation.CFString.CFString", "CoreFoundation.CFType"]
22+
fn.ColorSyncProfileCreateLink.arguments.0.generics = ["CoreFoundation.CFDictionary.CFDictionary<CoreFoundation.CFString.CFString, CoreFoundation.CFType>"]
23+
fn.ColorSyncProfileCreateLink.arguments.1.generics = ["CoreFoundation.CFString.CFString", "CoreFoundation.CFType"]
24+
fn.ColorSyncProfileCopyTagSignatures.return.generics = ["CoreFoundation.CFString.CFString"]
25+
fn.ColorSyncIterateInstalledProfilesWithOptions.arguments.3.generics = ["CoreFoundation.CFString.CFString", "CoreFoundation.CFType"]
26+
27+
# ColorSyncTransform
28+
fn.ColorSyncTransformCreate.arguments.0.generics = ["CoreFoundation.CFDictionary.CFDictionary<CoreFoundation.CFString.CFString, CoreFoundation.CFType>"]
29+
fn.ColorSyncTransformCreate.arguments.1.generics = ["CoreFoundation.CFString.CFString", "CoreFoundation.CFType"]
30+
fn.ColorSyncTransformCopyProperty.arguments.2.generics = ["CoreFoundation.CFString.CFString", "CoreFoundation.CFType"] # Probably
31+
fn.ColorSyncTransformGetProfileSequence.return.generics = ["CoreFoundation.CFDictionary.CFDictionary<CoreFoundation.CFString.CFString, CoreFoundation.CFType>"]
32+
fn.ColorSyncTransformConvert.arguments.11.generics = ["CoreFoundation.CFString.CFString", "CoreFoundation.CFType"] # Probably
33+
fn.ColorSyncCreateCodeFragment.arguments.0.generics = ["CoreFoundation.CFDictionary.CFDictionary<CoreFoundation.CFString.CFString, CoreFoundation.CFType>"]
34+
fn.ColorSyncCreateCodeFragment.arguments.1.generics = ["CoreFoundation.CFString.CFString", "CoreFoundation.CFType"] # Same as ColorSyncTransformCreate
35+
36+
# ColorSyncDevice
37+
fn.ColorSyncRegisterDevice.arguments.2.generics = ["CoreFoundation.CFString.CFString", "CoreFoundation.CFType"]
38+
fn.ColorSyncDeviceSetCustomProfiles.arguments.2.generics = ["CoreFoundation.CFString.CFString", "CoreFoundation.CFType"]
39+
fn.ColorSyncDeviceCopyDeviceInfo.return.generics = ["CoreFoundation.CFString.CFString", "CoreFoundation.CFType"]

framework-crates/objc2-core-image/translation-config.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,6 @@ protocol.CIFilter.renamed = "CIFilterProtocol"
1818
class.CIImage.categories.AVDepthData.skipped = true
1919
class.CIImage.categories.AVPortraitEffectsMatte.skipped = true
2020
class.CIImage.categories.AVSemanticSegmentationMatte.skipped = true
21+
22+
# Reserved for future use, pass NULL.
23+
class.CIContext.methods."createCGLayerWithSize:info:".arguments.1.generics = []

0 commit comments

Comments
 (0)