7
7
// The PointerPointer and PointerStruct extension are written by hand since
8
8
// those are not repetitive.
9
9
10
- // ignore_for_file: unused_local_variable
11
-
12
10
import 'dart:io' ;
13
11
14
12
import 'package:args/args.dart' ;
@@ -31,22 +29,46 @@ const configuration = [
31
29
Config ("Bool" , "bool" , kDoNotEmit, 1 , since: Version (2 , 15 )),
32
30
];
33
31
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
+ }
35
55
36
56
//
37
57
// Generator.
38
58
//
39
59
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
+ );
47
69
}
48
70
49
- void update (Uri fileName, Function (StringBuffer , Config , String ) generator) {
71
+ void update (Uri fileName, Function (StringBuffer , Config , Container ) generator) {
50
72
final file = File .fromUri (fileName);
51
73
if (! file.existsSync ()) {
52
74
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) {
70
92
final buffer = StringBuffer ();
71
93
buffer.write (split1[0 ]);
72
94
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
+ }
75
100
buffer.write (footer);
76
101
buffer.write (split2[1 ]);
77
102
@@ -99,7 +124,10 @@ void generateHeader(StringBuffer buffer) {
99
124
}
100
125
101
126
void generatePublicExtension (
102
- StringBuffer buffer, Config config, String container) {
127
+ StringBuffer buffer,
128
+ Config config,
129
+ Container container,
130
+ ) {
103
131
final nativeType = config.nativeType;
104
132
final dartType = config.dartType;
105
133
final typedListType = config.typedListType;
@@ -166,9 +194,6 @@ void generatePublicExtension(
166
194
truncate = floatTruncate;
167
195
}
168
196
169
- final sizeTimes =
170
- elementSize != 1 ? '${bracketOr (sizeOf (elementSize ))} * ' : '' ;
171
-
172
197
final alignmentDefault = """
173
198
///
174
199
/// The [address] must be ${sizeOf (elementSize )}-byte aligned.
@@ -207,10 +232,11 @@ $alignment external $typedListType asTypedList(
207
232
@Since('3.1') Pointer<Void>? token,
208
233
});
209
234
""" ;
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 ("""
214
240
/// Extension on [Pointer] specialized for the type argument [$nativeType ].
215
241
$since extension ${nativeType }Pointer on Pointer<$nativeType > {
216
242
/// The $property at [address].
@@ -258,10 +284,8 @@ $asTypedList
258
284
}
259
285
260
286
""" );
261
- } else {
262
- final since =
263
- Version .latest (config.since, arrayVersion)? .sinceAnnotation ?? '' ;
264
- buffer.write ("""
287
+ case Container .array:
288
+ buffer.write ("""
265
289
/// Bounds checking indexing methods on [Array]s of [$nativeType ].
266
290
$since extension ${nativeType }Array on Array<$nativeType > {
267
291
external $dartType operator [](int index);
@@ -274,7 +298,10 @@ $since extension ${nativeType}Array on Array<$nativeType> {
274
298
}
275
299
276
300
void generatePatchExtension (
277
- StringBuffer buffer, Config config, String container) {
301
+ StringBuffer buffer,
302
+ Config config,
303
+ Container container,
304
+ ) {
278
305
final nativeType = config.nativeType;
279
306
final dartType = config.dartType;
280
307
final typedListType = config.typedListType;
@@ -305,8 +332,9 @@ void generatePatchExtension(
305
332
}
306
333
""" ;
307
334
308
- if (container == "Pointer" ) {
309
- buffer.write ("""
335
+ switch (container) {
336
+ case Container .pointer:
337
+ buffer.write ("""
310
338
@patch
311
339
extension ${nativeType }Pointer on Pointer<$nativeType > {
312
340
@patch
@@ -329,8 +357,8 @@ $asTypedList
329
357
}
330
358
331
359
""" );
332
- } else {
333
- buffer.write ("""
360
+ case Container .array :
361
+ buffer.write ("""
334
362
@patch
335
363
extension ${nativeType }Array on Array<$nativeType > {
336
364
@patch
0 commit comments