Skip to content

Commit f829d36

Browse files
authored
Merge branch 'main' into ffiworkspace
2 parents c76bb61 + a442528 commit f829d36

24 files changed

+239
-349
lines changed

pkgs/ffigen/CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1+
## 21.0.0
2+
3+
- __Breaking change__: Remove deprecated `useDartHandle` field from
4+
`FfiGenerator`.
5+
- __Breaking change__: Remove unused `includeSymbolAddress` field from
6+
`Categories`, `Interfaces`, and `Protocols`.
7+
- __Breaking change__: Remove deprecated `wrapperName` field from
8+
`NativeExternalBindings`.
9+
110
## 20.1.1
211

312
- Update tests and examples now that package:objective_c is using native assets.

pkgs/ffigen/ffigen.schema.json

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -479,9 +479,6 @@
479479
"preamble": {
480480
"type": "string"
481481
},
482-
"use-dart-handle": {
483-
"type": "boolean"
484-
},
485482
"ffi-native": {
486483
"$oneOf": [
487484
{

pkgs/ffigen/lib/src/code_generator/library.dart

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ class Library {
2727
required List<Binding> bindings,
2828
required Context context,
2929
}) => Library(
30-
name: context.config.wrapperName,
3130
description: context.config.wrapperDocComment,
3231
bindings: bindings,
3332
header: context.config.preamble,
@@ -43,7 +42,6 @@ class Library {
4342
);
4443

4544
factory Library({
46-
required String name,
4745
String? description,
4846
required List<Binding> bindings,
4947
String? header,

pkgs/ffigen/lib/src/code_generator/objc_built_in_functions.dart

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
44

5+
import 'package:path/path.dart' as path;
6+
57
import '../code_generator.dart';
8+
import '../config_provider.dart';
69
import '../context.dart';
710
import '../visitor/ast.dart';
811

@@ -14,15 +17,12 @@ import 'writer.dart';
1417

1518
/// Built in functions used by the Objective C bindings.
1619
class ObjCBuiltInFunctions {
17-
ObjCBuiltInFunctions(
18-
this.context,
19-
this.wrapperName,
20-
this.generateForPackageObjectiveC,
21-
);
20+
ObjCBuiltInFunctions(this.context, this.generateForPackageObjectiveC)
21+
: libraryId = _libraryIdFromConfigHash(context.config);
2222

2323
final Context context;
24-
final String wrapperName;
2524
final bool generateForPackageObjectiveC;
25+
final String libraryId;
2626

2727
static const registerName = ObjCImport('registerName');
2828
static const getClass = ObjCImport('getClass');
@@ -149,9 +149,9 @@ class ObjCBuiltInFunctions {
149149
ObjCBlockWrapperFuncs? getBlockTrampolines(ObjCBlock block) {
150150
final (id, idHash) = _methodSigId(block.returnType, block.params);
151151
return _blockTrampolines[id] ??= ObjCBlockWrapperFuncs(
152-
_blockTrampolineFunc('_${wrapperName}_wrapListenerBlock_$idHash'),
152+
_blockTrampolineFunc('_${libraryId}_wrapListenerBlock_$idHash'),
153153
_blockTrampolineFunc(
154-
'_${wrapperName}_wrapBlockingBlock_$idHash',
154+
'_${libraryId}_wrapBlockingBlock_$idHash',
155155
blocking: true,
156156
),
157157
);
@@ -191,7 +191,7 @@ class ObjCBuiltInFunctions {
191191
final (id, idHash) = _methodSigId(block.returnType, block.params);
192192
return _protocolTrampolines[id] ??= ObjCProtocolMethodTrampoline(
193193
Func(
194-
name: '_${wrapperName}_protocolTrampoline_$idHash',
194+
name: '_${libraryId}_protocolTrampoline_$idHash',
195195
returnType: block.returnType,
196196
parameters: [
197197
Parameter(
@@ -215,6 +215,16 @@ class ObjCBuiltInFunctions {
215215
final baseType = type.typealiasType;
216216
return baseType is ObjCNullable && baseType.child is ObjCInstanceType;
217217
}
218+
219+
// A unique (but not human readable) ID for the generated library based on
220+
// a hash of parts of the config.
221+
static String _libraryIdFromConfigHash(Config config) => fnvHash32(
222+
[
223+
...config.entryPoints,
224+
config.output,
225+
config.outputObjC,
226+
].map((uri) => path.basename(uri.toFilePath())).join('\n'),
227+
).toRadixString(36);
218228
}
219229

220230
/// A native trampoline function for a listener block.

pkgs/ffigen/lib/src/code_generator/objc_protocol.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -329,11 +329,11 @@ ${generateInstanceMethodBindings(w, this)}
329329
BindingString? toObjCBindingString(Writer w) {
330330
if (generateAsStub) return null;
331331

332-
final wrapName = context.objCBuiltInFunctions.wrapperName;
332+
final libraryId = context.objCBuiltInFunctions.libraryId;
333333
final mainString =
334334
'''
335335
336-
Protocol* _${wrapName}_$originalName(void) { return @protocol($originalName); }
336+
Protocol* _${libraryId}_$originalName(void) { return @protocol($originalName); }
337337
''';
338338

339339
return BindingString(

pkgs/ffigen/lib/src/config_provider/config.dart

Lines changed: 3 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -72,14 +72,6 @@ final class FfiGenerator {
7272
)
7373
final List<LibraryImport> libraryImports;
7474

75-
/// Whether `Dart_Handle` should be mapped with Handle/Object.
76-
// TODO(https://github.com/dart-lang/native/issues/2594): Remove this.
77-
@Deprecated(
78-
'Will be removed in a future version. Please reply in '
79-
'https://github.com/dart-lang/native/issues/2594 if you rely on this.',
80-
)
81-
final bool useDartHandle;
82-
8375
/// Path to the clang library.
8476
///
8577
/// Only visible for YamlConfig plumbing.
@@ -109,11 +101,6 @@ final class FfiGenerator {
109101
'https://github.com/dart-lang/native/issues/2597.',
110102
)
111103
this.libraryImports = const <LibraryImport>[],
112-
@Deprecated(
113-
'Will be removed in a future version. Please reply in '
114-
'https://github.com/dart-lang/native/issues/2594 if you rely on this.',
115-
)
116-
this.useDartHandle = true,
117104
@Deprecated('Only visible for YamlConfig plumbing.') this.libclangDylib,
118105
});
119106

@@ -579,7 +566,6 @@ final class Categories extends Declarations {
579566
const Categories({
580567
super.include,
581568
super.includeMember,
582-
super.includeSymbolAddress,
583569
super.rename,
584570
super.renameMember,
585571
this.includeTransitive = true,
@@ -607,7 +593,6 @@ final class Interfaces extends Declarations {
607593
const Interfaces({
608594
super.include,
609595
super.includeMember,
610-
super.includeSymbolAddress,
611596
super.rename,
612597
super.renameMember,
613598
this.includeTransitive = false,
@@ -638,7 +623,6 @@ final class Protocols extends Declarations {
638623
const Protocols({
639624
super.include,
640625
super.includeMember,
641-
super.includeSymbolAddress,
642626
super.rename,
643627
super.renameMember,
644628
this.includeTransitive = false,
@@ -709,16 +693,7 @@ final class NativeExternalBindings implements BindingStyle {
709693
/// If omitted, it will not be generated.
710694
final String? assetId;
711695

712-
/// The prefix for the generated Objective-C functions.
713-
// TODO(https://github.com/dart-lang/native/issues/2580): Remove this.
714-
@Deprecated('Will be replaced by a hash.')
715-
final String wrapperName;
716-
717-
const NativeExternalBindings({
718-
this.assetId,
719-
@Deprecated('Will be replaced by a hash.')
720-
this.wrapperName = 'NativeLibrary',
721-
});
696+
const NativeExternalBindings({this.assetId});
722697
}
723698

724699
/// Generate bindings which take a [DynamicLibrary] or [DynamicLibrary.lookup]
@@ -761,14 +736,9 @@ extension type Config(FfiGenerator ffiGen) implements FfiGenerator {
761736
Protocols get objcProtocols => _objectiveC.protocols;
762737
ExternalVersions get externalVersions => _objectiveC.externalVersions;
763738
// ignore: deprecated_member_use_from_same_package
764-
bool get useDartHandle => ffiGen.useDartHandle;
765-
// ignore: deprecated_member_use_from_same_package
766739
Map<String, ImportedType> get importedTypesByUsr => ffiGen.importedTypesByUsr;
767-
String get wrapperName => switch (ffiGen.output.style) {
768-
final DynamicLibraryBindings e => e.wrapperName,
769-
// ignore: deprecated_member_use_from_same_package
770-
final NativeExternalBindings e => e.wrapperName,
771-
};
740+
String get wrapperName =>
741+
(ffiGen.output.style as DynamicLibraryBindings).wrapperName;
772742

773743
String? get wrapperDocComment => switch (ffiGen.output.style) {
774744
final DynamicLibraryBindings e => e.wrapperDocComment,

pkgs/ffigen/lib/src/config_provider/yaml_config.dart

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -219,10 +219,6 @@ final class YamlConfig {
219219
String? get preamble => _preamble;
220220
String? _preamble;
221221

222-
/// If `Dart_Handle` should be mapped with Handle/Object.
223-
bool get useDartHandle => _useDartHandle;
224-
late bool _useDartHandle;
225-
226222
/// Where to silence warning for enum integer type mimicking.
227223
bool get silenceEnumWarning => _silenceEnumWarning;
228224
late bool _silenceEnumWarning;
@@ -877,12 +873,6 @@ final class YamlConfig {
877873
result: (node) => _preamble = node.value as String?,
878874
),
879875
),
880-
HeterogeneousMapEntry(
881-
key: strings.useDartHandle,
882-
valueConfigSpec: BoolConfigSpec(),
883-
defaultValue: (node) => true,
884-
resultOrDefault: (node) => _useDartHandle = node.value as bool,
885-
),
886876
HeterogeneousMapEntry(
887877
key: strings.ffiNative,
888878
valueConfigSpec: OneOfConfigSpec(
@@ -1252,11 +1242,7 @@ final class YamlConfig {
12521242
preamble: preamble,
12531243
format: formatOutput,
12541244
style: ffiNativeConfig.enabled
1255-
? NativeExternalBindings(
1256-
assetId: ffiNativeConfig.assetId,
1257-
// ignore: deprecated_member_use_from_same_package
1258-
wrapperName: wrapperName,
1259-
)
1245+
? NativeExternalBindings(assetId: ffiNativeConfig.assetId)
12601246
: DynamicLibraryBindings(
12611247
wrapperName: wrapperName,
12621248
wrapperDocComment: wrapperDocComment,
@@ -1324,7 +1310,6 @@ final class YamlConfig {
13241310
? ObjectiveC(
13251311
interfaces: Interfaces(
13261312
include: objcInterfaces.shouldInclude,
1327-
includeSymbolAddress: objcInterfaces.shouldIncludeSymbolAddress,
13281313
includeMember: objcInterfaces.shouldIncludeMember,
13291314
rename: objcInterfaces.rename,
13301315
renameMember: objcInterfaces.renameMember,
@@ -1333,7 +1318,6 @@ final class YamlConfig {
13331318
),
13341319
protocols: Protocols(
13351320
include: objcProtocols.shouldInclude,
1336-
includeSymbolAddress: objcProtocols.shouldIncludeSymbolAddress,
13371321
includeMember: objcProtocols.shouldIncludeMember,
13381322
rename: objcProtocols.rename,
13391323
renameMember: objcProtocols.renameMember,
@@ -1342,7 +1326,6 @@ final class YamlConfig {
13421326
),
13431327
categories: Categories(
13441328
include: objcCategories.shouldInclude,
1345-
includeSymbolAddress: objcCategories.shouldIncludeSymbolAddress,
13461329
includeMember: objcCategories.shouldIncludeMember,
13471330
rename: objcCategories.rename,
13481331
renameMember: objcCategories.renameMember,
@@ -1360,8 +1343,6 @@ final class YamlConfig {
13601343
// ignore: deprecated_member_use_from_same_package
13611344
integers: Integers(imported: nativeTypeMappings.values.toList()),
13621345
// ignore: deprecated_member_use_from_same_package
1363-
useDartHandle: useDartHandle,
1364-
// ignore: deprecated_member_use_from_same_package
13651346
libclangDylib: libclangDylib,
13661347
);
13671348
}

pkgs/ffigen/lib/src/context.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ class Context {
3636
cursorIndex = CursorIndex(logger) {
3737
objCBuiltInFunctions = ObjCBuiltInFunctions(
3838
this,
39-
config.wrapperName,
4039
// ignore: deprecated_member_use_from_same_package
4140
generator.objectiveC?.generateForPackageObjectiveC ?? false,
4241
);

pkgs/ffigen/lib/src/header_parser/sub_parsers/compounddecl_parser.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ class _ParsedCompound {
5959
unimplementedMemberType ||
6060
flexibleArrayMember ||
6161
bitFieldMember ||
62-
(dartHandleMember && context.config.useDartHandle) ||
62+
dartHandleMember ||
6363
incompleteCompoundMember ||
6464
alignment == clang_types.CXTypeLayoutError.CXTypeLayoutError_Incomplete;
6565

@@ -237,7 +237,7 @@ void fillCompoundMembersIfNeeded(
237237
'Removed All $className Members from ${compound.originalName}'
238238
'(${compound.originalName}), Bit Field members not supported.',
239239
);
240-
} else if (parsed.dartHandleMember && context.config.useDartHandle) {
240+
} else if (parsed.dartHandleMember) {
241241
logger.fine(
242242
'---- Removed $className members, reason: Dart_Handle member. '
243243
'${cursor.completeStringRepr()}',

pkgs/ffigen/lib/src/header_parser/type_extractor/extractor.dart

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -123,9 +123,7 @@ Type getCodeGenType(
123123
);
124124

125125
// Replace Pointer<_Dart_Handle> with Handle.
126-
if (context.config.useDartHandle &&
127-
s is Struct &&
128-
s.usr == strings.dartHandleUsr) {
126+
if (s is Struct && s.usr == strings.dartHandleUsr) {
129127
return HandleType();
130128
}
131129
return PointerType(s);

0 commit comments

Comments
 (0)