[cfe] Remove .isNonNullableByDefault from package:kernel

This removes the .isNonNullableByDefault properties and similar from
the AST nodes in package:kernel. NNBD is now always enabled so these
properties are trivial.

TEST=existing

Change-Id: I75ca0551ac4b5910ea63530dd0c9c2e68bd01aff
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/366320
Commit-Queue: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Chloe Stefantsova <cstefantsova@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Sigmund Cherem <sigmund@google.com>
This commit is contained in:
Johnni Winther
2024-05-15 08:31:38 +00:00
committed by Commit Queue
parent 4bf22f41f3
commit ae03b57cbb
68 changed files with 195 additions and 618 deletions
@@ -327,7 +327,6 @@ class LateLowering {
fileUri: fileUri,
fieldReference: field.fieldReference)
..fileOffset = fileOffset
..isNonNullableByDefault = true
// TODO(fishythefish,srujzs,johnniwinther): Also mark the getter/setter
// as extension/extension type members.
..isExtensionMember = field.isExtensionMember
@@ -347,8 +346,7 @@ class LateLowering {
isStatic: true,
fileUri: fileUri,
reference: field.getterReference)
..fileOffset = fileOffset
..isNonNullableByDefault = true;
..fileOffset = fileOffset;
VariableDeclaration setterValue =
VariableDeclaration('value', type: type, isSynthesized: true)
@@ -374,8 +372,7 @@ class LateLowering {
isStatic: true,
fileUri: fileUri,
reference: field.setterReference)
..fileOffset = fileOffset
..isNonNullableByDefault = true;
..fileOffset = fileOffset;
TreeNode parent = field.parent!;
if (parent is Class) {
@@ -419,7 +416,6 @@ class LateLowering {
fileUri: fileUri,
fieldReference: field.fieldReference)
..fileOffset = fileOffset
..isNonNullableByDefault = true
..isInternalImplementation = true;
InstanceGet fieldRead() => InstanceGet(InstanceAccessKind.Instance,
ThisExpression()..fileOffset = fileOffset, mangledName,
@@ -538,8 +534,7 @@ class LateLowering {
Procedure getter = Procedure(name, ProcedureKind.Getter,
FunctionNode(getterBody(), returnType: type)..fileOffset = fileOffset,
fileUri: fileUri, reference: field.getterReference)
..fileOffset = fileOffset
..isNonNullableByDefault = true;
..fileOffset = fileOffset;
// The initializer is copied from [field] to [getter] so we copy the
// transformer flags to reflect whether the getter contains super calls.
getter.transformerFlags = field.transformerFlags;
@@ -596,8 +591,7 @@ class LateLowering {
..fileOffset = fileOffset,
fileUri: fileUri,
reference: field.setterReference)
..fileOffset = fileOffset
..isNonNullableByDefault = true;
..fileOffset = fileOffset;
_copyAnnotations(setter, field);
enclosingClass.addProcedure(setter);
}
@@ -191,8 +191,7 @@ class WasmFfiNativeTransformer extends FfiNativeTransformer {
isExternal: true,
isStatic: true,
isSynthetic: true)
..fileOffset = node.fileOffset
..isNonNullableByDefault = true;
..fileOffset = node.fileOffset;
wasmImportProcedure.addAnnotation(wasmImportPragma);
currentLibrary.addProcedure(wasmImportProcedure);
+1 -2
View File
@@ -28,8 +28,7 @@ class MethodCollector {
{required bool isExternal}) {
final procedure = Procedure(
Name(name, _library), ProcedureKind.Method, function,
isStatic: true, isExternal: isExternal, fileUri: fileUri)
..isNonNullableByDefault = true;
isStatic: true, isExternal: isExternal, fileUri: fileUri);
_util.annotateProcedure(procedure, pragmaOptionString, type);
_library.addProcedure(procedure);
return procedure;
+1 -2
View File
@@ -193,8 +193,7 @@ class _WasmTransformer extends Transformer {
),
isExternal: true,
isSynthetic: true,
fileUri: cls.fileUri)
..isNonNullableByDefault = true;
fileUri: cls.fileUri);
cls.addProcedure(getTypeArguments);
}
return super.visitClass(cls);
+3 -13
View File
@@ -2533,11 +2533,8 @@ class ProgramCompiler extends ComputeOnceConstantVisitor<js_ast.Expression>
}
_currentUri = savedUri;
return runtimeStatement('defineLazy(#, { # }, #)', [
objExpr,
accessors,
js.boolean(!_currentLibrary!.isNonNullableByDefault)
]);
return runtimeStatement(
'defineLazy(#, { # }, #)', [objExpr, accessors, js.boolean(false)]);
}
js_ast.Fun _emitStaticFieldInitializer(Field field) {
@@ -3543,14 +3540,7 @@ class ProgramCompiler extends ComputeOnceConstantVisitor<js_ast.Expression>
//
// In the body of an `async`, `await` is generated simply as `yield`.
var gen = emitGeneratorFn((_) => []);
var returnType = _currentLibrary!.isNonNullableByDefault
? function.emittedValueType!
// Otherwise flatten the return type because futureValueType(T) is not
// defined for legacy libraries.
: _types.flatten(function
.computeThisFunctionType(_currentLibrary!.nonNullable,
reuseTypeParameters: true)
.returnType);
var returnType = function.emittedValueType!;
return js.call('#.async(#, #)',
[emitLibraryName(_coreTypes.asyncLibrary), _emitType(returnType), gen]);
}
@@ -2081,8 +2081,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
Procedure procedure = new Procedure(
new Name(syntheticProcedureName), ProcedureKind.Method, parameters,
isStatic: isStatic, fileUri: debugLibrary.fileUri)
..isNonNullableByDefault = true;
isStatic: isStatic, fileUri: debugLibrary.fileUri);
parameters.body = new ReturnStatement(compiledExpression)
..parent = parameters;
@@ -5248,9 +5248,8 @@ class BodyBuilder extends StackListenerImpl
DartType type = buildDartType(pop() as TypeBuilder, TypeUse.asType,
allowPotentiallyConstantType: true);
Expression expression = popForValue();
Expression asExpression = forest.createAsExpression(
offsetForToken(operator), expression, type,
forNonNullableByDefault: true);
Expression asExpression =
forest.createAsExpression(offsetForToken(operator), expression, type);
push(asExpression);
}
@@ -5292,7 +5291,6 @@ class BodyBuilder extends StackListenerImpl
Expression operand = popForValue();
Expression isExpression = forest.createIsExpression(
offsetForToken(isOperator), operand, type,
forNonNullableByDefault: true,
notFileOffset: not != null ? offsetForToken(not) : null);
push(isExpression);
}
@@ -289,8 +289,7 @@ abstract class CombinedMemberSignatureBase {
}
DartType canonicalMemberType =
_combinedMemberSignatureType = getMemberType(_canonicalMemberIndex!);
_containsNnbdTypes =
_getMember(_canonicalMemberIndex!).isNonNullableByDefault;
_containsNnbdTypes = true;
if (_mutualSubtypes != null) {
_combinedMemberSignatureType =
norm(_coreTypes, _combinedMemberSignatureType!);
@@ -511,7 +510,6 @@ abstract class CombinedMemberSignatureBase {
)
..fileStartOffset = startFileOffset
..fileOffset = fileOffset
..isNonNullableByDefault = containsNnbdTypes
..parent = declarationNode;
}
@@ -560,7 +558,6 @@ abstract class CombinedMemberSignatureBase {
)
..fileStartOffset = startFileOffset
..fileOffset = fileOffset
..isNonNullableByDefault = containsNnbdTypes
..parent = declarationNode;
}
@@ -650,7 +647,6 @@ abstract class CombinedMemberSignatureBase {
)
..fileStartOffset = startFileOffset
..fileOffset = fileOffset
..isNonNullableByDefault = containsNnbdTypes
..parent = declarationNode;
}
@@ -4871,11 +4871,8 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
final Constant constant = _evaluateSubexpression(node.operand);
if (constant is AbortConstant) return constant;
if (shouldBeUnevaluated) {
return unevaluated(
node,
new AsExpression(_wrap(constant), env.substituteType(node.type))
..isForNonNullableByDefault =
staticTypeContext.isNonNullableByDefault);
return unevaluated(node,
new AsExpression(_wrap(constant), env.substituteType(node.type)));
}
DartType? type = _evaluateDartType(node, node.type);
if (type == null) {
@@ -4895,8 +4892,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
return unevaluated(
node,
new IsExpression(_wrap(constant), env.substituteType(node.type))
..fileOffset = node.fileOffset
..flags = node.flags);
..fileOffset = node.fileOffset);
}
DartType? type = _evaluateDartType(node, node.type);
@@ -280,8 +280,7 @@ Procedure _createTearOffProcedure(SourceLibraryBuilder libraryBuilder,
fileUri: fileUri, isStatic: true, isSynthetic: true, reference: reference)
..fileStartOffset = fileOffset
..fileOffset = fileOffset
..fileEndOffset = fileOffset
..isNonNullableByDefault = true;
..fileEndOffset = fileOffset;
tearOffName.attachMember(tearOff);
return tearOff;
}
@@ -203,10 +203,9 @@ class Forest {
Expression createAsExpression(
int fileOffset, Expression expression, DartType type,
{required bool forNonNullableByDefault, bool forDynamic = false}) {
{bool forDynamic = false}) {
return new AsExpression(expression, type)
..fileOffset = fileOffset
..isForNonNullableByDefault = forNonNullableByDefault
..isForDynamic = forDynamic;
}
@@ -464,10 +463,9 @@ class Forest {
/// is non-null the test is negated the that file offset.
Expression createIsExpression(
int fileOffset, Expression operand, DartType type,
{required bool forNonNullableByDefault, int? notFileOffset}) {
{int? notFileOffset}) {
Expression result = new IsExpression(operand, type)
..fileOffset = fileOffset
..isForNonNullableByDefault = forNonNullableByDefault;
..fileOffset = fileOffset;
if (notFileOffset != null) {
result = createNot(notFileOffset, result);
}
@@ -467,7 +467,6 @@ class ForwardingNode {
result = new AsExpression(result, procedure.function.returnType)
..isTypeError = true
..isForDynamic = true
..isForNonNullableByDefault = true
..fileOffset = procedure.fileOffset;
}
}
@@ -5,7 +5,6 @@
library fasta.class_hierarchy_builder;
import 'package:kernel/ast.dart';
import 'package:kernel/src/legacy_erasure.dart';
import 'package:kernel/src/types.dart';
import 'package:kernel/type_algebra.dart';
import 'package:kernel/type_environment.dart';
@@ -64,13 +63,12 @@ class DelayedOverrideCheck implements DelayedCheck {
/// int? mixedInMethod(int? i, {int? j}) => i;
/// }
///
bool declaredNeedsLegacyErasure =
needsLegacyErasure(_classBuilder.cls, declaredMember.enclosingClass!);
void callback(Member interfaceMember, bool isSetter) {
_classBuilder.checkOverride(membersBuilder.hierarchyBuilder.types,
membersBuilder, declaredMember, interfaceMember, isSetter, callback,
isInterfaceCheck: !_classBuilder.isMixinApplication,
declaredNeedsLegacyErasure: declaredNeedsLegacyErasure);
declaredNeedsLegacyErasure: false);
}
for (ClassMember overriddenMember in _overriddenMembers) {
@@ -165,8 +165,7 @@ class BuilderMixinInferrer {
}
// Use instantiate to bounds.
List<DartType> bounds = calculateBounds(parameters, coreTypes.objectClass,
isNonNullableByDefault:
classNode.enclosingLibrary.isNonNullableByDefault);
isNonNullableByDefault: true);
for (int i = 0; i < mixedInType.typeArguments.length; ++i) {
mixedInType.typeArguments[i] = bounds[i];
}
@@ -1098,17 +1098,17 @@ class KernelTarget extends TargetImplementation {
SuperInitializer initializer = new SuperInitializer(
superConstructor, new Arguments(positional, named: named));
Constructor constructor = new Constructor(function,
name: superConstructor.name,
initializers: <Initializer>[initializer],
isSynthetic: true,
isConst: isConst,
reference: constructorReference,
fileUri: cls.fileUri)
..fileOffset = cls.fileOffset
// TODO(johnniwinther): Should we add file end offset to synthesized
// constructors?
//..fileEndOffset = cls.fileOffset
..isNonNullableByDefault = cls.enclosingLibrary.isNonNullableByDefault;
name: superConstructor.name,
initializers: <Initializer>[initializer],
isSynthetic: true,
isConst: isConst,
reference: constructorReference,
fileUri: cls.fileUri)
..fileOffset = cls.fileOffset
// TODO(johnniwinther): Should we add file end offset to synthesized
// constructors?
//..fileEndOffset = cls.fileOffset
;
DelayedDefaultValueCloner delayedDefaultValueCloner =
new DelayedDefaultValueCloner(superConstructor, constructor,
libraryBuilder: libraryBuilder);
@@ -1193,17 +1193,17 @@ class KernelTarget extends TargetImplementation {
SourceLibraryBuilder libraryBuilder = classBuilder.libraryBuilder;
Class enclosingClass = classBuilder.cls;
Constructor constructor = new Constructor(
new FunctionNode(new EmptyStatement(),
returnType: makeConstructorReturnType(enclosingClass)),
name: new Name(""),
isSynthetic: true,
reference: constructorReference,
fileUri: enclosingClass.fileUri)
..fileOffset = enclosingClass.fileOffset
// TODO(johnniwinther): Should we add file end offsets to synthesized
// constructors?
//..fileEndOffset = enclosingClass.fileOffset
..isNonNullableByDefault = true;
new FunctionNode(new EmptyStatement(),
returnType: makeConstructorReturnType(enclosingClass)),
name: new Name(""),
isSynthetic: true,
reference: constructorReference,
fileUri: enclosingClass.fileUri)
..fileOffset = enclosingClass.fileOffset
// TODO(johnniwinther): Should we add file end offsets to synthesized
// constructors?
//..fileEndOffset = enclosingClass.fileOffset
;
Procedure? constructorTearOff = createConstructorTearOffProcedure(
new MemberName(libraryBuilder.libraryName, constructorTearOffName('')),
libraryBuilder,
@@ -64,8 +64,7 @@ class LoadLibraryBuilder extends BuilderImpl {
isStatic: true,
reference: reference)
..fileStartOffset = charOffset
..fileOffset = charOffset
..isNonNullableByDefault = true;
..fileOffset = charOffset;
}
@override
@@ -135,7 +135,6 @@ Component createExpressionEvaluationComponent(Procedure procedure) {
Uri uri = new Uri(scheme: 'evaluate', path: 'source');
Library fakeLibrary = new Library(uri, fileUri: uri)
..setLanguageVersion(realLibrary.languageVersion)
..isNonNullableByDefault = realLibrary.isNonNullableByDefault
..nonNullableByDefaultCompiledMode =
realLibrary.nonNullableByDefaultCompiledMode;
@@ -1556,11 +1556,6 @@ class SourceClassBuilder extends ClassBuilderImpl
declaredType = legacyErasure(declaredType);
}
if (!declaredMember.isNonNullableByDefault &&
interfaceMember.isNonNullableByDefault) {
interfaceType = legacyErasure(interfaceType);
}
bool inParameter = declaredParameter != null || asIfDeclaredParameter;
DartType subtype = inParameter ? interfaceType : declaredType;
DartType supertype = inParameter ? declaredType : interfaceType;
@@ -1830,10 +1825,8 @@ class SourceClassBuilder extends ClassBuilderImpl
declaredParameter,
isInterfaceCheck,
declaredNeedsLegacyErasure);
if (declaredMember.isNonNullableByDefault &&
!declaredNeedsLegacyErasure &&
if (!declaredNeedsLegacyErasure &&
declaredParameter.isRequired &&
interfaceMember.isNonNullableByDefault &&
!interfaceNamedParameters.current.isRequired) {
reportInvalidOverride(
isInterfaceCheck,
@@ -430,8 +430,7 @@ class DeclaredSourceConstructorBuilder
isSynthetic: isSynthetic)
..startFileOffset = startCharOffset
..fileOffset = charOffset
..fileEndOffset = charEndOffset
..isNonNullableByDefault = true;
..fileEndOffset = charEndOffset;
nameScheme
.getConstructorMemberName(name, isTearOff: false)
.attachMember(_constructor);
@@ -1123,8 +1122,7 @@ class SourceExtensionTypeConstructorBuilder
dummyName, ProcedureKind.Method, new FunctionNode(null),
fileUri: compilationUnit.fileUri, reference: constructorReference)
..fileOffset = charOffset
..fileEndOffset = charEndOffset
..isNonNullableByDefault = true;
..fileEndOffset = charEndOffset;
nameScheme
.getConstructorMemberName(name, isTearOff: false)
.attachMember(_constructor);
@@ -97,7 +97,6 @@ class SourceFactoryBuilder extends SourceFunctionBuilderImpl {
..fileStartOffset = startCharOffset
..fileOffset = charOffset
..fileEndOffset = charEndOffset
..isNonNullableByDefault = true
..isExtensionTypeMember = nameScheme.isExtensionTypeMember;
nameScheme
.getConstructorMemberName(name, isTearOff: false)
@@ -689,8 +689,7 @@ class RegularFieldEncoding implements FieldEncoding {
.attachMember(_field);
_field
..fileOffset = charOffset
..fileEndOffset = charEndOffset
..isNonNullableByDefault = isNonNullableByDefault;
..fileEndOffset = charEndOffset;
}
@override
@@ -912,7 +911,6 @@ abstract class AbstractLateFieldEncoding implements FieldEncoding {
setterReference: fieldSetterReference)
..fileOffset = charOffset
..fileEndOffset = charEndOffset
..isNonNullableByDefault = true
..isInternalImplementation = true;
nameScheme
.getFieldMemberName(FieldNameType.Field, name, isSynthesized: true)
@@ -931,7 +929,6 @@ abstract class AbstractLateFieldEncoding implements FieldEncoding {
setterReference: lateIsSetSetterReference)
..fileOffset = charOffset
..fileEndOffset = charEndOffset
..isNonNullableByDefault = true
..isInternalImplementation = true;
nameScheme
.getFieldMemberName(FieldNameType.IsSetField, name,
@@ -948,8 +945,7 @@ abstract class AbstractLateFieldEncoding implements FieldEncoding {
fileUri: fileUri,
reference: lateGetterReference)
..fileOffset = charOffset
..fileEndOffset = charEndOffset
..isNonNullableByDefault = true;
..fileEndOffset = charEndOffset;
nameScheme
.getFieldMemberName(FieldNameType.Getter, name, isSynthesized: true)
.attachMember(_lateGetter);
@@ -1079,8 +1075,7 @@ abstract class AbstractLateFieldEncoding implements FieldEncoding {
fileUri: fileUri,
reference: reference)
..fileOffset = charOffset
..fileEndOffset = fileEndOffset
..isNonNullableByDefault = true;
..fileEndOffset = fileEndOffset;
}
Statement _createSetterBody(
@@ -1728,8 +1723,7 @@ class AbstractOrExternalFieldEncoding implements FieldEncoding {
fileUri: fileUri,
reference: getterReference)
..fileOffset = charOffset
..fileEndOffset = charEndOffset
..isNonNullableByDefault = isNonNullableByDefault;
..fileEndOffset = charEndOffset;
nameScheme
.getProcedureMemberName(ProcedureKind.Getter, name)
.attachMember(_getter);
@@ -1754,8 +1748,7 @@ class AbstractOrExternalFieldEncoding implements FieldEncoding {
fileUri: fileUri,
reference: setterReference)
..fileOffset = charOffset
..fileEndOffset = charEndOffset
..isNonNullableByDefault = isNonNullableByDefault;
..fileEndOffset = charEndOffset;
nameScheme
.getProcedureMemberName(ProcedureKind.Setter, name)
.attachMember(_setter!);
@@ -1765,8 +1758,7 @@ class AbstractOrExternalFieldEncoding implements FieldEncoding {
dummyName, ProcedureKind.Getter, new FunctionNode(null),
fileUri: fileUri, reference: getterReference)
..fileOffset = charOffset
..fileEndOffset = charEndOffset
..isNonNullableByDefault = isNonNullableByDefault;
..fileEndOffset = charEndOffset;
nameScheme
.getFieldMemberName(FieldNameType.Getter, name, isSynthesized: true)
.attachMember(_getter);
@@ -1785,8 +1777,7 @@ class AbstractOrExternalFieldEncoding implements FieldEncoding {
fileUri: fileUri,
reference: setterReference)
..fileOffset = charOffset
..fileEndOffset = charEndOffset
..isNonNullableByDefault = isNonNullableByDefault;
..fileEndOffset = charEndOffset;
nameScheme
.getFieldMemberName(FieldNameType.Setter, name, isSynthesized: true)
.attachMember(_setter!);
@@ -2028,8 +2019,7 @@ class RepresentationFieldEncoding implements FieldEncoding {
fileUri: fileUri, reference: getterReference)
..stubKind = ProcedureStubKind.RepresentationField
..fileOffset = charOffset
..fileEndOffset = charEndOffset
..isNonNullableByDefault = true;
..fileEndOffset = charEndOffset;
nameScheme
.getFieldMemberName(FieldNameType.RepresentationField, name,
isSynthesized: true)
@@ -418,7 +418,6 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
}
void _updateLibraryNNBDSettings() {
library.isNonNullableByDefault = true;
switch (loader.nnbdMode) {
case NnbdMode.Weak:
library.nonNullableByDefaultCompiledMode =
@@ -2259,25 +2258,12 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
// been reported.
} else {
bool isValid = typeEnvironment.isSubtypeOf(
getterType,
setterType,
library.isNonNullableByDefault
? SubtypeCheckMode.withNullabilities
: SubtypeCheckMode.ignoringNullabilities);
if (!isValid && !library.isNonNullableByDefault) {
// Allow assignability in legacy libraries.
isValid = typeEnvironment.isSubtypeOf(
setterType, getterType, SubtypeCheckMode.ignoringNullabilities);
}
getterType, setterType, SubtypeCheckMode.withNullabilities);
if (!isValid) {
String getterMemberName = getterBuilder.fullNameForErrors;
String setterMemberName = setterBuilder.fullNameForErrors;
Template<Message Function(DartType, String, DartType, String)>
template = library.isNonNullableByDefault
? templateInvalidGetterSetterType
: templateInvalidGetterSetterTypeLegacy;
addProblem(
template.withArguments(
templateInvalidGetterSetterType.withArguments(
getterType, getterMemberName, setterType, setterMemberName),
getterBuilder.charOffset,
getterBuilder.name.length,
@@ -4874,7 +4860,7 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
List<TypeArgumentIssue> issues = findTypeArgumentIssues(
type, typeEnvironment, SubtypeCheckMode.withNullabilities,
allowSuperBounded: allowSuperBounded,
isNonNullableByDefault: library.isNonNullableByDefault,
isNonNullableByDefault: true,
areGenericArgumentsAllowed: libraryFeatures.genericMetadata.isEnabled);
_reportTypeArgumentIssues(issues, fileUri, offset, inferred: inferred);
}
@@ -4928,7 +4914,7 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
typeEnvironment,
SubtypeCheckMode.withNullabilities,
bottomType,
isNonNullableByDefault: library.isNonNullableByDefault,
isNonNullableByDefault: true,
areGenericArgumentsAllowed: libraryFeatures.genericMetadata.isEnabled);
if (issues.isNotEmpty) {
DartType? targetReceiver;
@@ -5003,7 +4989,7 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
typeEnvironment,
SubtypeCheckMode.withNullabilities,
bottomType,
isNonNullableByDefault: library.isNonNullableByDefault,
isNonNullableByDefault: true,
areGenericArgumentsAllowed: libraryFeatures.genericMetadata.isEnabled);
_reportTypeArgumentIssues(issues, fileUri, offset,
typeArgumentsInfo: getTypeArgumentsInfo(arguments),
@@ -5031,7 +5017,7 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
typeEnvironment,
SubtypeCheckMode.withNullabilities,
bottomType,
isNonNullableByDefault: library.isNonNullableByDefault,
isNonNullableByDefault: true,
areGenericArgumentsAllowed: libraryFeatures.genericMetadata.isEnabled);
_reportTypeArgumentIssues(issues, fileUri, offset,
typeArgumentsInfo: getTypeArgumentsInfo(arguments),
@@ -5063,7 +5049,7 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
typeEnvironment,
SubtypeCheckMode.withNullabilities,
bottomType,
isNonNullableByDefault: library.isNonNullableByDefault,
isNonNullableByDefault: true,
areGenericArgumentsAllowed: libraryFeatures.genericMetadata.isEnabled);
_reportTypeArgumentIssues(issues, fileUri, offset,
targetReceiver: functionType,
@@ -114,8 +114,7 @@ class SourceProcedureBuilder extends SourceFunctionBuilderImpl
isSynthetic: isSynthetic)
..fileStartOffset = startCharOffset
..fileOffset = charOffset
..fileEndOffset = charEndOffset
..isNonNullableByDefault = true;
..fileEndOffset = charEndOffset;
nameScheme.getProcedureMemberName(kind, name).attachMember(_procedure);
this.asyncModifier = asyncModifier;
if ((isExtensionInstanceMember || isExtensionTypeInstanceMember) &&
@@ -126,8 +125,7 @@ class SourceProcedureBuilder extends SourceFunctionBuilderImpl
isExtensionMember: isExtensionInstanceMember,
isExtensionTypeMember: isExtensionTypeInstanceMember,
reference: _tearOffReference,
fileUri: fileUri)
..isNonNullableByDefault = true;
fileUri: fileUri);
nameScheme
.getProcedureMemberName(ProcedureKind.Getter, name)
.attachMember(_extensionTearOff!);
@@ -287,8 +287,7 @@ class _SyncClosureContext implements ClosureContext {
} else {
actualReturnedType = inferrer.typeSchemaEnvironment
.getStandardUpperBound(actualReturnedType, type,
isNonNullableByDefault:
inferrer.libraryBuilder.library.isNonNullableByDefault);
isNonNullableByDefault: true);
}
}
@@ -573,8 +572,7 @@ class _AsyncClosureContext implements ClosureContext {
} else {
inferredType = inferrer.typeSchemaEnvironment.getStandardUpperBound(
inferredType, unwrappedType,
isNonNullableByDefault:
inferrer.libraryBuilder.library.isNonNullableByDefault);
isNonNullableByDefault: true);
}
}
@@ -748,8 +746,7 @@ class _SyncStarClosureContext implements ClosureContext {
} else {
inferredElementType = inferrer.typeSchemaEnvironment
.getStandardUpperBound(inferredElementType, type,
isNonNullableByDefault:
inferrer.libraryBuilder.library.isNonNullableByDefault);
isNonNullableByDefault: true);
}
}
} else if (hasImplicitReturn) {
@@ -886,8 +883,7 @@ class _AsyncStarClosureContext implements ClosureContext {
} else {
inferredElementType = inferrer.typeSchemaEnvironment
.getStandardUpperBound(inferredElementType, elementType,
isNonNullableByDefault:
inferrer.libraryBuilder.library.isNonNullableByDefault);
isNonNullableByDefault: true);
}
}
} else if (hasImplicitReturn) {
@@ -599,7 +599,6 @@ class DelayedIsExpression extends AbstractDelayedExpression {
_operand.createExpression(typeEnvironment,
effects: effects, inCacheInitializer: inCacheInitializer),
_type,
forNonNullableByDefault: true,
fileOffset: fileOffset);
}
@@ -178,10 +178,8 @@ LogicalExpression createOrExpression(Expression left, Expression right,
/// Creates an is-test on [operand] against [type].
IsExpression createIsExpression(Expression operand, DartType type,
{required bool forNonNullableByDefault, required int fileOffset}) {
return new IsExpression(operand, type)
..fileOffset = fileOffset
..isForNonNullableByDefault = forNonNullableByDefault;
{required int fileOffset}) {
return new IsExpression(operand, type)..fileOffset = fileOffset;
}
/// Creates an as-cast on [operand] against [type].
@@ -192,7 +190,6 @@ AsExpression createAsExpression(Expression operand, DartType type,
required int fileOffset}) {
return new AsExpression(operand, type)
..fileOffset = fileOffset
..isForNonNullableByDefault = forNonNullableByDefault
..isUnchecked = isUnchecked
..isCovarianceCheck = isCovarianceCheck;
}
@@ -3762,7 +3762,6 @@ class InferenceVisitorImpl extends InferenceVisitorBase
assert(fileOffset != TreeNode.noOffset);
return new AsExpression(expression, type)
..isTypeError = true
..isForNonNullableByDefault = true
..fileOffset = fileOffset;
}
@@ -6276,7 +6275,6 @@ class InferenceVisitorImpl extends InferenceVisitorBase
binary = new AsExpression(binary, binaryType)
..isTypeError = true
..isCovarianceCheck = true
..isForNonNullableByDefault = true
..fileOffset = fileOffset;
}
break;
@@ -6395,7 +6393,6 @@ class InferenceVisitorImpl extends InferenceVisitorBase
unary = new AsExpression(unary, unaryType)
..isTypeError = true
..isCovarianceCheck = true
..isForNonNullableByDefault = true
..fileOffset = fileOffset;
}
break;
@@ -6538,7 +6535,6 @@ class InferenceVisitorImpl extends InferenceVisitorBase
read = new AsExpression(read, readType)
..isTypeError = true
..isCovarianceCheck = true
..isForNonNullableByDefault = true
..fileOffset = fileOffset;
}
break;
@@ -8194,8 +8190,6 @@ class InferenceVisitorImpl extends InferenceVisitorBase
thisType!, node.interfaceTarget,
hasNonObjectMemberAccess: true);
DartType writeContext = writeTarget.getSetterType(this);
writeContext = computeTypeFromSuperClass(
node.interfaceTarget.enclosingClass!, writeContext);
ExpressionInferenceResult rhsResult =
inferExpression(node.value, writeContext, isVoidAllowed: true);
rhsResult = ensureAssignableResult(writeContext, rhsResult,
@@ -8214,8 +8208,6 @@ class InferenceVisitorImpl extends InferenceVisitorBase
hasNonObjectMemberAccess: true)
: new ObjectAccessTarget.superMember(thisType!, node.interfaceTarget);
DartType writeContext = writeTarget.getSetterType(this);
writeContext = computeTypeFromSuperClass(
node.interfaceTarget.enclosingClass!, writeContext);
ExpressionInferenceResult rhsResult =
inferExpression(node.value, writeContext, isVoidAllowed: true);
rhsResult = ensureAssignableResult(writeContext, rhsResult,
@@ -8508,7 +8500,6 @@ class InferenceVisitorImpl extends InferenceVisitorBase
node.expression =
new AsExpression(node.expression, coreTypes.objectNonNullableRawType)
..isTypeError = true
..isForNonNullableByDefault = true
..fileOffset = node.expression.fileOffset
..parent = node;
}
@@ -17,7 +17,6 @@ import 'package:kernel/names.dart';
import 'package:kernel/src/bounds_checks.dart'
show calculateBounds, isGenericFunctionTypeOrAlias;
import 'package:kernel/src/future_value_type.dart';
import 'package:kernel/src/legacy_erasure.dart';
import 'package:kernel/type_algebra.dart';
import 'package:kernel/type_environment.dart';
@@ -452,7 +451,6 @@ abstract class InferenceVisitorBase implements InferenceVisitor {
Expression asExpression =
new AsExpression(expression, initialContextType)
..isTypeError = true
..isForNonNullableByDefault = true
..isForDynamic = expressionType is DynamicType
..fileOffset = fileOffset;
flowAnalysis.forwardExpression(asExpression, expression);
@@ -733,7 +731,6 @@ abstract class InferenceVisitorBase implements InferenceVisitor {
? const NeverType.nonNullable()
: contextType)
..isTypeError = true
..isForNonNullableByDefault = true
..fileOffset = expression.fileOffset;
if (contextType is! InvalidType && expressionType is! InvalidType) {
errorNode = helper.wrapInProblem(
@@ -1299,39 +1296,6 @@ abstract class InferenceVisitorBase implements InferenceVisitor {
return null;
}
/// Returns [type] as passed from [superClass] to the current class.
///
/// If a legacy class occurs between the current class and [superClass] then
/// [type] needs to be legacy erased. For instance
///
/// // Opt in:
/// class Super {
/// int extendedMethod(int i, {required int j}) => i;
/// }
/// class Mixin {
/// int mixedInMethod(int i, {required int j}) => i;
/// }
/// // Opt out:
/// class Legacy extends Super with Mixin {}
/// // Opt in:
/// class Class extends Legacy {
/// test() {
/// // Ok to call `Legacy.extendedMethod` since its type is
/// // `int* Function(int*, {int* j})`.
/// super.extendedMethod(null);
/// // Ok to call `Legacy.mixedInMethod` since its type is
/// // `int* Function(int*, {int* j})`.
/// super.mixedInMethod(null);
/// }
/// }
///
DartType computeTypeFromSuperClass(Class superClass, DartType type) {
if (needsLegacyErasure(thisType!.classNode, superClass)) {
type = legacyErasure(type);
}
return type;
}
/// Returns the getter type of [interfaceMember] on a receiver of type
/// [receiverType].
///
@@ -1434,8 +1398,7 @@ abstract class InferenceVisitorBase implements InferenceVisitor {
DartType inferDeclarationType(DartType initializerType,
{bool forSyntheticVariable = false}) {
if (forSyntheticVariable) {
return normalizeNullabilityInLibrary(
initializerType, libraryBuilder.library);
return initializerType;
} else if (initializerType is NullType) {
// If the initializer type is Null or bottom, the inferred type is
// dynamic.
@@ -1921,10 +1884,7 @@ abstract class InferenceVisitorBase implements InferenceVisitor {
calleeType = replaceReturnType(
calleeType,
typeSchemaEnvironment.getTypeOfSpecialCasedTernaryOperator(
receiverType!,
actualTypes[0],
actualTypes[1],
libraryBuilder.library));
receiverType!, actualTypes[0], actualTypes[1]));
}
}
@@ -2690,7 +2650,6 @@ abstract class InferenceVisitorBase implements InferenceVisitor {
replacement = new AsExpression(expression, result.inferredType)
..isTypeError = true
..isCovarianceCheck = true
..isForNonNullableByDefault = true
..fileOffset = fileOffset;
if (instrumentation != null) {
int offset =
@@ -2821,7 +2780,6 @@ abstract class InferenceVisitorBase implements InferenceVisitor {
propertyGet = new AsExpression(propertyGet, calleeType)
..isTypeError = true
..isCovarianceCheck = true
..isForNonNullableByDefault = true
..fileOffset = fileOffset;
if (instrumentation != null) {
int offset =
@@ -3010,7 +2968,6 @@ abstract class InferenceVisitorBase implements InferenceVisitor {
propertyGet = new AsExpression(propertyGet, calleeType)
..isTypeError = true
..isCovarianceCheck = true
..isForNonNullableByDefault = true
..fileOffset = fileOffset;
if (instrumentation != null) {
int offset =
@@ -3333,7 +3290,6 @@ abstract class InferenceVisitorBase implements InferenceVisitor {
type) ??
type;
Expression read = new AsExpression(receiver, type)
..isForNonNullableByDefault = true
..isUnchecked = true
..fileOffset = fileOffset;
ExpressionInferenceResult readResult =
@@ -3444,11 +3400,8 @@ abstract class InferenceVisitorBase implements InferenceVisitor {
DartType receiverType = thisType!;
bool isSpecialCasedBinaryOperator =
target.isSpecialCasedBinaryOperator(this);
DartType calleeType = computeTypeFromSuperClass(
procedure.enclosingClass!, target.getGetterType(this));
FunctionType functionType = computeTypeFromSuperClass(
procedure.enclosingClass!, target.getFunctionType(this))
as FunctionType;
DartType calleeType = target.getGetterType(this);
FunctionType functionType = target.getFunctionType(this);
if (methodName == equalsName &&
functionType.positionalParameters.length == 1) {
// operator == always allows nullable arguments.
@@ -3480,8 +3433,7 @@ abstract class InferenceVisitorBase implements InferenceVisitor {
? new ObjectAccessTarget.interfaceMember(thisType!, member,
hasNonObjectMemberAccess: true)
: new ObjectAccessTarget.superMember(thisType!, member);
DartType inferredType = computeTypeFromSuperClass(
member.enclosingClass!, readTarget.getGetterType(this));
DartType inferredType = readTarget.getGetterType(this);
if (member is Procedure && member.kind == ProcedureKind.Method) {
return instantiateTearOff(inferredType, typeContext, expression);
}
@@ -4068,7 +4020,6 @@ abstract class InferenceVisitorBase implements InferenceVisitor {
read = new AsExpression(read, readType)
..isTypeError = true
..isCovarianceCheck = true
..isForNonNullableByDefault = true
..fileOffset = fileOffset;
}
if (member is Procedure && member.kind == ProcedureKind.Method) {
@@ -4090,7 +4041,6 @@ abstract class InferenceVisitorBase implements InferenceVisitor {
case ObjectAccessTargetKind.extensionTypeRepresentation:
case ObjectAccessTargetKind.nullableExtensionTypeRepresentation:
read = new AsExpression(receiver, readType)
..isForNonNullableByDefault = true
..isUnchecked = true
..fileOffset = fileOffset;
break;
@@ -4098,7 +4048,6 @@ abstract class InferenceVisitorBase implements InferenceVisitor {
if (promotedReadType != null) {
read = new AsExpression(read, promotedReadType)
..isForNonNullableByDefault = true
..isUnchecked = true
..fileOffset = fileOffset;
readType = promotedReadType;
@@ -43,24 +43,6 @@ DartType demoteTypeInLibrary(DartType type,
}
}
/// Returns [type] normalized to the known nullabilities of [library].
///
/// If [library] is non-nullable by default [type] returned (non-nullable
/// libraries can handle all kinds of nullability). Otherwise all
/// non-legacy types have been replaced with legacy types (legacy libraries
/// can only handle legacy types).
DartType normalizeNullabilityInLibrary(DartType type, Library library) {
if (library.isNonNullableByDefault) {
return type;
} else {
return type.accept1(
const _DemotionNullabilityNormalization(
demoteTypeVariables: false, forNonNullableByDefault: false),
Variance.covariant) ??
type;
}
}
/// Visitor that replaces all promoted type variables the type variable itself
/// and normalizes the type nullabilities.
///
@@ -447,15 +447,8 @@ String procedureType(Procedure procedure) {
return typeToText(procedure.function.positionalParameters.single.type,
TypeRepresentation.analyzerNonNullableByDefault);
} else {
Nullability functionTypeNullability;
if (procedure.enclosingLibrary.isNonNullableByDefault) {
functionTypeNullability = procedure.enclosingLibrary.nonNullable;
} else {
// We don't create a member signature when the member is just
// a substitution. We should still take the nullability to be
// legacy, though.
functionTypeNullability = procedure.enclosingLibrary.nonNullable;
}
Nullability functionTypeNullability =
procedure.enclosingLibrary.nonNullable;
return typeToText(
procedure.function.computeThisFunctionType(functionTypeNullability),
TypeRepresentation.analyzerNonNullableByDefault);
@@ -396,7 +396,7 @@ class TypeConstraintGathererTest {
coreTypes, new ClassHierarchy(component, coreTypes));
var typeConstraintGatherer = new TypeConstraintGatherer(
typeSchemaEnvironment, typeParameterNodesToConstrain,
isNonNullableByDefault: testLibrary.isNonNullableByDefault,
isNonNullableByDefault: true,
typeOperations: new OperationsCfe(typeSchemaEnvironment,
omittedNullabilityValue: Nullability.nonNullable,
fieldNonPromotabilityInfo: new FieldNonPromotabilityInfo(
@@ -407,7 +407,7 @@ class TypeConstraintGathererTest {
inferenceResultForTesting: null);
var constraints = tryConstrain(typeConstraintGatherer, a, b)
? typeConstraintGatherer.computeConstraints(
isNonNullableByDefault: clientLibrary.isNonNullableByDefault)
isNonNullableByDefault: true)
: null;
if (expectedConstraints == null) {
expect(constraints, isNull);
@@ -304,7 +304,7 @@ class TypeConstraintGathererTest {
coreTypes, new ClassHierarchy(component, coreTypes));
var typeConstraintGatherer = new TypeConstraintGatherer(
typeSchemaEnvironment, typeParameterNodesToConstrain,
isNonNullableByDefault: testLibrary.isNonNullableByDefault,
isNonNullableByDefault: true,
typeOperations: new OperationsCfe(typeSchemaEnvironment,
omittedNullabilityValue: Nullability.nonNullable,
fieldNonPromotabilityInfo: new FieldNonPromotabilityInfo(
@@ -315,7 +315,7 @@ class TypeConstraintGathererTest {
inferenceResultForTesting: null);
var constraints = tryConstrain(typeConstraintGatherer, a, b)
? typeConstraintGatherer.computeConstraints(
isNonNullableByDefault: clientLibrary.isNonNullableByDefault)
isNonNullableByDefault: true)
: null;
if (expectedConstraints == null) {
expect(constraints, isNull);
@@ -2013,7 +2013,7 @@ class TypeSchemaEnvironmentTest extends TypeSchemaEnvironmentTestBase {
}
expect(
typeSchemaEnvironment.getStandardUpperBound(dartType1, dartType2,
isNonNullableByDefault: testLibrary.isNonNullableByDefault),
isNonNullableByDefault: true),
parseType(upperBound));
});
}
@@ -554,7 +554,7 @@ class TypeSchemaEnvironmentTest extends TypeSchemaEnvironmentTestBase {
expect(
typeSchemaEnvironment.getStandardUpperBound(
parseType(type1), parseType(type2),
isNonNullableByDefault: testLibrary.isNonNullableByDefault),
isNonNullableByDefault: false),
parseType(upperBound));
});
}
@@ -56,7 +56,7 @@ abstract class LegacyUpperBoundTest {
void checkLegacyUp(String type1, String type2, String expectedType) {
checkLegacyUpTypes(
env.parseType(type1), env.parseType(type2), env.parseType(expectedType),
isNonNullableByDefault: testLibrary.isNonNullableByDefault);
isNonNullableByDefault: true);
}
Future<void> test() {
@@ -97,7 +97,8 @@ class InheritanceDataExtractor extends CfeDataExtractor<String> {
@override
String computeLibraryValue(Id id, Library node) {
return 'nnbd=${node.isNonNullableByDefault}';
// TODO(johnniwinther): Remove this.
return 'nnbd=true';
}
@override
@@ -126,8 +127,7 @@ class InheritanceDataExtractor extends CfeDataExtractor<String> {
InterfaceType supertype = _hierarchy.getInterfaceTypeAsInstanceOfClass(
_coreTypes.thisInterfaceType(node, node.enclosingLibrary.nonNullable),
member.enclosingClass!,
isNonNullableByDefault:
node.enclosingLibrary.isNonNullableByDefault)!;
isNonNullableByDefault: true)!;
Substitution substitution = Substitution.fromInterfaceType(supertype);
DartType? type;
if (member is Procedure) {
@@ -137,15 +137,8 @@ class InheritanceDataExtractor extends CfeDataExtractor<String> {
type = substitution
.substituteType(member.function.positionalParameters.single.type);
} else {
Nullability functionTypeNullability;
if (node.enclosingLibrary.isNonNullableByDefault) {
functionTypeNullability = member.enclosingLibrary.nonNullable;
} else {
// We don't create a member signature when the member is just
// a substitution. We should still take the nullability to be
// legacy, though.
functionTypeNullability = node.enclosingLibrary.nonNullable;
}
Nullability functionTypeNullability =
member.enclosingLibrary.nonNullable;
type = substitution.substituteType(
member.function.computeThisFunctionType(functionTypeNullability));
}
+2 -4
View File
@@ -2832,8 +2832,7 @@ void doSimulateTransformer(Component c) {
getterReference: lib.reference.canonicalName
?.getChildFromFieldGetterWithName(fieldName)
.reference,
fileUri: lib.fileUri)
..isNonNullableByDefault = lib.isNonNullableByDefault;
fileUri: lib.fileUri);
lib.addField(field);
for (Class c in lib.classes) {
if (c.fields
@@ -2851,8 +2850,7 @@ void doSimulateTransformer(Component c) {
getterReference: c.reference.canonicalName
?.getChildFromFieldGetterWithName(fieldName)
.reference,
fileUri: c.fileUri)
..isNonNullableByDefault = lib.isNonNullableByDefault;
fileUri: c.fileUri);
c.addField(field);
}
}
@@ -116,7 +116,8 @@ class PatchingDataExtractor extends CfeDataExtractor<Features> {
@override
Features computeLibraryValue(Id id, Library library) {
Features features = new Features();
features[Tags.isNonNullableByDefault] = '${library.isNonNullableByDefault}';
// TODO(johnniwinther): Remove this.
features[Tags.isNonNullableByDefault] = 'true';
return features;
}
@@ -78,7 +78,8 @@ class StaticTypeDataExtractor extends CfeDataExtractor<String> {
@override
String computeLibraryValue(Id id, Library node) {
return 'nnbd=${node.isNonNullableByDefault}';
// TODO(johnniwinther): Remove this.
return 'nnbd=true';
}
@override
@@ -349,11 +349,11 @@ exprNewGeneric() => new GenericClass<int, bool>();
exprNewGenericNamed() => new GenericClass<int, bool>.named();
/*normal|limited.member: exprIs:o is List<int>*/
/*verbose.member: exprIs:o is{ForNonNullableByDefault} dart.core::List<dart.core::int>*/
/*verbose.member: exprIs:o is dart.core::List<dart.core::int>*/
exprIs(o) => o is List<int>;
/*normal|limited.member: exprAs:o as List<int>*/
/*verbose.member: exprAs:o as{ForNonNullableByDefault} dart.core::List<dart.core::int>*/
/*verbose.member: exprAs:o as dart.core::List<dart.core::int>*/
exprAs(o) => o as List<int>;
/*member: exprNullCheck:o!*/
@@ -128,7 +128,8 @@ class TextRepresentationDataExtractor extends CfeDataExtractor<String> {
@override
String computeLibraryValue(Id id, Library node) {
return 'nnbd=${node.isNonNullableByDefault}';
// TODO(johnniwinther): Remove this.
return 'nnbd=true';
}
@override
@@ -100,9 +100,7 @@ void main() {
final Library firstLib = component.libraries.first;
expect(firstLib.importUri != _nativeAssetsLibraryUri, true);
expect(nativeAssetsLibrary!.isNonNullableByDefault,
firstLib.isNonNullableByDefault);
expect(nativeAssetsLibrary.nonNullable, firstLib.nonNullable);
expect(nativeAssetsLibrary!.nonNullable, firstLib.nonNullable);
expect(nativeAssetsLibrary.nonNullableByDefaultCompiledMode,
firstLib.nonNullableByDefaultCompiledMode);
+7 -10
View File
@@ -147,7 +147,7 @@ type CanonicalName {
type ComponentFile {
UInt32 magic = 0x90ABCDEF;
UInt32 formatVersion = 117;
UInt32 formatVersion = 118;
Byte[10] shortSdkHash;
List<String> problemsAsJson; // Described in problems.md.
Library[] libraries;
@@ -242,7 +242,7 @@ type Name {
}
type Library {
Byte flags (isSynthetic, isLegacy, nnbdModeBit1, nnbdModeBit2, isUnsupported);
Byte flags (isSynthetic, nnbdModeBit1, nnbdModeBit2, isUnsupported);
UInt languageVersionMajor;
UInt languageVersionMinor;
CanonicalNameReference canonicalName;
@@ -401,8 +401,7 @@ type Field extends Member {
FileOffset fileEndOffset;
UInt flags (isFinal, isConst, isStatic, isCovariantByDeclaration,
isCovariantByClass, isLate, isExtensionMember,
isLegacy, isInternalImplementation,
isEnumElement, isExtensionTypeMember);
isInternalImplementation, isEnumElement, isExtensionTypeMember);
Name name;
List<Expression> annotations;
DartType type;
@@ -416,7 +415,7 @@ type Constructor extends Member {
FileOffset startFileOffset; // Offset of the start of the constructor including any annotations.
FileOffset fileOffset; // Offset of the constructor name.
FileOffset fileEndOffset;
Byte flags (isConst, isExternal, isSynthetic, isLegacy);
Byte flags (isConst, isExternal, isSynthetic);
Name name;
List<Expression> annotations;
FunctionNode function;
@@ -456,9 +455,8 @@ type Procedure extends Member {
Byte kind; // Index into the ProcedureKind enum above.
Byte stubKind; // Index into the ProcedureStubKind enum above.
UInt flags (isStatic, isAbstract, isExternal, isConst,
isExtensionMember, isLegacy, isSynthetic,
isInternalImplementation, isExtensionTypeMember,
hasWeakTearoffReferencePragma, IsLoweredLateField);
isExtensionMember, isSynthetic, isInternalImplementation,
isExtensionTypeMember, hasWeakTearoffReferencePragma, IsLoweredLateField);
Name name;
List<Expression> annotations;
MemberReference stubTarget; // May be NullReference.
@@ -990,7 +988,6 @@ type FileUriExpression extends Expression {
type IsExpression extends Expression {
Byte tag = 37;
FileOffset fileOffset;
Byte flags (isLegacy);
Expression operand;
DartType type;
}
@@ -998,7 +995,7 @@ type IsExpression extends Expression {
type AsExpression extends Expression {
Byte tag = 38;
FileOffset fileOffset;
Byte flags (isTypeError,isCovarianceCheck,isForDynamic,isForNonNullableByDefault);
Byte flags (isTypeError,isCovarianceCheck,isForDynamic,isUnchecked);
Expression operand;
DartType type;
}
+18 -95
View File
@@ -290,10 +290,10 @@ class Library extends NamedNode
}
static const int SyntheticFlag = 1 << 0;
static const int LegacyFlag = 1 << 1;
static const int NonNullableByDefaultModeBit1 = 1 << 2;
static const int NonNullableByDefaultModeBit2 = 1 << 3;
static const int IsUnsupportedFlag = 1 << 4;
static const int NonNullableByDefaultModeBit1 = 1 << 1;
static const int NonNullableByDefaultModeBit2 = 1 << 2;
static const int IsUnsupportedFlag = 1 << 3;
int flags = 0;
@@ -304,11 +304,6 @@ class Library extends NamedNode
flags = value ? (flags | SyntheticFlag) : (flags & ~SyntheticFlag);
}
bool get isNonNullableByDefault => (flags & LegacyFlag) == 0;
void set isNonNullableByDefault(bool value) {
flags = value ? (flags & ~LegacyFlag) : (flags | LegacyFlag);
}
NonNullableByDefaultCompiledMode get nonNullableByDefaultCompiledMode {
bool bit1 = (flags & NonNullableByDefaultModeBit1) != 0;
bool bit2 = (flags & NonNullableByDefaultModeBit2) != 0;
@@ -465,15 +460,9 @@ class Library extends NamedNode
_fields = fields;
}
Nullability get nullable {
return isNonNullableByDefault ? Nullability.nullable : Nullability.legacy;
}
Nullability get nullable => Nullability.nullable;
Nullability get nonNullable {
return isNonNullableByDefault
? Nullability.nonNullable
: Nullability.legacy;
}
Nullability get nonNullable => Nullability.nonNullable;
/// Returns the top-level fields and procedures defined in this library.
///
@@ -2193,10 +2182,6 @@ sealed class Member extends NamedNode implements Annotatable, FileUriNode {
///
bool get isExtensionTypeMember;
/// If `true` this member is defined in a library for which non-nullable by
/// default is enabled.
bool get isNonNullableByDefault;
/// If `true` this procedure is not part of the interface but only part of the
/// class members.
///
@@ -2420,10 +2405,9 @@ class Field extends Member {
static const int FlagCovariantByClass = 1 << 4;
static const int FlagLate = 1 << 5;
static const int FlagExtensionMember = 1 << 6;
static const int FlagLegacy = 1 << 7;
static const int FlagInternalImplementation = 1 << 8;
static const int FlagEnumElement = 1 << 9;
static const int FlagExtensionTypeMember = 1 << 10;
static const int FlagInternalImplementation = 1 << 7;
static const int FlagEnumElement = 1 << 8;
static const int FlagExtensionTypeMember = 1 << 9;
/// Whether the field is declared with the `covariant` keyword.
bool get isCovariantByDeclaration => flags & FlagCovariant != 0;
@@ -2529,13 +2513,6 @@ class Field extends Member {
@override
bool get isExternal => false;
@override
bool get isNonNullableByDefault => flags & FlagLegacy == 0;
void set isNonNullableByDefault(bool value) {
flags = value ? (flags & ~FlagLegacy) : (flags | FlagLegacy);
}
@override
R accept<R>(MemberVisitor<R> v) => v.visitField(this);
@@ -2650,7 +2627,6 @@ class Constructor extends Member {
static const int FlagConst = 1 << 0; // Must match serialized bit positions.
static const int FlagExternal = 1 << 1;
static const int FlagSynthetic = 1 << 2;
static const int FlagLegacy = 1 << 3;
@override
bool get isConst => flags & FlagConst != 0;
@@ -2689,13 +2665,6 @@ class Constructor extends Member {
@override
bool get isExtensionTypeMember => false;
@override
bool get isNonNullableByDefault => flags & FlagLegacy == 0;
void set isNonNullableByDefault(bool value) {
flags = value ? (flags & ~FlagLegacy) : (flags | FlagLegacy);
}
@override
R accept<R>(MemberVisitor<R> v) => v.visitConstructor(this);
@@ -3098,11 +3067,10 @@ class Procedure extends Member implements GenericFunction {
static const int FlagExternal = 1 << 2;
static const int FlagConst = 1 << 3; // Only for external const factories.
static const int FlagExtensionMember = 1 << 4;
static const int FlagLegacy = 1 << 5;
static const int FlagSynthetic = 1 << 6;
static const int FlagInternalImplementation = 1 << 7;
static const int FlagExtensionTypeMember = 1 << 8;
static const int FlagHasWeakTearoffReferencePragma = 1 << 9;
static const int FlagSynthetic = 1 << 5;
static const int FlagInternalImplementation = 1 << 6;
static const int FlagExtensionTypeMember = 1 << 7;
static const int FlagHasWeakTearoffReferencePragma = 1 << 8;
bool get isStatic => flags & FlagStatic != 0;
@@ -3222,13 +3190,6 @@ class Procedure extends Member implements GenericFunction {
bool get isFactory => kind == ProcedureKind.Factory;
@override
bool get isNonNullableByDefault => flags & FlagLegacy == 0;
void set isNonNullableByDefault(bool value) {
flags = value ? (flags & ~FlagLegacy) : (flags | FlagLegacy);
}
Member? get concreteForwardingStubTarget =>
stubKind == ProcedureStubKind.ConcreteForwardingStub
? stubTargetReference?.asMember
@@ -7501,7 +7462,6 @@ class FileUriExpression extends Expression implements FileUriNode {
/// Expression of form `x is T`.
class IsExpression extends Expression {
int flags = 0;
Expression operand;
DartType type;
@@ -7509,19 +7469,6 @@ class IsExpression extends Expression {
operand.parent = this;
}
// Must match serialized bit positions.
static const int FlagForLegacy = 1 << 0;
/// If `true`, this test take the nullability of [type] into account.
///
/// This is the case for is-tests written in libraries that are opted in to
/// the non nullable by default feature.
bool get isForNonNullableByDefault => flags & FlagForLegacy == 0;
void set isForNonNullableByDefault(bool value) {
flags = value ? (flags & ~FlagForLegacy) : (flags | FlagForLegacy);
}
@override
DartType getStaticType(StaticTypeContext context) =>
getStaticTypeInternal(context);
@@ -7566,11 +7513,7 @@ class IsExpression extends Expression {
void toTextInternal(AstPrinter printer) {
printer.writeExpression(operand,
minimumPrecedence: astToText.Precedence.BITWISE_OR);
printer.write(' is');
if (printer.includeAuxiliaryProperties && isForNonNullableByDefault) {
printer.write('{ForNonNullableByDefault}');
}
printer.write(' ');
printer.write(' is ');
printer.writeType(type);
}
}
@@ -7589,8 +7532,7 @@ class AsExpression extends Expression {
static const int FlagTypeError = 1 << 0;
static const int FlagCovarianceCheck = 1 << 1;
static const int FlagForDynamic = 1 << 2;
static const int FlagForLegacy = 1 << 3;
static const int FlagUnchecked = 1 << 4;
static const int FlagUnchecked = 1 << 3;
/// If `true`, this test is an implicit down cast.
///
@@ -7635,16 +7577,6 @@ class AsExpression extends Expression {
flags = value ? (flags | FlagForDynamic) : (flags & ~FlagForDynamic);
}
/// If `true`, this test take the nullability of [type] into account.
///
/// This is the case for is-tests written in libraries that are opted in to
/// the non nullable by default feature.
bool get isForNonNullableByDefault => flags & FlagForLegacy == 0;
void set isForNonNullableByDefault(bool value) {
flags = value ? (flags & ~FlagForLegacy) : (flags | FlagForLegacy);
}
/// If `true`, this test is added to show the known static type of the
/// expression and should not be performed at runtime.
///
@@ -7714,9 +7646,6 @@ class AsExpression extends Expression {
if (isForDynamic) {
flags.add('ForDynamic');
}
if (isForNonNullableByDefault) {
flags.add('ForNonNullableByDefault');
}
if (flags.isNotEmpty) {
printer.write('{${flags.join(',')}}');
}
@@ -8089,9 +8018,7 @@ class Rethrow extends Expression {
@override
DartType getStaticTypeInternal(StaticTypeContext context) =>
context.isNonNullableByDefault
? const NeverType.nonNullable()
: const NeverType.legacy();
const NeverType.nonNullable();
@override
R accept<R>(ExpressionVisitor<R> v) => v.visitRethrow(this);
@@ -8150,9 +8077,7 @@ class Throw extends Expression {
@override
DartType getStaticTypeInternal(StaticTypeContext context) =>
context.isNonNullableByDefault
? const NeverType.nonNullable()
: const NeverType.legacy();
const NeverType.nonNullable();
@override
R accept<R>(ExpressionVisitor<R> v) => v.visitThrow(this);
@@ -12632,9 +12557,7 @@ class TypeParameterType extends DartType {
/// the bound of [parameter].
TypeParameterType.withDefaultNullabilityForLibrary(
this.parameter, Library library)
: declaredNullability = library.isNonNullableByDefault
? computeNullabilityFromBound(parameter)
: Nullability.legacy;
: declaredNullability = computeNullabilityFromBound(parameter);
@override
DartType get nonTypeVariableBound {
+1 -3
View File
@@ -2745,10 +2745,8 @@ class BinaryBuilder {
Expression _readIsExpression() {
int offset = readOffset();
int flags = readByte();
return new IsExpression(readExpression(), readDartType())
..fileOffset = offset
..flags = flags;
..fileOffset = offset;
}
Expression _readAsExpression() {
-1
View File
@@ -1974,7 +1974,6 @@ class BinaryPrinter implements Visitor<void>, BinarySink {
void visitIsExpression(IsExpression node) {
writeByte(Tag.IsExpression);
writeOffset(node.fileOffset);
writeByte(node.flags);
writeNode(node.operand);
writeNode(node.type);
}
+1 -1
View File
@@ -226,7 +226,7 @@ class Tag {
/// Internal version of kernel binary format.
/// Bump it when making incompatible changes in kernel binaries.
/// Keep in sync with runtime/vm/kernel_binary.h, pkg/kernel/binary.md.
static const int BinaryFormatVersion = 117;
static const int BinaryFormatVersion = 118;
}
abstract class ConstantTag {
+6 -19
View File
@@ -1964,31 +1964,18 @@ class _ClassInfo {
HandleAmbiguousSupertypes onAmbiguousSupertypes) {
Supertype? canonical = genericSuperType![cls];
if (canonical == null) {
if (!classNode.enclosingLibrary.isNonNullableByDefault) {
canonical = legacyErasureSupertype(type);
} else {
canonical = type;
}
canonical = type;
genericSuperType![cls] = canonical;
genericSuperTypes![cls] = <Supertype>[type];
} else {
genericSuperTypes![cls]!.add(type);
if (classNode.enclosingLibrary.isNonNullableByDefault) {
Supertype? result = nnbdTopMergeSupertype(
coreTypes,
normSupertype(coreTypes, type),
normSupertype(coreTypes, canonical));
if (result == null) {
onAmbiguousSupertypes(classNode, canonical, type);
} else {
genericSuperType![cls] = result;
}
Supertype? result = nnbdTopMergeSupertype(coreTypes,
normSupertype(coreTypes, type), normSupertype(coreTypes, canonical));
if (result == null) {
onAmbiguousSupertypes(classNode, canonical, type);
} else {
type = legacyErasureSupertype(type);
if (type != canonical) {
onAmbiguousSupertypes(classNode, canonical, type);
}
genericSuperType![cls] = result;
}
}
assert(genericSuperType!.containsKey(cls),
+1 -2
View File
@@ -303,8 +303,7 @@ class CloneVisitorNotMembers implements TreeVisitor<TreeNode> {
@override
TreeNode visitIsExpression(IsExpression node) {
return new IsExpression(clone(node.operand), visitType(node.type))
..flags = node.flags;
return new IsExpression(clone(node.operand), visitType(node.type));
}
@override
-8
View File
@@ -3097,9 +3097,6 @@ class EquivalenceStrategy {
if (other is! IsExpression) return false;
visitor.pushNodeState(node, other);
bool result = true;
if (!checkIsExpression_flags(visitor, node, other)) {
result = visitor.resultOnInequivalence;
}
if (!checkIsExpression_operand(visitor, node, other)) {
result = visitor.resultOnInequivalence;
}
@@ -7457,11 +7454,6 @@ class EquivalenceStrategy {
return checkExpression_fileOffset(visitor, node, other);
}
bool checkIsExpression_flags(
EquivalenceVisitor visitor, IsExpression node, IsExpression other) {
return visitor.checkValues(node.flags, other.flags, 'flags');
}
bool checkIsExpression_operand(
EquivalenceVisitor visitor, IsExpression node, IsExpression other) {
return visitor.checkNodes(node.operand, other.operand, 'operand');
-44
View File
@@ -72,47 +72,3 @@ class _LegacyErasure extends ReplacementVisitor {
return const NullType();
}
}
/// Returns `true` if a member declared in [declaringClass] inherited or
/// mixed into [enclosingClass] needs legacy erasure to compute its inherited
/// type.
///
/// For instance:
///
/// // Opt in:
/// class Super {
/// int extendedMethod(int i, {required int j}) => i;
/// }
/// class Mixin {
/// int mixedInMethod(int i, {required int j}) => i;
/// }
/// // Opt out:
/// class Legacy extends Super with Mixin {}
/// // Opt in:
/// class Class extends Legacy {
/// test() {
/// // Ok to call `Legacy.extendedMethod` since its type is
/// // `int* Function(int*, {int* j})`.
/// super.extendedMethod(null);
/// // Ok to call `Legacy.mixedInMethod` since its type is
/// // `int* Function(int*, {int* j})`.
/// super.mixedInMethod(null);
/// }
/// }
///
bool needsLegacyErasure(Class enclosingClass, Class declaringClass) {
Class? cls = enclosingClass;
while (cls != null) {
if (!cls.enclosingLibrary.isNonNullableByDefault) {
return true;
}
if (cls == declaringClass) {
return false;
}
if (cls.mixedInClass == declaringClass) {
return false;
}
cls = cls.superclass;
}
return false;
}
@@ -33,8 +33,7 @@ Library parseLibrary(Uri uri, String text,
fileUri ??= uri;
environment ??= new TypeParserEnvironment(uri, fileUri);
Library library =
new Library(uri, fileUri: fileUri, name: uri.path.replaceAll("/", "."))
..isNonNullableByDefault = true;
new Library(uri, fileUri: fileUri, name: uri.path.replaceAll("/", "."));
List<ParsedType> types = type_parser.parse(text);
for (ParsedType type in types) {
if (type is ParsedClass) {
@@ -87,13 +86,11 @@ class Env {
TypeParserEnvironment coreEnvironment =
new TypeParserEnvironment(coreUri, coreUri);
Library coreLibrary =
parseLibrary(coreUri, mockSdk, environment: coreEnvironment)
..isNonNullableByDefault = isNonNullableByDefault;
parseLibrary(coreUri, mockSdk, environment: coreEnvironment);
_libraryEnvironment = new TypeParserEnvironment(libraryUri, libraryUri)
._extend(coreEnvironment._declarations);
Library library =
parseLibrary(libraryUri, source, environment: _libraryEnvironment)
..isNonNullableByDefault = isNonNullableByDefault;
parseLibrary(libraryUri, source, environment: _libraryEnvironment);
library.name = "lib";
component = new Component(libraries: <Library>[coreLibrary, library]);
coreTypes = new CoreTypes(component);
+1 -31
View File
@@ -406,9 +406,6 @@ class Printer extends VisitorDefault<void> with VisitorVoidMixin {
if (library.isUnsupported) {
flags.add('isUnsupported');
}
if (!library.isNonNullableByDefault) {
flags.add('isLegacy');
}
if (flags.isNotEmpty) {
writeWord('/*${flags.join(',')}*/');
}
@@ -1092,14 +1089,6 @@ class Printer extends VisitorDefault<void> with VisitorVoidMixin {
writeExpression(initializer);
}
List<String> features = <String>[];
if (node.enclosingLibrary.isNonNullableByDefault !=
node.isNonNullableByDefault) {
if (node.isNonNullableByDefault) {
features.add("isNonNullableByDefault");
} else {
features.add("isLegacy");
}
}
Class? enclosingClass = node.enclosingClass;
if ((enclosingClass == null &&
node.enclosingLibrary.fileUri != node.fileUri) ||
@@ -1146,14 +1135,6 @@ class Printer extends VisitorDefault<void> with VisitorVoidMixin {
}
writeWord(procedureKindToString(node.kind));
List<String> features = <String>[];
if (node.enclosingLibrary.isNonNullableByDefault !=
node.isNonNullableByDefault) {
if (node.isNonNullableByDefault) {
features.add("isNonNullableByDefault");
} else {
features.add("isLegacy");
}
}
Class? enclosingClass = node.enclosingClass;
if ((enclosingClass == null &&
node.enclosingLibrary.fileUri != node.fileUri) ||
@@ -1200,14 +1181,6 @@ class Printer extends VisitorDefault<void> with VisitorVoidMixin {
writeModifier(node.isSynthetic, 'synthetic');
writeWord('constructor');
List<String> features = <String>[];
if (node.enclosingLibrary.isNonNullableByDefault !=
node.isNonNullableByDefault) {
if (node.isNonNullableByDefault) {
features.add("isNonNullableByDefault");
} else {
features.add("isLegacy");
}
}
if (features.isNotEmpty) {
writeWord("/*${features.join(',')}*/");
}
@@ -1753,7 +1726,7 @@ class Printer extends VisitorDefault<void> with VisitorVoidMixin {
@override
void visitIsExpression(IsExpression node) {
writeExpression(node.operand, Precedence.BITWISE_OR);
writeSpaced(!node.isForNonNullableByDefault ? 'is{ForLegacy}' : 'is');
writeSpaced('is');
writeType(node.type);
}
@@ -1770,9 +1743,6 @@ class Printer extends VisitorDefault<void> with VisitorVoidMixin {
if (node.isForDynamic) {
flags.add('ForDynamic');
}
if (!node.isForNonNullableByDefault) {
flags.add('ForLegacy');
}
if (node.isUnchecked) {
flags.add('Unchecked');
}
+27 -45
View File
@@ -285,39 +285,36 @@ abstract class TypeEnvironment extends Types {
}
DartType getTypeOfSpecialCasedTernaryOperator(
DartType type1, DartType type2, DartType type3, Library clientLibrary) {
if (clientLibrary.isNonNullableByDefault) {
// Let e be a normal invocation of the form e1.clamp(e2, e3), where the
// static types of e1, e2 and e3 are T1, T2 and T3 respectively, and where
// T1, T2, and T3 are all non-Never subtypes of num. Then:
if (type1 is! NeverType && type2 is! NeverType && type3 is! NeverType
/* We skip the check that all types are subtypes of num because, if
DartType type1, DartType type2, DartType type3) {
// Let e be a normal invocation of the form e1.clamp(e2, e3), where the
// static types of e1, e2 and e3 are T1, T2 and T3 respectively, and where
// T1, T2, and T3 are all non-Never subtypes of num. Then:
if (type1 is! NeverType && type2 is! NeverType && type3 is! NeverType
/* We skip the check that all types are subtypes of num because, if
not, we'll compute the static type to be num, anyway.*/
) {
if (isSubtypeOf(type1, coreTypes.intNonNullableRawType,
SubtypeCheckMode.withNullabilities) &&
isSubtypeOf(type2, coreTypes.intNonNullableRawType,
SubtypeCheckMode.withNullabilities) &&
isSubtypeOf(type3, coreTypes.intNonNullableRawType,
SubtypeCheckMode.withNullabilities)) {
// If T1, T2 and T3 are all subtypes of int, the static type of e is
// int.
return coreTypes.intNonNullableRawType;
} else if (isSubtypeOf(type1, coreTypes.doubleNonNullableRawType,
SubtypeCheckMode.withNullabilities) &&
isSubtypeOf(type2, coreTypes.doubleNonNullableRawType,
SubtypeCheckMode.withNullabilities) &&
isSubtypeOf(type3, coreTypes.doubleNonNullableRawType,
SubtypeCheckMode.withNullabilities)) {
// If T1, T2 and T3 are all subtypes of double, the static type of e
// is double.
return coreTypes.doubleNonNullableRawType;
}
) {
if (isSubtypeOf(type1, coreTypes.intNonNullableRawType,
SubtypeCheckMode.withNullabilities) &&
isSubtypeOf(type2, coreTypes.intNonNullableRawType,
SubtypeCheckMode.withNullabilities) &&
isSubtypeOf(type3, coreTypes.intNonNullableRawType,
SubtypeCheckMode.withNullabilities)) {
// If T1, T2 and T3 are all subtypes of int, the static type of e is
// int.
return coreTypes.intNonNullableRawType;
} else if (isSubtypeOf(type1, coreTypes.doubleNonNullableRawType,
SubtypeCheckMode.withNullabilities) &&
isSubtypeOf(type2, coreTypes.doubleNonNullableRawType,
SubtypeCheckMode.withNullabilities) &&
isSubtypeOf(type3, coreTypes.doubleNonNullableRawType,
SubtypeCheckMode.withNullabilities)) {
// If T1, T2 and T3 are all subtypes of double, the static type of e
// is double.
return coreTypes.doubleNonNullableRawType;
}
// Otherwise the static type of e is num.
return coreTypes.numNonNullableRawType;
}
return coreTypes.numRawType(type1.nullability);
// Otherwise the static type of e is num.
return coreTypes.numNonNullableRawType;
}
bool _isRawTypeArgumentEquivalent(
@@ -931,10 +928,6 @@ abstract class StaticTypeContext {
/// For opt out libraries this is [Nullability.legacy].
Nullability get nullable;
/// Return `true` if the current library is opted in to non-nullable by
/// default.
bool get isNonNullableByDefault;
/// Returns the mode under which the current library was compiled.
NonNullableByDefaultCompiledMode get nonNullableByDefaultCompiledMode;
@@ -1004,11 +997,6 @@ class StaticTypeContextImpl implements StaticTypeContext {
@override
Nullability get nullable => _library.nullable;
/// Return `true` if the current library is opted in to non-nullable by
/// default.
@override
bool get isNonNullableByDefault => _library.isNonNullableByDefault;
/// Returns the mode under which the current library was compiled.
@override
NonNullableByDefaultCompiledMode get nonNullableByDefaultCompiledMode =>
@@ -1121,9 +1109,6 @@ class _FlatStatefulStaticTypeContext extends StatefulStaticTypeContext {
@override
Nullability get nullable => _library.nullable;
@override
bool get isNonNullableByDefault => _library.isNonNullableByDefault;
@override
NonNullableByDefaultCompiledMode get nonNullableByDefaultCompiledMode =>
_library.nonNullableByDefaultCompiledMode;
@@ -1226,9 +1211,6 @@ class _StackedStatefulStaticTypeContext extends StatefulStaticTypeContext {
@override
Nullability get nullable => _library.nullable;
@override
bool get isNonNullableByDefault => _library.isNonNullableByDefault;
@override
NonNullableByDefaultCompiledMode get nonNullableByDefaultCompiledMode =>
_library.nonNullableByDefaultCompiledMode;
@@ -16,17 +16,6 @@ void main() {
}
}
void setNonNullableByDefault(Library lib, bool isNonNullableByDefault) {
lib.isNonNullableByDefault = isNonNullableByDefault;
}
void verifyNonNullableByDefault(Library lib, bool isNonNullableByDefault) {
if (lib.isNonNullableByDefault != isNonNullableByDefault) {
throw "Serialized and re-read library had change in "
"isNonNullableByDefault flag.";
}
}
void setNonNullableByDefaultCompiledMode(Library lib,
NonNullableByDefaultCompiledMode nonNullableByDefaultCompiledMode) {
lib.nonNullableByDefaultCompiledMode = nonNullableByDefaultCompiledMode;
@@ -59,12 +48,10 @@ void main() {
Uri uri = Uri.parse("foo://bar.dart");
Library lib = new Library(uri, fileUri: uri);
setSynthetic(lib, isSynthetic);
setNonNullableByDefault(lib, isNonNullableByDefault);
setNonNullableByDefaultCompiledMode(
lib, nonNullableByDefaultCompiledMode);
Library lib2 = libRoundTrip(lib);
verifySynthetic(lib2, isSynthetic);
verifyNonNullableByDefault(lib2, isNonNullableByDefault);
verifyNonNullableByDefaultCompiledMode(
lib2, nonNullableByDefaultCompiledMode);
}
+2 -2
View File
@@ -1347,11 +1347,11 @@ class B<T*> extends self::A<self::B::T*, core::bool*> {}
var b_int = new InterfaceType(b, Nullability.legacy, [int]);
expect(
hierarchy.getInterfaceTypeAsInstanceOfClass(b_int, a,
isNonNullableByDefault: library.isNonNullableByDefault),
isNonNullableByDefault: true),
new InterfaceType(a, Nullability.legacy, [int, bool]));
expect(
hierarchy.getInterfaceTypeAsInstanceOfClass(b_int, objectClass,
isNonNullableByDefault: library.isNonNullableByDefault),
isNonNullableByDefault: true),
new InterfaceType(objectClass, Nullability.legacy));
}
+1 -2
View File
@@ -380,8 +380,7 @@ class LazyTypeEnvironment {
LazyTypeEnvironment() {
Uri uri = Uri.parse('file://dummy.dart');
dummyLibrary = new Library(uri, fileUri: uri)
..isNonNullableByDefault = true;
dummyLibrary = new Library(uri, fileUri: uri);
component.libraries.add(dummyLibrary..parent = component);
dummyLibrary.name = 'lib';
}
@@ -589,8 +589,7 @@ class _FfiDefinitionTransformer extends FfiTransformer {
],
fileUri: node.fileUri,
reference: reference)
..fileOffset = node.fileOffset
..isNonNullableByDefault = node.enclosingLibrary.isNonNullableByDefault;
..fileOffset = node.fileOffset;
// Struct objects are manufactured in the VM by being passed by value
// in return position in FFI calls, and by value in arguments in FFI
@@ -651,8 +650,7 @@ class _FfiDefinitionTransformer extends FfiTransformer {
],
fileUri: node.fileUri,
reference: reference)
..fileOffset = node.fileOffset
..isNonNullableByDefault = node.enclosingLibrary.isNonNullableByDefault;
..fileOffset = node.fileOffset;
node.addConstructor(ctor);
}
@@ -1001,7 +999,6 @@ class _FfiDefinitionTransformer extends FfiTransformer {
reference: getterReference,
)
..fileOffset = fileOffset
..isNonNullableByDefault = true
..isStatic = true
..isSynthetic = true
..annotations = [];
@@ -1043,7 +1040,6 @@ class _FfiDefinitionTransformer extends FfiTransformer {
reference: getterReference,
)
..fileOffset = field.fileOffset
..isNonNullableByDefault = field.isNonNullableByDefault
..annotations = field.annotations;
node.addProcedure(getter);
@@ -1078,9 +1074,7 @@ class _FfiDefinitionTransformer extends FfiTransformer {
),
fileUri: field.fileUri,
reference: setterReference,
)
..fileOffset = field.fileOffset
..isNonNullableByDefault = field.isNonNullableByDefault;
)..fileOffset = field.fileOffset;
node.addProcedure(setter);
}
@@ -1110,8 +1104,7 @@ class _FfiDefinitionTransformer extends FfiTransformer {
fileUri: compound.fileUri,
reference: getterReference,
isStatic: true)
..fileOffset = compound.fileOffset
..isNonNullableByDefault = true;
..fileOffset = compound.fileOffset;
addPragmaPreferInline(getter);
compound.addProcedure(getter);
}
@@ -561,9 +561,7 @@ class FfiNativeTransformer extends FfiTransformer {
isStatic: true,
isExternal: true,
reference: reference,
)
..isNonNullableByDefault = node.isNonNullableByDefault
..fileOffset = node.fileOffset;
)..fileOffset = node.fileOffset;
nonWrappedFfiNative.addAnnotation(pragmaConstant);
// Add procedure to the parent the FfiNative function belongs to.
@@ -67,9 +67,6 @@ class _DeduplicateMixinKey {
final otherImplemented = otherClass.implementedTypes;
if (thisImplemented.length != otherImplemented.length) return false;
if (thisClass.enclosingLibrary.isNonNullableByDefault !=
otherClass.enclosingLibrary.isNonNullableByDefault) return false;
// Non generic classes can use equalty compares of supertypes.
if (thisParameters.isEmpty) {
if (thisSupertype != otherSupertype) return false;
@@ -3958,8 +3958,6 @@ Fragment StreamingFlowGraphBuilder::BuildIsExpression(TokenPosition* p) {
TokenPosition position = ReadPosition(); // read position.
if (p != nullptr) *p = position;
ReadFlags();
Fragment instructions = BuildExpression(); // read operand.
const AbstractType& type = T.BuildType(); // read type.
@@ -560,7 +560,6 @@ void KernelFingerprintHelper::CalculateExpressionFingerprint() {
return;
case kIsExpression:
ReadPosition(); // read position.
BuildHash(ReadFlags()); // read flags.
CalculateExpressionFingerprint(); // read operand.
CalculateDartTypeFingerprint(); // read type.
return;
@@ -2738,7 +2738,6 @@ void KernelReaderHelper::SkipExpression() {
return;
case kIsExpression:
ReadPosition(); // read position.
SkipFlags(); // read flags.
SkipExpression(); // read operand.
SkipDartType(); // read type.
return;
@@ -494,10 +494,9 @@ class FieldHelper {
kIsGenericCovariantImpl = 1 << 4,
kIsLate = 1 << 5,
kExtensionMember = 1 << 6,
kLegacy = 1 << 7,
kInternalImplementation = 1 << 8,
kEnumElement = 1 << 9,
kExtensionTypeMember = 1 << 10,
kInternalImplementation = 1 << 7,
kEnumElement = 1 << 8,
kExtensionTypeMember = 1 << 9,
};
explicit FieldHelper(KernelReaderHelper* helper)
@@ -594,11 +593,10 @@ class ProcedureHelper {
kExternal = 1 << 2,
kConst = 1 << 3, // Only for external const factories.
kExtensionMember = 1 << 4,
kIsLegacy = 1 << 5,
kSyntheticProcedure = 1 << 6,
kInternalImplementation = 1 << 7,
kExtensionTypeMember = 1 << 8,
kHasWeakTearoffReferencePragma = 1 << 9,
kSyntheticProcedure = 1 << 5,
kInternalImplementation = 1 << 6,
kExtensionTypeMember = 1 << 7,
kHasWeakTearoffReferencePragma = 1 << 8,
};
explicit ProcedureHelper(KernelReaderHelper* helper)
@@ -848,10 +846,9 @@ class LibraryHelper {
enum Flag {
kSynthetic = 1 << 0,
kIsLegacy = 1 << 1,
kNonNullableByDefaultCompiledModeBit1 = 1 << 2,
kNonNullableByDefaultCompiledModeBit2 = 1 << 3,
kUnsupported = 1 << 4,
kNonNullableByDefaultCompiledModeBit1 = 1 << 1,
kNonNullableByDefaultCompiledModeBit2 = 1 << 2,
kUnsupported = 1 << 3,
};
explicit LibraryHelper(KernelReaderHelper* helper)
@@ -867,7 +864,6 @@ class LibraryHelper {
void SetJustRead(Field field) { next_read_ = field + 1; }
bool IsSynthetic() const { return (flags_ & kSynthetic) != 0; }
bool IsNonNullableByDefault() const { return (flags_ & kIsLegacy) == 0; }
NNBDCompiledMode GetNonNullableByDefaultCompiledMode() const {
bool bit1 = (flags_ & kNonNullableByDefaultCompiledModeBit1) != 0;
bool bit2 = (flags_ & kNonNullableByDefaultCompiledModeBit2) != 0;
@@ -862,7 +862,6 @@ void ScopeBuilder::VisitExpression() {
case kIsExpression:
needs_expr_temp_ = true;
helper_.ReadPosition(); // read position.
helper_.ReadFlags(); // read flags.
VisitExpression(); // read operand.
VisitDartType(); // read type.
return;
@@ -168,7 +168,7 @@ namespace dart {
V(::, _byteDataByteOffsetCheck, ByteDataByteOffsetCheck, 0xbaf71484) \
V(::, copyRangeFromUint8ListToOneByteString, \
CopyRangeFromUint8ListToOneByteString, 0xcc3444c2) \
V(_StringBase, _interpolate, StringBaseInterpolate, 0x3f22ce9e) \
V(_StringBase, _interpolate, StringBaseInterpolate, 0xa2c902d2) \
V(_StringBase, codeUnitAt, StringBaseCodeUnitAt, 0x17dbf511) \
V(_SuspendState, get:_functionData, SuspendState_getFunctionData, \
0x7272eaae) \
@@ -198,8 +198,8 @@ namespace dart {
V(_Double, roundToDouble, DoubleRoundToDouble, 0x562cb240) \
V(_Double, toInt, DoubleToInteger, 0x675208e9) \
V(_Double, truncateToDouble, DoubleTruncateToDouble, 0x62b76e99) \
V(::, min, MathMin, 0x21232beb) \
V(::, max, MathMax, 0xcf067384) \
V(::, min, MathMin, 0x63eb7469) \
V(::, max, MathMax, 0xf9320c82) \
V(::, _doublePow, MathDoublePow, 0xaeabdc94) \
V(::, _intPow, MathIntPow, 0xab39e81a) \
V(::, _sin, MathSin, 0x17bdb243) \
@@ -399,7 +399,7 @@ namespace dart {
V(_Double, >=, Double_greaterEqualThan, 0x4aa007b3) \
V(_Double, <, Double_lessThan, 0xd2fb73b4) \
V(_Double, <=, Double_lessEqualThan, 0x024aa595) \
V(_Double, ==, Double_equal, 0x3694bad0) \
V(_Double, ==, Double_equal, 0xe9189b0a) \
V(_Double, +, Double_add, 0xa7c8119f) \
V(_Double, -, Double_sub, 0x9ab51df0) \
V(_Double, *, Double_mul, 0xdc3c27ed) \
@@ -431,7 +431,7 @@ namespace dart {
#define CORE_INTEGER_LIB_INTRINSIC_LIST(V) \
V(_IntegerImplementation, >, Integer_greaterThan, 0xd9c2551b) \
V(_IntegerImplementation, ==, Integer_equal, 0xd4661e09) \
V(_IntegerImplementation, ==, Integer_equal, 0x025d83d3) \
V(_IntegerImplementation, _equalToInteger, Integer_equalToInteger, \
0x70f20102) \
V(_IntegerImplementation, <, Integer_lessThan, 0xd2fb73b4) \
@@ -485,8 +485,8 @@ namespace dart {
V(_IntegerImplementation, +, Integer_add, 0x6ef8468c) \
V(_IntegerImplementation, -, Integer_sub, 0x6301557d) \
V(_IntegerImplementation, *, Integer_mul, 0x4670aa1a) \
V(_IntegerImplementation, %, Integer_mod, 0x66f6edd5) \
V(_IntegerImplementation, ~/, Integer_truncDivide, 0x70e91441) \
V(_IntegerImplementation, %, Integer_mod, 0x708e28b9) \
V(_IntegerImplementation, ~/, Integer_truncDivide, 0x29407b25) \
V(_IntegerImplementation, unary-, Integer_negate, 0x9140ec93) \
V(_IntegerImplementation, &, Integer_bitAnd, 0x42452d89) \
V(_IntegerImplementation, |, Integer_bitOr, 0x45efa741) \
+2 -8
View File
@@ -18,7 +18,7 @@ namespace kernel {
// package:kernel/binary.md.
static const uint32_t kMagicProgramFile = 0x90ABCDEFu;
static const uint32_t kSupportedKernelFormatVersion = 117;
static const uint32_t kSupportedKernelFormatVersion = 118;
// Keep in sync with package:kernel/lib/binary/tag.dart
#define KERNEL_TAG_LIST(V) \
@@ -233,13 +233,7 @@ enum AsExpressionFlags {
kAsExpressionFlagTypeError = 1 << 0,
kAsExpressionFlagCovarianceCheck = 1 << 1,
kAsExpressionFlagForDynamic = 1 << 2,
kAsExpressionFlagForLegacy = 1 << 3,
kAsExpressionFlagUnchecked = 1 << 4,
};
// Keep in sync with package:kernel/lib/ast.dart
enum IsExpressionFlags {
kIsExpressionFlagForLegacy = 1 << 0,
kAsExpressionFlagUnchecked = 1 << 3,
};
// Keep in sync with package:kernel/lib/ast.dart
-6
View File
@@ -810,12 +810,6 @@ LibraryPtr KernelLoader::LoadLibrary(intptr_t index) {
if (library.Loaded()) return library.ptr();
if (!library_helper.IsNonNullableByDefault()) {
H.ReportError(
"Library '%s' was compiled without sound null safety (in weak mode) "
"and it cannot be used at runtime",
String::Handle(library.url()).ToCString());
}
const NNBDCompiledMode mode =
library_helper.GetNonNullableByDefaultCompiledMode();
if (mode == NNBDCompiledMode::kInvalid) {