Version 2.15.0-226.0.dev
Merge commit 'e898eef6a24bcc5fb68084e9e5e7cd5c37506627' into 'dev'
diff --git a/DEPS b/DEPS
index 6fb957c..aea5e2a 100644
--- a/DEPS
+++ b/DEPS
@@ -139,7 +139,7 @@
"pool_rev": "7abe634002a1ba8a0928eded086062f1307ccfae",
"process_rev": "56ece43b53b64c63ae51ec184b76bd5360c28d0b",
"protobuf_rev": "c1eb6cb51af39ccbaa1a8e19349546586a5c8e31",
- "pub_rev": "0764437088fd58eb7af779ecef66bab40dfcf2e9",
+ "pub_rev": "35681b0126a1fb48bf2062dd09f74296715402c2",
"pub_semver_rev": "a43ad72fb6b7869607581b5fedcb186d1e74276a",
"root_certificates_rev": "692f6d6488af68e0121317a9c2c9eb393eb0ee50",
"rust_revision": "b7856f695d65a8ebc846754f97d15814bcb1c244",
diff --git a/pkg/analyzer/lib/src/generated/ffi_verifier.dart b/pkg/analyzer/lib/src/generated/ffi_verifier.dart
index af80e94..df2a706 100644
--- a/pkg/analyzer/lib/src/generated/ffi_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/ffi_verifier.dart
@@ -407,6 +407,24 @@
return false;
}
+ bool _isConst(Expression expr) {
+ if (expr is Literal) {
+ return true;
+ }
+ if (expr is Identifier) {
+ final staticElm = expr.staticElement;
+ if (staticElm is ConstVariableElement) {
+ return true;
+ }
+ if (staticElm is PropertyAccessorElementImpl) {
+ if (staticElm.variable is ConstVariableElement) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
/// Returns `true` if [nativeType] is a C type that has a size.
bool _isSized(DartType nativeType) {
switch (_primitiveNativeType(nativeType)) {
@@ -510,12 +528,13 @@
return false;
}
- // Get the const bool value of `expr` if it exists.
- // Return null if it isn't a const bool.
+ /// Get the const bool value of [expr] if it exists.
+ /// Return null if it isn't a const bool.
bool? _maybeGetBoolConstValue(Expression expr) {
if (expr is BooleanLiteral) {
return expr.value;
- } else if (expr is Identifier) {
+ }
+ if (expr is Identifier) {
final staticElm = expr.staticElement;
if (staticElm is ConstVariableElement) {
return staticElm.computeConstantValue()?.toBoolValue();
@@ -897,23 +916,26 @@
FfiCode.MISSING_EXCEPTION_VALUE, node.methodName);
} else {
Expression e = node.argumentList.arguments[1];
- // TODO(brianwilkerson) Validate that `e` is a constant expression.
if (!_validateCompatibleNativeType(e.typeOrThrow, R, true)) {
_errorReporter.reportErrorForNode(
FfiCode.MUST_BE_A_SUBTYPE, e, [e.staticType, R, 'fromFunction']);
}
+ if (!_isConst(e)) {
+ _errorReporter.reportErrorForNode(
+ FfiCode.ARGUMENT_MUST_BE_A_CONSTANT, e, ['exceptionalReturn']);
+ }
}
}
+ /// Ensure `isLeaf` is const as we need the value at compile time to know
+ /// which trampoline to generate.
void _validateIsLeafIsConst(MethodInvocation node) {
- // Ensure `isLeaf` is const as we need the value at compile time to know
- // which trampoline to generate.
final args = node.argumentList.arguments;
if (args.isNotEmpty) {
for (final arg in args) {
if (arg is NamedExpression) {
if (arg.element?.name == _isLeafParamName) {
- if (_maybeGetBoolConstValue(arg.expression) == null) {
+ if (!_isConst(arg.expression)) {
_errorReporter.reportErrorForNode(
FfiCode.ARGUMENT_MUST_BE_A_CONSTANT,
arg.expression,
diff --git a/pkg/analyzer/lib/src/lint/linter_visitor.dart b/pkg/analyzer/lib/src/lint/linter_visitor.dart
index 7fe8635..692f0c7 100644
--- a/pkg/analyzer/lib/src/lint/linter_visitor.dart
+++ b/pkg/analyzer/lib/src/lint/linter_visitor.dart
@@ -172,6 +172,12 @@
}
@override
+ void visitConstructorReference(ConstructorReference node) {
+ _runSubscriptions(node, registry._forConstructorReference);
+ super.visitConstructorReference(node);
+ }
+
+ @override
void visitContinueStatement(ContinueStatement node) {
_runSubscriptions(node, registry._forContinueStatement);
super.visitContinueStatement(node);
@@ -795,6 +801,7 @@
final List<_Subscription<ConstructorFieldInitializer>>
_forConstructorFieldInitializer = [];
final List<_Subscription<ConstructorName>> _forConstructorName = [];
+ final List<_Subscription<ConstructorReference>> _forConstructorReference = [];
final List<_Subscription<ContinueStatement>> _forContinueStatement = [];
final List<_Subscription<DeclaredIdentifier>> _forDeclaredIdentifier = [];
final List<_Subscription<DefaultFormalParameter>> _forDefaultFormalParameter =
@@ -1020,6 +1027,11 @@
_forConstructorName.add(_Subscription(linter, visitor, _getTimer(linter)));
}
+ void addConstructorReference(LintRule linter, AstVisitor visitor) {
+ _forConstructorReference
+ .add(_Subscription(linter, visitor, _getTimer(linter)));
+ }
+
void addContinueStatement(LintRule linter, AstVisitor visitor) {
_forContinueStatement
.add(_Subscription(linter, visitor, _getTimer(linter)));
diff --git a/pkg/analyzer/test/src/diagnostics/argument_must_be_a_constant_test.dart b/pkg/analyzer/test/src/diagnostics/argument_must_be_a_constant_test.dart
index 8db3c12..61dd571 100644
--- a/pkg/analyzer/test/src/diagnostics/argument_must_be_a_constant_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/argument_must_be_a_constant_test.dart
@@ -62,6 +62,20 @@
]);
}
+ test_FromFunctionExceptionReturn() async {
+ await assertErrorsInCode(r'''
+import 'dart:ffi';
+typedef NativeDoubleUnOp = Double Function(Double);
+double myTimesThree(double d) => d * 3;
+void testFromFunctionFunctionExceptionValueMustBeConst() {
+ final notAConst = 1.1;
+ Pointer.fromFunction<NativeDoubleUnOp>(myTimesThree, notAConst);
+}
+''', [
+ error(FfiCode.ARGUMENT_MUST_BE_A_CONSTANT, 250, 9),
+ ]);
+ }
+
test_LookupFunctionIsLeaf() async {
await assertErrorsInCode(r'''
import 'dart:ffi';
diff --git a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
index 0306312..cfb438c 100644
--- a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
@@ -317,6 +317,7 @@
Version? _enableNonNullableVersionInLibrary;
Version? _enableConstructorTearoffsVersionInLibrary;
Version? _enableExtensionTypesVersionInLibrary;
+ Version? _enableNamedArgumentsAnywhereVersionInLibrary;
bool? _enableTripleShiftInLibrary;
bool? _enableExtensionMethodsInLibrary;
bool? _enableGenericMetadataInLibrary;
@@ -398,8 +399,17 @@
ExperimentalFlag.extensionTypes, _packageUri ?? importUri);
bool get enableNamedArgumentsAnywhereInLibrary =>
- _enableNamedArgumentsAnywhereInLibrary ??=
- loader.enableUnscheduledExperiments;
+ _enableNamedArgumentsAnywhereInLibrary ??= loader.target
+ .isExperimentEnabledInLibraryByVersion(
+ ExperimentalFlag.namedArgumentsAnywhere,
+ _packageUri ?? importUri,
+ languageVersion.version);
+
+ Version get enableNamedArgumentsAnywhereVersionInLibrary =>
+ _enableNamedArgumentsAnywhereVersionInLibrary ??= loader.target
+ .getExperimentEnabledVersionInLibrary(
+ ExperimentalFlag.namedArgumentsAnywhere,
+ _packageUri ?? importUri);
void _updateLibraryNNBDSettings() {
library.isNonNullableByDefault = isNonNullableByDefault;
diff --git a/pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart b/pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart
similarity index 100%
rename from pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart
rename to pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart
diff --git a/pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart.strong.expect b/pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart.strong.expect
similarity index 100%
rename from pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart.strong.expect
rename to pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart.strong.expect
diff --git a/pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart.strong.transformed.expect b/pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart.strong.transformed.expect
similarity index 100%
rename from pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart.strong.transformed.expect
rename to pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart.strong.transformed.expect
diff --git a/pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart.textual_outline.expect b/pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart.textual_outline.expect
similarity index 100%
rename from pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart.textual_outline.expect
rename to pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart.textual_outline.expect
diff --git a/pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart.textual_outline_modelled.expect
similarity index 100%
rename from pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart.textual_outline_modelled.expect
rename to pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart.textual_outline_modelled.expect
diff --git a/pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart.weak.expect b/pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart.weak.expect
similarity index 100%
rename from pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart.weak.expect
rename to pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart.weak.expect
diff --git a/pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart.weak.outline.expect b/pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart.weak.outline.expect
similarity index 100%
rename from pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart.weak.outline.expect
rename to pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart.weak.outline.expect
diff --git a/pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart.weak.transformed.expect b/pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart.weak.transformed.expect
similarity index 100%
rename from pkg/front_end/testcases/unscheduled_experiments/named_arguments_anywhere/all_kinds.dart.weak.transformed.expect
rename to pkg/front_end/testcases/named_arguments_anywhere/all_kinds.dart.weak.transformed.expect
diff --git a/pkg/front_end/testcases/named_arguments_anywhere/folder.options b/pkg/front_end/testcases/named_arguments_anywhere/folder.options
new file mode 100644
index 0000000..b97203b
--- /dev/null
+++ b/pkg/front_end/testcases/named_arguments_anywhere/folder.options
@@ -0,0 +1 @@
+--enable-experiment=named-arguments-anywhere
\ No newline at end of file
diff --git a/pkg/kernel/test/class_hierarchy_self_check.dart b/pkg/kernel/test/class_hierarchy_self_check.dart
deleted file mode 100644
index 404d074..0000000
--- a/pkg/kernel/test/class_hierarchy_self_check.dart
+++ /dev/null
@@ -1,157 +0,0 @@
-// Copyright (c) 2016, 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.
-
-import 'package:kernel/kernel.dart';
-import 'package:kernel/class_hierarchy.dart';
-import 'package:kernel/core_types.dart';
-import 'package:test/test.dart';
-import 'class_hierarchy_basic.dart';
-import 'dart:io';
-import 'dart:math';
-import 'self_check_util.dart';
-
-void main(List<String> args) {
- runSelfCheck(args, (String filename) {
- testClassHierarchyOnComponent(loadComponentFromBinary(filename));
- });
-}
-
-void testClassHierarchyOnComponent(Component component, {bool verbose: false}) {
- BasicClassHierarchy basic = new BasicClassHierarchy(component);
- CoreTypes coreTypes = new CoreTypes(component);
- ClosedWorldClassHierarchy classHierarchy =
- new ClassHierarchy(component, coreTypes) as ClosedWorldClassHierarchy;
- int total = classHierarchy.numberOfClasses;
- int progress = 0;
- for (var class1 in classHierarchy.classes) {
- for (var class2 in classHierarchy.classes) {
- bool isSubclass = classHierarchy.isSubclassOf(class1, class2);
- bool isSubtype = classHierarchy.isSubtypeOf(class1, class2);
- var asInstance = classHierarchy.getClassAsInstanceOf(class1, class2);
- if (isSubclass != basic.isSubclassOf(class1, class2)) {
- fail('isSubclassOf(${class1.name}, ${class2.name}) returned '
- '$isSubclass but should be ${!isSubclass}');
- }
- if (isSubtype != basic.isSubtypeOf(class1, class2)) {
- fail('isSubtypeOf(${class1.name}, ${class2.name}) returned '
- '$isSubtype but should be ${!isSubtype}');
- }
- if (asInstance != basic.getClassAsInstanceOf(class1, class2)) {
- fail('asInstanceOf(${class1.name}, ${class2.name}) returned '
- '$asInstance but should be '
- '${basic.getClassAsInstanceOf(class1, class2)}');
- }
- }
- ++progress;
- if (verbose) {
- stdout.write('\rSubclass queries ${100 * progress ~/ total}%');
- }
- }
- Set<Name> names = new Set<Name>();
- for (var classNode in classHierarchy.classes) {
- for (var member in classNode.members) {
- names.add(member.name);
- }
- }
- List<Name> nameList = names.toList();
- progress = 0;
- for (var classNode in classHierarchy.classes) {
- Iterable<Name> candidateNames = <Iterable<Name>>[
- basic.gettersAndCalls[classNode]!.keys,
- basic.setters[classNode]!.keys,
- pickRandom(nameList, 100)
- ].expand((x) => x);
- for (Name name in candidateNames) {
- Member? expectedGetter =
- basic.getDispatchTarget(classNode, name, setter: false);
- Member? expectedSetter =
- basic.getDispatchTarget(classNode, name, setter: true);
- Member? actualGetter =
- classHierarchy.getDispatchTarget(classNode, name, setter: false);
- Member? actualSetter =
- classHierarchy.getDispatchTarget(classNode, name, setter: true);
- if (actualGetter != expectedGetter) {
- fail('lookupGetter($classNode, $name) returned '
- '$actualGetter but should be $expectedGetter');
- }
- if (actualSetter != expectedSetter) {
- fail('lookupSetter($classNode, $name) returned '
- '$actualSetter but should be $expectedSetter');
- }
- }
- ++progress;
- if (verbose) {
- stdout.write('\rDispatch queries ${100 * progress ~/ total}%');
- }
- }
- progress = 0;
- for (var classNode in classHierarchy.classes) {
- Iterable<Name> candidateNames = [
- basic.interfaceGettersAndCalls[classNode]!.keys,
- basic.interfaceSetters[classNode]!.keys,
- pickRandom(nameList, 100)
- ].expand((x) => x);
- for (Name name in candidateNames) {
- Member? expectedGetter =
- basic.getInterfaceMember(classNode, name, setter: false);
- Member? expectedSetter =
- basic.getInterfaceMember(classNode, name, setter: true);
- Member? actualGetter =
- classHierarchy.getInterfaceMember(classNode, name, setter: false);
- Member? actualSetter =
- classHierarchy.getInterfaceMember(classNode, name, setter: true);
- if (actualGetter != expectedGetter) {
- fail('getInterfaceMember($classNode, $name) returned '
- '$actualGetter but should be $expectedGetter');
- }
- if (actualSetter != expectedSetter) {
- fail('getInterfaceMember($classNode, $name, setter: true) '
- 'returned $actualSetter but should be $expectedSetter');
- }
- }
- ++progress;
- if (verbose) {
- stdout.write('\rInterface queries ${100 * progress ~/ total}%');
- }
- }
- for (var classNode in classHierarchy.classes) {
- String getHash(member, superMember, setter) {
- String eq = setter ? '=' : '';
- return '$member$eq overrides $superMember$eq';
- }
-
- Set<String> expectedOverrides = new Set<String>();
- basic.forEachOverridePair(classNode, (member, superMember, setter) {
- expectedOverrides.add(getHash(member, superMember, setter));
- });
- Set<String> actualOverrides = new Set<String>();
- classHierarchy.forEachOverridePair(classNode,
- (member, superMember, setter) {
- actualOverrides.add(getHash(member, superMember, setter));
- });
- for (var actual in actualOverrides) {
- if (!expectedOverrides.contains(actual)) {
- fail("forEachOverridePair($classNode) should not report that $actual");
- }
- }
- for (var expected in expectedOverrides) {
- if (!actualOverrides.contains(expected)) {
- fail("forEachOverridePair($classNode) did not report that $expected");
- }
- }
- }
- if (verbose) {
- print('\rProgress 100%. Done.');
- }
-}
-
-var random = new Random(12345);
-
-List<T> pickRandom<T>(List<T> items, int n) {
- var result = <T>[];
- for (int i = 0; i < n; ++i) {
- result.add(items[random.nextInt(items.length)]);
- }
- return result;
-}
diff --git a/pkg/kernel/test/class_hierarchy_test_disabled.dart b/pkg/kernel/test/class_hierarchy_test_disabled.dart
deleted file mode 100644
index bef2d58..0000000
--- a/pkg/kernel/test/class_hierarchy_test_disabled.dart
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright (c) 2016, 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.
-
-import 'package:kernel/kernel.dart';
-import 'package:test/test.dart';
-import 'class_hierarchy_self_check.dart';
-
-void main() {
- test('All-pairs class hierarchy tests on dart2js', () {
- testClassHierarchyOnComponent(
- loadComponentFromBinary('test/data/dart2js.dill'));
- });
-}
diff --git a/pkg/kernel/test/round_trip.dart b/pkg/kernel/test/round_trip.dart
deleted file mode 100644
index 188a2a1..0000000
--- a/pkg/kernel/test/round_trip.dart
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright (c) 2016, 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 kernel.round_trip;
-
-import 'dart:io';
-import 'package:kernel/binary/ast_from_binary.dart';
-import 'package:kernel/binary/ast_to_binary.dart';
-import 'binary/utils.dart';
-
-const String usage = '''
-Usage: round_trip.dart FILE.dill [sdk.dill]
-
-Deserialize and serialize the given component and check that the resulting byte
-sequence is identical to the original.
-''';
-
-void main(List<String> args) async {
- if (args.length == 1) {
- await testRoundTrip(new File(args[0]).readAsBytesSync(), null);
- } else if (args.length == 2) {
- await testRoundTrip(new File(args[0]).readAsBytesSync(),
- new File(args[1]).readAsBytesSync());
- } else {
- print(usage);
- exit(1);
- }
-}
-
-Future<void> testRoundTrip(List<int> bytes, List<int>? sdkBytes) async {
- var component = new Component();
- if (sdkBytes != null) {
- var sdk = new Component(nameRoot: component.root);
- new BinaryBuilder(sdkBytes).readSingleFileComponent(sdk);
- }
- new BinaryBuilder(bytes).readSingleFileComponent(component);
- ByteSink sink = new ByteSink();
- new BinaryPrinter(sink).writeComponentFile(component);
- List<int> writtenBytes = sink.builder.takeBytes();
- if (bytes.length != writtenBytes.length) {
- throw "Byte-lengths differ: ${bytes.length} vs ${writtenBytes.length}";
- }
- for (int i = 0; i < bytes.length; i++) {
- if (bytes[i] != writtenBytes[i]) {
- throw "Byte differs at index $i: "
- "${show(bytes[i])} vs ${show(writtenBytes[i])}";
- }
- }
- print("OK");
-}
-
-String show(int byte) {
- return '$byte (0x${byte.toRadixString(16).padLeft(2, "0")})';
-}
diff --git a/pkg/kernel/test/round_trip_self_check.dart b/pkg/kernel/test/round_trip_self_check.dart
deleted file mode 100644
index 058cef8..0000000
--- a/pkg/kernel/test/round_trip_self_check.dart
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright (c) 2016, 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 kernel.round_trip_test;
-
-import 'self_check_util.dart';
-import 'round_trip.dart' as cmd;
-
-void main(List<String> args) {
- runSelfCheck(args, (String filename) {
- cmd.main([filename]);
- });
-}
diff --git a/pkg/kernel/test/self_check_util.dart b/pkg/kernel/test/self_check_util.dart
deleted file mode 100644
index d30640e..0000000
--- a/pkg/kernel/test/self_check_util.dart
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright (c) 2016, 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.
-
-import 'dart:async';
-
-import 'package:kernel/src/tool/batch_util.dart';
-
-/// Wraps a main() method for a test that should be runnable as a self-checking
-/// unit test.
-///
-/// These tests can be run like:
-///
-/// tools/test.py -cdartk -rself_check
-///
-/// The test can either be run with a single file passed on the command line
-/// or run in batch mode.
-void runSelfCheck(List<String> args, void runTest(String filename)) {
- Future<CompilerOutcome> batchMain(List<String> arguments) async {
- if (arguments.length != 1) {
- throw 'Exactly one argument expected';
- }
- String filename = arguments[0];
- if (!filename.endsWith('.dill')) {
- throw 'File does not have expected .dill extension: $filename';
- }
- runTest(filename);
- return CompilerOutcome.Ok;
- }
-
- if (args.length == 1 && args[0] == '--batch') {
- runBatch(batchMain);
- } else {
- batchMain(args);
- }
-}
diff --git a/pkg/kernel/test/verify_self_check.dart b/pkg/kernel/test/verify_self_check.dart
deleted file mode 100644
index ee84f9f..0000000
--- a/pkg/kernel/test/verify_self_check.dart
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright (c) 2016, 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.
-
-import 'package:kernel/kernel.dart';
-import 'package:kernel/verifier.dart';
-
-import 'self_check_util.dart';
-
-void main(List<String> args) {
- runSelfCheck(args, (String filename) {
- verifyComponent(loadComponentFromBinary(filename));
- });
-}
diff --git a/pkg/smith/lib/configuration.dart b/pkg/smith/lib/configuration.dart
index 5861fbf..b1576bb7 100644
--- a/pkg/smith/lib/configuration.dart
+++ b/pkg/smith/lib/configuration.dart
@@ -688,7 +688,7 @@
return const [Runtime.none];
case Compiler.appJitk:
case Compiler.dartk:
- return const [Runtime.vm, Runtime.selfCheck];
+ return const [Runtime.vm];
case Compiler.dartkp:
return const [Runtime.dartPrecompiled];
case Compiler.specParser:
@@ -805,7 +805,6 @@
static const ie11 = Runtime._('ie11');
static const edge = Runtime._('edge');
static const chromeOnAndroid = Runtime._('chromeOnAndroid');
- static const selfCheck = Runtime._('self_check');
static const none = Runtime._('none');
static final List<String> names = _all.keys.toList();
@@ -824,7 +823,6 @@
ie11,
edge,
chromeOnAndroid,
- selfCheck,
none
], key: (runtime) => (runtime as Runtime).name);
@@ -881,9 +879,6 @@
case chromeOnAndroid:
return Compiler.dart2js;
- case selfCheck:
- return Compiler.dartk;
-
case none:
// If we aren't running it, we probably just want to analyze it.
return Compiler.dart2analyzer;
diff --git a/pkg/test_runner/lib/src/command.dart b/pkg/test_runner/lib/src/command.dart
index 8ba9f27..da28355 100644
--- a/pkg/test_runner/lib/src/command.dart
+++ b/pkg/test_runner/lib/src/command.dart
@@ -499,39 +499,6 @@
VMCommandOutput(this, exitCode, timedOut, stdout, stderr, time, pid);
}
-class VMBatchCommand extends ProcessCommand implements VMCommand {
- final String dartFile;
- final bool checked;
-
- VMBatchCommand(String executable, this.dartFile, List<String> arguments,
- Map<String, String> environmentOverrides,
- {this.checked = true, int index = 0})
- : super('vm-batch', executable, arguments, environmentOverrides, null,
- index);
-
- VMBatchCommand indexedCopy(int index) =>
- VMBatchCommand(executable, dartFile, arguments, environmentOverrides,
- checked: checked, index: index);
-
- @override
- List<String> get batchArguments =>
- checked ? ['--checked', dartFile] : [dartFile];
-
- @override
- bool _equal(VMBatchCommand other) {
- return super._equal(other) &&
- dartFile == other.dartFile &&
- checked == other.checked;
- }
-
- @override
- void _buildHashCode(HashCodeBuilder builder) {
- super._buildHashCode(builder);
- builder.addJson(dartFile);
- builder.addJson(checked);
- }
-}
-
// Run a VM test under RR, and copy the trace if it crashes. Using a helper
// script like the precompiler does not work because the RR traces are large
// and we must diligently erase them for non-crashes even if the test times
diff --git a/pkg/test_runner/lib/src/configuration.dart b/pkg/test_runner/lib/src/configuration.dart
index bf842a4..2201710 100644
--- a/pkg/test_runner/lib/src/configuration.dart
+++ b/pkg/test_runner/lib/src/configuration.dart
@@ -44,7 +44,6 @@
this.reportFailures,
this.reportInJson,
this.resetBrowser,
- this.skipCompilation,
this.writeDebugLog,
this.writeResults,
this.writeLogs,
@@ -97,7 +96,6 @@
final bool reportFailures;
final bool reportInJson;
final bool resetBrowser;
- final bool skipCompilation;
final bool writeDebugLog;
final bool writeResults;
final bool writeLogs;
diff --git a/pkg/test_runner/lib/src/options.dart b/pkg/test_runner/lib/src/options.dart
index ae9b857..fe3b012 100644
--- a/pkg/test_runner/lib/src/options.dart
+++ b/pkg/test_runner/lib/src/options.dart
@@ -133,11 +133,6 @@
ie11:
chromeOnAndroid: Run JavaScript in the specified browser.
-self_check: Pass each test or its compiled output to every file under
- `pkg` whose name ends with `_self_check.dart`. Each test is
- given to the self_check tester as a filename on stdin using
- the batch-mode protocol.
-
none: No runtime, compile only.''',
abbr: 'r',
values: Runtime.names),
@@ -343,15 +338,6 @@
'''Exclude suites from default selector, only works when no selector
has been specified on the command line.''',
hide: true),
- _Option.bool(
- 'skip_compilation',
- '''
-Skip the compilation step, using the compilation artifacts left in
-the output folder from a previous run. This flag will often cause
-false positives and negatives, but can be useful for quick and
-dirty offline testing when not making changes that affect the
-compiler.''',
- hide: true),
_Option.bool('print_passing_stdout',
'Print the stdout of passing, as well as failing, tests.',
hide: true)
@@ -772,7 +758,6 @@
reportFailures: data["report_failures"] as bool,
reportInJson: data["report_in_json"] as bool,
resetBrowser: data["reset_browser_configuration"] as bool,
- skipCompilation: data["skip_compilation"] as bool,
writeDebugLog: data["write_debug_log"] as bool,
writeResults: data["write_results"] as bool,
writeLogs: data["write_logs"] as bool,
diff --git a/pkg/test_runner/lib/src/process_queue.dart b/pkg/test_runner/lib/src/process_queue.dart
index 3c8e5bb..2943b26 100644
--- a/pkg/test_runner/lib/src/process_queue.dart
+++ b/pkg/test_runner/lib/src/process_queue.dart
@@ -600,10 +600,6 @@
adbDevicePool.releaseDevice(device);
}
});
- } else if (command is VMBatchCommand) {
- var name = command.displayName;
- return _getBatchRunner(command.displayName + command.dartFile)
- .runCommand(name, command, timeout, command.arguments);
} else if (command is CompilationCommand &&
command.displayName == 'babel') {
return RunningProcess(command, timeout,
diff --git a/pkg/test_runner/lib/src/runtime_configuration.dart b/pkg/test_runner/lib/src/runtime_configuration.dart
index 27623e3..1810702 100644
--- a/pkg/test_runner/lib/src/runtime_configuration.dart
+++ b/pkg/test_runner/lib/src/runtime_configuration.dart
@@ -59,9 +59,6 @@
);
}
break;
-
- case Runtime.selfCheck:
- return SelfCheckRuntimeConfiguration();
}
throw "unreachable";
}
@@ -431,37 +428,6 @@
}
}
-class SelfCheckRuntimeConfiguration extends DartVmRuntimeConfiguration {
- final List<String> selfCheckers = <String>[];
-
- SelfCheckRuntimeConfiguration() {
- searchForSelfCheckers();
- }
-
- void searchForSelfCheckers() {
- var pkg = Repository.uri.resolve('pkg');
- for (var entry in Directory.fromUri(pkg).listSync(recursive: true)) {
- if (entry is File && entry.path.endsWith('_self_check.dart')) {
- selfCheckers.add(entry.path);
- }
- }
- }
-
- List<Command> computeRuntimeCommands(
- CommandArtifact artifact,
- List<String> arguments,
- Map<String, String> environmentOverrides,
- List<String> extraLibs,
- bool isCrashExpected) {
- var executable = dartVmBinaryFileName;
- return selfCheckers
- .map((String tester) => VMBatchCommand(
- executable, tester, arguments, environmentOverrides,
- checked: _configuration.isChecked))
- .toList();
- }
-}
-
/// Temporary runtime configuration for browser runtimes that haven't been
/// migrated yet.
// TODO(ahe): Remove this class.
diff --git a/pkg/test_runner/lib/src/test_suite.dart b/pkg/test_runner/lib/src/test_suite.dart
index f926645..9a5d685 100644
--- a/pkg/test_runner/lib/src/test_suite.dart
+++ b/pkg/test_runner/lib/src/test_suite.dart
@@ -811,9 +811,7 @@
var compilationArtifact = compilerConfiguration.computeCompilationArtifact(
tempDir, compileTimeArguments, environmentOverrides);
- if (!configuration.skipCompilation) {
- commands.addAll(compilationArtifact.commands);
- }
+ commands.addAll(compilationArtifact.commands);
if ((testFile.hasCompileError || testFile.isStaticErrorTest) &&
compilerConfiguration.hasCompiler &&
diff --git a/pkg/vm/lib/transformations/ffi.dart b/pkg/vm/lib/transformations/ffi.dart
index 63727a5..c39a22f 100644
--- a/pkg/vm/lib/transformations/ffi.dart
+++ b/pkg/vm/lib/transformations/ffi.dart
@@ -31,7 +31,7 @@
kUint8,
kUint16,
kUint32,
- kUnit64,
+ kUint64,
kIntptr,
kFloat,
kDouble,
@@ -41,59 +41,68 @@
kHandle,
}
-const NativeType kNativeTypeIntStart = NativeType.kInt8;
-const NativeType kNativeTypeIntEnd = NativeType.kIntptr;
+const Set<NativeType> nativeIntTypes = <NativeType>{
+ NativeType.kInt8,
+ NativeType.kInt16,
+ NativeType.kInt32,
+ NativeType.kInt64,
+ NativeType.kUint8,
+ NativeType.kUint16,
+ NativeType.kUint32,
+ NativeType.kUint64,
+ NativeType.kIntptr,
+};
-/// The [NativeType] class names, indexed by [NativeType].
-const List<String> nativeTypeClassNames = [
- 'NativeType',
- '_NativeInteger',
- '_NativeDouble',
- 'Pointer',
- 'NativeFunction',
- 'Int8',
- 'Int16',
- 'Int32',
- 'Int64',
- 'Uint8',
- 'Uint16',
- 'Uint32',
- 'Uint64',
- 'IntPtr',
- 'Float',
- 'Double',
- 'Void',
- 'Opaque',
- 'Struct',
- 'Handle'
-];
+/// The [NativeType] class names.
+const Map<NativeType, String> nativeTypeClassNames = <NativeType, String>{
+ NativeType.kNativeType: 'NativeType',
+ NativeType.kNativeInteger: '_NativeInteger',
+ NativeType.kNativeDouble: '_NativeDouble',
+ NativeType.kPointer: 'Pointer',
+ NativeType.kNativeFunction: 'NativeFunction',
+ NativeType.kInt8: 'Int8',
+ NativeType.kInt16: 'Int16',
+ NativeType.kInt32: 'Int32',
+ NativeType.kInt64: 'Int64',
+ NativeType.kUint8: 'Uint8',
+ NativeType.kUint16: 'Uint16',
+ NativeType.kUint32: 'Uint32',
+ NativeType.kUint64: 'Uint64',
+ NativeType.kIntptr: 'IntPtr',
+ NativeType.kFloat: 'Float',
+ NativeType.kDouble: 'Double',
+ NativeType.kVoid: 'Void',
+ NativeType.kOpaque: 'Opaque',
+ NativeType.kStruct: 'Struct',
+ NativeType.kHandle: 'Handle',
+};
const int UNKNOWN = 0;
const int WORD_SIZE = -1;
-/// The [NativeType] sizes in bytes, indexed by [NativeType].
-const List<int> nativeTypeSizes = [
- UNKNOWN, // NativeType
- UNKNOWN, // NativeInteger
- UNKNOWN, // NativeDouble
- WORD_SIZE, // Pointer
- UNKNOWN, // NativeFunction
- 1, // Int8
- 2, // Int16
- 4, // Int32
- 8, // Int64
- 1, // Uint8
- 2, // Uint16
- 4, // Uint32
- 8, // Uint64
- WORD_SIZE, // IntPtr
- 4, // Float
- 8, // Double
- UNKNOWN, // Void
- UNKNOWN, // Opaque
- UNKNOWN, // Struct
- WORD_SIZE, // Handle
-];
+/// The [NativeType] sizes in bytes.
+const Map<NativeType, int> nativeTypeSizes = <NativeType, int>{
+ NativeType.kNativeType: UNKNOWN,
+ NativeType.kNativeInteger: UNKNOWN,
+ NativeType.kNativeDouble: UNKNOWN,
+ NativeType.kPointer: WORD_SIZE,
+ NativeType.kNativeFunction: UNKNOWN,
+ NativeType.kInt8: 1,
+ NativeType.kInt16: 2,
+ NativeType.kInt32: 4,
+ NativeType.kInt64: 8,
+ NativeType.kUint8: 1,
+ NativeType.kUint16: 2,
+ NativeType.kUint32: 4,
+ NativeType.kUint64: 8,
+ NativeType.kIntptr: WORD_SIZE,
+ NativeType.kFloat: 4,
+ NativeType.kDouble: 8,
+ NativeType.kVoid: UNKNOWN,
+ NativeType.kOpaque: UNKNOWN,
+ NativeType.kStruct: UNKNOWN,
+ NativeType.kHandle: WORD_SIZE,
+};
/// The struct layout in various ABIs.
///
@@ -145,7 +154,7 @@
Abi.wordSize32Align32: {
NativeType.kDouble: 4,
NativeType.kInt64: 4,
- NativeType.kUnit64: 4
+ NativeType.kUint64: 4
},
// The default for MSVC x86:
@@ -176,7 +185,7 @@
NativeType.kUint8,
NativeType.kUint16,
NativeType.kUint32,
- NativeType.kUnit64,
+ NativeType.kUint64,
NativeType.kIntptr,
NativeType.kFloat,
NativeType.kDouble,
@@ -296,7 +305,8 @@
late final InterfaceType pointerVoidType;
/// Classes corresponding to [NativeType], indexed by [NativeType].
- final List<Class> nativeTypesClasses;
+ final Map<NativeType, Class> nativeTypesClasses;
+ final Map<Class, NativeType> classNativeTypes;
Library? _currentLibrary;
Library get currentLibrary => _currentLibrary!;
@@ -431,31 +441,32 @@
index.getTopLevelProcedure('dart:ffi', '_pointerFromFunction'),
nativeCallbackFunctionProcedure =
index.getTopLevelProcedure('dart:ffi', '_nativeCallbackFunction'),
- nativeTypesClasses = nativeTypeClassNames
- .map((name) => index.getClass('dart:ffi', name))
- .toList(),
+ nativeTypesClasses = nativeTypeClassNames.map((nativeType, name) =>
+ MapEntry(nativeType, index.getClass('dart:ffi', name))),
+ classNativeTypes = nativeTypeClassNames.map((nativeType, name) =>
+ MapEntry(index.getClass('dart:ffi', name), nativeType)),
loadMethods = Map.fromIterable(optimizedTypes, value: (t) {
- final name = nativeTypeClassNames[t.index];
+ final name = nativeTypeClassNames[t];
return index.getTopLevelProcedure('dart:ffi', "_load$name");
}),
loadUnalignedMethods =
Map.fromIterable(unalignedLoadsStores, value: (t) {
- final name = nativeTypeClassNames[t.index];
+ final name = nativeTypeClassNames[t];
return index.getTopLevelProcedure(
'dart:ffi', "_load${name}Unaligned");
}),
storeMethods = Map.fromIterable(optimizedTypes, value: (t) {
- final name = nativeTypeClassNames[t.index];
+ final name = nativeTypeClassNames[t];
return index.getTopLevelProcedure('dart:ffi', "_store$name");
}),
storeUnalignedMethods =
Map.fromIterable(unalignedLoadsStores, value: (t) {
- final name = nativeTypeClassNames[t.index];
+ final name = nativeTypeClassNames[t];
return index.getTopLevelProcedure(
'dart:ffi', "_store${name}Unaligned");
}),
elementAtMethods = Map.fromIterable(optimizedTypes, value: (t) {
- final name = nativeTypeClassNames[t.index];
+ final name = nativeTypeClassNames[t];
return index.getTopLevelProcedure('dart:ffi', "_elementAt$name");
}),
memCopy = index.getTopLevelProcedure('dart:ffi', '_memCopy'),
@@ -473,7 +484,7 @@
index.getTopLevelProcedure('dart:_internal', 'reachabilityFence') {
nativeFieldWrapperClass1Type = nativeFieldWrapperClass1Class.getThisType(
coreTypes, Nullability.nonNullable);
- voidType = nativeTypesClasses[NativeType.kVoid.index]
+ voidType = nativeTypesClasses[NativeType.kVoid]!
.getThisType(coreTypes, Nullability.nonNullable);
pointerVoidType =
InterfaceType(pointerClass, Nullability.nonNullable, [voidType]);
@@ -538,8 +549,7 @@
if (nativeType_ == NativeType.kPointer) {
return nativeType;
}
- if (kNativeTypeIntStart.index <= nativeType_.index &&
- nativeType_.index <= kNativeTypeIntEnd.index) {
+ if (nativeIntTypes.contains(nativeType_)) {
return InterfaceType(intClass, Nullability.legacy);
}
if (nativeType_ == NativeType.kFloat || nativeType_ == NativeType.kDouble) {
@@ -579,11 +589,7 @@
/// The [NativeType] corresponding to [c]. Returns `null` for user-defined
/// structs.
NativeType? getType(Class c) {
- final int index = nativeTypesClasses.indexOf(c);
- if (index == -1) {
- return null;
- }
- return NativeType.values[index];
+ return classNativeTypes[c];
}
InterfaceType _listOfIntType() => InterfaceType(
@@ -731,8 +737,8 @@
}
if (!env.isSubtypeOf(
type,
- InterfaceType(nativeTypesClasses[NativeType.kNativeType.index],
- Nullability.legacy),
+ InterfaceType(
+ nativeTypesClasses[NativeType.kNativeType]!, Nullability.legacy),
SubtypeCheckMode.ignoringNullabilities)) {
return false;
}
@@ -756,8 +762,8 @@
return env.isSubtypeOf(
type,
InterfaceType(pointerClass, Nullability.legacy, [
- InterfaceType(nativeTypesClasses[NativeType.kNativeType.index],
- Nullability.legacy)
+ InterfaceType(
+ nativeTypesClasses[NativeType.kNativeType]!, Nullability.legacy)
]),
SubtypeCheckMode.ignoringNullabilities);
}
@@ -772,8 +778,8 @@
return env.isSubtypeOf(
type,
InterfaceType(arrayClass, Nullability.legacy, [
- InterfaceType(nativeTypesClasses[NativeType.kNativeType.index],
- Nullability.legacy)
+ InterfaceType(
+ nativeTypesClasses[NativeType.kNativeType]!, Nullability.legacy)
]),
SubtypeCheckMode.ignoringNullabilities);
}
diff --git a/pkg/vm/lib/transformations/ffi_definitions.dart b/pkg/vm/lib/transformations/ffi_definitions.dart
index 29b58fc..f9ef464 100644
--- a/pkg/vm/lib/transformations/ffi_definitions.dart
+++ b/pkg/vm/lib/transformations/ffi_definitions.dart
@@ -441,7 +441,7 @@
success = false;
} else {
final DartType nativeType = InterfaceType(
- nativeTypesClasses[_getFieldType(nativeTypeAnnos.first)!.index],
+ nativeTypesClasses[_getFieldType(nativeTypeAnnos.first)!]!,
Nullability.legacy);
final DartType? shouldBeDartType = convertNativeTypeToDartType(
nativeType,
@@ -1075,7 +1075,7 @@
@override
Map<Abi, int> get size {
- final int size = nativeTypeSizes[nativeType.index];
+ final int size = nativeTypeSizes[nativeType]!;
if (size == WORD_SIZE) {
return wordSize;
}
diff --git a/pkg/vm/lib/transformations/ffi_use_sites.dart b/pkg/vm/lib/transformations/ffi_use_sites.dart
index eb17eb0..403feb9 100644
--- a/pkg/vm/lib/transformations/ffi_use_sites.dart
+++ b/pkg/vm/lib/transformations/ffi_use_sites.dart
@@ -405,7 +405,7 @@
.firstWhere((function) => function.name == Name('#sizeOf'));
return StaticGet(sizeOfGetter);
}
- final int size = nativeTypeSizes[nt.index];
+ final int size = nativeTypeSizes[nt]!;
if (size == WORD_SIZE) {
return runtimeBranchOnLayout(wordSize);
}
@@ -790,7 +790,7 @@
klass == opaqueClass ||
klass == structClass ||
klass == unionClass ||
- nativeTypesClasses.contains(klass)) {
+ classNativeTypes[klass] != null) {
return null;
}
@@ -809,7 +809,7 @@
}
}
- for (final parent in nativeTypesClasses) {
+ for (final parent in nativeTypesClasses.values) {
if (hierarchy.isSubtypeOf(klass, parent)) {
return parent;
}
diff --git a/runtime/observatory/tests/service/service.status b/runtime/observatory/tests/service/service.status
index de8b15b..c7e818c 100644
--- a/runtime/observatory/tests/service/service.status
+++ b/runtime/observatory/tests/service/service.status
@@ -2,6 +2,7 @@
# 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.
# Flaky failures
+async_generator_breakpoint_test: Pass, Slow # Uses --stacktrace-every=...
dds_log_history_size_gigantic_test: Pass, Slow # Involves processing lots of logs
field_script_test: Pass, RuntimeError
get_allocation_samples_test: Pass, RuntimeError # Inconsistent stack trace
@@ -22,10 +23,6 @@
[ $compiler == dart2analyzer ]
developer_extension_test: SkipByDesign
-# The _1 versions of this test can be slow due to stress testing flags.
-[ $mode == debug ]
-async_generator_breakpoint_test: Pass, Slow
-
# Service protocol is not supported in product mode.
[ $mode == product ]
*: SkipByDesign
diff --git a/runtime/tests/concurrency/run_stress_test_shards.dart b/runtime/tests/concurrency/run_stress_test_shards.dart
index d1d1d80..5f29e01 100644
--- a/runtime/tests/concurrency/run_stress_test_shards.dart
+++ b/runtime/tests/concurrency/run_stress_test_shards.dart
@@ -14,6 +14,14 @@
int crashCounter = 0;
+final Map<String, String> environmentForTests = (() {
+ final env = Map<String, String>.from(Platform.environment);
+ final testMatrix =
+ json.decode(File('tools/bots/test_matrix.json').readAsStringSync());
+ env.addAll(testMatrix['sanitizer_options'].cast<String, String>());
+ return env;
+})();
+
void forwardStream(Stream<List<int>> input, IOSink output) {
// Print the information line-by-line.
input
@@ -34,7 +42,8 @@
Future<bool> run(
String executable, List<String> args, List<PotentialCrash> crashes) async {
print('Running "$executable ${args.join(' ')}"');
- final Process process = await Process.start(executable, args);
+ final Process process =
+ await Process.start(executable, args, environment: environmentForTests);
forwardStream(process.stdout, stdout);
forwardStream(process.stderr, stderr);
final int exitCode = await process.exitCode;
diff --git a/runtime/tests/vm/dart/isolates/fast_object_copy_test.dart b/runtime/tests/vm/dart/isolates/fast_object_copy_test.dart
index f68d1cc..6cc3be4 100644
--- a/runtime/tests/vm/dart/isolates/fast_object_copy_test.dart
+++ b/runtime/tests/vm/dart/isolates/fast_object_copy_test.dart
@@ -606,6 +606,7 @@
}
Future testWeakProperty() async {
+ print('testWeakProperty');
final key = Object();
final expando1 = Expando();
final expando2 = Expando();
diff --git a/runtime/tests/vm/dart_2/isolates/fast_object_copy_test.dart b/runtime/tests/vm/dart_2/isolates/fast_object_copy_test.dart
index 77947cb..79de0c5 100644
--- a/runtime/tests/vm/dart_2/isolates/fast_object_copy_test.dart
+++ b/runtime/tests/vm/dart_2/isolates/fast_object_copy_test.dart
@@ -608,6 +608,7 @@
}
Future testWeakProperty() async {
+ print('testWeakProperty');
final key = Object();
final expando1 = Expando();
final expando2 = Expando();
diff --git a/runtime/vm/object_test.cc b/runtime/vm/object_test.cc
index be755ef..c8cbcec 100644
--- a/runtime/vm/object_test.cc
+++ b/runtime/vm/object_test.cc
@@ -5473,7 +5473,7 @@
kUint8,
kUint16,
kUint32,
- kUnit64,
+ kUint64,
kIntptr,
kFloat,
kDouble,
@@ -5488,7 +5488,7 @@
Abi.wordSize32Align32: {
NativeType.kDouble: 4,
NativeType.kInt64: 4,
- NativeType.kUnit64: 4
+ NativeType.kUint64: 4
},
Abi.wordSize32Align64: {},
};
@@ -5498,7 +5498,7 @@
Abi.wordSize32Align32: {
NativeType.kDouble: 4,
NativeType.kInt64: 4,
- NativeType.kUnit64: 4
+ NativeType.kUint64: 4
},
Abi.wordSize32Align64: {},
};
diff --git a/tests/ffi/vmspecific_static_checks_test.dart b/tests/ffi/vmspecific_static_checks_test.dart
index 9dca0e7..e77b941 100644
--- a/tests/ffi/vmspecific_static_checks_test.dart
+++ b/tests/ffi/vmspecific_static_checks_test.dart
@@ -36,6 +36,7 @@
testFromFunctionClosure();
testFromFunctionTearOff();
testFromFunctionAbstract();
+ testFromFunctionFunctionExceptionValueMustBeConst();
testLookupFunctionGeneric();
testLookupFunctionGeneric2();
testLookupFunctionWrongNativeFunctionSignature();
@@ -274,6 +275,12 @@
testFromFunctionAbstract); //# 76: compile-time error
}
+void testFromFunctionFunctionExceptionValueMustBeConst() {
+ final notAConst = 1.1;
+ Pointer<NativeFunction<NativeDoubleUnOp>> p;
+ p = Pointer.fromFunction(myTimesThree, notAConst); //# 77: compile-time error
+}
+
void testLookupFunctionGeneric() {
Function generic<T extends Function>() {
DynamicLibrary l = dlopenPlatformSpecific("ffi_test_dynamic_library");
@@ -714,13 +721,16 @@
void testLookupFunctionIsLeafMustBeConst() {
bool notAConst = false;
DynamicLibrary l = dlopenPlatformSpecific("ffi_test_dynamic_library");
- l.lookupFunction<NativeDoubleUnOp, DoubleUnOp>("timesFour", isLeaf:notAConst); //# 1500: compile-time error
+ l.lookupFunction< //# 1500: compile-time error
+ NativeDoubleUnOp, //# 1500: compile-time error
+ DoubleUnOp>("timesFour", //# 1500: compile-time error
+ isLeaf: notAConst); //# 1500: compile-time error
}
void testAsFunctionIsLeafMustBeConst() {
bool notAConst = false;
Pointer<NativeFunction<Int8UnOp>> p = Pointer.fromAddress(1337);
- IntUnOp f = p.asFunction(isLeaf:notAConst); //# 1501: compile-time error
+ IntUnOp f = p.asFunction(isLeaf: notAConst); //# 1501: compile-time error
}
typedef NativeTakesHandle = Void Function(Handle);
@@ -728,12 +738,16 @@
void testLookupFunctionTakesHandle() {
DynamicLibrary l = dlopenPlatformSpecific("ffi_test_dynamic_library");
- l.lookupFunction<NativeTakesHandle, TakesHandle>("takesHandle", isLeaf:true); //# 1502: compile-time error
+ l.lookupFunction< //# 1502: compile-time error
+ NativeTakesHandle, //# 1502: compile-time error
+ TakesHandle>("takesHandle", //# 1502: compile-time error
+ isLeaf: true); //# 1502: compile-time error
}
void testAsFunctionTakesHandle() {
- Pointer<NativeFunction<NativeTakesHandle>> p = Pointer.fromAddress(1337); //# 1503: compile-time error
- TakesHandle f = p.asFunction(isLeaf:true); //# 1503: compile-time error
+ Pointer<NativeFunction<NativeTakesHandle>> p = //# 1503: compile-time error
+ Pointer.fromAddress(1337); //# 1503: compile-time error
+ TakesHandle f = p.asFunction(isLeaf: true); //# 1503: compile-time error
}
typedef NativeReturnsHandle = Handle Function();
@@ -741,12 +755,16 @@
void testLookupFunctionReturnsHandle() {
DynamicLibrary l = dlopenPlatformSpecific("ffi_test_dynamic_library");
- l.lookupFunction<NativeReturnsHandle, ReturnsHandle>("returnsHandle", isLeaf:true); //# 1504: compile-time error
+ l.lookupFunction< //# 1504: compile-time error
+ NativeReturnsHandle, //# 1504: compile-time error
+ ReturnsHandle>("returnsHandle", //# 1504: compile-time error
+ isLeaf: true); //# 1504: compile-time error
}
void testAsFunctionReturnsHandle() {
- Pointer<NativeFunction<NativeReturnsHandle>> p = Pointer.fromAddress(1337); //# 1505: compile-time error
- ReturnsHandle f = p.asFunction(isLeaf:true); //# 1505: compile-time error
+ Pointer<NativeFunction<NativeReturnsHandle>> p = //# 1505: compile-time error
+ Pointer.fromAddress(1337); //# 1505: compile-time error
+ ReturnsHandle f = p.asFunction(isLeaf: true); //# 1505: compile-time error
}
@Packed(1)
diff --git a/tests/ffi_2/vmspecific_static_checks_test.dart b/tests/ffi_2/vmspecific_static_checks_test.dart
index 112455c..165b25c 100644
--- a/tests/ffi_2/vmspecific_static_checks_test.dart
+++ b/tests/ffi_2/vmspecific_static_checks_test.dart
@@ -38,6 +38,7 @@
testFromFunctionClosure();
testFromFunctionTearOff();
testFromFunctionAbstract();
+ testFromFunctionFunctionExceptionValueMustBeConst();
testLookupFunctionGeneric();
testLookupFunctionGeneric2();
testLookupFunctionWrongNativeFunctionSignature();
@@ -276,6 +277,12 @@
testFromFunctionAbstract); //# 76: compile-time error
}
+void testFromFunctionFunctionExceptionValueMustBeConst() {
+ final notAConst = 1.1;
+ Pointer<NativeFunction<NativeDoubleUnOp>> p;
+ p = Pointer.fromFunction(myTimesThree, notAConst); //# 77: compile-time error
+}
+
void testLookupFunctionGeneric() {
Function generic<T extends Function>() {
DynamicLibrary l = dlopenPlatformSpecific("ffi_test_dynamic_library");
@@ -714,13 +721,16 @@
void testLookupFunctionIsLeafMustBeConst() {
bool notAConst = false;
DynamicLibrary l = dlopenPlatformSpecific("ffi_test_dynamic_library");
- l.lookupFunction<NativeDoubleUnOp, DoubleUnOp>("timesFour", isLeaf:notAConst); //# 1500: compile-time error
+ l.lookupFunction< //# 1500: compile-time error
+ NativeDoubleUnOp, //# 1500: compile-time error
+ DoubleUnOp>("timesFour", //# 1500: compile-time error
+ isLeaf: notAConst); //# 1500: compile-time error
}
void testAsFunctionIsLeafMustBeConst() {
bool notAConst = false;
Pointer<NativeFunction<Int8UnOp>> p = Pointer.fromAddress(1337);
- IntUnOp f = p.asFunction(isLeaf:notAConst); //# 1501: compile-time error
+ IntUnOp f = p.asFunction(isLeaf: notAConst); //# 1501: compile-time error
}
typedef NativeTakesHandle = Void Function(Handle);
@@ -728,12 +738,16 @@
void testLookupFunctionTakesHandle() {
DynamicLibrary l = dlopenPlatformSpecific("ffi_test_dynamic_library");
- l.lookupFunction<NativeTakesHandle, TakesHandle>("takesHandle", isLeaf:true); //# 1502: compile-time error
+ l.lookupFunction< //# 1502: compile-time error
+ NativeTakesHandle, //# 1502: compile-time error
+ TakesHandle>("takesHandle", //# 1502: compile-time error
+ isLeaf: true); //# 1502: compile-time error
}
void testAsFunctionTakesHandle() {
- Pointer<NativeFunction<NativeTakesHandle>> p = Pointer.fromAddress(1337); //# 1503: compile-time error
- TakesHandle f = p.asFunction(isLeaf:true); //# 1503: compile-time error
+ Pointer<NativeFunction<NativeTakesHandle>> p = //# 1503: compile-time error
+ Pointer.fromAddress(1337); //# 1503: compile-time error
+ TakesHandle f = p.asFunction(isLeaf: true); //# 1503: compile-time error
}
typedef NativeReturnsHandle = Handle Function();
@@ -741,12 +755,16 @@
void testLookupFunctionReturnsHandle() {
DynamicLibrary l = dlopenPlatformSpecific("ffi_test_dynamic_library");
- l.lookupFunction<NativeReturnsHandle, ReturnsHandle>("returnsHandle", isLeaf:true); //# 1504: compile-time error
+ l.lookupFunction< //# 1504: compile-time error
+ NativeReturnsHandle, //# 1504: compile-time error
+ ReturnsHandle>("returnsHandle", //# 1504: compile-time error
+ isLeaf: true); //# 1504: compile-time error
}
void testAsFunctionReturnsHandle() {
- Pointer<NativeFunction<NativeReturnsHandle>> p = Pointer.fromAddress(1337); //# 1505: compile-time error
- ReturnsHandle f = p.asFunction(isLeaf:true); //# 1505: compile-time error
+ Pointer<NativeFunction<NativeReturnsHandle>> p = //# 1505: compile-time error
+ Pointer.fromAddress(1337); //# 1505: compile-time error
+ ReturnsHandle f = p.asFunction(isLeaf: true); //# 1505: compile-time error
}
@Packed(1)
diff --git a/tools/VERSION b/tools/VERSION
index 6ccaf6a..dc7ef35 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 15
PATCH 0
-PRERELEASE 225
+PRERELEASE 226
PRERELEASE_PATCH 0
\ No newline at end of file