Skip to content

Commit 3c9f52a

Browse files
dcharkescommit-bot@chromium.org
authored andcommitted
[vm/ffi] Fix DynamicLibrary extension name
And add changelog entry. Follow up of: https://dart-review.googlesource.com/c/sdk/+/135463 Closes: #35903 Closes: #40636 Change-Id: I877f735c54e466031715c775d37544617402f9ff Cq-Include-Trybots: luci.dart.try:vm-ffi-android-debug-arm-try,vm-kernel-nnbd-linux-release-x64-try,analyzer-linux-release-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/136124 Commit-Queue: Daco Harkes <[email protected]> Reviewed-by: Martin Kustermann <[email protected]>
1 parent 595038d commit 3c9f52a

File tree

8 files changed

+19
-9
lines changed

8 files changed

+19
-9
lines changed

CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,15 @@ case of `name` instead of converting them to lowercase.
5050
* `Dart_IsNonNullableType`
5151
* `Dart_IsNullableType`
5252

53+
### Foreign Function Interface (`dart:ffi`)
54+
55+
* **Breaking Change**: `Pointer.asFunction` and `DynamicLibrary.lookupFunction`
56+
changed to extension methods. Invoking them dynamically previously already
57+
threw an Exception, so runtime behavior stays the same. However, the
58+
extension methods are only visible if `dart:ffi` is imported directly. So
59+
this breaks code where `dart:ffi` is not directly imported. Fix: add an
60+
import of `dart:ffi`.
61+
5362
### Tools
5463

5564
#### Dart Dev Compiler (DDC)

pkg/analyzer/lib/src/generated/ffi_verifier.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,9 +158,10 @@ class FfiVerifier extends RecursiveAstVisitor<void> {
158158
}
159159

160160
/// Return `true` if the given [element] represents the extension
161-
/// `LibraryExtension`.
161+
/// `DynamicLibraryExtension`.
162162
bool _isDynamicLibraryExtension(Element element) =>
163-
element.name == 'LibraryExtension' && element.library.name == 'dart.ffi';
163+
element.name == 'DynamicLibraryExtension' &&
164+
element.library.name == 'dart.ffi';
164165

165166
/// Returns `true` iff [nativeType] is a `ffi.NativeFunction<???>` type.
166167
bool _isNativeFunctionInterfaceType(DartType nativeType) {

pkg/analyzer/lib/src/test_utilities/mock_sdk.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -544,7 +544,7 @@ extension NativeFunctionPointer<NF extends Function>
544544
class Struct extends NativeType {}
545545
546546
abstract class DynamicLibrary {}
547-
extension LibraryExtension on DynamicLibrary {
547+
extension DynamicLibraryExtension on DynamicLibrary {
548548
external F lookupFunction<T extends Function, F extends Function>(
549549
String symbolName);
550550
}

pkg/vm/lib/transformations/ffi.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -238,8 +238,8 @@ class FfiTransformer extends Transformer {
238238
index.getMember('dart:ffi', 'NativeFunctionPointer', 'asFunction'),
239239
asFunctionInternal =
240240
index.getTopLevelMember('dart:ffi', '_asFunctionInternal'),
241-
lookupFunctionMethod =
242-
index.getMember('dart:ffi', 'LibraryExtension', 'lookupFunction'),
241+
lookupFunctionMethod = index.getMember(
242+
'dart:ffi', 'DynamicLibraryExtension', 'lookupFunction'),
243243
fromFunctionMethod =
244244
index.getMember('dart:ffi', 'Pointer', 'fromFunction'),
245245
libraryLookupMethod =

sdk/lib/_internal/vm/lib/ffi_dynamic_library_patch.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ class DynamicLibrary {
5151
Pointer<Void> get handle => Pointer.fromAddress(getHandle());
5252
}
5353

54-
extension LibraryExtension on DynamicLibrary {
54+
extension DynamicLibraryExtension on DynamicLibrary {
5555
@patch
5656
DS lookupFunction<NS extends Function, DS extends Function>(
5757
String symbolName) =>

sdk/lib/ffi/dynamic_library.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class DynamicLibrary {
4141
}
4242

4343
/// Methods which cannot be invoked dynamically.
44-
extension LibraryExtension on DynamicLibrary {
44+
extension DynamicLibraryExtension on DynamicLibrary {
4545
/// Helper that combines lookup and cast to a Dart function.
4646
external F lookupFunction<T extends Function, F extends Function>(
4747
String symbolName);

sdk_nnbd/lib/_internal/vm/lib/ffi_dynamic_library_patch.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ class DynamicLibrary {
5050
Pointer<Void> get handle => Pointer.fromAddress(getHandle());
5151
}
5252

53-
extension LibraryExtension on DynamicLibrary {
53+
extension DynamicLibraryExtension on DynamicLibrary {
5454
@patch
5555
DS lookupFunction<NS extends Function, DS extends Function>(
5656
String symbolName) =>

sdk_nnbd/lib/ffi/dynamic_library.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ class DynamicLibrary {
3939
}
4040

4141
/// Methods which cannot be invoked dynamically.
42-
extension LibraryExtension on DynamicLibrary {
42+
extension DynamicLibraryExtension on DynamicLibrary {
4343
/// Helper that combines lookup and cast to a Dart function.
4444
external F lookupFunction<T extends Function, F extends Function>(
4545
String symbolName);

0 commit comments

Comments
 (0)