Skip to content

Commit 28c7f5b

Browse files
dcharkesCommit Queue
authored and
Commit Queue
committed
[vm/ffi] Refactor dart:ffi generator
Refactor to avoid conflicts later with concurrent work on: - #45508 - #44589 Change-Id: I7b7ea2e4ec29115da42b0c196a2952c3cd5d3fa6 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/349901 Commit-Queue: Martin Kustermann <[email protected]> Auto-Submit: Daco Harkes <[email protected]> Reviewed-by: Martin Kustermann <[email protected]>
1 parent f95441f commit 28c7f5b

File tree

1 file changed

+58
-30
lines changed

1 file changed

+58
-30
lines changed

runtime/tools/ffi/sdk_lib_ffi_generator.dart

Lines changed: 58 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@
77
// The PointerPointer and PointerStruct extension are written by hand since
88
// those are not repetitive.
99

10-
// ignore_for_file: unused_local_variable
11-
1210
import 'dart:io';
1311

1412
import 'package:args/args.dart';
@@ -31,22 +29,46 @@ const configuration = [
3129
Config("Bool", "bool", kDoNotEmit, 1, since: Version(2, 15)),
3230
];
3331

34-
const arrayVersion = Version(2, 13);
32+
/// A container to generate the extension for.
33+
class Container {
34+
final String name;
35+
36+
/// Since annotation for the extension.
37+
final Version? since;
38+
39+
const Container(this.name, this.since);
40+
41+
static const pointer = Container(
42+
'Pointer',
43+
null,
44+
);
45+
static const array = Container(
46+
'Array',
47+
Version(2, 13),
48+
);
49+
50+
static const values = [
51+
pointer,
52+
array,
53+
];
54+
}
3555

3656
//
3757
// Generator.
3858
//
3959

40-
main(List<String> arguments) {
41-
final args = argParser().parse(arguments);
42-
Uri path = Uri.parse(args['path']);
43-
44-
update(Uri.file('sdk/lib/ffi/ffi.dart'), generatePublicExtension);
45-
update(Uri.file('sdk/lib/_internal/vm/lib/ffi_patch.dart'),
46-
generatePatchExtension);
60+
void main(List<String> arguments) {
61+
update(
62+
Uri.file('sdk/lib/ffi/ffi.dart'),
63+
generatePublicExtension,
64+
);
65+
update(
66+
Uri.file('sdk/lib/_internal/vm/lib/ffi_patch.dart'),
67+
generatePatchExtension,
68+
);
4769
}
4870

49-
void update(Uri fileName, Function(StringBuffer, Config, String) generator) {
71+
void update(Uri fileName, Function(StringBuffer, Config, Container) generator) {
5072
final file = File.fromUri(fileName);
5173
if (!file.existsSync()) {
5274
print('$fileName does not exist, run from the root of the SDK.');
@@ -70,8 +92,11 @@ void update(Uri fileName, Function(StringBuffer, Config, String) generator) {
7092
final buffer = StringBuffer();
7193
buffer.write(split1[0]);
7294
buffer.write(header);
73-
configuration.forEach((Config c) => generator(buffer, c, "Pointer"));
74-
configuration.forEach((Config c) => generator(buffer, c, "Array"));
95+
for (final container in Container.values) {
96+
for (final config in configuration) {
97+
generator(buffer, config, container);
98+
}
99+
}
75100
buffer.write(footer);
76101
buffer.write(split2[1]);
77102

@@ -99,7 +124,10 @@ void generateHeader(StringBuffer buffer) {
99124
}
100125

101126
void generatePublicExtension(
102-
StringBuffer buffer, Config config, String container) {
127+
StringBuffer buffer,
128+
Config config,
129+
Container container,
130+
) {
103131
final nativeType = config.nativeType;
104132
final dartType = config.dartType;
105133
final typedListType = config.typedListType;
@@ -166,9 +194,6 @@ void generatePublicExtension(
166194
truncate = floatTruncate;
167195
}
168196

169-
final sizeTimes =
170-
elementSize != 1 ? '${bracketOr(sizeOf(elementSize))} * ' : '';
171-
172197
final alignmentDefault = """
173198
///
174199
/// The [address] must be ${sizeOf(elementSize)}-byte aligned.
@@ -207,10 +232,11 @@ $alignment external $typedListType asTypedList(
207232
@Since('3.1') Pointer<Void>? token,
208233
});
209234
""";
210-
211-
if (container == "Pointer") {
212-
final since = config.since?.sinceAnnotation ?? '';
213-
buffer.write("""
235+
final since =
236+
Version.latest(config.since, container.since)?.sinceAnnotation ?? '';
237+
switch (container) {
238+
case Container.pointer:
239+
buffer.write("""
214240
/// Extension on [Pointer] specialized for the type argument [$nativeType].
215241
$since extension ${nativeType}Pointer on Pointer<$nativeType> {
216242
/// The $property at [address].
@@ -258,10 +284,8 @@ $asTypedList
258284
}
259285
260286
""");
261-
} else {
262-
final since =
263-
Version.latest(config.since, arrayVersion)?.sinceAnnotation ?? '';
264-
buffer.write("""
287+
case Container.array:
288+
buffer.write("""
265289
/// Bounds checking indexing methods on [Array]s of [$nativeType].
266290
$since extension ${nativeType}Array on Array<$nativeType> {
267291
external $dartType operator [](int index);
@@ -274,7 +298,10 @@ $since extension ${nativeType}Array on Array<$nativeType> {
274298
}
275299

276300
void generatePatchExtension(
277-
StringBuffer buffer, Config config, String container) {
301+
StringBuffer buffer,
302+
Config config,
303+
Container container,
304+
) {
278305
final nativeType = config.nativeType;
279306
final dartType = config.dartType;
280307
final typedListType = config.typedListType;
@@ -305,8 +332,9 @@ void generatePatchExtension(
305332
}
306333
""";
307334

308-
if (container == "Pointer") {
309-
buffer.write("""
335+
switch (container) {
336+
case Container.pointer:
337+
buffer.write("""
310338
@patch
311339
extension ${nativeType}Pointer on Pointer<$nativeType> {
312340
@patch
@@ -329,8 +357,8 @@ $asTypedList
329357
}
330358
331359
""");
332-
} else {
333-
buffer.write("""
360+
case Container.array:
361+
buffer.write("""
334362
@patch
335363
extension ${nativeType}Array on Array<$nativeType> {
336364
@patch

0 commit comments

Comments
 (0)