Version 2.14.0-35.0.dev
Merge commit 'b3c0b58e93834d63e6205f103c86abf6ef4230f9' into 'dev'
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7bf5a3a..dbc15dc 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -27,14 +27,8 @@
#### Linter
-Updated the Linter to `1.4.0`, which includes:
+Updated the Linter to `1.3.0`, which includes:
-- `directives_ordering` now checks ordering of `package:` imports in code
- outside pub packages.
-- simple reachability analysis added to `use_build_context_synchronously` to
- short-circuit await-discovery in terminating blocks.
-- `use_build_context_synchronously` updated to recognize nullable types when
- accessed from legacy libraries.
- updated `non_constant_identifier_names` to check local variables, for-loop
initializers and catch clauses.
- updated error range of `lines_longer_than_80_chars` to start at 80 to make
diff --git a/DEPS b/DEPS
index 146ab90..dab41b0 100644
--- a/DEPS
+++ b/DEPS
@@ -124,7 +124,7 @@
"intl_tag": "0.17.0-nullsafety",
"jinja2_rev": "2222b31554f03e62600cd7e383376a7c187967a1",
"json_rpc_2_rev": "b8dfe403fd8528fd14399dee3a6527b55802dd4d",
- "linter_tag": "1.4.0",
+ "linter_tag": "1.3.0",
"logging_rev": "e2f633b543ef89c54688554b15ca3d7e425b86a2",
"markupsafe_rev": "8f45f5cfa0009d2a70589bcda0349b8cb2b72783",
"markdown_rev": "9c4beaac96d8f008078e00b027915f81b665d2de",
diff --git a/pkg/front_end/lib/src/api_prototype/compiler_options.dart b/pkg/front_end/lib/src/api_prototype/compiler_options.dart
index a9154dd..23ba26d 100644
--- a/pkg/front_end/lib/src/api_prototype/compiler_options.dart
+++ b/pkg/front_end/lib/src/api_prototype/compiler_options.dart
@@ -270,18 +270,23 @@
/// Verbosity level used for filtering emitted messages.
Verbosity verbosity = Verbosity.all;
- bool isExperimentEnabledByDefault(ExperimentalFlag flag) {
- return flags.isExperimentEnabled(flag,
- defaultExperimentFlagsForTesting: defaultExperimentFlagsForTesting);
- }
-
- /// Returns
+ /// Returns `true` if the experiment with the given [flag] is enabled, either
+ /// explicitly or implicitly.
+ ///
+ /// Note that libraries can still opt out of the experiment by having a lower
+ /// language version than required for the experiment.
bool isExperimentEnabled(ExperimentalFlag flag) {
return flags.isExperimentEnabled(flag,
explicitExperimentalFlags: explicitExperimentalFlags,
defaultExperimentFlagsForTesting: defaultExperimentFlagsForTesting);
}
+ /// Returns `true` if the experiment with the given [flag] is enabled either
+ /// explicitly or implicitly for the library with the given [importUri].
+ ///
+ /// Note that the library can still opt out of the experiment by having a
+ /// lower language version than required for the experiment. See
+ /// [getExperimentEnabledVersionInLibrary].
bool isExperimentEnabledInLibrary(ExperimentalFlag flag, Uri importUri) {
return flags.isExperimentEnabledInLibrary(flag, importUri,
defaultExperimentFlagsForTesting: defaultExperimentFlagsForTesting,
@@ -289,6 +294,11 @@
allowedExperimentalFlags: allowedExperimentalFlagsForTesting);
}
+ /// Returns the minimum language version needed for a library with the given
+ /// [importUri] to opt in to the experiment with the given [flag].
+ ///
+ /// Note that the experiment might not be enabled at all for the library, as
+ /// computed by [isExperimentEnabledInLibrary].
Version getExperimentEnabledVersionInLibrary(
ExperimentalFlag flag, Uri importUri) {
return flags.getExperimentEnabledVersionInLibrary(
@@ -300,6 +310,8 @@
experimentReleasedVersionForTesting);
}
+ /// Return `true` if the experiment with the given [flag] is enabled for the
+ /// library with the given [importUri] and language [version].
bool isExperimentEnabledInLibraryByVersion(
ExperimentalFlag flag, Uri importUri, Version version) {
return flags.isExperimentEnabledInLibraryByVersion(flag, importUri, version,
diff --git a/pkg/front_end/lib/src/api_prototype/experimental_flags.dart b/pkg/front_end/lib/src/api_prototype/experimental_flags.dart
index bd9a076..9220790 100644
--- a/pkg/front_end/lib/src/api_prototype/experimental_flags.dart
+++ b/pkg/front_end/lib/src/api_prototype/experimental_flags.dart
@@ -2,8 +2,6 @@
// 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.
-// @dart = 2.9
-
import 'package:kernel/kernel.dart' show Version;
part 'experimental_flags_generated.dart';
@@ -33,7 +31,7 @@
/// Return the set of enabled experiments for the package with the [name],
/// e.g. "path", possibly `null`.
- Set<ExperimentalFlag> forPackage(String name) {
+ Set<ExperimentalFlag>? forPackage(String name) {
return packageExperiments[name];
}
@@ -53,16 +51,16 @@
/// If [flag] is marked as expired in [expiredExperimentalFlags], the value from
/// [defaultExperimentalFlags] is always returned.
bool isExperimentEnabled(ExperimentalFlag flag,
- {Map<ExperimentalFlag, bool> explicitExperimentalFlags,
- Map<ExperimentalFlag, bool> defaultExperimentFlagsForTesting}) {
+ {Map<ExperimentalFlag, bool>? explicitExperimentalFlags,
+ Map<ExperimentalFlag, bool>? defaultExperimentFlagsForTesting}) {
assert(defaultExperimentalFlags.containsKey(flag),
"No default value for $flag.");
assert(expiredExperimentalFlags.containsKey(flag),
"No expired value for $flag.");
- if (expiredExperimentalFlags[flag]) {
- return defaultExperimentalFlags[flag];
+ if (expiredExperimentalFlags[flag]!) {
+ return defaultExperimentalFlags[flag]!;
}
- bool enabled;
+ bool? enabled;
if (explicitExperimentalFlags != null) {
enabled = explicitExperimentalFlags[flag];
}
@@ -70,7 +68,7 @@
enabled ??= defaultExperimentFlagsForTesting[flag];
}
enabled ??= defaultExperimentalFlags[flag];
- return enabled;
+ return enabled!;
}
/// Returns `true` if [flag] is enabled in the library with the [canonicalUri]
@@ -90,17 +88,17 @@
/// defines the identity of a library, for instance `dart:core`, `package:foo`,
/// or `file:///path/dir/file.dart`.
bool isExperimentEnabledInLibrary(ExperimentalFlag flag, Uri canonicalUri,
- {Map<ExperimentalFlag, bool> defaultExperimentFlagsForTesting,
- Map<ExperimentalFlag, bool> explicitExperimentalFlags,
- AllowedExperimentalFlags allowedExperimentalFlags}) {
+ {Map<ExperimentalFlag, bool>? defaultExperimentFlagsForTesting,
+ Map<ExperimentalFlag, bool>? explicitExperimentalFlags,
+ AllowedExperimentalFlags? allowedExperimentalFlags}) {
assert(defaultExperimentalFlags.containsKey(flag),
"No default value for $flag.");
assert(expiredExperimentalFlags.containsKey(flag),
"No expired value for $flag.");
- if (expiredExperimentalFlags[flag]) {
- return defaultExperimentalFlags[flag];
+ if (expiredExperimentalFlags[flag]!) {
+ return defaultExperimentalFlags[flag]!;
}
- bool enabled;
+ bool? enabled;
if (explicitExperimentalFlags != null) {
enabled = explicitExperimentalFlags[flag];
}
@@ -108,9 +106,9 @@
enabled ??= defaultExperimentFlagsForTesting[flag];
}
enabled ??= defaultExperimentalFlags[flag];
- if (!enabled) {
+ if (!enabled!) {
allowedExperimentalFlags ??= defaultAllowedExperimentalFlags;
- Set<ExperimentalFlag> allowedFlags;
+ Set<ExperimentalFlag>? allowedFlags;
if (canonicalUri.scheme == 'dart') {
allowedFlags = allowedExperimentalFlags.forSdkLibrary(canonicalUri.path);
} else if (canonicalUri.scheme == 'package') {
@@ -134,13 +132,13 @@
/// [canonicalUri].
Version getExperimentEnabledVersionInLibrary(ExperimentalFlag flag,
Uri canonicalUri, Map<ExperimentalFlag, bool> explicitExperimentalFlags,
- {AllowedExperimentalFlags allowedExperimentalFlags,
- Map<ExperimentalFlag, bool> defaultExperimentFlagsForTesting,
- Map<ExperimentalFlag, Version> experimentEnabledVersionForTesting,
- Map<ExperimentalFlag, Version> experimentReleasedVersionForTesting}) {
+ {AllowedExperimentalFlags? allowedExperimentalFlags,
+ Map<ExperimentalFlag, bool>? defaultExperimentFlagsForTesting,
+ Map<ExperimentalFlag, Version>? experimentEnabledVersionForTesting,
+ Map<ExperimentalFlag, Version>? experimentReleasedVersionForTesting}) {
allowedExperimentalFlags ??= defaultAllowedExperimentalFlags;
- Set<ExperimentalFlag> allowedFlags;
+ Set<ExperimentalFlag>? allowedFlags;
if (canonicalUri.scheme == 'dart') {
allowedFlags = allowedExperimentalFlags.forSdkLibrary(canonicalUri.path);
} else if (canonicalUri.scheme == 'package') {
@@ -153,8 +151,8 @@
}
allowedFlags = allowedExperimentalFlags.forPackage(packageName);
}
- Version version;
- bool enabledByDefault;
+ Version? version;
+ bool? enabledByDefault;
if (defaultExperimentFlagsForTesting != null) {
enabledByDefault = defaultExperimentFlagsForTesting[flag];
}
@@ -162,7 +160,7 @@
bool enabledExplicitly = explicitExperimentalFlags[flag] ?? false;
- if (!enabledByDefault ||
+ if (!enabledByDefault! ||
enabledExplicitly ||
(allowedFlags != null && allowedFlags.contains(flag))) {
// If the feature is not enabled by default or is enabled by the allowed
@@ -180,25 +178,25 @@
version ??= experimentEnabledVersion[flag];
}
assert(version != null, "No version for enabling $flag in $canonicalUri.");
- return version;
+ return version!;
}
bool isExperimentEnabledInLibraryByVersion(
ExperimentalFlag flag, Uri canonicalUri, Version version,
- {Map<ExperimentalFlag, bool> defaultExperimentFlagsForTesting,
- Map<ExperimentalFlag, bool> explicitExperimentalFlags,
- AllowedExperimentalFlags allowedExperimentalFlags,
- Map<ExperimentalFlag, Version> experimentEnabledVersionForTesting,
- Map<ExperimentalFlag, Version> experimentReleasedVersionForTesting}) {
+ {Map<ExperimentalFlag, bool>? defaultExperimentFlagsForTesting,
+ required Map<ExperimentalFlag, bool> explicitExperimentalFlags,
+ AllowedExperimentalFlags? allowedExperimentalFlags,
+ Map<ExperimentalFlag, Version>? experimentEnabledVersionForTesting,
+ Map<ExperimentalFlag, Version>? experimentReleasedVersionForTesting}) {
assert(defaultExperimentalFlags.containsKey(flag),
"No default value for $flag.");
assert(expiredExperimentalFlags.containsKey(flag),
"No expired value for $flag.");
- if (expiredExperimentalFlags[flag]) {
- return defaultExperimentalFlags[flag];
+ if (expiredExperimentalFlags[flag]!) {
+ return defaultExperimentalFlags[flag]!;
}
- bool enabledByDefault;
+ bool? enabledByDefault;
if (defaultExperimentFlagsForTesting != null) {
enabledByDefault = defaultExperimentFlagsForTesting[flag];
}
@@ -208,7 +206,7 @@
allowedExperimentalFlags ??= defaultAllowedExperimentalFlags;
- Set<ExperimentalFlag> allowedFlags;
+ Set<ExperimentalFlag>? allowedFlags;
bool enabledByAllowed = false;
if (canonicalUri.scheme == 'dart') {
allowedFlags = allowedExperimentalFlags.forSdkLibrary(canonicalUri.path);
@@ -226,14 +224,14 @@
enabledByAllowed = allowedFlags.contains(flag);
}
- if (enabledByDefault || enabledExplicitly || enabledByAllowed) {
+ if (enabledByDefault! || enabledExplicitly || enabledByAllowed) {
// The feature is enabled depending on the library language version.
- Version enabledVersion;
+ Version? enabledVersion;
if (!enabledByDefault || enabledExplicitly || enabledByAllowed) {
// If the feature is not enabled by default or is enabled by the allowed
// list, use the experiment release version.
if (experimentReleasedVersionForTesting != null) {
- enabledVersion = experimentReleasedVersionForTesting[flag];
+ enabledVersion = experimentReleasedVersionForTesting[flag]!;
}
enabledVersion ??= experimentReleasedVersion[flag];
} else {
@@ -244,7 +242,7 @@
}
enabledVersion ??= experimentEnabledVersion[flag];
}
- return version >= enabledVersion;
+ return version >= enabledVersion!;
} else {
// The feature is not enabled, regardless of library language version.
return false;
diff --git a/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart b/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart
index af04e106..42d985f 100644
--- a/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart
+++ b/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart
@@ -2,8 +2,6 @@
// 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.
-// @dart = 2.9
-
// NOTE: THIS FILE IS GENERATED. DO NOT EDIT.
//
// Instead modify 'tools/experimental_features.yaml' and run
@@ -44,7 +42,7 @@
const Version enableValueClassVersion = const Version(2, 14);
const Version enableVarianceVersion = const Version(2, 14);
-ExperimentalFlag parseExperimentalFlag(String flag) {
+ExperimentalFlag? parseExperimentalFlag(String flag) {
switch (flag) {
case "alternative-invalidation-strategy":
return ExperimentalFlag.alternativeInvalidationStrategy;
diff --git a/pkg/front_end/lib/src/base/processed_options.dart b/pkg/front_end/lib/src/base/processed_options.dart
index 04951b8..60c4162 100644
--- a/pkg/front_end/lib/src/base/processed_options.dart
+++ b/pkg/front_end/lib/src/base/processed_options.dart
@@ -362,11 +362,7 @@
Target get target =>
_target ??= _raw.target ?? new NoneTarget(new TargetFlags());
- /// Returns `true` if the [flag] is enabled globally.
- ///
- /// This is `true` either if the [flag] is passed through an explicit
- /// `--enable-experiment` option or if the [flag] is expired and on by
- /// default.
+ /// Returns `true` if the [flag] is enabled globally by default.
bool isExperimentEnabledByDefault(flags.ExperimentalFlag flag) {
return flags.isExperimentEnabled(flag,
defaultExperimentFlagsForTesting:
@@ -385,22 +381,29 @@
_raw.defaultExperimentFlagsForTesting);
}
- /// Returns `true` if the [flag] is enabled in the library with the given
- /// [importUri].
+ /// Returns `true` if the experiment with the given [flag] is enabled either
+ /// explicitly or implicitly for the library with the given [importUri].
///
- /// This is `true` either if the [flag] is enabled globally as defined
- /// by [isExperimentEnabledGlobally] or is explicitly enabled through
- /// the 'allowed_experiments.json' file for this library.
+ /// Note that the library can still opt out of the experiment by having a
+ /// lower language version than required for the experiment. See
+ /// [getExperimentEnabledVersionInLibrary].
bool isExperimentEnabledInLibrary(
flags.ExperimentalFlag flag, Uri importUri) {
return _raw.isExperimentEnabledInLibrary(flag, importUri);
}
+ /// Returns the minimum language version needed for a library with the given
+ /// [importUri] to opt in to the experiment with the given [flag].
+ ///
+ /// Note that the experiment might not be enabled at all for the library, as
+ /// computed by [isExperimentEnabledInLibrary].
Version getExperimentEnabledVersionInLibrary(
flags.ExperimentalFlag flag, Uri importUri) {
return _raw.getExperimentEnabledVersionInLibrary(flag, importUri);
}
+ /// Return `true` if the experiment with the given [flag] is enabled for the
+ /// library with the given [importUri] and language [version].
bool isExperimentEnabledInLibraryByVersion(
flags.ExperimentalFlag flag, Uri importUri, Version version) {
return _raw.isExperimentEnabledInLibraryByVersion(flag, importUri, version);
diff --git a/pkg/front_end/test/fasta/types/kernel_type_parser_test.dart b/pkg/front_end/test/fasta/types/kernel_type_parser_test.dart
index 6b31ffd..8ccfba3 100644
--- a/pkg/front_end/test/fasta/types/kernel_type_parser_test.dart
+++ b/pkg/front_end/test/fasta/types/kernel_type_parser_test.dart
@@ -34,6 +34,10 @@
class Sub extends Super;
class FBound<T extends FBound<T>>;
class MixinApplication extends Object with FBound<MixinApplication>;
+class ExtendedClass;
+class ExtendedGenericClass<X>;
+extension Extension on ExtendedClass;
+extension GenericExtension<Y> on ExtendedGenericClass<Y>;
""";
const String expectedSdk = """
@@ -81,6 +85,14 @@
}
class MixinApplication = self::Object with self::FBound<self::MixinApplication> {
}
+class ExtendedClass extends self::Object {
+}
+class ExtendedGenericClass<X extends self::Object? = dynamic> extends self::Object {
+}
+extension Extension on self::ExtendedClass {
+}
+extension GenericExtension<Y extends self::Object? = dynamic> on self::ExtendedGenericClass<Y%> {
+}
""";
Component parseSdk(Uri uri, TypeParserEnvironment environment) {
diff --git a/pkg/front_end/tool/_fasta/generate_experimental_flags.dart b/pkg/front_end/tool/_fasta/generate_experimental_flags.dart
index c3ec736..cd96105 100644
--- a/pkg/front_end/tool/_fasta/generate_experimental_flags.dart
+++ b/pkg/front_end/tool/_fasta/generate_experimental_flags.dart
@@ -97,8 +97,6 @@
// 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.
-// @dart = 2.9
-
// NOTE: THIS FILE IS GENERATED. DO NOT EDIT.
//
// Instead modify 'tools/experimental_features.yaml' and run
@@ -154,7 +152,7 @@
sb.write('''
-ExperimentalFlag parseExperimentalFlag(String flag) {
+ExperimentalFlag? parseExperimentalFlag(String flag) {
switch (flag) {
''');
for (String key in keys) {
diff --git a/pkg/kernel/lib/testing/type_parser.dart b/pkg/kernel/lib/testing/type_parser.dart
index 4b935b4e..45ffeab 100644
--- a/pkg/kernel/lib/testing/type_parser.dart
+++ b/pkg/kernel/lib/testing/type_parser.dart
@@ -123,6 +123,32 @@
}
}
+class ParsedExtension extends ParsedDeclaration {
+ final List<ParsedTypeVariable> typeVariables;
+ final ParsedInterfaceType onType;
+
+ ParsedExtension(String name, this.typeVariables, this.onType) : super(name);
+
+ String toString() {
+ StringBuffer sb = new StringBuffer();
+ sb.write("extension ");
+ sb.write(name);
+ if (typeVariables.isNotEmpty) {
+ sb.write("<");
+ sb.writeAll(typeVariables, ", ");
+ sb.write(">");
+ }
+ sb.write(" on ");
+ sb.write(onType);
+ sb.write(";");
+ return "$sb";
+ }
+
+ R accept<R, A>(Visitor<R, A> visitor, [A a]) {
+ return visitor.visitExtension(this, a);
+ }
+}
+
class ParsedTypedef extends ParsedDeclaration {
final List<ParsedTypeVariable> typeVariables;
@@ -347,6 +373,7 @@
ParsedType parseType() {
if (optional("class")) return parseClass();
if (optional("typedef")) return parseTypedef();
+ if (optional("extension")) return parseExtension();
List<ParsedType> results = <ParsedType>[];
do {
ParsedType type;
@@ -494,6 +521,16 @@
name, typeVariables, supertype, mixedInType, interfaces, callableType);
}
+ ParsedExtension parseExtension() {
+ expect("extension");
+ String name = parseName();
+ List<ParsedTypeVariable> typeVariables = parseTypeVariablesOpt();
+ expect("on");
+ ParsedType onType = parseType();
+ expect(";");
+ return new ParsedExtension(name, typeVariables, onType);
+ }
+
/// This parses a general typedef on this form:
///
/// typedef <name> <type-variables-opt> <type> ;
@@ -628,6 +665,10 @@
return DefaultAction.perform<R, A>(this, node, a);
}
+ R visitExtension(ParsedExtension node, A a) {
+ return DefaultAction.perform<R, A>(this, node, a);
+ }
+
R visitTypedef(ParsedTypedef node, A a) {
return DefaultAction.perform<R, A>(this, node, a);
}
diff --git a/pkg/kernel/lib/testing/type_parser_environment.dart b/pkg/kernel/lib/testing/type_parser_environment.dart
index fcc984c..262ae20 100644
--- a/pkg/kernel/lib/testing/type_parser_environment.dart
+++ b/pkg/kernel/lib/testing/type_parser_environment.dart
@@ -4,30 +4,7 @@
// @dart = 2.9
-import "package:kernel/ast.dart"
- show
- Class,
- Component,
- DartType,
- DynamicType,
- FunctionType,
- FutureOrType,
- InterfaceType,
- InvalidType,
- Library,
- NamedType,
- NeverType,
- Node,
- NullType,
- Nullability,
- Supertype,
- TreeNode,
- TypeParameter,
- TypeParameterType,
- Typedef,
- TypedefType,
- VoidType,
- setParents;
+import "package:kernel/ast.dart" hide Visitor;
import 'package:kernel/core_types.dart' show CoreTypes;
@@ -78,6 +55,13 @@
new Class(fileUri: fileUri, name: name)
..typeParameters.addAll(new List<TypeParameter>.filled(
type.typeVariables.length, null)));
+ } else if (type is ParsedExtension) {
+ String name = type.name;
+ environment._registerDeclaration(
+ name,
+ new Extension(fileUri: fileUri, name: name)
+ ..typeParameters.addAll(new List<TypeParameter>.filled(
+ type.typeVariables.length, null)));
}
}
for (ParsedType type in types) {
@@ -86,6 +70,8 @@
library.addClass(node);
} else if (node is Typedef) {
library.addTypedef(node);
+ } else if (node is Extension) {
+ library.addExtension(node);
} else {
throw "Unsupported: $node";
}
@@ -381,6 +367,26 @@
return cls;
}
+ Extension visitExtension(
+ ParsedExtension node, TypeParserEnvironment environment) {
+ String name = node.name;
+ Extension ext = environment.lookupDeclaration(name);
+ ParameterEnvironment parameterEnvironment =
+ computeTypeParameterEnvironment(node.typeVariables, environment);
+ List<TypeParameter> parameters = parameterEnvironment.parameters;
+ setParents(parameters, ext);
+ ext.typeParameters
+ ..clear()
+ ..addAll(parameters);
+ {
+ TypeParserEnvironment environment = parameterEnvironment.environment;
+ InterfaceType onType =
+ node.onType?.accept<Node, TypeParserEnvironment>(this, environment);
+ ext.onType = onType;
+ }
+ return ext;
+ }
+
Typedef visitTypedef(ParsedTypedef node, TypeParserEnvironment environment) {
String name = node.name;
Typedef def = environment._registerDeclaration(
diff --git a/tests/standalone/io/process_non_ascii_test.dart b/tests/standalone/io/process_non_ascii_test.dart
index fd08f06..8944eda 100644
--- a/tests/standalone/io/process_non_ascii_test.dart
+++ b/tests/standalone/io/process_non_ascii_test.dart
@@ -35,6 +35,11 @@
..add(script),
workingDirectory: nonAsciiDir.path,
environment: {'DART_CRASHPAD_HANDLER': ''}).then((result) {
+ if (result.exitCode != 0) {
+ print('exitCode:\n${result.exitCode}');
+ print('stdout:\n${result.stdout}');
+ print('stderr:\n${result.stderr}');
+ }
Expect.equals(0, result.exitCode);
tempDir.deleteSync(recursive: true);
asyncEnd();
diff --git a/tests/standalone_2/io/process_non_ascii_test.dart b/tests/standalone_2/io/process_non_ascii_test.dart
index fd08f06..8944eda 100644
--- a/tests/standalone_2/io/process_non_ascii_test.dart
+++ b/tests/standalone_2/io/process_non_ascii_test.dart
@@ -35,6 +35,11 @@
..add(script),
workingDirectory: nonAsciiDir.path,
environment: {'DART_CRASHPAD_HANDLER': ''}).then((result) {
+ if (result.exitCode != 0) {
+ print('exitCode:\n${result.exitCode}');
+ print('stdout:\n${result.stdout}');
+ print('stderr:\n${result.stderr}');
+ }
Expect.equals(0, result.exitCode);
tempDir.deleteSync(recursive: true);
asyncEnd();
diff --git a/tools/VERSION b/tools/VERSION
index 7713491..d059f6c 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 14
PATCH 0
-PRERELEASE 34
+PRERELEASE 35
PRERELEASE_PATCH 0
\ No newline at end of file