[L] Change in dart/sdk[main]: [cfe] Make TypeParameter an abstract interface

0 views
Skip to first unread message

Chloe Stefantsova (Gerrit)

unread,
Oct 30, 2025, 7:53:31 AM (2 days ago) Oct 30
to Chloe Stefantsova, Johnni Winther, Commit Queue, Alexander Markov, Jens Johansen, dart-fe-te...@google.com, rev...@dartlang.org
Attention needed from Johnni Winther

Chloe Stefantsova voted Commit-Queue+1

Commit-Queue+1
Open in Gerrit

Related details

Attention is currently required from:
  • Johnni Winther
Submit Requirements:
  • requirement satisfiedCode-Owners
  • requirement is not satisfiedCode-Review
  • requirement is not satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: sdk
Gerrit-Branch: main
Gerrit-Change-Id: I9e4107b50a0790008d65a5ee94a4ff06a1b48052
Gerrit-Change-Number: 458520
Gerrit-PatchSet: 3
Gerrit-Owner: Chloe Stefantsova <cstefa...@google.com>
Gerrit-Reviewer: Chloe Stefantsova <cstefa...@google.com>
Gerrit-Reviewer: Johnni Winther <johnni...@google.com>
Gerrit-CC: Alexander Markov <alexm...@google.com>
Gerrit-CC: Jens Johansen <je...@google.com>
Gerrit-Attention: Johnni Winther <johnni...@google.com>
Gerrit-Comment-Date: Thu, 30 Oct 2025 11:53:25 +0000
Gerrit-HasComments: No
Gerrit-Has-Labels: Yes
satisfied_requirement
unsatisfied_requirement
open
diffy

Johnni Winther (Gerrit)

unread,
Oct 30, 2025, 10:19:01 AM (2 days ago) Oct 30
to Chloe Stefantsova, Commit Queue, Alexander Markov, Jens Johansen, dart-fe-te...@google.com, rev...@dartlang.org
Attention needed from Chloe Stefantsova

Johnni Winther voted and added 1 comment

Votes added by Johnni Winther

Code-Review+1

1 comment

File pkg/kernel/lib/src/ast/types.dart
Line 132, Patchset 3 (Latest):class NominalTypeParameter extends TreeNode implements TypeParameter {
Johnni Winther . unresolved

Should it be `NominalParameter` to align with `StructuralParameter`?

Open in Gerrit

Related details

Attention is currently required from:
  • Chloe Stefantsova
Submit Requirements:
  • requirement satisfiedCode-Owners
  • requirement satisfiedCode-Review
  • requirement satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: sdk
Gerrit-Branch: main
Gerrit-Change-Id: I9e4107b50a0790008d65a5ee94a4ff06a1b48052
Gerrit-Change-Number: 458520
Gerrit-PatchSet: 3
Gerrit-Owner: Chloe Stefantsova <cstefa...@google.com>
Gerrit-Reviewer: Chloe Stefantsova <cstefa...@google.com>
Gerrit-Reviewer: Johnni Winther <johnni...@google.com>
Gerrit-CC: Alexander Markov <alexm...@google.com>
Gerrit-CC: Jens Johansen <je...@google.com>
Gerrit-Attention: Chloe Stefantsova <cstefa...@google.com>
Gerrit-Comment-Date: Thu, 30 Oct 2025 14:18:54 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: Yes
satisfied_requirement
open
diffy

Chloe Stefantsova (Gerrit)

unread,
Oct 30, 2025, 10:35:29 AM (2 days ago) Oct 30
to Chloe Stefantsova, Johnni Winther, Commit Queue, Alexander Markov, Jens Johansen, dart-fe-te...@google.com, rev...@dartlang.org

Chloe Stefantsova added 2 comments

Patchset-level comments
File-level comment, Patchset 4 (Latest):
Chloe Stefantsova . resolved

Thanks for the review and the suggestion, Johnni!

File pkg/kernel/lib/src/ast/types.dart
Line 132, Patchset 3:class NominalTypeParameter extends TreeNode implements TypeParameter {
Johnni Winther . resolved

Should it be `NominalParameter` to align with `StructuralParameter`?

Chloe Stefantsova

Good idea! Done.

Open in Gerrit

Related details

Attention set is empty
Submit Requirements:
  • requirement satisfiedCode-Owners
  • requirement satisfiedCode-Review
  • requirement satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: sdk
Gerrit-Branch: main
Gerrit-Change-Id: I9e4107b50a0790008d65a5ee94a4ff06a1b48052
Gerrit-Change-Number: 458520
Gerrit-PatchSet: 4
Gerrit-Owner: Chloe Stefantsova <cstefa...@google.com>
Gerrit-Reviewer: Chloe Stefantsova <cstefa...@google.com>
Gerrit-Reviewer: Johnni Winther <johnni...@google.com>
Gerrit-CC: Alexander Markov <alexm...@google.com>
Gerrit-CC: Jens Johansen <je...@google.com>
Gerrit-Comment-Date: Thu, 30 Oct 2025 14:35:24 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: Johnni Winther <johnni...@google.com>
satisfied_requirement
open
diffy

Chloe Stefantsova (Gerrit)

unread,
Oct 30, 2025, 11:13:31 AM (2 days ago) Oct 30
to Chloe Stefantsova, Johnni Winther, Commit Queue, Alexander Markov, Jens Johansen, dart-fe-te...@google.com, rev...@dartlang.org

Chloe Stefantsova voted Commit-Queue+2

Commit-Queue+2
Open in Gerrit

Related details

Attention set is empty
Submit Requirements:
  • requirement satisfiedCode-Owners
  • requirement satisfiedCode-Review
  • requirement satisfiedReview-Enforcement
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: sdk
Gerrit-Branch: main
Gerrit-Change-Id: I9e4107b50a0790008d65a5ee94a4ff06a1b48052
Gerrit-Change-Number: 458520
Gerrit-PatchSet: 4
Gerrit-Owner: Chloe Stefantsova <cstefa...@google.com>
Gerrit-Reviewer: Chloe Stefantsova <cstefa...@google.com>
Gerrit-Reviewer: Johnni Winther <johnni...@google.com>
Gerrit-CC: Alexander Markov <alexm...@google.com>
Gerrit-CC: Jens Johansen <je...@google.com>
Gerrit-Comment-Date: Thu, 30 Oct 2025 15:13:25 +0000
Gerrit-HasComments: No
Gerrit-Has-Labels: Yes
satisfied_requirement
open
diffy

Commit Queue (Gerrit)

unread,
Oct 30, 2025, 12:01:36 PM (2 days ago) Oct 30
to Chloe Stefantsova, Johnni Winther, Alexander Markov, Jens Johansen, dart-fe-te...@google.com, rev...@dartlang.org

Commit Queue submitted the change with unreviewed changes

Unreviewed changes

3 is the latest approved patch-set.
The change was submitted with unreviewed changes in the following files:

```
The name of the file: pkg/front_end/tool/ast_model.dart
Insertions: 1, Deletions: 1.

@@ -149,7 +149,7 @@
'PatternSwitchStatement': {'cases': FieldRule(isDeclaration: true)},
'TypeVariable': {'parameter': FieldRule(isDeclaration: false)},
'ClassTypeParameterType': {'parameter': FieldRule(isDeclaration: false)},
- 'NominalTypeParameter': {'_variance': FieldRule(name: 'variance')},
+ 'NominalParameter': {'_variance': FieldRule(name: 'variance')},
};

/// Data that determines exceptions to how fields are used.
```
```
The name of the file: pkg/kernel/lib/visitor.dart
Insertions: 8, Deletions: 9.

@@ -823,7 +823,7 @@
R visitSyntheticVariable(SyntheticVariable node);
R visitVariableContext(VariableContext node);
R visitScope(Scope node);
- R visitNominalTypeParameter(NominalTypeParameter node);
+ R visitNominalParameter(NominalParameter node);
}

/// Helper mixin for [TreeVisitor] that implements visit methods by delegating
@@ -894,8 +894,7 @@
@override
R visitScope(Scope node) => defaultTreeNode(node);
@override
- R visitNominalTypeParameter(NominalTypeParameter node) =>
- visitTypeParameter(node);
+ R visitNominalParameter(NominalParameter node) => visitTypeParameter(node);
}

/// Base class for implementing [TreeVisitor1] that implements visit methods
@@ -964,7 +963,7 @@
R visitSyntheticVariable(SyntheticVariable node, A arg);
R visitVariableContext(VariableContext node, A arg);
R visitScope(Scope node, A arg);
- R visitNominalTypeParameter(NominalTypeParameter node, A arg);
+ R visitNominalParameter(NominalParameter node, A arg);
}

/// Helper mixin for [TreeVisitor1] that implements visit methods by delegating
@@ -1045,7 +1044,7 @@
@override
R visitScope(Scope node, A arg) => defaultTreeNode(node, arg);
@override
- R visitNominalTypeParameter(NominalTypeParameter node, A arg) =>
+ R visitNominalParameter(NominalParameter node, A arg) =>
visitTypeParameter(node, arg);
}

@@ -3442,12 +3441,12 @@
/// needing to override it. Since the statement visitors in the backends
/// should mix in [TreeVisitorExperimentExclusionMixin], we can deliver the
/// abstract declaration of [visitTypeParameter] to them via the mixin. At the
- /// same time, it allows us to redirect [visitNominalTypeParameter] to the
+ /// same time, it allows us to redirect [visitNominalParameter] to the
/// overrides of [visitTypeParameter] the backends already have.
R visitTypeParameter(TypeParameter node);

@override
- R visitNominalTypeParameter(NominalTypeParameter node) {
+ R visitNominalParameter(NominalParameter node) {
return visitTypeParameter(node);
}
}
@@ -3521,12 +3520,12 @@
/// needing to override it. Since the statement visitors in the backends
/// should mix in [TreeVisitor1ExperimentExclusionMixin], we can deliver the
/// abstract declaration of [visitTypeParameter] to them via the mixin. At the
- /// same time, it allows us to redirect [visitNominalTypeParameter] to the
+ /// same time, it allows us to redirect [visitNominalParameter] to the
/// overrides of [visitTypeParameter] the backends already have.
R visitTypeParameter(TypeParameter node, A arg);

@override
- R visitNominalTypeParameter(NominalTypeParameter node, A arg) {
+ R visitNominalParameter(NominalParameter node, A arg) {
return visitTypeParameter(node, arg);
}
}
```
```
The name of the file: pkg/kernel/lib/src/node_creator.dart
Insertions: 4, Deletions: 4.

@@ -246,7 +246,7 @@
SwitchExpression(
_createExpression(), [node as SwitchExpressionCase]));
break;
- case NodeKind.NominalTypeParameter:
+ case NodeKind.NominalParameter:
_addExpression(
statements,
FunctionExpression(FunctionNode(Block([]),
@@ -321,7 +321,7 @@
case NodeKind.NamedExpression:
case NodeKind.NamedType:
case NodeKind.SwitchCase:
- case NodeKind.NominalTypeParameter:
+ case NodeKind.NominalParameter:
case NodeKind.StructuralParameter:
case NodeKind.MapPatternEntry:
case NodeKind.MapPatternRestEntry:
@@ -1805,7 +1805,7 @@
return SwitchCase(
[NullLiteral()], [TreeNode.noOffset], _createStatement())
..fileOffset = _needFileOffset();
- case NodeKind.NominalTypeParameter:
+ case NodeKind.NominalParameter:
return TypeParameter('foo', _createDartType(), _createDartType())
..fileOffset = _needFileOffset();
case NodeKind.StructuralParameter:
@@ -1895,7 +1895,7 @@
NodeKind.NamedExpression,
NodeKind.NamedType,
NodeKind.SwitchCase,
- NodeKind.NominalTypeParameter,
+ NodeKind.NominalParameter,
NodeKind.PatternGuard,
NodeKind.PatternSwitchCase,
NodeKind.SwitchExpressionCase,
```
```
The name of the file: pkg/kernel/lib/src/ast/types.dart
Insertions: 5, Deletions: 5.

@@ -63,7 +63,7 @@
factory TypeParameter(
[String? name,
DartType? bound,
- DartType? defaultType]) = NominalTypeParameter;
+ DartType? defaultType]) = NominalParameter;

abstract int flags;

@@ -129,7 +129,7 @@
Nullability computeNullabilityFromBound();
}

-class NominalTypeParameter extends TreeNode implements TypeParameter {
+class NominalParameter extends TreeNode implements TypeParameter {
@override
int flags = 0;

@@ -160,7 +160,7 @@
@override
bool get isLegacyCovariant => _variance == null;

- NominalTypeParameter([this.name, DartType? bound, DartType? defaultType])
+ NominalParameter([this.name, DartType? bound, DartType? defaultType])
: bound = bound ?? TypeParameter.unsetBoundSentinel,
defaultType = defaultType ?? TypeParameter.unsetDefaultTypeSentinel;

@@ -221,11 +221,11 @@
}

@override
- R accept<R>(TreeVisitor<R> v) => v.visitNominalTypeParameter(this);
+ R accept<R>(TreeVisitor<R> v) => v.visitNominalParameter(this);

@override
R accept1<R, A>(TreeVisitor1<R, A> v, A arg) =>
- v.visitNominalTypeParameter(this, arg);
+ v.visitNominalParameter(this, arg);

@override
void visitChildren(Visitor v) {
```
```
The name of the file: pkg/kernel/lib/src/coverage.dart
Insertions: 3, Deletions: 3.

@@ -993,8 +993,8 @@
}

@override
- void visitNominalTypeParameter(NominalTypeParameter node) {
- visited.add(NodeKind.NominalTypeParameter);
+ void visitNominalParameter(NominalParameter node) {
+ visited.add(NodeKind.NominalParameter);
node.visitChildren(this);
}

@@ -1344,7 +1344,7 @@
NamedExpression,
NamedParameter,
NamedType,
- NominalTypeParameter,
+ NominalParameter,
PatternGuard,
PatternSwitchCase,
PositionalParameter,
```
```
The name of the file: pkg/kernel/lib/src/equivalence.dart
Insertions: 27, Deletions: 27.

@@ -851,8 +851,8 @@
}

@override
- bool visitNominalTypeParameter(NominalTypeParameter node, Node other) {
- return strategy.checkNominalTypeParameter(this, node, other);
+ bool visitNominalParameter(NominalParameter node, Node other) {
+ return strategy.checkNominalParameter(this, node, other);
}

@override
@@ -5439,32 +5439,32 @@
return result;
}

- bool checkNominalTypeParameter(
- EquivalenceVisitor visitor, NominalTypeParameter? node, Object? other) {
+ bool checkNominalParameter(
+ EquivalenceVisitor visitor, NominalParameter? node, Object? other) {
if (identical(node, other)) return true;
- if (node is! NominalTypeParameter) return false;
- if (other is! NominalTypeParameter) return false;
+ if (node is! NominalParameter) return false;
+ if (other is! NominalParameter) return false;
visitor.pushNodeState(node, other);
bool result = true;
- if (!checkNominalTypeParameter_flags(visitor, node, other)) {
+ if (!checkNominalParameter_flags(visitor, node, other)) {
result = visitor.resultOnInequivalence;
}
- if (!checkNominalTypeParameter_annotations(visitor, node, other)) {
+ if (!checkNominalParameter_annotations(visitor, node, other)) {
result = visitor.resultOnInequivalence;
}
- if (!checkNominalTypeParameter_name(visitor, node, other)) {
+ if (!checkNominalParameter_name(visitor, node, other)) {
result = visitor.resultOnInequivalence;
}
- if (!checkNominalTypeParameter_bound(visitor, node, other)) {
+ if (!checkNominalParameter_bound(visitor, node, other)) {
result = visitor.resultOnInequivalence;
}
- if (!checkNominalTypeParameter_defaultType(visitor, node, other)) {
+ if (!checkNominalParameter_defaultType(visitor, node, other)) {
result = visitor.resultOnInequivalence;
}
- if (!checkNominalTypeParameter_variance(visitor, node, other)) {
+ if (!checkNominalParameter_variance(visitor, node, other)) {
result = visitor.resultOnInequivalence;
}
- if (!checkNominalTypeParameter_fileOffset(visitor, node, other)) {
+ if (!checkNominalParameter_fileOffset(visitor, node, other)) {
result = visitor.resultOnInequivalence;
}
visitor.popState();
@@ -9798,40 +9798,40 @@
return checkTreeNode_fileOffset(visitor, node, other);
}

- bool checkNominalTypeParameter_flags(EquivalenceVisitor visitor,
- NominalTypeParameter node, NominalTypeParameter other) {
+ bool checkNominalParameter_flags(EquivalenceVisitor visitor,
+ NominalParameter node, NominalParameter other) {
return visitor.checkValues(node.flags, other.flags, 'flags');
}

- bool checkNominalTypeParameter_annotations(EquivalenceVisitor visitor,
- NominalTypeParameter node, NominalTypeParameter other) {
+ bool checkNominalParameter_annotations(EquivalenceVisitor visitor,
+ NominalParameter node, NominalParameter other) {
return visitor.checkLists(
node.annotations, other.annotations, visitor.checkNodes, 'annotations');
}

- bool checkNominalTypeParameter_name(EquivalenceVisitor visitor,
- NominalTypeParameter node, NominalTypeParameter other) {
+ bool checkNominalParameter_name(EquivalenceVisitor visitor,
+ NominalParameter node, NominalParameter other) {
return visitor.checkValues(node.name, other.name, 'name');
}

- bool checkNominalTypeParameter_bound(EquivalenceVisitor visitor,
- NominalTypeParameter node, NominalTypeParameter other) {
+ bool checkNominalParameter_bound(EquivalenceVisitor visitor,
+ NominalParameter node, NominalParameter other) {
return visitor.checkNodes(node.bound, other.bound, 'bound');
}

- bool checkNominalTypeParameter_defaultType(EquivalenceVisitor visitor,
- NominalTypeParameter node, NominalTypeParameter other) {
+ bool checkNominalParameter_defaultType(EquivalenceVisitor visitor,
+ NominalParameter node, NominalParameter other) {
return visitor.checkNodes(
node.defaultType, other.defaultType, 'defaultType');
}

- bool checkNominalTypeParameter_variance(EquivalenceVisitor visitor,
- NominalTypeParameter node, NominalTypeParameter other) {
+ bool checkNominalParameter_variance(EquivalenceVisitor visitor,
+ NominalParameter node, NominalParameter other) {
return visitor.checkValues(node.variance, other.variance, 'variance');
}

- bool checkNominalTypeParameter_fileOffset(EquivalenceVisitor visitor,
- NominalTypeParameter node, NominalTypeParameter other) {
+ bool checkNominalParameter_fileOffset(EquivalenceVisitor visitor,
+ NominalParameter node, NominalParameter other) {
return checkTreeNode_fileOffset(visitor, node, other);
}

```

Change information

Commit message:
[cfe] Make TypeParameter an abstract interface

The concrete implementation is named `NominalTypeParameter`. The
change is needed as a transition step to the new encoding for
variables in Kernel.

This change is similar to
https://dart-review.googlesource.com/c/sdk/+/456620

Part of https://github.com/dart-lang/sdk/issues/61572
Change-Id: I9e4107b50a0790008d65a5ee94a4ff06a1b48052
Reviewed-by: Johnni Winther <johnni...@google.com>
Commit-Queue: Chloe Stefantsova <cstefa...@google.com>
Files:
  • M pkg/front_end/testcases/expression/invalid_type_variable.expression.yaml.expect
  • M pkg/front_end/tool/ast_model.dart
  • M pkg/kernel/lib/src/ast/types.dart
  • M pkg/kernel/lib/src/coverage.dart
  • M pkg/kernel/lib/src/equivalence.dart
  • M pkg/kernel/lib/src/node_creator.dart
  • M pkg/kernel/lib/visitor.dart
  • M pkg/kernel/test/verify_test.dart
Change size: L
Delta: 8 files changed, 196 insertions(+), 119 deletions(-)
Branch: refs/heads/main
Submit Requirements:
  • requirement satisfiedCode-Review: +1 by Johnni Winther
Open in Gerrit
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: merged
Gerrit-Project: sdk
Gerrit-Branch: main
Gerrit-Change-Id: I9e4107b50a0790008d65a5ee94a4ff06a1b48052
Gerrit-Change-Number: 458520
Gerrit-PatchSet: 5
Gerrit-Owner: Chloe Stefantsova <cstefa...@google.com>
Gerrit-Reviewer: Chloe Stefantsova <cstefa...@google.com>
Gerrit-Reviewer: Johnni Winther <johnni...@google.com>
Gerrit-CC: Alexander Markov <alexm...@google.com>
Gerrit-CC: Jens Johansen <je...@google.com>
open
diffy
satisfied_requirement
Reply all
Reply to author
Forward
0 new messages