mirror of
https://github.com/dart-lang/sdk
synced 2024-10-03 00:29:50 +00:00
[cfe] Remove isNonNullableByDefault from various functions
Change-Id: I757b3be578f5ce6489482cdcaae45480ed20ce68 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/366660 Commit-Queue: Johnni Winther <johnniwinther@google.com> Reviewed-by: Chloe Stefantsova <cstefantsova@google.com>
This commit is contained in:
parent
eccaf152ee
commit
d8e6d26159
|
@ -67,8 +67,7 @@ class DelayedOverrideCheck implements DelayedCheck {
|
|||
void callback(Member interfaceMember, bool isSetter) {
|
||||
_classBuilder.checkOverride(membersBuilder.hierarchyBuilder.types,
|
||||
membersBuilder, declaredMember, interfaceMember, isSetter, callback,
|
||||
isInterfaceCheck: !_classBuilder.isMixinApplication,
|
||||
declaredNeedsLegacyErasure: false);
|
||||
isInterfaceCheck: !_classBuilder.isMixinApplication);
|
||||
}
|
||||
|
||||
for (ClassMember overriddenMember in _overriddenMembers) {
|
||||
|
|
|
@ -11,7 +11,6 @@ import 'package:kernel/core_types.dart';
|
|||
import 'package:kernel/names.dart' show equalsName;
|
||||
import 'package:kernel/reference_from_index.dart' show IndexedContainer;
|
||||
import 'package:kernel/src/bounds_checks.dart';
|
||||
import 'package:kernel/src/legacy_erasure.dart';
|
||||
import 'package:kernel/src/types.dart' show Types;
|
||||
import 'package:kernel/type_algebra.dart'
|
||||
show
|
||||
|
@ -1304,8 +1303,7 @@ class SourceClassBuilder extends ClassBuilderImpl
|
|||
Member interfaceMember,
|
||||
bool isSetter,
|
||||
callback(Member interfaceMember, bool isSetter),
|
||||
{required bool isInterfaceCheck,
|
||||
required bool declaredNeedsLegacyErasure}) {
|
||||
{required bool isInterfaceCheck}) {
|
||||
if (declaredMember == interfaceMember) {
|
||||
return;
|
||||
}
|
||||
|
@ -1319,33 +1317,18 @@ class SourceClassBuilder extends ClassBuilderImpl
|
|||
if (declaredMember.kind == interfaceMember.kind) {
|
||||
if (declaredMember.kind == ProcedureKind.Method ||
|
||||
declaredMember.kind == ProcedureKind.Operator) {
|
||||
bool seenCovariant = checkMethodOverride(
|
||||
types,
|
||||
declaredMember,
|
||||
interfaceMember,
|
||||
interfaceMemberOrigin,
|
||||
isInterfaceCheck,
|
||||
declaredNeedsLegacyErasure);
|
||||
bool seenCovariant = checkMethodOverride(types, declaredMember,
|
||||
interfaceMember, interfaceMemberOrigin, isInterfaceCheck);
|
||||
if (seenCovariant) {
|
||||
_handleSeenCovariant(
|
||||
memberHierarchy, interfaceMember, isSetter, callback);
|
||||
}
|
||||
} else if (declaredMember.kind == ProcedureKind.Getter) {
|
||||
checkGetterOverride(
|
||||
types,
|
||||
declaredMember,
|
||||
interfaceMember,
|
||||
interfaceMemberOrigin,
|
||||
isInterfaceCheck,
|
||||
declaredNeedsLegacyErasure);
|
||||
checkGetterOverride(types, declaredMember, interfaceMember,
|
||||
interfaceMemberOrigin, isInterfaceCheck);
|
||||
} else if (declaredMember.kind == ProcedureKind.Setter) {
|
||||
bool seenCovariant = checkSetterOverride(
|
||||
types,
|
||||
declaredMember,
|
||||
interfaceMember,
|
||||
interfaceMemberOrigin,
|
||||
isInterfaceCheck,
|
||||
declaredNeedsLegacyErasure);
|
||||
bool seenCovariant = checkSetterOverride(types, declaredMember,
|
||||
interfaceMember, interfaceMemberOrigin, isInterfaceCheck);
|
||||
if (seenCovariant) {
|
||||
_handleSeenCovariant(
|
||||
memberHierarchy, interfaceMember, isSetter, callback);
|
||||
|
@ -1371,22 +1354,12 @@ class SourceClassBuilder extends ClassBuilderImpl
|
|||
!interfaceMember.isConst) ||
|
||||
interfaceMember is Procedure && interfaceMember.isSetter;
|
||||
if (declaredMemberHasGetter && interfaceMemberHasGetter) {
|
||||
checkGetterOverride(
|
||||
types,
|
||||
declaredMember,
|
||||
interfaceMember,
|
||||
interfaceMemberOrigin,
|
||||
isInterfaceCheck,
|
||||
declaredNeedsLegacyErasure);
|
||||
checkGetterOverride(types, declaredMember, interfaceMember,
|
||||
interfaceMemberOrigin, isInterfaceCheck);
|
||||
}
|
||||
if (declaredMemberHasSetter && interfaceMemberHasSetter) {
|
||||
bool seenCovariant = checkSetterOverride(
|
||||
types,
|
||||
declaredMember,
|
||||
interfaceMember,
|
||||
interfaceMemberOrigin,
|
||||
isInterfaceCheck,
|
||||
declaredNeedsLegacyErasure);
|
||||
bool seenCovariant = checkSetterOverride(types, declaredMember,
|
||||
interfaceMember, interfaceMemberOrigin, isInterfaceCheck);
|
||||
if (seenCovariant) {
|
||||
_handleSeenCovariant(
|
||||
memberHierarchy, interfaceMember, isSetter, callback);
|
||||
|
@ -1411,8 +1384,7 @@ class SourceClassBuilder extends ClassBuilderImpl
|
|||
Member interfaceMemberOrigin,
|
||||
FunctionNode? declaredFunction,
|
||||
FunctionNode? interfaceFunction,
|
||||
bool isInterfaceCheck,
|
||||
bool declaredNeedsLegacyErasure) {
|
||||
bool isInterfaceCheck) {
|
||||
Substitution? interfaceSubstitution;
|
||||
if (interfaceMember.enclosingClass!.typeParameters.isNotEmpty) {
|
||||
Class enclosingClass = interfaceMember.enclosingClass!;
|
||||
|
@ -1480,9 +1452,6 @@ class SourceClassBuilder extends ClassBuilderImpl
|
|||
interfaceSubstitution.substituteType(interfaceBound);
|
||||
}
|
||||
DartType computedBound = substitution.substituteType(interfaceBound);
|
||||
if (declaredNeedsLegacyErasure) {
|
||||
declaredBound = legacyErasure(declaredBound);
|
||||
}
|
||||
if (!types
|
||||
.performNullabilityAwareMutualSubtypesCheck(
|
||||
declaredBound, computedBound)
|
||||
|
@ -1544,7 +1513,6 @@ class SourceClassBuilder extends ClassBuilderImpl
|
|||
bool isCovariantByDeclaration,
|
||||
VariableDeclaration? declaredParameter,
|
||||
bool isInterfaceCheck,
|
||||
bool declaredNeedsLegacyErasure,
|
||||
{bool asIfDeclaredParameter = false}) {
|
||||
if (interfaceSubstitution != null) {
|
||||
interfaceType = interfaceSubstitution.substituteType(interfaceType);
|
||||
|
@ -1552,9 +1520,6 @@ class SourceClassBuilder extends ClassBuilderImpl
|
|||
if (declaredSubstitution != null) {
|
||||
declaredType = declaredSubstitution.substituteType(declaredType);
|
||||
}
|
||||
if (declaredNeedsLegacyErasure) {
|
||||
declaredType = legacyErasure(declaredType);
|
||||
}
|
||||
|
||||
bool inParameter = declaredParameter != null || asIfDeclaredParameter;
|
||||
DartType subtype = inParameter ? interfaceType : declaredType;
|
||||
|
@ -1629,8 +1594,7 @@ class SourceClassBuilder extends ClassBuilderImpl
|
|||
Procedure declaredMember,
|
||||
Procedure interfaceMember,
|
||||
Member interfaceMemberOrigin,
|
||||
bool isInterfaceCheck,
|
||||
bool declaredNeedsLegacyErasure) {
|
||||
bool isInterfaceCheck) {
|
||||
assert(declaredMember.kind == interfaceMember.kind);
|
||||
assert(declaredMember.kind == ProcedureKind.Method ||
|
||||
declaredMember.kind == ProcedureKind.Operator);
|
||||
|
@ -1647,8 +1611,7 @@ class SourceClassBuilder extends ClassBuilderImpl
|
|||
interfaceMemberOrigin,
|
||||
declaredFunction,
|
||||
interfaceFunction,
|
||||
isInterfaceCheck,
|
||||
declaredNeedsLegacyErasure);
|
||||
isInterfaceCheck);
|
||||
|
||||
Substitution? declaredSubstitution =
|
||||
_computeDeclaredSubstitution(types, declaredMember);
|
||||
|
@ -1664,8 +1627,7 @@ class SourceClassBuilder extends ClassBuilderImpl
|
|||
interfaceFunction.returnType,
|
||||
/* isCovariantByDeclaration = */ false,
|
||||
/* declaredParameter = */ null,
|
||||
isInterfaceCheck,
|
||||
declaredNeedsLegacyErasure);
|
||||
isInterfaceCheck);
|
||||
if (declaredFunction.positionalParameters.length <
|
||||
interfaceFunction.positionalParameters.length) {
|
||||
reportInvalidOverride(
|
||||
|
@ -1743,8 +1705,7 @@ class SourceClassBuilder extends ClassBuilderImpl
|
|||
declaredParameter.isCovariantByDeclaration ||
|
||||
interfaceParameter.isCovariantByDeclaration,
|
||||
declaredParameter,
|
||||
isInterfaceCheck,
|
||||
declaredNeedsLegacyErasure);
|
||||
isInterfaceCheck);
|
||||
if (declaredParameter.isCovariantByDeclaration) seenCovariant = true;
|
||||
}
|
||||
if (declaredFunction.namedParameters.isEmpty &&
|
||||
|
@ -1823,10 +1784,8 @@ class SourceClassBuilder extends ClassBuilderImpl
|
|||
interfaceNamedParameters.current.type,
|
||||
declaredParameter.isCovariantByDeclaration,
|
||||
declaredParameter,
|
||||
isInterfaceCheck,
|
||||
declaredNeedsLegacyErasure);
|
||||
if (!declaredNeedsLegacyErasure &&
|
||||
declaredParameter.isRequired &&
|
||||
isInterfaceCheck);
|
||||
if (declaredParameter.isRequired &&
|
||||
!interfaceNamedParameters.current.isRequired) {
|
||||
reportInvalidOverride(
|
||||
isInterfaceCheck,
|
||||
|
@ -1861,8 +1820,7 @@ class SourceClassBuilder extends ClassBuilderImpl
|
|||
Member declaredMember,
|
||||
Member interfaceMember,
|
||||
Member interfaceMemberOrigin,
|
||||
bool isInterfaceCheck,
|
||||
bool declaredNeedsLegacyErasure) {
|
||||
bool isInterfaceCheck) {
|
||||
Substitution? interfaceSubstitution = _computeInterfaceSubstitution(
|
||||
types,
|
||||
declaredMember,
|
||||
|
@ -1872,8 +1830,7 @@ class SourceClassBuilder extends ClassBuilderImpl
|
|||
null,
|
||||
/* interfaceFunction = */
|
||||
null,
|
||||
isInterfaceCheck,
|
||||
declaredNeedsLegacyErasure);
|
||||
isInterfaceCheck);
|
||||
Substitution? declaredSubstitution =
|
||||
_computeDeclaredSubstitution(types, declaredMember);
|
||||
DartType declaredType = declaredMember.getterType;
|
||||
|
@ -1891,8 +1848,7 @@ class SourceClassBuilder extends ClassBuilderImpl
|
|||
false,
|
||||
/* declaredParameter = */
|
||||
null,
|
||||
isInterfaceCheck,
|
||||
declaredNeedsLegacyErasure);
|
||||
isInterfaceCheck);
|
||||
}
|
||||
|
||||
/// Checks whether [declaredMember] correctly overrides [interfaceMember].
|
||||
|
@ -1908,8 +1864,7 @@ class SourceClassBuilder extends ClassBuilderImpl
|
|||
Member declaredMember,
|
||||
Member interfaceMember,
|
||||
Member interfaceMemberOrigin,
|
||||
bool isInterfaceCheck,
|
||||
bool declaredNeedsLegacyErasure) {
|
||||
bool isInterfaceCheck) {
|
||||
Substitution? interfaceSubstitution = _computeInterfaceSubstitution(
|
||||
types,
|
||||
declaredMember,
|
||||
|
@ -1919,8 +1874,7 @@ class SourceClassBuilder extends ClassBuilderImpl
|
|||
null,
|
||||
/* interfaceFunction = */
|
||||
null,
|
||||
isInterfaceCheck,
|
||||
declaredNeedsLegacyErasure);
|
||||
isInterfaceCheck);
|
||||
Substitution? declaredSubstitution =
|
||||
_computeDeclaredSubstitution(types, declaredMember);
|
||||
DartType declaredType = declaredMember.setterType;
|
||||
|
@ -1947,7 +1901,6 @@ class SourceClassBuilder extends ClassBuilderImpl
|
|||
isCovariantByDeclaration,
|
||||
declaredParameter,
|
||||
isInterfaceCheck,
|
||||
declaredNeedsLegacyErasure,
|
||||
asIfDeclaredParameter: true);
|
||||
return isCovariantByDeclaration;
|
||||
}
|
||||
|
|
|
@ -156,8 +156,7 @@ class InferenceVisitorImpl extends InferenceVisitorBase
|
|||
visitor: this,
|
||||
helper: helper,
|
||||
uri: uriForInstrumentation,
|
||||
coreTypes: coreTypes,
|
||||
isNonNullableByDefault: true);
|
||||
coreTypes: coreTypes);
|
||||
|
||||
/// The innermost cascade whose expressions are currently being visited, or
|
||||
/// `null` if no cascade's expressions are currently being visited.
|
||||
|
|
|
@ -421,7 +421,6 @@ abstract class InferenceVisitorBase implements InferenceVisitor {
|
|||
_getPreciseTypeErrorTemplate(inferenceResult.expression);
|
||||
AssignabilityResult assignabilityResult = _computeAssignabilityKind(
|
||||
contextType, inferenceResult.inferredType,
|
||||
isNonNullableByDefault: true,
|
||||
isVoidAllowed: isVoidAllowed,
|
||||
isExpressionTypePrecise: preciseTypeErrorTemplate != null,
|
||||
coerceExpression: coerceExpression,
|
||||
|
@ -530,7 +529,6 @@ abstract class InferenceVisitorBase implements InferenceVisitor {
|
|||
_getPreciseTypeErrorTemplate(inferenceResult.expression);
|
||||
AssignabilityResult assignabilityResult = _computeAssignabilityKind(
|
||||
contextType, inferenceResult.inferredType,
|
||||
isNonNullableByDefault: true,
|
||||
isVoidAllowed: isVoidAllowed,
|
||||
isExpressionTypePrecise: preciseTypeErrorTemplate != null,
|
||||
coerceExpression: isCoercionAllowed,
|
||||
|
@ -806,8 +804,7 @@ abstract class InferenceVisitorBase implements InferenceVisitor {
|
|||
/// The computation is side-effect free.
|
||||
AssignabilityResult _computeAssignabilityKind(
|
||||
DartType contextType, DartType expressionType,
|
||||
{required bool isNonNullableByDefault,
|
||||
required bool isVoidAllowed,
|
||||
{required bool isVoidAllowed,
|
||||
required bool isExpressionTypePrecise,
|
||||
required bool coerceExpression,
|
||||
required int fileOffset,
|
||||
|
@ -851,7 +848,7 @@ abstract class InferenceVisitorBase implements InferenceVisitor {
|
|||
}
|
||||
if (shouldTearOff) {
|
||||
needsTearoff = true;
|
||||
if (isNonNullableByDefault && target.isNullable) {
|
||||
if (target.isNullable) {
|
||||
return const AssignabilityResult(
|
||||
AssignabilityKind.unassignableCantTearoff,
|
||||
needsTearOff: false);
|
||||
|
@ -878,23 +875,17 @@ abstract class InferenceVisitorBase implements InferenceVisitor {
|
|||
|
||||
IsSubtypeOf isDirectSubtypeResult = typeSchemaEnvironment
|
||||
.performNullabilityAwareSubtypeCheck(expressionType, contextType);
|
||||
bool isDirectlyAssignable = isNonNullableByDefault
|
||||
? isDirectSubtypeResult.isSubtypeWhenUsingNullabilities()
|
||||
: isDirectSubtypeResult.isSubtypeWhenIgnoringNullabilities();
|
||||
bool isDirectlyAssignable =
|
||||
isDirectSubtypeResult.isSubtypeWhenUsingNullabilities();
|
||||
if (isDirectlyAssignable) {
|
||||
return new AssignabilityResult(AssignabilityKind.assignable,
|
||||
needsTearOff: needsTearoff,
|
||||
implicitInstantiation: implicitInstantiation);
|
||||
}
|
||||
|
||||
bool isIndirectlyAssignable = isNonNullableByDefault
|
||||
? expressionType is DynamicType
|
||||
: typeSchemaEnvironment
|
||||
.performNullabilityAwareSubtypeCheck(contextType, expressionType)
|
||||
.isSubtypeWhenIgnoringNullabilities();
|
||||
bool isIndirectlyAssignable = expressionType is DynamicType;
|
||||
if (!isIndirectlyAssignable) {
|
||||
if (isNonNullableByDefault &&
|
||||
isDirectSubtypeResult.isSubtypeWhenIgnoringNullabilities()) {
|
||||
if (isDirectSubtypeResult.isSubtypeWhenIgnoringNullabilities()) {
|
||||
return new AssignabilityResult.withTypes(
|
||||
AssignabilityKind.unassignableNullability,
|
||||
isDirectSubtypeResult.subtype,
|
||||
|
|
|
@ -24,14 +24,11 @@ class SharedTypeAnalyzerErrors
|
|||
|
||||
final CoreTypes coreTypes;
|
||||
|
||||
final bool isNonNullableByDefault;
|
||||
|
||||
SharedTypeAnalyzerErrors(
|
||||
{required this.visitor,
|
||||
required this.helper,
|
||||
required this.uri,
|
||||
required this.coreTypes,
|
||||
required this.isNonNullableByDefault});
|
||||
required this.coreTypes});
|
||||
|
||||
@override
|
||||
void assertInErrorRecovery() {
|
||||
|
|
|
@ -346,10 +346,8 @@ abstract class TypeInferenceEngine {
|
|||
/// kernel objects.
|
||||
class TypeInferenceEngineImpl extends TypeInferenceEngine {
|
||||
final Benchmarker? benchmarker;
|
||||
final FunctionType unknownFunctionNonNullable =
|
||||
final FunctionType unknownFunction =
|
||||
new FunctionType(const [], const DynamicType(), Nullability.nonNullable);
|
||||
final FunctionType unknownFunctionLegacy =
|
||||
new FunctionType(const [], const DynamicType(), Nullability.legacy);
|
||||
|
||||
TypeInferenceEngineImpl(Instrumentation? instrumentation, this.benchmarker)
|
||||
: super(instrumentation);
|
||||
|
@ -366,28 +364,11 @@ class TypeInferenceEngineImpl extends TypeInferenceEngine {
|
|||
new AssignedVariables<TreeNode, VariableDeclaration>();
|
||||
}
|
||||
if (benchmarker == null) {
|
||||
return new TypeInferrerImpl(
|
||||
this,
|
||||
uri,
|
||||
false,
|
||||
thisType,
|
||||
library,
|
||||
assignedVariables,
|
||||
dataForTesting,
|
||||
unknownFunctionNonNullable,
|
||||
unknownFunctionLegacy);
|
||||
return new TypeInferrerImpl(this, uri, false, thisType, library,
|
||||
assignedVariables, dataForTesting, unknownFunction);
|
||||
}
|
||||
return new TypeInferrerImplBenchmarked(
|
||||
this,
|
||||
uri,
|
||||
false,
|
||||
thisType,
|
||||
library,
|
||||
assignedVariables,
|
||||
dataForTesting,
|
||||
benchmarker!,
|
||||
unknownFunctionNonNullable,
|
||||
unknownFunctionLegacy);
|
||||
return new TypeInferrerImplBenchmarked(this, uri, false, thisType, library,
|
||||
assignedVariables, dataForTesting, benchmarker!, unknownFunction);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -402,28 +383,11 @@ class TypeInferenceEngineImpl extends TypeInferenceEngine {
|
|||
new AssignedVariables<TreeNode, VariableDeclaration>();
|
||||
}
|
||||
if (benchmarker == null) {
|
||||
return new TypeInferrerImpl(
|
||||
this,
|
||||
uri,
|
||||
true,
|
||||
thisType,
|
||||
library,
|
||||
assignedVariables,
|
||||
dataForTesting,
|
||||
unknownFunctionNonNullable,
|
||||
unknownFunctionLegacy);
|
||||
return new TypeInferrerImpl(this, uri, true, thisType, library,
|
||||
assignedVariables, dataForTesting, unknownFunction);
|
||||
}
|
||||
return new TypeInferrerImplBenchmarked(
|
||||
this,
|
||||
uri,
|
||||
true,
|
||||
thisType,
|
||||
library,
|
||||
assignedVariables,
|
||||
dataForTesting,
|
||||
benchmarker!,
|
||||
unknownFunctionNonNullable,
|
||||
unknownFunctionLegacy);
|
||||
return new TypeInferrerImplBenchmarked(this, uri, true, thisType, library,
|
||||
assignedVariables, dataForTesting, benchmarker!, unknownFunction);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -140,10 +140,8 @@ class TypeInferrerImpl implements TypeInferrer {
|
|||
this.libraryBuilder,
|
||||
this.assignedVariables,
|
||||
this.dataForTesting,
|
||||
FunctionType unknownFunctionNonNullable,
|
||||
FunctionType unknownFunctionLegacy)
|
||||
: unknownFunction = unknownFunctionNonNullable,
|
||||
instrumentation = isTopLevel ? null : engine.instrumentation,
|
||||
this.unknownFunction)
|
||||
: instrumentation = isTopLevel ? null : engine.instrumentation,
|
||||
typeSchemaEnvironment = engine.typeSchemaEnvironment,
|
||||
operations = new OperationsCfe(engine.typeSchemaEnvironment,
|
||||
omittedNullabilityValue: libraryBuilder.nonNullable,
|
||||
|
@ -310,7 +308,6 @@ class TypeInferrerImplBenchmarked implements TypeInferrer {
|
|||
InferenceDataForTesting? dataForTesting,
|
||||
this.benchmarker,
|
||||
FunctionType unknownFunctionNonNullable,
|
||||
FunctionType unknownFunctionLegacy,
|
||||
) : impl = new TypeInferrerImpl(
|
||||
engine,
|
||||
uriForInstrumentation,
|
||||
|
@ -320,7 +317,6 @@ class TypeInferrerImplBenchmarked implements TypeInferrer {
|
|||
assignedVariables,
|
||||
dataForTesting,
|
||||
unknownFunctionNonNullable,
|
||||
unknownFunctionLegacy,
|
||||
);
|
||||
|
||||
@override
|
||||
|
|
|
@ -1253,8 +1253,8 @@ class FuzzCompiles
|
|||
compilationSetup.options.globalFeatures,
|
||||
builder.importUri,
|
||||
builder.library.languageVersion);
|
||||
fuzzAstVisitorSorter = new FuzzAstVisitorSorter(
|
||||
orgData, true, libFeatures.patterns.isEnabled);
|
||||
fuzzAstVisitorSorter =
|
||||
new FuzzAstVisitorSorter(orgData, libFeatures.patterns.isEnabled);
|
||||
} on FormatException catch (e, st) {
|
||||
// UTF-16-LE formatted test crashes `utf8.decode(bytes)` --- catch that
|
||||
return new Result<ComponentResult>(
|
||||
|
@ -1406,8 +1406,8 @@ class FuzzCompiles
|
|||
compilationSetup.options.globalFeatures,
|
||||
builder.importUri,
|
||||
builder.library.languageVersion);
|
||||
fuzzAstVisitorSorter = new FuzzAstVisitorSorter(
|
||||
orgData, true, libFeatures.patterns.isEnabled);
|
||||
fuzzAstVisitorSorter =
|
||||
new FuzzAstVisitorSorter(orgData, libFeatures.patterns.isEnabled);
|
||||
} on FormatException catch (e, st) {
|
||||
// UTF-16-LE formatted test crashes `utf8.decode(bytes)` --- catch that
|
||||
return new Result<ComponentResult>(
|
||||
|
@ -1647,16 +1647,15 @@ enum FuzzOriginalType {
|
|||
class FuzzAstVisitorSorter extends IgnoreSomeForCompatibilityAstVisitor {
|
||||
final Uint8List bytes;
|
||||
final String asString;
|
||||
final bool nnbd;
|
||||
final bool allowPatterns;
|
||||
|
||||
FuzzAstVisitorSorter(this.bytes, this.nnbd, this.allowPatterns)
|
||||
FuzzAstVisitorSorter(this.bytes, this.allowPatterns)
|
||||
: asString = utf8.decode(bytes) {
|
||||
CompilationUnitEnd ast = getAST(bytes,
|
||||
includeBody: false,
|
||||
includeComments: true,
|
||||
enableExtensionMethods: true,
|
||||
enableNonNullable: nnbd,
|
||||
enableNonNullable: true,
|
||||
allowPatterns: allowPatterns);
|
||||
ast.accept(this);
|
||||
|
||||
|
|
Loading…
Reference in a new issue