mirror of
https://github.com/dart-lang/sdk
synced 2024-10-02 23:39:19 +00:00
[vm/ffi] Fix DynamicLibrary extension name
And add changelog entry. Follow up of: https://dart-review.googlesource.com/c/sdk/+/135463 Closes: https://github.com/dart-lang/sdk/issues/35903 Closes: https://github.com/dart-lang/sdk/issues/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 <dacoharkes@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com>
This commit is contained in:
parent
595038d19f
commit
3c9f52a499
|
@ -50,6 +50,15 @@ case of `name` instead of converting them to lowercase.
|
|||
* `Dart_IsNonNullableType`
|
||||
* `Dart_IsNullableType`
|
||||
|
||||
### Foreign Function Interface (`dart:ffi`)
|
||||
|
||||
* **Breaking Change**: `Pointer.asFunction` and `DynamicLibrary.lookupFunction`
|
||||
changed to extension methods. Invoking them dynamically previously already
|
||||
threw an Exception, so runtime behavior stays the same. However, the
|
||||
extension methods are only visible if `dart:ffi` is imported directly. So
|
||||
this breaks code where `dart:ffi` is not directly imported. Fix: add an
|
||||
import of `dart:ffi`.
|
||||
|
||||
### Tools
|
||||
|
||||
#### Dart Dev Compiler (DDC)
|
||||
|
|
|
@ -158,9 +158,10 @@ class FfiVerifier extends RecursiveAstVisitor<void> {
|
|||
}
|
||||
|
||||
/// Return `true` if the given [element] represents the extension
|
||||
/// `LibraryExtension`.
|
||||
/// `DynamicLibraryExtension`.
|
||||
bool _isDynamicLibraryExtension(Element element) =>
|
||||
element.name == 'LibraryExtension' && element.library.name == 'dart.ffi';
|
||||
element.name == 'DynamicLibraryExtension' &&
|
||||
element.library.name == 'dart.ffi';
|
||||
|
||||
/// Returns `true` iff [nativeType] is a `ffi.NativeFunction<???>` type.
|
||||
bool _isNativeFunctionInterfaceType(DartType nativeType) {
|
||||
|
|
|
@ -544,7 +544,7 @@ extension NativeFunctionPointer<NF extends Function>
|
|||
class Struct extends NativeType {}
|
||||
|
||||
abstract class DynamicLibrary {}
|
||||
extension LibraryExtension on DynamicLibrary {
|
||||
extension DynamicLibraryExtension on DynamicLibrary {
|
||||
external F lookupFunction<T extends Function, F extends Function>(
|
||||
String symbolName);
|
||||
}
|
||||
|
|
|
@ -238,8 +238,8 @@ class FfiTransformer extends Transformer {
|
|||
index.getMember('dart:ffi', 'NativeFunctionPointer', 'asFunction'),
|
||||
asFunctionInternal =
|
||||
index.getTopLevelMember('dart:ffi', '_asFunctionInternal'),
|
||||
lookupFunctionMethod =
|
||||
index.getMember('dart:ffi', 'LibraryExtension', 'lookupFunction'),
|
||||
lookupFunctionMethod = index.getMember(
|
||||
'dart:ffi', 'DynamicLibraryExtension', 'lookupFunction'),
|
||||
fromFunctionMethod =
|
||||
index.getMember('dart:ffi', 'Pointer', 'fromFunction'),
|
||||
libraryLookupMethod =
|
||||
|
|
|
@ -51,7 +51,7 @@ class DynamicLibrary {
|
|||
Pointer<Void> get handle => Pointer.fromAddress(getHandle());
|
||||
}
|
||||
|
||||
extension LibraryExtension on DynamicLibrary {
|
||||
extension DynamicLibraryExtension on DynamicLibrary {
|
||||
@patch
|
||||
DS lookupFunction<NS extends Function, DS extends Function>(
|
||||
String symbolName) =>
|
||||
|
|
|
@ -41,7 +41,7 @@ class DynamicLibrary {
|
|||
}
|
||||
|
||||
/// Methods which cannot be invoked dynamically.
|
||||
extension LibraryExtension on DynamicLibrary {
|
||||
extension DynamicLibraryExtension on DynamicLibrary {
|
||||
/// Helper that combines lookup and cast to a Dart function.
|
||||
external F lookupFunction<T extends Function, F extends Function>(
|
||||
String symbolName);
|
||||
|
|
|
@ -50,7 +50,7 @@ class DynamicLibrary {
|
|||
Pointer<Void> get handle => Pointer.fromAddress(getHandle());
|
||||
}
|
||||
|
||||
extension LibraryExtension on DynamicLibrary {
|
||||
extension DynamicLibraryExtension on DynamicLibrary {
|
||||
@patch
|
||||
DS lookupFunction<NS extends Function, DS extends Function>(
|
||||
String symbolName) =>
|
||||
|
|
|
@ -39,7 +39,7 @@ class DynamicLibrary {
|
|||
}
|
||||
|
||||
/// Methods which cannot be invoked dynamically.
|
||||
extension LibraryExtension on DynamicLibrary {
|
||||
extension DynamicLibraryExtension on DynamicLibrary {
|
||||
/// Helper that combines lookup and cast to a Dart function.
|
||||
external F lookupFunction<T extends Function, F extends Function>(
|
||||
String symbolName);
|
||||
|
|
Loading…
Reference in a new issue