diff --git a/benchmarks/FfiBoringssl/dart/FfiBoringssl.dart b/benchmarks/FfiBoringssl/dart/FfiBoringssl.dart index b4ba0c31893..3249be45c40 100644 --- a/benchmarks/FfiBoringssl/dart/FfiBoringssl.dart +++ b/benchmarks/FfiBoringssl/dart/FfiBoringssl.dart @@ -27,7 +27,7 @@ Uint8List inventData(int length) { return result; } -Uint8List toUint8List(Bytes bytes, int length) { +Uint8List toUint8List(Pointer bytes, int length) { final result = Uint8List(length); final uint8bytes = bytes.asUint8Pointer(); for (int i = 0; i < length; i++) { @@ -36,7 +36,7 @@ Uint8List toUint8List(Bytes bytes, int length) { return result; } -void copyFromUint8ListToTarget(Uint8List source, Data target) { +void copyFromUint8ListToTarget(Uint8List source, Pointer target) { final int length = source.length; final uint8target = target.asUint8Pointer(); for (int i = 0; i < length; i++) { @@ -52,7 +52,7 @@ String hash(Pointer data, int length, Pointer hashAlgorithm) { final Pointer result = calloc(resultSize).cast(); EVP_DigestFinal(context, result, nullptr); EVP_MD_CTX_free(context); - final String hash = base64Encode(toUint8List(result.ref, resultSize)); + final String hash = base64Encode(toUint8List(result, resultSize)); calloc.free(result); return hash; } @@ -85,7 +85,7 @@ class DigestCMemory extends BenchmarkBase { @override void setup() { data = calloc(L).cast(); - copyFromUint8ListToTarget(inventData(L), data.ref); + copyFromUint8ListToTarget(inventData(L), data); hash(data, L, hashAlgorithm); } @@ -115,7 +115,7 @@ class DigestDartMemory extends BenchmarkBase { void setup() { data = inventData(L); final Pointer dataInC = calloc(L).cast(); - copyFromUint8ListToTarget(data, dataInC.ref); + copyFromUint8ListToTarget(data, dataInC); hash(dataInC, L, hashAlgorithm); calloc.free(dataInC); } @@ -126,7 +126,7 @@ class DigestDartMemory extends BenchmarkBase { @override void run() { final Pointer dataInC = calloc(L).cast(); - copyFromUint8ListToTarget(data, dataInC.ref); + copyFromUint8ListToTarget(data, dataInC); final String result = hash(dataInC, L, hashAlgorithm); calloc.free(dataInC); if (result != expectedHash) { diff --git a/benchmarks/FfiBoringssl/dart/types.dart b/benchmarks/FfiBoringssl/dart/types.dart index 2dd5f76ae42..972555e105e 100644 --- a/benchmarks/FfiBoringssl/dart/types.dart +++ b/benchmarks/FfiBoringssl/dart/types.dart @@ -7,21 +7,25 @@ import 'dart:ffi'; /// digest algorithm. -class EVP_MD extends Struct {} +class EVP_MD extends Opaque {} /// digest context. -class EVP_MD_CTX extends Struct {} +class EVP_MD_CTX extends Opaque {} /// Type for `void*` used to represent opaque data. -class Data extends Struct { - static Data fromUint8Pointer(Pointer p) => p.cast().ref; +class Data extends Opaque { + static Pointer fromUint8Pointer(Pointer p) => p.cast(); +} - Pointer asUint8Pointer() => addressOf.cast(); +extension DataPointerAsUint8Pointer on Pointer { + Pointer asUint8Pointer() => cast(); } /// Type for `uint8_t*` used to represent byte data. -class Bytes extends Struct { - static Data fromUint8Pointer(Pointer p) => p.cast().ref; - - Pointer asUint8Pointer() => addressOf.cast(); +class Bytes extends Opaque { + static Pointer fromUint8Pointer(Pointer p) => p.cast(); +} + +extension BytesPointerAsUint8Pointer on Pointer { + Pointer asUint8Pointer() => cast(); } diff --git a/benchmarks/FfiBoringssl/dart2/FfiBoringssl.dart b/benchmarks/FfiBoringssl/dart2/FfiBoringssl.dart index 6bd064aa3c6..c749745d740 100644 --- a/benchmarks/FfiBoringssl/dart2/FfiBoringssl.dart +++ b/benchmarks/FfiBoringssl/dart2/FfiBoringssl.dart @@ -29,7 +29,7 @@ Uint8List inventData(int length) { return result; } -Uint8List toUint8List(Bytes bytes, int length) { +Uint8List toUint8List(Pointer bytes, int length) { final result = Uint8List(length); final uint8bytes = bytes.asUint8Pointer(); for (int i = 0; i < length; i++) { @@ -38,7 +38,7 @@ Uint8List toUint8List(Bytes bytes, int length) { return result; } -void copyFromUint8ListToTarget(Uint8List source, Data target) { +void copyFromUint8ListToTarget(Uint8List source, Pointer target) { final int length = source.length; final uint8target = target.asUint8Pointer(); for (int i = 0; i < length; i++) { @@ -54,7 +54,7 @@ String hash(Pointer data, int length, Pointer hashAlgorithm) { final Pointer result = calloc(resultSize).cast(); EVP_DigestFinal(context, result, nullptr); EVP_MD_CTX_free(context); - final String hash = base64Encode(toUint8List(result.ref, resultSize)); + final String hash = base64Encode(toUint8List(result, resultSize)); calloc.free(result); return hash; } @@ -87,7 +87,7 @@ class DigestCMemory extends BenchmarkBase { @override void setup() { data = calloc(L).cast(); - copyFromUint8ListToTarget(inventData(L), data.ref); + copyFromUint8ListToTarget(inventData(L), data); hash(data, L, hashAlgorithm); } @@ -117,7 +117,7 @@ class DigestDartMemory extends BenchmarkBase { void setup() { data = inventData(L); final Pointer dataInC = calloc(L).cast(); - copyFromUint8ListToTarget(data, dataInC.ref); + copyFromUint8ListToTarget(data, dataInC); hash(dataInC, L, hashAlgorithm); calloc.free(dataInC); } @@ -128,7 +128,7 @@ class DigestDartMemory extends BenchmarkBase { @override void run() { final Pointer dataInC = calloc(L).cast(); - copyFromUint8ListToTarget(data, dataInC.ref); + copyFromUint8ListToTarget(data, dataInC); final String result = hash(dataInC, L, hashAlgorithm); calloc.free(dataInC); if (result != expectedHash) { diff --git a/benchmarks/FfiBoringssl/dart2/types.dart b/benchmarks/FfiBoringssl/dart2/types.dart index 2c1923ba682..5ceb6a95c00 100644 --- a/benchmarks/FfiBoringssl/dart2/types.dart +++ b/benchmarks/FfiBoringssl/dart2/types.dart @@ -9,21 +9,25 @@ import 'dart:ffi'; /// digest algorithm. -class EVP_MD extends Struct {} +class EVP_MD extends Opaque {} /// digest context. -class EVP_MD_CTX extends Struct {} +class EVP_MD_CTX extends Opaque {} /// Type for `void*` used to represent opaque data. -class Data extends Struct { - static Data fromUint8Pointer(Pointer p) => p.cast().ref; +class Data extends Opaque { + static Pointer fromUint8Pointer(Pointer p) => p.cast(); +} - Pointer asUint8Pointer() => addressOf.cast(); +extension DataPointerAsUint8Pointer on Pointer { + Pointer asUint8Pointer() => cast(); } /// Type for `uint8_t*` used to represent byte data. -class Bytes extends Struct { - static Data fromUint8Pointer(Pointer p) => p.cast().ref; - - Pointer asUint8Pointer() => addressOf.cast(); +class Bytes extends Opaque { + static Pointer fromUint8Pointer(Pointer p) => p.cast(); +} + +extension BytesPointerAsUint8Pointer on Pointer { + Pointer asUint8Pointer() => cast(); } diff --git a/runtime/tests/vm/dart/isolates/dart_api_create_lightweight_isolate_test.dart b/runtime/tests/vm/dart/isolates/dart_api_create_lightweight_isolate_test.dart index 25e0199eb00..ecc33a10d64 100644 --- a/runtime/tests/vm/dart/isolates/dart_api_create_lightweight_isolate_test.dart +++ b/runtime/tests/vm/dart/isolates/dart_api_create_lightweight_isolate_test.dart @@ -22,7 +22,7 @@ final bool isolateGropusEnabled = Platform.executableArguments.contains('--enable-isolate-groups'); final sdkRoot = Platform.script.resolve('../../../../../'); -class Isolate extends Struct {} +class Isolate extends Opaque {} abstract class FfiBindings { static final ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions"); diff --git a/runtime/tests/vm/dart/isolates/thread_pool_test.dart b/runtime/tests/vm/dart/isolates/thread_pool_test.dart index 7a301bc0952..3d689ca4254 100644 --- a/runtime/tests/vm/dart/isolates/thread_pool_test.dart +++ b/runtime/tests/vm/dart/isolates/thread_pool_test.dart @@ -16,7 +16,7 @@ import '../../../../../tests/ffi/dylib_utils.dart'; // This should be larger than max-new-space-size/tlab-size. const int threadCount = 200; -class Isolate extends Struct {} +class Isolate extends Opaque {} typedef Dart_CurrentIsolateFT = Pointer Function(); typedef Dart_CurrentIsolateNFT = Pointer Function(); diff --git a/runtime/tests/vm/dart_2/isolates/dart_api_create_lightweight_isolate_test.dart b/runtime/tests/vm/dart_2/isolates/dart_api_create_lightweight_isolate_test.dart index d35474e27f2..bcd62700f2b 100644 --- a/runtime/tests/vm/dart_2/isolates/dart_api_create_lightweight_isolate_test.dart +++ b/runtime/tests/vm/dart_2/isolates/dart_api_create_lightweight_isolate_test.dart @@ -22,7 +22,7 @@ final bool isolateGropusEnabled = Platform.executableArguments.contains('--enable-isolate-groups'); final sdkRoot = Platform.script.resolve('../../../../../'); -class Isolate extends Struct {} +class Isolate extends Opaque {} abstract class FfiBindings { static final ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions"); diff --git a/runtime/tests/vm/dart_2/isolates/thread_pool_test.dart b/runtime/tests/vm/dart_2/isolates/thread_pool_test.dart index ff8a7e69448..695fda23735 100644 --- a/runtime/tests/vm/dart_2/isolates/thread_pool_test.dart +++ b/runtime/tests/vm/dart_2/isolates/thread_pool_test.dart @@ -16,7 +16,7 @@ import '../../../../../tests/ffi_2/dylib_utils.dart'; // This should be larger than max-new-space-size/tlab-size. const int threadCount = 200; -class Isolate extends Struct {} +class Isolate extends Opaque {} typedef Dart_CurrentIsolateFT = Pointer Function(); typedef Dart_CurrentIsolateNFT = Pointer Function(); diff --git a/samples/ffi/sqlite/lib/src/database.dart b/samples/ffi/sqlite/lib/src/database.dart index 59da929162b..5031027f79f 100644 --- a/samples/ffi/sqlite/lib/src/database.dart +++ b/samples/ffi/sqlite/lib/src/database.dart @@ -101,7 +101,7 @@ class Database { int columnCount = bindings.sqlite3_column_count(statement); for (int i = 0; i < columnCount; i++) { String columnName = - bindings.sqlite3_column_name(statement, i).ref.toString(); + Utf8.fromUtf8(bindings.sqlite3_column_name(statement, i)); columnIndices[columnName] = i; } @@ -109,9 +109,9 @@ class Database { } SQLiteException _loadError(int errorCode) { - String errorMessage = bindings.sqlite3_errmsg(_database).ref.toString(); + String errorMessage = Utf8.fromUtf8(bindings.sqlite3_errmsg(_database)); String errorCodeExplanation = - bindings.sqlite3_errstr(errorCode).ref.toString(); + Utf8.fromUtf8(bindings.sqlite3_errstr(errorCode)); return SQLiteException( "$errorMessage (Code $errorCode: $errorCodeExplanation)"); } @@ -206,10 +206,8 @@ class Row { dynamicType = _typeFromCode(bindings.sqlite3_column_type(_statement, columnIndex)); } else { - dynamicType = _typeFromText(bindings - .sqlite3_column_decltype(_statement, columnIndex) - .ref - .toString()); + dynamicType = _typeFromText(Utf8.fromUtf8( + bindings.sqlite3_column_decltype(_statement, columnIndex))); } switch (dynamicType) { @@ -244,7 +242,7 @@ class Row { /// Reads column [columnIndex] and converts to [Type.Text] if not text. String readColumnByIndexAsText(int columnIndex) { _checkIsCurrentRow(); - return bindings.sqlite3_column_text(_statement, columnIndex).ref.toString(); + return Utf8.fromUtf8(bindings.sqlite3_column_text(_statement, columnIndex)); } void _checkIsCurrentRow() { diff --git a/samples/ffi/sqlite/test/sqlite_test.dart b/samples/ffi/sqlite/test/sqlite_test.dart index fedc9e55659..ef7666d289b 100644 --- a/samples/ffi/sqlite/test/sqlite_test.dart +++ b/samples/ffi/sqlite/test/sqlite_test.dart @@ -167,7 +167,7 @@ void main() { test("Utf8 unit test", () { final String test = 'Hasta Mañana'; final medium = Utf8.toUtf8(test); - expect(test, medium.ref.toString()); + expect(test, Utf8.fromUtf8(medium)); calloc.free(medium); }); } diff --git a/samples_2/ffi/sqlite/lib/src/database.dart b/samples_2/ffi/sqlite/lib/src/database.dart index 49f229f4232..687fea87e99 100644 --- a/samples_2/ffi/sqlite/lib/src/database.dart +++ b/samples_2/ffi/sqlite/lib/src/database.dart @@ -103,7 +103,7 @@ class Database { int columnCount = bindings.sqlite3_column_count(statement); for (int i = 0; i < columnCount; i++) { String columnName = - bindings.sqlite3_column_name(statement, i).ref.toString(); + Utf8.fromUtf8(bindings.sqlite3_column_name(statement, i)); columnIndices[columnName] = i; } @@ -111,12 +111,12 @@ class Database { } SQLiteException _loadError([int errorCode]) { - String errorMessage = bindings.sqlite3_errmsg(_database).ref.toString(); + String errorMessage = Utf8.fromUtf8(bindings.sqlite3_errmsg(_database)); if (errorCode == null) { return SQLiteException(errorMessage); } String errorCodeExplanation = - bindings.sqlite3_errstr(errorCode).ref.toString(); + Utf8.fromUtf8(bindings.sqlite3_errstr(errorCode)); return SQLiteException( "$errorMessage (Code $errorCode: $errorCodeExplanation)"); } @@ -216,10 +216,8 @@ class Row { dynamicType = _typeFromCode(bindings.sqlite3_column_type(_statement, columnIndex)); } else { - dynamicType = _typeFromText(bindings - .sqlite3_column_decltype(_statement, columnIndex) - .ref - .toString()); + dynamicType = _typeFromText(Utf8.fromUtf8( + bindings.sqlite3_column_decltype(_statement, columnIndex))); } switch (dynamicType) { @@ -255,7 +253,7 @@ class Row { /// Reads column [columnIndex] and converts to [Type.Text] if not text. String readColumnByIndexAsText(int columnIndex) { _checkIsCurrentRow(); - return bindings.sqlite3_column_text(_statement, columnIndex).ref.toString(); + return Utf8.fromUtf8(bindings.sqlite3_column_text(_statement, columnIndex)); } void _checkIsCurrentRow() { diff --git a/samples_2/ffi/sqlite/test/sqlite_test.dart b/samples_2/ffi/sqlite/test/sqlite_test.dart index f27336bd22a..dffbe5bb9e6 100644 --- a/samples_2/ffi/sqlite/test/sqlite_test.dart +++ b/samples_2/ffi/sqlite/test/sqlite_test.dart @@ -171,7 +171,7 @@ void main() { test("Utf8 unit test", () { final String test = 'Hasta Mañana'; final medium = Utf8.toUtf8(test); - expect(test, medium.ref.toString()); + expect(test, Utf8.fromUtf8(medium)); calloc.free(medium); }); } diff --git a/tests/ffi/vmspecific_regress_37100_test.dart b/tests/ffi/vmspecific_regress_37100_test.dart index a819503c12a..ef4c6149d72 100644 --- a/tests/ffi/vmspecific_regress_37100_test.dart +++ b/tests/ffi/vmspecific_regress_37100_test.dart @@ -10,7 +10,7 @@ import "package:expect/expect.dart"; import 'dylib_utils.dart'; -class EVP_MD extends Struct {} +class EVP_MD extends Opaque {} DynamicLibrary ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions"); diff --git a/tests/ffi_2/vmspecific_regress_37100_test.dart b/tests/ffi_2/vmspecific_regress_37100_test.dart index a819503c12a..ef4c6149d72 100644 --- a/tests/ffi_2/vmspecific_regress_37100_test.dart +++ b/tests/ffi_2/vmspecific_regress_37100_test.dart @@ -10,7 +10,7 @@ import "package:expect/expect.dart"; import 'dylib_utils.dart'; -class EVP_MD extends Struct {} +class EVP_MD extends Opaque {} DynamicLibrary ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions");