Skip to content

Commit 7427e65

Browse files
dcharkesCommit Queue
authored andcommitted
Revert "[ffi] Remove deprecated Pointer.elementAt"
This reverts commit 7893020. Reason for revert: This breaks flutter engine ``` ../../../../../../../.pub-cache/hosted/pub.dev/posix-6.0.1/lib/src/util/conversions.dart:32:32: Error: The method 'elementAt' isn't defined for the class 'Pointer<Pointer<Int8>>'. - 'Pointer' is from 'dart:ffi'. - 'Int8' is from 'dart:ffi'. Try correcting the name to the name of an existing method, or defining a method named 'elementAt'. final _value = cStringList.elementAt(count).value; ``` ``` ui 0.0.0 ├── archive 4.0.3 │ ├── posix 6.0.1 │ │ ├── ffi 2.1.4 │ │ ├── meta... │ │ └── path... ``` Reverting while we remove uses upstream. onepub-dev/dart_posix#17 Original change's description: > [ffi] Remove deprecated `Pointer.elementAt` > > Bug: #54250 > > TEST=tests/ffi > > CoreLibraryReviewExempt: Removing deprecated member after 1+ year. > Change-Id: I2234f28126e0788860a54cbe6aa82bc76b49c8d8 > Cq-Include-Trybots: dart/try:vm-aot-android-release-arm64c-try,vm-aot-android-release-arm_x64-try,vm-aot-asan-linux-release-x64-try,vm-aot-linux-debug-x64-try,vm-aot-linux-debug-x64c-try,vm-aot-mac-release-arm64-try,vm-aot-msan-linux-release-x64-try,vm-aot-obfuscate-linux-release-x64-try,vm-aot-optimization-level-linux-release-x64-try,vm-aot-tsan-linux-release-x64-try,vm-aot-ubsan-linux-release-x64-try,vm-aot-win-debug-x64-try,vm-aot-win-debug-x64c-try,vm-appjit-linux-debug-x64-try,vm-asan-linux-release-arm64-try,vm-asan-linux-release-x64-try,vm-checked-mac-release-arm64-try,vm-eager-optimization-linux-release-ia32-try,vm-eager-optimization-linux-release-x64-try,vm-ffi-android-debug-arm-try,vm-ffi-android-debug-arm64c-try,vm-ffi-mac-debug-simarm64_arm64-try,vm-ffi-qemu-linux-release-arm-try,vm-ffi-qemu-linux-release-riscv64-try,vm-fuchsia-release-x64-try,vm-linux-debug-ia32-try,vm-linux-debug-x64-try,vm-linux-debug-x64c-try,vm-mac-debug-arm64-try,vm-mac-debug-x64-try,vm-msan-linux-release-arm64-try,vm-msan-linux-release-x64-try,vm-reload-linux-debug-x64-try,vm-reload-rollback-linux-debug-x64-try,vm-tsan-linux-release-arm64-try,vm-tsan-linux-release-x64-try,vm-ubsan-linux-release-arm64-try,vm-ubsan-linux-release-x64-try,vm-win-debug-x64-try,vm-win-debug-x64c-try,vm-win-release-ia32-try > Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/421740 > Reviewed-by: Hossein Yousefi <[email protected]> > Commit-Queue: Daco Harkes <[email protected]> Bug: #54250 Cq-Include-Trybots: dart/try:vm-aot-android-release-arm64c-try,vm-aot-android-release-arm_x64-try,vm-aot-asan-linux-release-x64-try,vm-aot-linux-debug-x64-try,vm-aot-linux-debug-x64c-try,vm-aot-mac-release-arm64-try,vm-aot-msan-linux-release-x64-try,vm-aot-obfuscate-linux-release-x64-try,vm-aot-optimization-level-linux-release-x64-try,vm-aot-tsan-linux-release-x64-try,vm-aot-ubsan-linux-release-x64-try,vm-aot-win-debug-x64-try,vm-aot-win-debug-x64c-try,vm-appjit-linux-debug-x64-try,vm-asan-linux-release-arm64-try,vm-asan-linux-release-x64-try,vm-checked-mac-release-arm64-try,vm-eager-optimization-linux-release-ia32-try,vm-eager-optimization-linux-release-x64-try,vm-ffi-android-debug-arm-try,vm-ffi-android-debug-arm64c-try,vm-ffi-mac-debug-simarm64_arm64-try,vm-ffi-qemu-linux-release-arm-try,vm-ffi-qemu-linux-release-riscv64-try,vm-fuchsia-release-x64-try,vm-linux-debug-ia32-try,vm-linux-debug-x64-try,vm-linux-debug-x64c-try,vm-mac-debug-arm64-try,vm-mac-debug-x64-try,vm-msan-linux-release-arm64-try,vm-msan-linux-release-x64-try,vm-reload-linux-debug-x64-try,vm-reload-rollback-linux-debug-x64-try,vm-tsan-linux-release-arm64-try,vm-tsan-linux-release-x64-try,vm-ubsan-linux-release-arm64-try,vm-ubsan-linux-release-x64-try,vm-win-debug-x64-try,vm-win-debug-x64c-try,vm-win-release-ia32-try Change-Id: I9cd3d4800840bf28182225824b82c469eb957087 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/422460 Commit-Queue: Daco Harkes <[email protected]> Reviewed-by: Nate Biggs <[email protected]> Bot-Commit: Rubber Stamper <[email protected]>
1 parent f24d4d1 commit 7427e65

File tree

5 files changed

+134
-1
lines changed

5 files changed

+134
-1
lines changed

pkg/vm/lib/modular/transformations/ffi/common.dart

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,16 +248,20 @@ class FfiTransformer extends Transformer {
248248
final Procedure structPointerRefWithFinalizerTearoff;
249249
final Procedure structPointerGetElemAt;
250250
final Procedure structPointerSetElemAt;
251+
final Procedure structPointerElementAt;
251252
final Procedure structPointerPlusOperator;
252253
final Procedure structPointerMinusOperator;
254+
final Procedure structPointerElementAtTearoff;
253255
final Procedure unionPointerGetRef;
254256
final Procedure unionPointerSetRef;
255257
final Procedure unionPointerRefWithFinalizer;
256258
final Procedure unionPointerRefWithFinalizerTearoff;
257259
final Procedure unionPointerGetElemAt;
258260
final Procedure unionPointerSetElemAt;
261+
final Procedure unionPointerElementAt;
259262
final Procedure unionPointerPlusOperator;
260263
final Procedure unionPointerMinusOperator;
264+
final Procedure unionPointerElementAtTearoff;
261265
final Procedure uint8PointerAsTypedList;
262266
final Constructor arrayListConstructor;
263267
final Constructor arrayArrayListConstructor;
@@ -274,8 +278,10 @@ class FfiTransformer extends Transformer {
274278
final Procedure abiSpecificIntegerPointerSetValue;
275279
final Procedure abiSpecificIntegerPointerElemAt;
276280
final Procedure abiSpecificIntegerPointerSetElemAt;
281+
final Procedure abiSpecificIntegerPointerElementAt;
277282
final Procedure abiSpecificIntegerPointerPlusOperator;
278283
final Procedure abiSpecificIntegerPointerMinusOperator;
284+
final Procedure abiSpecificIntegerPointerElementAtTearoff;
279285
final Procedure abiSpecificIntegerArrayElemAt;
280286
final Procedure abiSpecificIntegerArraySetElemAt;
281287
final Procedure asFunctionMethod;
@@ -624,6 +630,11 @@ class FfiTransformer extends Transformer {
624630
'StructPointer',
625631
'[]=',
626632
),
633+
structPointerElementAt = index.getProcedure(
634+
'dart:ffi',
635+
'StructPointer',
636+
'elementAt',
637+
),
627638
structPointerPlusOperator = index.getProcedure(
628639
'dart:ffi',
629640
'StructPointer',
@@ -634,6 +645,11 @@ class FfiTransformer extends Transformer {
634645
'StructPointer',
635646
'-',
636647
),
648+
structPointerElementAtTearoff = index.getProcedure(
649+
'dart:ffi',
650+
'StructPointer',
651+
LibraryIndex.tearoffPrefix + 'elementAt',
652+
),
637653
unionPointerGetRef = index.getProcedure(
638654
'dart:ffi',
639655
'UnionPointer',
@@ -664,6 +680,11 @@ class FfiTransformer extends Transformer {
664680
'UnionPointer',
665681
'[]=',
666682
),
683+
unionPointerElementAt = index.getProcedure(
684+
'dart:ffi',
685+
'UnionPointer',
686+
'elementAt',
687+
),
667688
unionPointerPlusOperator = index.getProcedure(
668689
'dart:ffi',
669690
'UnionPointer',
@@ -674,6 +695,11 @@ class FfiTransformer extends Transformer {
674695
'UnionPointer',
675696
'-',
676697
),
698+
unionPointerElementAtTearoff = index.getProcedure(
699+
'dart:ffi',
700+
'UnionPointer',
701+
LibraryIndex.tearoffPrefix + 'elementAt',
702+
),
677703
uint8PointerAsTypedList = index.getProcedure(
678704
'dart:ffi',
679705
'Uint8Pointer',
@@ -734,6 +760,11 @@ class FfiTransformer extends Transformer {
734760
'AbiSpecificIntegerPointer',
735761
'[]=',
736762
),
763+
abiSpecificIntegerPointerElementAt = index.getProcedure(
764+
'dart:ffi',
765+
'AbiSpecificIntegerPointer',
766+
'elementAt',
767+
),
737768
abiSpecificIntegerPointerPlusOperator = index.getProcedure(
738769
'dart:ffi',
739770
'AbiSpecificIntegerPointer',
@@ -744,6 +775,11 @@ class FfiTransformer extends Transformer {
744775
'AbiSpecificIntegerPointer',
745776
'-',
746777
),
778+
abiSpecificIntegerPointerElementAtTearoff = index.getProcedure(
779+
'dart:ffi',
780+
'AbiSpecificIntegerPointer',
781+
LibraryIndex.tearoffPrefix + 'elementAt',
782+
),
747783
abiSpecificIntegerArrayElemAt = index.getProcedure(
748784
'dart:ffi',
749785
'AbiSpecificIntegerArray',

pkg/vm/lib/modular/transformations/ffi/use_sites.dart

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,10 @@ mixin _FfiUseSiteTransformer on FfiTransformer {
221221
(node == allocationTearoff ||
222222
node == asFunctionTearoff ||
223223
node == lookupFunctionTearoff ||
224+
node == abiSpecificIntegerPointerElementAtTearoff ||
225+
node == structPointerElementAtTearoff ||
224226
node == structPointerRefWithFinalizerTearoff ||
227+
node == unionPointerElementAtTearoff ||
225228
node == unionPointerRefWithFinalizerTearoff))) ||
226229
// Dart2wasm uses enabledConstructorTearOffLowerings but these are not
227230
// users trying to call constructors.
@@ -371,7 +374,10 @@ mixin _FfiUseSiteTransformer on FfiTransformer {
371374
ensureNativeTypeValid(nativeType, node, allowStructAndUnion: true);
372375

373376
return _replaceRefWithFinalizer(node);
374-
} else if (target == abiSpecificIntegerPointerPlusOperator ||
377+
} else if (target == abiSpecificIntegerPointerElementAt ||
378+
target == structPointerElementAt ||
379+
target == unionPointerElementAt ||
380+
target == abiSpecificIntegerPointerPlusOperator ||
375381
target == structPointerPlusOperator ||
376382
target == unionPointerPlusOperator ||
377383
target == abiSpecificIntegerPointerMinusOperator ||

runtime/tools/ffi/sdk_lib_ffi_generator.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,10 @@ $platform$truncate$alignment external $dartType operator [](int index);
245245
/// The $property at `address + sizeOf<$nativeType>() * index`.
246246
$platform$truncate$alignment external void operator []=(int index, $dartType value);
247247
248+
/// Pointer arithmetic (takes element size into account).
249+
@Deprecated('Use operator + instead')
250+
Pointer<$nativeType> elementAt(int index) => Pointer.fromAddress(address + sizeOf<$nativeType>() * index);
251+
248252
/// A pointer to the [offset]th [$nativeType] after this one.
249253
///
250254
/// Returns a pointer to the [$nativeType] whose address is

sdk/lib/_internal/vm/lib/ffi_patch.dart

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1433,6 +1433,10 @@ extension PointerPointer<T extends NativeType> on Pointer<Pointer<T>> {
14331433
@patch
14341434
Pointer<T> operator [](int index) => _loadPointer(this, _intPtrSize * index);
14351435

1436+
@patch
1437+
Pointer<Pointer<T>> elementAt(int index) =>
1438+
Pointer.fromAddress(address + _intPtrSize * index);
1439+
14361440
@patch
14371441
Pointer<Pointer<T>> operator +(int offset) =>
14381442
Pointer.fromAddress(address + _intPtrSize * offset);
@@ -1470,6 +1474,10 @@ extension StructPointer<T extends Struct> on Pointer<T> {
14701474
void operator []=(int index, T value) =>
14711475
throw "UNREACHABLE: This case should have been rewritten in the CFE.";
14721476

1477+
@patch
1478+
Pointer<T> elementAt(int index) =>
1479+
throw "UNREACHABLE: This case should have been rewritten in the CFE.";
1480+
14731481
@patch
14741482
Pointer<T> operator +(int offset) =>
14751483
throw "UNREACHABLE: This case should have been rewritten in the CFE.";
@@ -1503,6 +1511,10 @@ extension UnionPointer<T extends Union> on Pointer<T> {
15031511
void operator []=(int index, T value) =>
15041512
throw "UNREACHABLE: This case should have been rewritten in the CFE.";
15051513

1514+
@patch
1515+
Pointer<T> elementAt(int index) =>
1516+
throw "UNREACHABLE: This case should have been rewritten in the CFE.";
1517+
15061518
@patch
15071519
Pointer<T> operator +(int offset) =>
15081520
throw "UNREACHABLE: This case should have been rewritten in the CFE.";
@@ -1531,6 +1543,10 @@ extension AbiSpecificIntegerPointer<T extends AbiSpecificInteger>
15311543
void operator []=(int index, int value) =>
15321544
throw "UNREACHABLE: This case should have been rewritten in the CFE.";
15331545

1546+
@patch
1547+
Pointer<T> elementAt(int index) =>
1548+
throw "UNREACHABLE: This case should have been rewritten in the CFE.";
1549+
15341550
@patch
15351551
Pointer<T> operator +(int offset) =>
15361552
throw "UNREACHABLE: This case should have been rewritten in the CFE.";

sdk/lib/ffi/ffi.dart

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -519,6 +519,11 @@ extension Int8Pointer on Pointer<Int8> {
519519
/// being stored, and the 8-bit value is sign-extended when it is loaded.
520520
external void operator []=(int index, int value);
521521

522+
/// Pointer arithmetic (takes element size into account).
523+
@Deprecated('Use operator + instead')
524+
Pointer<Int8> elementAt(int index) =>
525+
Pointer.fromAddress(address + sizeOf<Int8>() * index);
526+
522527
/// A pointer to the [offset]th [Int8] after this one.
523528
///
524529
/// Returns a pointer to the [Int8] whose address is
@@ -593,6 +598,11 @@ extension Int16Pointer on Pointer<Int16> {
593598
/// The [address] must be 2-byte aligned.
594599
external void operator []=(int index, int value);
595600

601+
/// Pointer arithmetic (takes element size into account).
602+
@Deprecated('Use operator + instead')
603+
Pointer<Int16> elementAt(int index) =>
604+
Pointer.fromAddress(address + sizeOf<Int16>() * index);
605+
596606
/// A pointer to the [offset]th [Int16] after this one.
597607
///
598608
/// Returns a pointer to the [Int16] whose address is
@@ -669,6 +679,11 @@ extension Int32Pointer on Pointer<Int32> {
669679
/// The [address] must be 4-byte aligned.
670680
external void operator []=(int index, int value);
671681

682+
/// Pointer arithmetic (takes element size into account).
683+
@Deprecated('Use operator + instead')
684+
Pointer<Int32> elementAt(int index) =>
685+
Pointer.fromAddress(address + sizeOf<Int32>() * index);
686+
672687
/// A pointer to the [offset]th [Int32] after this one.
673688
///
674689
/// Returns a pointer to the [Int32] whose address is
@@ -736,6 +751,11 @@ extension Int64Pointer on Pointer<Int64> {
736751
/// The [address] must be 8-byte aligned.
737752
external void operator []=(int index, int value);
738753

754+
/// Pointer arithmetic (takes element size into account).
755+
@Deprecated('Use operator + instead')
756+
Pointer<Int64> elementAt(int index) =>
757+
Pointer.fromAddress(address + sizeOf<Int64>() * index);
758+
739759
/// A pointer to the [offset]th [Int64] after this one.
740760
///
741761
/// Returns a pointer to the [Int64] whose address is
@@ -806,6 +826,11 @@ extension Uint8Pointer on Pointer<Uint8> {
806826
/// being stored, and the 8-bit value is zero-extended when it is loaded.
807827
external void operator []=(int index, int value);
808828

829+
/// Pointer arithmetic (takes element size into account).
830+
@Deprecated('Use operator + instead')
831+
Pointer<Uint8> elementAt(int index) =>
832+
Pointer.fromAddress(address + sizeOf<Uint8>() * index);
833+
809834
/// A pointer to the [offset]th [Uint8] after this one.
810835
///
811836
/// Returns a pointer to the [Uint8] whose address is
@@ -880,6 +905,11 @@ extension Uint16Pointer on Pointer<Uint16> {
880905
/// The [address] must be 2-byte aligned.
881906
external void operator []=(int index, int value);
882907

908+
/// Pointer arithmetic (takes element size into account).
909+
@Deprecated('Use operator + instead')
910+
Pointer<Uint16> elementAt(int index) =>
911+
Pointer.fromAddress(address + sizeOf<Uint16>() * index);
912+
883913
/// A pointer to the [offset]th [Uint16] after this one.
884914
///
885915
/// Returns a pointer to the [Uint16] whose address is
@@ -956,6 +986,11 @@ extension Uint32Pointer on Pointer<Uint32> {
956986
/// The [address] must be 4-byte aligned.
957987
external void operator []=(int index, int value);
958988

989+
/// Pointer arithmetic (takes element size into account).
990+
@Deprecated('Use operator + instead')
991+
Pointer<Uint32> elementAt(int index) =>
992+
Pointer.fromAddress(address + sizeOf<Uint32>() * index);
993+
959994
/// A pointer to the [offset]th [Uint32] after this one.
960995
///
961996
/// Returns a pointer to the [Uint32] whose address is
@@ -1023,6 +1058,11 @@ extension Uint64Pointer on Pointer<Uint64> {
10231058
/// The [address] must be 8-byte aligned.
10241059
external void operator []=(int index, int value);
10251060

1061+
/// Pointer arithmetic (takes element size into account).
1062+
@Deprecated('Use operator + instead')
1063+
Pointer<Uint64> elementAt(int index) =>
1064+
Pointer.fromAddress(address + sizeOf<Uint64>() * index);
1065+
10261066
/// A pointer to the [offset]th [Uint64] after this one.
10271067
///
10281068
/// Returns a pointer to the [Uint64] whose address is
@@ -1099,6 +1139,11 @@ extension FloatPointer on Pointer<Float> {
10991139
/// The [address] must be 4-byte aligned.
11001140
external void operator []=(int index, double value);
11011141

1142+
/// Pointer arithmetic (takes element size into account).
1143+
@Deprecated('Use operator + instead')
1144+
Pointer<Float> elementAt(int index) =>
1145+
Pointer.fromAddress(address + sizeOf<Float>() * index);
1146+
11021147
/// A pointer to the [offset]th [Float] after this one.
11031148
///
11041149
/// Returns a pointer to the [Float] whose address is
@@ -1166,6 +1211,11 @@ extension DoublePointer on Pointer<Double> {
11661211
/// The [address] must be 8-byte aligned.
11671212
external void operator []=(int index, double value);
11681213

1214+
/// Pointer arithmetic (takes element size into account).
1215+
@Deprecated('Use operator + instead')
1216+
Pointer<Double> elementAt(int index) =>
1217+
Pointer.fromAddress(address + sizeOf<Double>() * index);
1218+
11691219
/// A pointer to the [offset]th [Double] after this one.
11701220
///
11711221
/// Returns a pointer to the [Double] whose address is
@@ -1228,6 +1278,11 @@ extension BoolPointer on Pointer<Bool> {
12281278
/// The bool at `address + sizeOf<Bool>() * index`.
12291279
external void operator []=(int index, bool value);
12301280

1281+
/// Pointer arithmetic (takes element size into account).
1282+
@Deprecated('Use operator + instead')
1283+
Pointer<Bool> elementAt(int index) =>
1284+
Pointer.fromAddress(address + sizeOf<Bool>() * index);
1285+
12311286
/// A pointer to the [offset]th [Bool] after this one.
12321287
///
12331288
/// Returns a pointer to the [Bool] whose address is
@@ -1866,6 +1921,10 @@ extension PointerPointer<T extends NativeType> on Pointer<Pointer<T>> {
18661921
/// platforms the [address] must be 8-byte aligned.
18671922
external void operator []=(int index, Pointer<T> value);
18681923

1924+
/// Pointer arithmetic (takes element size into account).
1925+
@Deprecated('Use operator + instead')
1926+
external Pointer<Pointer<T>> elementAt(int index);
1927+
18691928
/// A pointer to the [offset]th [Pointer<T>] after this one.
18701929
///
18711930
/// Returns a pointer to the [Pointer<T>] whose address is
@@ -1946,6 +2005,10 @@ extension StructPointer<T extends Struct> on Pointer<T> {
19462005
/// where `T` is a compile-time constant type.
19472006
external void operator []=(int index, T value);
19482007

2008+
/// Pointer arithmetic (takes element size into account)
2009+
@Deprecated('Use operator + instead')
2010+
external Pointer<T> elementAt(int index);
2011+
19492012
/// A pointer to the [offset]th [T] after this one.
19502013
///
19512014
/// Returns a pointer to the [T] whose address is
@@ -2027,6 +2090,10 @@ extension UnionPointer<T extends Union> on Pointer<T> {
20272090
/// where `T` is a compile-time constant type.
20282091
external void operator []=(int index, T value);
20292092

2093+
/// Pointer arithmetic (takes element size into account).
2094+
@Deprecated('Use operator + instead')
2095+
external Pointer<T> elementAt(int index);
2096+
20302097
/// A pointer to the [offset]th [T] after this one.
20312098
///
20322099
/// Returns a pointer to the [T] whose address is
@@ -2066,6 +2133,10 @@ extension AbiSpecificIntegerPointer<T extends AbiSpecificInteger>
20662133
/// The integer at `address + sizeOf<T>() * index`.
20672134
external void operator []=(int index, int value);
20682135

2136+
/// Pointer arithmetic (takes element size into account).
2137+
@Deprecated('Use operator + instead')
2138+
external Pointer<T> elementAt(int index);
2139+
20692140
/// A pointer to the [offset]th [T] after this one.
20702141
///
20712142
/// Returns a pointer to the [T] whose address is

0 commit comments

Comments
 (0)