Skip to content

Commit b246cad

Browse files
jensjohaCommit Queue
authored andcommitted
[parser] Change NullValue usage
This gets rid of (what is described in commented code as) InstantiatedTypeWithArgumentsTest, Subtype1TestCacheLookup, BoolTest. Running this through the benchmarker like this: ``` out/ReleaseX64/dart-sdk/bin/dart pkg/front_end/tool/benchmarker.dart \ --snapshot=pkg/analysis_server/bin/server.aot.1 \ --snapshot=pkg/analysis_server/bin/server.aot.2 \ --arguments="--disable-file-byte-store" \ --arguments="--train-using" \ --arguments="pkg/front_end/lib/" ``` (there `server.aot.1` is without this CL and `server.aot.2` is with) I get: ``` msec task-clock:u: -0.9614% +/- 0.3557% (-78.23 +/- 28.95) (8136.80 -> 8058.57) cycles:u: -1.0257% +/- 0.3626% (-348283560.66 +/- 123129577.69) (33955507948.94 -> 33607224388.28) instructions:u: -1.0595% +/- 0.0662% (-479117043.74 +/- 29935955.93) (45220681554.68 -> 44741564510.94) seconds time elapsed: -0.9548% +/- 0.3540% (-0.08 +/- 0.03) (8.15 -> 8.07) seconds user: -1.0649% +/- 0.4031% (-0.08 +/- 0.03) (7.80 -> 7.72) Scavenge( new space) goes from 130 to 129 Notice combined GC time goes from 2613 ms to 2608 ms (notice only 1 run each). ``` `StackImpl.pop` as reported by `perf report --no-children` goes from 0.81% to 0.34% (and I'm unsure why the apparent change seen as a whole is quite a bit bigger). Change-Id: Ife36da11215e0c8aa706d945f0ee5018ad03ab91 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/432340 Reviewed-by: Johnni Winther <[email protected]> Commit-Queue: Jens Johansen <[email protected]>
1 parent 877fd9a commit b246cad

File tree

6 files changed

+102
-77
lines changed

6 files changed

+102
-77
lines changed

pkg/_fe_analyzer_shared/lib/src/metadata/parser.dart

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1279,13 +1279,15 @@ class AnnotationsListener extends StackListener {
12791279
}
12801280
}
12811281

1282-
enum _NullValues implements NullValue<Object> {
1283-
Arguments,
1284-
Expression,
1285-
FunctionTypeParameters,
1286-
Identifier,
1287-
TypeAnnotation,
1288-
TypeAnnotations,
1282+
class _NullValues {
1283+
static const NullValue Arguments = const NullValue("Argument");
1284+
static const NullValue Expression = const NullValue("Expression");
1285+
static const NullValue FunctionTypeParameters = const NullValue(
1286+
"FunctionTypeParameter",
1287+
);
1288+
static const NullValue Identifier = const NullValue("Identifier");
1289+
static const NullValue TypeAnnotation = const NullValue("TypeAnnotation");
1290+
static const NullValue TypeAnnotations = const NullValue("TypeAnnotations");
12891291
}
12901292

12911293
final Argument _dummyArgument = new PositionalArgument(

pkg/_fe_analyzer_shared/lib/src/parser/stack_listener.dart

Lines changed: 81 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -34,60 +34,87 @@ import '../util/null_value.dart';
3434
/// `NullValues.Expression` is pushed on the stack instead of `null` and when
3535
/// popping the entry `NullValues.Expression` is passed show how `null` is
3636
/// represented.
37-
enum NullValues implements NullValue<Object> {
38-
Arguments,
39-
As,
40-
AwaitToken,
41-
Block,
42-
BreakTarget,
43-
CascadeReceiver,
44-
Combinators,
45-
Comments,
46-
ConditionalUris,
47-
ConditionallySelectedImport,
48-
ConstructorInitializerSeparator,
49-
ConstructorInitializers,
50-
ConstructorReference,
51-
ConstructorReferenceContinuationAfterTypeArguments,
52-
ContinueTarget,
53-
Deferred,
54-
DocumentationComment,
55-
EnumConstantInfo,
56-
Expression,
57-
ExtendsClause,
58-
FieldInitializer,
59-
FormalParameters,
60-
FunctionBody,
61-
FunctionBodyAsyncToken,
62-
FunctionBodyStarToken,
63-
HideClause,
64-
Identifier,
65-
IdentifierList,
66-
Initializers,
67-
Labels,
68-
Metadata,
69-
Modifiers,
70-
Name,
71-
NominalVariable,
72-
NominalParameters,
73-
OperatorList,
74-
ParameterDefaultValue,
75-
Pattern,
76-
PatternList,
77-
Prefix,
78-
RecordTypeFieldList,
79-
ShowClause,
80-
StringLiteral,
81-
StructuralParameters,
82-
Token,
83-
Type,
84-
TypeArguments,
85-
TypeBuilder,
86-
TypeBuilderList,
87-
TypeList,
88-
VarFinalOrConstToken,
89-
VariableDeclarationList,
90-
WithClause,
37+
class NullValues {
38+
static const NullValue Arguments = const NullValue("Arguments");
39+
static const NullValue As = const NullValue("As");
40+
static const NullValue AwaitToken = const NullValue("AwaitToken");
41+
static const NullValue Block = const NullValue("Block");
42+
static const NullValue BreakTarget = const NullValue("BreakTarget");
43+
static const NullValue CascadeReceiver = const NullValue("CascadeReceiver");
44+
static const NullValue Combinators = const NullValue("Combinators");
45+
static const NullValue Comments = const NullValue("Comments");
46+
static const NullValue ConditionalUris = const NullValue("ConditionalUris");
47+
static const NullValue ConditionallySelectedImport = const NullValue(
48+
"ConditionallySelectedImport",
49+
);
50+
static const NullValue ConstructorInitializerSeparator = const NullValue(
51+
"ConstructorInitializerSeparator",
52+
);
53+
static const NullValue ConstructorInitializers = const NullValue(
54+
"ConstructorInitializers",
55+
);
56+
static const NullValue ConstructorReference = const NullValue(
57+
"ConstructorReference",
58+
);
59+
static const NullValue ConstructorReferenceContinuationAfterTypeArguments =
60+
const NullValue("ConstructorReferenceContinuationAfterTypeArguments");
61+
static const NullValue ContinueTarget = const NullValue("ContinueTarget");
62+
static const NullValue Deferred = const NullValue("Deferred");
63+
static const NullValue DocumentationComment = const NullValue(
64+
"DocumentationComment",
65+
);
66+
static const NullValue EnumConstantInfo = const NullValue("EnumConstantInfo");
67+
static const NullValue Expression = const NullValue("Expression");
68+
static const NullValue ExtendsClause = const NullValue("ExtendsClause");
69+
static const NullValue FieldInitializer = const NullValue("FieldInitializer");
70+
static const NullValue FormalParameters = const NullValue("FormalParameters");
71+
static const NullValue FunctionBody = const NullValue("FunctionBody");
72+
static const NullValue FunctionBodyAsyncToken = const NullValue(
73+
"FunctionBodyAsyncToken",
74+
);
75+
static const NullValue FunctionBodyStarToken = const NullValue(
76+
"FunctionBodyStarToken",
77+
);
78+
static const NullValue HideClause = const NullValue("HideClause");
79+
static const NullValue Identifier = const NullValue("Identifier");
80+
static const NullValue IdentifierList = const NullValue("IdentifierList");
81+
static const NullValue Initializers = const NullValue("Initializers");
82+
static const NullValue Labels = const NullValue("Labels");
83+
static const NullValue Metadata = const NullValue("Metadata");
84+
static const NullValue Modifiers = const NullValue("Modifiers");
85+
static const NullValue Name = const NullValue("Name");
86+
static const NullValue NominalVariable = const NullValue("NominalVariable");
87+
static const NullValue NominalParameters = const NullValue(
88+
"NominalParameters",
89+
);
90+
static const NullValue OperatorList = const NullValue("OperatorList");
91+
static const NullValue ParameterDefaultValue = const NullValue(
92+
"ParameterDefaultValue",
93+
);
94+
static const NullValue Pattern = const NullValue("Pattern");
95+
static const NullValue PatternList = const NullValue("PatternList");
96+
static const NullValue Prefix = const NullValue("Prefix");
97+
static const NullValue RecordTypeFieldList = const NullValue(
98+
"RecordTypeFieldList",
99+
);
100+
static const NullValue ShowClause = const NullValue("ShowClause");
101+
static const NullValue StringLiteral = const NullValue("StringLiteral");
102+
static const NullValue StructuralParameters = const NullValue(
103+
"StructuralParameters",
104+
);
105+
static const NullValue Token = const NullValue("Token");
106+
static const NullValue Type = const NullValue("Type");
107+
static const NullValue TypeArguments = const NullValue("TypeArguments");
108+
static const NullValue TypeBuilder = const NullValue("TypeBuilder");
109+
static const NullValue TypeBuilderList = const NullValue("TypeBuilderList");
110+
static const NullValue TypeList = const NullValue("TypeList");
111+
static const NullValue VarFinalOrConstToken = const NullValue(
112+
"VarFinalOrConstToken",
113+
);
114+
static const NullValue VariableDeclarationList = const NullValue(
115+
"VariableDeclarationList",
116+
);
117+
static const NullValue WithClause = const NullValue("WithClause");
91118
}
92119

93120
abstract class StackListener extends Listener with StackChecker {

pkg/_fe_analyzer_shared/lib/src/util/null_value.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@
99
/// `NullValues.Expression` is pushed on the stack instead of `null` and when
1010
/// popping the entry `NullValues.Expression` is passed show how `null` is
1111
/// represented.
12-
class NullValue<T> {
13-
const NullValue();
12+
final class NullValue {
13+
final String T;
14+
const NullValue(this.T);
1415

1516
@override
1617
String toString() => "NullValue<$T>";

pkg/_fe_analyzer_shared/lib/src/util/value_kind.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,7 @@ abstract class ValueKind {
2222
/// A [ValueKind] for a particular type [T], optionally with a recognized
2323
/// [NullValue].
2424
class SingleValueKind<T> implements ValueKind {
25-
// TODO(johnniwinther): Type this as `NullValue<T>?`.
26-
final NullValue<Object>? nullValue;
25+
final NullValue? nullValue;
2726

2827
const SingleValueKind([this.nullValue]);
2928

pkg/analyzer/lib/src/fasta/ast_builder.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1884,7 +1884,7 @@ class AstBuilder extends StackListener {
18841884
var implementsClause =
18851885
pop(NullValues.IdentifierList) as ImplementsClauseImpl?;
18861886
var representation =
1887-
pop(const NullValue<RepresentationDeclarationImpl>())
1887+
pop(const NullValue("RepresentationDeclarationImpl"))
18881888
as RepresentationDeclarationImpl?;
18891889
var constKeyword = pop() as Token?;
18901890

@@ -3164,7 +3164,7 @@ class AstBuilder extends StackListener {
31643164
fieldName = parser.rewriter.insertSyntheticIdentifier(typeNameToken);
31653165
}
31663166

3167-
push(constKeyword ?? const NullValue<Token>());
3167+
push(constKeyword ?? const NullValue("Token"));
31683168

31693169
push(
31703170
RepresentationDeclarationImpl(
@@ -5418,9 +5418,9 @@ class AstBuilder extends StackListener {
54185418

54195419
@override
54205420
void handleNoPrimaryConstructor(Token token, Token? constKeyword) {
5421-
push(constKeyword ?? const NullValue<Token>());
5421+
push(constKeyword ?? const NullValue("Token"));
54225422

5423-
push(const NullValue<RepresentationDeclarationImpl>());
5423+
push(const NullValue("RepresentationDeclarationImpl"));
54245424
}
54255425

54265426
@override

pkg/front_end/lib/src/type_inference/stack_values.dart

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,10 @@ import 'package:_fe_analyzer_shared/src/util/value_kind.dart';
77
import 'package:kernel/ast.dart' as type;
88

99
class NullValues {
10-
static const NullValue<type.Expression> Expression =
11-
const NullValue<type.Expression>();
12-
static const NullValue<type.MapLiteralEntry> MapLiteralEntry =
13-
const NullValue<type.MapLiteralEntry>();
14-
static const NullValue<type.Pattern> Pattern =
15-
const NullValue<type.Pattern>();
16-
static const NullValue<type.Statement> Statement =
17-
const NullValue<type.Statement>();
10+
static const NullValue Expression = const NullValue("Expression");
11+
static const NullValue MapLiteralEntry = const NullValue("MapLiteralEntry");
12+
static const NullValue Pattern = const NullValue("Pattern");
13+
static const NullValue Statement = const NullValue("Statement");
1814
}
1915

2016
class ValueKinds {

0 commit comments

Comments
 (0)