580f44aa83
* Move FFI tests into a separate test suite. They never belonged in standalone_2/ since they are not only available in the standalone VM. Also, we want to have a separate status file. * Add new "SharedObjects" option to test files to copy needed shared objects to the Android device for testing. * Add support to compiler/runtime_configuration.dart for testing JIT-mode on Android. * Add new configurations and builders to test_matrix.json to test JIT-mode on Android. * Clean up status file entries for FFI (we didn't need to special-case stress & subtype tests). Change-Id: Ifb32ef7051754f477d00ecd7a0f9b19ca8a66eae Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/97334 Commit-Queue: Samir Jindel <sjindel@google.com> Reviewed-by: William Hesse <whesse@google.com> Reviewed-by: Daco Harkes <dacoharkes@google.com>
33 lines
996 B
Dart
33 lines
996 B
Dart
// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
library FfiTest;
|
|
|
|
import 'dart:convert';
|
|
import 'dart:ffi' as ffi;
|
|
|
|
/// Sample non-struct subtype of Pointer for dart:ffi library.
|
|
class CString extends ffi.Pointer<ffi.Uint8> {
|
|
CString elementAt(int index) => super.elementAt(index).cast();
|
|
|
|
String fromUtf8() {
|
|
List<int> units = [];
|
|
int len = 0;
|
|
while (true) {
|
|
int char = elementAt(len++).load<int>();
|
|
if (char == 0) break;
|
|
units.add(char);
|
|
}
|
|
return Utf8Decoder().convert(units);
|
|
}
|
|
|
|
factory CString.toUtf8(String s) {
|
|
CString result = ffi.allocate<ffi.Uint8>(count: s.length + 1).cast();
|
|
List<int> units = Utf8Encoder().convert(s);
|
|
for (int i = 0; i < s.length; i++) result.elementAt(i).store(units[i]);
|
|
result.elementAt(s.length).store(0);
|
|
return result;
|
|
}
|
|
}
|