Skip to content

Commit b3ae203

Browse files
jensjohacommit-bot@chromium.org
authored andcommitted
[CFE] Add hash-code to UnevaluatedConstants and add extra canonicalization for them
This gets rid of some of the weirdness about `UnevaluatedConstant`s. Change-Id: I5e34dedd7ad4ad5ef57b3f27e17b456f5619e14d Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/167281 Commit-Queue: Jens Johansen <[email protected]> Reviewed-by: Johnni Winther <[email protected]>
1 parent 6f77fa4 commit b3ae203

11 files changed

+264
-381
lines changed

pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -925,8 +925,8 @@ class ConstantEvaluator extends RecursiveVisitor<Constant> {
925925
if (errorOnUnevaluatedConstant) {
926926
return createErrorConstant(node, messageConstEvalUnevaluated);
927927
}
928-
return new UnevaluatedConstant(
929-
removeRedundantFileUriExpressions(result.expression));
928+
return canonicalize(new UnevaluatedConstant(
929+
removeRedundantFileUriExpressions(result.expression)));
930930
}
931931
return result;
932932
}

pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart.strong.expect

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ static const field self::Bar bar2 = invalid-expression "This assertion failed wi
107107
static const field self::Bar bar3 = invalid-expression "This assertion failed.";
108108
static const field self::Bar bar4 = invalid-expression "This assertion failed.";
109109
static method main() → dynamic {
110-
core::print(#C13);
110+
core::print(#C9);
111111
}
112112

113113
constants {
@@ -123,5 +123,4 @@ constants {
123123
#C10 = 42
124124
#C11 = "btw foo was "
125125
#C12 = eval self::Foo{x:#C10, assert(#C7, "${#C11}${const core::bool::fromEnvironment(#C1)}")}
126-
#C13 = eval self::Foo{x:#C6, assert(const core::bool::fromEnvironment(#C1).==(#C7), "${#C8}${const core::bool::fromEnvironment(#C1)}"), assert(const core::bool::fromEnvironment(#C1).==(#C7))}
127126
}

pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_collections.dart.strong.expect

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,12 @@ static const field core::Set<core::List<core::int?>> setNotAgnosticOK = invalid-
3939
static const field invalid-type MapWithUnevaluated = #C18;
4040
static const field core::Map<core::List<core::int?>, core::int> mapNotAgnosticOK = invalid-expression "Constant value is not strong/weak mode agnostic.";
4141
static method main() → dynamic {
42-
core::print(#C19);
43-
core::print(#C20);
44-
core::print(#C21);
45-
core::print(#C22);
42+
core::print(#C5);
43+
core::print(#C9);
44+
core::print(#C11);
45+
core::print(#C14);
4646
core::print(<core::String>{"hello"});
47-
core::print(#C24);
47+
core::print(#C20);
4848
}
4949

5050
constants {
@@ -66,10 +66,6 @@ constants {
6666
#C16 = <core::int?>[]
6767
#C17 = <core::bool, core::bool>{)
6868
#C18 = eval #C17 + const <dynamic, dynamic>{const core::bool::fromEnvironment(#C2): const core::bool::fromEnvironment(#C3)}
69-
#C19 = eval #C1 + const <dynamic>[const core::bool::fromEnvironment(#C2)] + const <dynamic>[const core::bool::fromEnvironment(#C3)] + const <dynamic>[#C4]
70-
#C20 = eval #C6 + #C1 + const <dynamic>[const core::bool::fromEnvironment(#C2)] + const <dynamic>[const core::bool::fromEnvironment(#C3)] + const <dynamic>[#C4] + #C8
71-
#C21 = eval #C10 + const <dynamic>{const core::bool::fromEnvironment(#C2)} + const <dynamic>{const core::bool::fromEnvironment(#C3)} + const <dynamic>{#C4}
72-
#C22 = eval #C12 + #C10 + const <dynamic>{const core::bool::fromEnvironment(#C2)} + const <dynamic>{const core::bool::fromEnvironment(#C3)} + const <dynamic>{#C4} + #C13
73-
#C23 = "hello"
74-
#C24 = <core::String>{#C23}
69+
#C19 = "hello"
70+
#C20 = <core::String>{#C19}
7571
}

pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/many_fields_pointing_to_previous_field.dart.strong.expect

Lines changed: 50 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -3,56 +3,56 @@ import self as self;
33
import "dart:core" as core;
44

55
static const field core::List<core::String> original = #C10;
6-
static const field core::List<core::String> copy1 = #C11;
7-
static const field core::List<core::String> copy2 = #C12;
8-
static const field core::List<core::String> copy3 = #C13;
9-
static const field core::List<core::String> copy4 = #C14;
10-
static const field core::List<core::String> copy5 = #C15;
11-
static const field core::List<core::String> copy6 = #C16;
12-
static const field core::List<core::String> copy7 = #C17;
13-
static const field core::List<core::String> copy8 = #C18;
14-
static const field core::List<core::String> copy9 = #C19;
15-
static const field core::List<core::String> copy10 = #C20;
16-
static const field core::List<core::String> copy11 = #C21;
17-
static const field core::List<core::String> copy12 = #C22;
18-
static const field core::List<core::String> copy13 = #C23;
19-
static const field core::List<core::String> copy14 = #C24;
20-
static const field core::List<core::String> copy15 = #C25;
21-
static const field core::List<core::String> copy16 = #C26;
22-
static const field core::List<core::String> copy17 = #C27;
23-
static const field core::List<core::String> copy18 = #C28;
24-
static const field core::List<core::String> copy19 = #C29;
25-
static const field core::List<core::String> copy20 = #C30;
26-
static const field core::List<core::String> copy21 = #C31;
27-
static const field core::List<core::String> copy22 = #C32;
28-
static const field core::List<core::String> copy23 = #C33;
29-
static const field core::List<core::String> copy24 = #C34;
30-
static const field core::List<core::String> copy25 = #C35;
31-
static const field core::List<core::String> copy26 = #C36;
32-
static const field core::List<core::String> copy27 = #C37;
33-
static const field core::List<core::String> copy28 = #C38;
34-
static const field core::List<core::String> copy29 = #C39;
35-
static const field core::List<core::String> copy30 = #C40;
36-
static const field core::List<core::String> copy31 = #C41;
37-
static const field core::List<core::String> copy32 = #C42;
38-
static const field core::List<core::String> copy33 = #C43;
39-
static const field core::List<core::String> copy34 = #C44;
40-
static const field core::List<core::String> copy35 = #C45;
41-
static const field core::List<core::String> copy36 = #C46;
42-
static const field core::List<core::String> copy37 = #C47;
43-
static const field core::List<core::String> copy38 = #C48;
44-
static const field core::List<core::String> copy39 = #C49;
45-
static const field core::List<core::String> copy40 = #C50;
46-
static const field core::List<core::String> copy41 = #C51;
47-
static const field core::List<core::String> copy42 = #C52;
48-
static const field core::List<core::String> copy43 = #C53;
49-
static const field core::List<core::String> copy44 = #C54;
50-
static const field core::List<core::String> copy45 = #C55;
51-
static const field core::List<core::String> copy46 = #C56;
52-
static const field core::List<core::String> copy47 = #C57;
53-
static const field core::List<core::String> copy48 = #C58;
54-
static const field core::List<core::String> copy49 = #C59;
55-
static const field core::List<core::String> copy50 = #C60;
6+
static const field core::List<core::String> copy1 = #C10;
7+
static const field core::List<core::String> copy2 = #C10;
8+
static const field core::List<core::String> copy3 = #C10;
9+
static const field core::List<core::String> copy4 = #C10;
10+
static const field core::List<core::String> copy5 = #C10;
11+
static const field core::List<core::String> copy6 = #C10;
12+
static const field core::List<core::String> copy7 = #C10;
13+
static const field core::List<core::String> copy8 = #C10;
14+
static const field core::List<core::String> copy9 = #C10;
15+
static const field core::List<core::String> copy10 = #C10;
16+
static const field core::List<core::String> copy11 = #C10;
17+
static const field core::List<core::String> copy12 = #C10;
18+
static const field core::List<core::String> copy13 = #C10;
19+
static const field core::List<core::String> copy14 = #C10;
20+
static const field core::List<core::String> copy15 = #C10;
21+
static const field core::List<core::String> copy16 = #C10;
22+
static const field core::List<core::String> copy17 = #C10;
23+
static const field core::List<core::String> copy18 = #C10;
24+
static const field core::List<core::String> copy19 = #C10;
25+
static const field core::List<core::String> copy20 = #C10;
26+
static const field core::List<core::String> copy21 = #C10;
27+
static const field core::List<core::String> copy22 = #C10;
28+
static const field core::List<core::String> copy23 = #C10;
29+
static const field core::List<core::String> copy24 = #C10;
30+
static const field core::List<core::String> copy25 = #C10;
31+
static const field core::List<core::String> copy26 = #C10;
32+
static const field core::List<core::String> copy27 = #C10;
33+
static const field core::List<core::String> copy28 = #C10;
34+
static const field core::List<core::String> copy29 = #C10;
35+
static const field core::List<core::String> copy30 = #C10;
36+
static const field core::List<core::String> copy31 = #C10;
37+
static const field core::List<core::String> copy32 = #C10;
38+
static const field core::List<core::String> copy33 = #C10;
39+
static const field core::List<core::String> copy34 = #C10;
40+
static const field core::List<core::String> copy35 = #C10;
41+
static const field core::List<core::String> copy36 = #C10;
42+
static const field core::List<core::String> copy37 = #C10;
43+
static const field core::List<core::String> copy38 = #C10;
44+
static const field core::List<core::String> copy39 = #C10;
45+
static const field core::List<core::String> copy40 = #C10;
46+
static const field core::List<core::String> copy41 = #C10;
47+
static const field core::List<core::String> copy42 = #C10;
48+
static const field core::List<core::String> copy43 = #C10;
49+
static const field core::List<core::String> copy44 = #C10;
50+
static const field core::List<core::String> copy45 = #C10;
51+
static const field core::List<core::String> copy46 = #C10;
52+
static const field core::List<core::String> copy47 = #C10;
53+
static const field core::List<core::String> copy48 = #C10;
54+
static const field core::List<core::String> copy49 = #C10;
55+
static const field core::List<core::String> copy50 = #C10;
5656

5757
constants {
5858
#C1 = "lots"
@@ -65,54 +65,4 @@ constants {
6565
#C8 = "already"
6666
#C9 = "constants"
6767
#C10 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
68-
#C11 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
69-
#C12 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
70-
#C13 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
71-
#C14 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
72-
#C15 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
73-
#C16 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
74-
#C17 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
75-
#C18 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
76-
#C19 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
77-
#C20 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
78-
#C21 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
79-
#C22 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
80-
#C23 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
81-
#C24 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
82-
#C25 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
83-
#C26 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
84-
#C27 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
85-
#C28 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
86-
#C29 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
87-
#C30 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
88-
#C31 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
89-
#C32 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
90-
#C33 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
91-
#C34 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
92-
#C35 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
93-
#C36 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
94-
#C37 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
95-
#C38 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
96-
#C39 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
97-
#C40 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
98-
#C41 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
99-
#C42 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
100-
#C43 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
101-
#C44 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
102-
#C45 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
103-
#C46 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
104-
#C47 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
105-
#C48 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
106-
#C49 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
107-
#C50 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
108-
#C51 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
109-
#C52 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
110-
#C53 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
111-
#C54 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
112-
#C55 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
113-
#C56 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
114-
#C57 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
115-
#C58 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
116-
#C59 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
117-
#C60 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + const <dynamic>[#C6] + const <dynamic>[#C7] + const <dynamic>[#C8] + const <dynamic>[#C9]
11868
}

0 commit comments

Comments
 (0)