Skip to content

Commit

Permalink
Version 3.7.0-180.0.dev
Browse files Browse the repository at this point in the history
Merge 3ffde1e into dev
  • Loading branch information
Dart CI committed Nov 22, 2024
2 parents 8b65a7a + 3ffde1e commit 311f57f
Show file tree
Hide file tree
Showing 37 changed files with 1,276 additions and 357 deletions.
16 changes: 7 additions & 9 deletions pkg/front_end/lib/src/source/source_builder_factory.dart
Original file line number Diff line number Diff line change
Expand Up @@ -1369,15 +1369,13 @@ class BuilderFactoryImpl implements BuilderFactory, BuilderFactoryResult {
instanceTypeParameterAccess:
InstanceTypeParameterAccessState.Allowed);

if (nominalVariableCopy != null) {
if (typeParameters != null) {
// Coverage-ignore-block(suite): Not run.
typeParameters = nominalVariableCopy.newParameterBuilders
..addAll(typeParameters);
} else {
typeParameters = nominalVariableCopy.newParameterBuilders;
}
}
// Discard type parameters declared on the constructor. It's not
// allowed, an error has already been issued and it will cause
// crashes later if they are kept/added to the ones from the parent.
// TODO(johnniwinther): This will cause us issuing errors about not
// knowing the names of what we discard here. Is there a way to
// preserve them?
typeParameters = nominalVariableCopy?.newParameterBuilders;
case ClassFragment():
case MixinFragment():
case EnumFragment():
Expand Down
156 changes: 84 additions & 72 deletions pkg/front_end/lib/src/type_inference/inference_visitor.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11096,40 +11096,46 @@ class InferenceVisitorImpl extends InferenceVisitorBase
ObjectAccessTarget lengthTarget = findInterfaceMember(
lookupType, lengthName, node.fileOffset,
includeExtensionMethods: true, isSetter: false);
assert(lengthTarget.isInstanceMember);
DartType lengthType;
if (lengthTarget.isNever) {
lengthType = const NeverType.nonNullable();
node.isNeverPattern = true;
} else {
assert(lengthTarget.isInstanceMember);

DartType lengthType = node.lengthType = lengthTarget.getGetterType(this);
node.lengthTarget = lengthTarget.classMember!;
lengthType = node.lengthType = lengthTarget.getGetterType(this);
node.lengthTarget = lengthTarget.classMember!;

ObjectAccessTarget sublistInvokeTarget = findInterfaceMember(
lookupType, sublistName, node.fileOffset,
includeExtensionMethods: true, isSetter: false);
assert(sublistInvokeTarget.isInstanceMember);
ObjectAccessTarget sublistInvokeTarget = findInterfaceMember(
lookupType, sublistName, node.fileOffset,
includeExtensionMethods: true, isSetter: false);
assert(sublistInvokeTarget.isInstanceMember);

node.sublistTarget = sublistInvokeTarget.classMember as Procedure;
node.sublistType =
sublistInvokeTarget.getFunctionType(this).sublistFunctionType;
node.sublistTarget = sublistInvokeTarget.classMember as Procedure;
node.sublistType =
sublistInvokeTarget.getFunctionType(this).sublistFunctionType;

ObjectAccessTarget minusTarget = findInterfaceMember(
lengthType, minusName, node.fileOffset,
includeExtensionMethods: true, isSetter: false);
assert(minusTarget.isInstanceMember);
assert(minusTarget.isSpecialCasedBinaryOperator(this));
ObjectAccessTarget minusTarget = findInterfaceMember(
lengthType, minusName, node.fileOffset,
includeExtensionMethods: true, isSetter: false);
assert(minusTarget.isInstanceMember);
assert(minusTarget.isSpecialCasedBinaryOperator(this));

node.minusTarget = minusTarget.classMember as Procedure;
node.minusType = replaceReturnType(
minusTarget.getFunctionType(this).minusFunctionType,
typeSchemaEnvironment.getTypeOfSpecialCasedBinaryOperator(
lengthType, coreTypes.intNonNullableRawType));
node.minusTarget = minusTarget.classMember as Procedure;
node.minusType = replaceReturnType(
minusTarget.getFunctionType(this).minusFunctionType,
typeSchemaEnvironment.getTypeOfSpecialCasedBinaryOperator(
lengthType, coreTypes.intNonNullableRawType));

ObjectAccessTarget indexGetTarget = findInterfaceMember(
lookupType, indexGetName, node.fileOffset,
includeExtensionMethods: true, isSetter: false);
assert(indexGetTarget.isInstanceMember);
ObjectAccessTarget indexGetTarget = findInterfaceMember(
lookupType, indexGetName, node.fileOffset,
includeExtensionMethods: true, isSetter: false);
assert(indexGetTarget.isInstanceMember);

node.indexGetTarget = indexGetTarget.classMember as Procedure;
node.indexGetType =
indexGetTarget.getFunctionType(this).indexGetFunctionType;
node.indexGetTarget = indexGetTarget.classMember as Procedure;
node.indexGetType =
indexGetTarget.getFunctionType(this).indexGetFunctionType;
}

for (Pattern pattern in node.patterns) {
if (pattern is RestPattern) {
Expand All @@ -11138,41 +11144,39 @@ class InferenceVisitorImpl extends InferenceVisitorBase
}
}

if (node.hasRestPattern) {
ObjectAccessTarget greaterThanOrEqualTarget = findInterfaceMember(
lengthType, greaterThanOrEqualsName, node.fileOffset,
includeExtensionMethods: true, isSetter: false);
assert(greaterThanOrEqualTarget.isInstanceMember);

node.lengthCheckTarget =
greaterThanOrEqualTarget.classMember as Procedure;
node.lengthCheckType = greaterThanOrEqualTarget
.getFunctionType(this)
.greaterThanOrEqualsFunctionType;
} else if (node.patterns.isEmpty) {
ObjectAccessTarget lessThanOrEqualsInvokeTarget = findInterfaceMember(
lengthType, lessThanOrEqualsName, node.fileOffset,
includeExtensionMethods: true, isSetter: false);
assert(lessThanOrEqualsInvokeTarget.isInstanceMember ||
// Coverage-ignore(suite): Not run.
lessThanOrEqualsInvokeTarget.isObjectMember);

node.lengthCheckTarget =
lessThanOrEqualsInvokeTarget.classMember as Procedure;
node.lengthCheckType = lessThanOrEqualsInvokeTarget
.getFunctionType(this)
.lessThanOrEqualsFunctionType;
} else {
ObjectAccessTarget equalsInvokeTarget = findInterfaceMember(
lengthType, equalsName, node.fileOffset,
includeExtensionMethods: true, isSetter: false);
assert(equalsInvokeTarget.isInstanceMember ||
// Coverage-ignore(suite): Not run.
equalsInvokeTarget.isObjectMember);
if (!node.isNeverPattern) {
if (node.hasRestPattern) {
ObjectAccessTarget greaterThanOrEqualTarget = findInterfaceMember(
lengthType, greaterThanOrEqualsName, node.fileOffset,
includeExtensionMethods: true, isSetter: false);
assert(greaterThanOrEqualTarget.isInstanceMember);

node.lengthCheckTarget =
greaterThanOrEqualTarget.classMember as Procedure;
node.lengthCheckType = greaterThanOrEqualTarget
.getFunctionType(this)
.greaterThanOrEqualsFunctionType;
} else if (node.patterns.isEmpty) {
ObjectAccessTarget lessThanOrEqualsInvokeTarget = findInterfaceMember(
lengthType, lessThanOrEqualsName, node.fileOffset,
includeExtensionMethods: true, isSetter: false);
assert(lessThanOrEqualsInvokeTarget.isInstanceMember);

node.lengthCheckTarget =
lessThanOrEqualsInvokeTarget.classMember as Procedure;
node.lengthCheckType = lessThanOrEqualsInvokeTarget
.getFunctionType(this)
.lessThanOrEqualsFunctionType;
} else {
ObjectAccessTarget equalsInvokeTarget = findInterfaceMember(
lengthType, equalsName, node.fileOffset,
includeExtensionMethods: true, isSetter: false);
assert(equalsInvokeTarget.isInstanceMember);

node.lengthCheckTarget = equalsInvokeTarget.classMember as Procedure;
node.lengthCheckType =
equalsInvokeTarget.getFunctionType(this).equalsFunctionType;
node.lengthCheckTarget = equalsInvokeTarget.classMember as Procedure;
node.lengthCheckType =
equalsInvokeTarget.getFunctionType(this).equalsFunctionType;
}
}

pushRewrite(replacement ?? node);
Expand Down Expand Up @@ -11580,20 +11584,28 @@ class InferenceVisitorImpl extends InferenceVisitorBase
ObjectAccessTarget containsKeyTarget = findInterfaceMember(
lookupType, containsKeyName, node.fileOffset,
includeExtensionMethods: true, isSetter: false);
assert(containsKeyTarget.isInstanceMember);
if (containsKeyTarget.isNever) {
node.isNeverPattern = true;
} else {
assert(containsKeyTarget.isInstanceMember);

node.containsKeyTarget = containsKeyTarget.classMember as Procedure;
node.containsKeyType =
containsKeyTarget.getFunctionType(this).containsKeyFunctionType;
node.containsKeyTarget = containsKeyTarget.classMember as Procedure;
node.containsKeyType =
containsKeyTarget
.getFunctionType(this)
.containsKeyFunctionType;

ObjectAccessTarget indexGetTarget = findInterfaceMember(
lookupType, indexGetName, node.fileOffset,
includeExtensionMethods: true, isSetter: false);
assert(indexGetTarget.isInstanceMember);
ObjectAccessTarget indexGetTarget = findInterfaceMember(
lookupType, indexGetName, node.fileOffset,
includeExtensionMethods: true, isSetter: false);
assert(indexGetTarget.isInstanceMember);

node.indexGetTarget = indexGetTarget.classMember as Procedure;
node.indexGetType =
indexGetTarget.getFunctionType(this).indexGetFunctionType;
node.indexGetTarget = indexGetTarget.classMember as Procedure;
node.indexGetType =
indexGetTarget
.getFunctionType(this)
.indexGetFunctionType;
}

assert(checkStack(node, stackBase, [
/* entries = */ ...repeatedKind(
Expand Down
Loading

0 comments on commit 311f57f

Please sign in to comment.