Version 2.14.0-276.0.dev
Merge commit 'e94ae6cbf33fa695ec6feff2f6f2892736fec557' into 'dev'
diff --git a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
index 4985f7d..fa2b398 100644
--- a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
@@ -712,7 +712,8 @@
TreeNode visitInstantiation(Instantiation node, TreeNode? removalSentinel) {
Instantiation result =
super.visitInstantiation(node, removalSentinel) as Instantiation;
- if (result.expression is ConstantExpression &&
+ if (enableConstructorTearOff &&
+ result.expression is ConstantExpression &&
result.typeArguments.every(isInstantiated)) {
return evaluateAndTransformWithContext(node, result);
}
diff --git a/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart b/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart
index f60235a..955feff 100644
--- a/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart
+++ b/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart
@@ -2,6 +2,15 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+// @dart=2.13
+
+// This test is similar to
+//
+// constructor_tearoffs/identical_instantiated_function_tearoffs.dart
+//
+// but verifies that before the constructor-tearoffs experiment was enabled,
+// instantiations in non-constant context were not canonicalized.
+
T id<T>(T t) => t;
int Function(int) implicitInstantiation = id;
@@ -11,10 +20,10 @@
main() {
expect(true, identical(implicitInstantiation, implicitInstantiation));
- expect(true, identical(implicitInstantiation, implicitConstInstantiation));
+ expect(false, identical(implicitInstantiation, implicitConstInstantiation));
expect(false, identical(implicitInstantiation, create<int>()));
- expect(true, identical(implicitConstInstantiation, implicitInstantiation));
+ expect(false, identical(implicitConstInstantiation, implicitInstantiation));
expect(
true, identical(implicitConstInstantiation, implicitConstInstantiation));
expect(false, identical(implicitConstInstantiation, create<int>()));
diff --git a/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.textual_outline.expect b/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.textual_outline.expect
index 42d4b37..90e26eb 100644
--- a/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.textual_outline.expect
+++ b/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.textual_outline.expect
@@ -1,3 +1,4 @@
+// @dart = 2.13
T id<T>(T t) => t;
int Function(int) implicitInstantiation = id;
const int Function(int) implicitConstInstantiation = id;
diff --git a/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.textual_outline_modelled.expect
index 9a6b746..a0e9251 100644
--- a/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.textual_outline_modelled.expect
+++ b/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.textual_outline_modelled.expect
@@ -1,3 +1,4 @@
+// @dart = 2.13
T Function(T) create<T>() => id;
T id<T>(T t) => t;
const int Function(int) implicitConstInstantiation = id;
diff --git a/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.weak.expect b/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.weak.expect
index 2190c5f..daf6f36 100644
--- a/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.weak.expect
+++ b/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.weak.expect
@@ -2,7 +2,7 @@
import self as self;
import "dart:core" as core;
-static field (core::int) → core::int implicitInstantiation = #C2;
+static field (core::int) → core::int implicitInstantiation = #C1<core::int>;
static const field (core::int) → core::int implicitConstInstantiation = #C2;
static method id<T extends core::Object? = dynamic>(self::id::T% t) → self::id::T%
return t;
@@ -10,9 +10,9 @@
return #C1<self::create::T%>;
static method main() → dynamic {
self::expect(true, core::identical(self::implicitInstantiation, self::implicitInstantiation));
- self::expect(true, core::identical(self::implicitInstantiation, #C2));
+ self::expect(false, core::identical(self::implicitInstantiation, #C2));
self::expect(false, core::identical(self::implicitInstantiation, self::create<core::int>()));
- self::expect(true, core::identical(#C2, self::implicitInstantiation));
+ self::expect(false, core::identical(#C2, self::implicitInstantiation));
self::expect(true, core::identical(#C2, #C2));
self::expect(false, core::identical(#C2, self::create<core::int>()));
}
diff --git a/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.weak.outline.expect b/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.weak.outline.expect
index bf07e2b..9e4506e 100644
--- a/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.weak.outline.expect
@@ -15,5 +15,5 @@
Extra constant evaluation status:
-Evaluated: Instantiation @ org-dartlang-testcase:///identical_instantiated_function_tearoffs.dart:8:54 -> InstantiationConstant(id<int*>)
+Evaluated: Instantiation @ org-dartlang-testcase:///identical_instantiated_function_tearoffs.dart:17:54 -> InstantiationConstant(id<int*>)
Extra constant evaluation: evaluated: 1, effectively constant: 1
diff --git a/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.weak.transformed.expect b/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.weak.transformed.expect
index 00ad1f6..e0f574c 100644
--- a/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/identical_instantiated_function_tearoffs.dart.weak.transformed.expect
@@ -2,7 +2,7 @@
import self as self;
import "dart:core" as core;
-static field (core::int) → core::int implicitInstantiation = #C2;
+static field (core::int) → core::int implicitInstantiation = #C1<core::int>;
static const field (core::int) → core::int implicitConstInstantiation = #C2;
static method id<T extends core::Object? = dynamic>(self::id::T% t) → self::id::T%
return t;
@@ -10,9 +10,9 @@
return #C1<self::create::T%>;
static method main() → dynamic {
self::expect(true, core::identical(self::implicitInstantiation, self::implicitInstantiation));
- self::expect(true, core::identical(self::implicitInstantiation, #C2));
+ self::expect(false, core::identical(self::implicitInstantiation, #C2));
self::expect(false, core::identical(self::implicitInstantiation, self::create<core::int>()));
- self::expect(true, core::identical(#C2, self::implicitInstantiation));
+ self::expect(false, core::identical(#C2, self::implicitInstantiation));
self::expect(true, core::identical(#C2, #C2));
self::expect(false, core::identical(#C2, self::create<core::int>()));
}
@@ -27,5 +27,6 @@
}
Extra constant evaluation status:
-Evaluated: StaticInvocation @ org-dartlang-testcase:///identical_instantiated_function_tearoffs.dart:19:13 -> BoolConstant(true)
-Extra constant evaluation: evaluated: 29, effectively constant: 1
+Evaluated: StaticInvocation @ org-dartlang-testcase:///identical_instantiated_function_tearoffs.dart:28:13 -> BoolConstant(true)
+Evaluated: Instantiation @ org-dartlang-testcase:///identical_instantiated_function_tearoffs.dart:16:43 -> InstantiationConstant(id<int*>)
+Extra constant evaluation: evaluated: 30, effectively constant: 2
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.expect
index 4c414f6..2c7b116 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.expect
@@ -104,42 +104,42 @@
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
static method test() → dynamic {
- self::takeIII(#C2);
- self::takeDDD(#C3);
- self::takeNNN(#C4);
- self::takeIDN(#C4);
- self::takeDIN(#C4);
- self::takeIIN(#C2);
- self::takeDDN(#C3);
- self::takeIIO(#C2);
- self::takeDDO(#C3);
- self::takeOOI((#C5) as{TypeError} (core::Object*, core::Object*) →* core::int*);
+ self::takeIII(#C1<core::int*>);
+ self::takeDDD(#C1<core::double*>);
+ self::takeNNN(#C1<core::num*>);
+ self::takeIDN(#C1<core::num*>);
+ self::takeDIN(#C1<core::num*>);
+ self::takeIIN(#C1<core::int*>);
+ self::takeDDN(#C1<core::double*>);
+ self::takeIIO(#C1<core::int*>);
+ self::takeDDO(#C1<core::double*>);
+ self::takeOOI((#C1<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::int*);
self::takeIDI(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:28:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
- ^" in (#C4) as{TypeError} (core::double*, core::int*) →* core::int*);
+ ^" in (#C1<core::num*>) as{TypeError} (core::double*, core::int*) →* core::int*);
self::takeDID(let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:30:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
- ^" in (#C4) as{TypeError} (core::int*, core::double*) →* core::double*);
- self::takeOON((#C5) as{TypeError} (core::Object*, core::Object*) →* core::num*);
- self::takeOOO((#C5) as{TypeError} (core::Object*, core::Object*) →* core::num*);
- self::takeIII(#C7);
- self::takeDDD(#C8);
- self::takeNNN(#C9);
- self::takeIDN(#C9);
- self::takeDIN(#C9);
- self::takeIIN(#C7);
- self::takeDDN(#C8);
- self::takeIIO(#C7);
- self::takeDDO(#C8);
- self::takeOOI((#C10) as{TypeError} (core::Object*, core::Object*) →* core::int*);
+ ^" in (#C1<core::num*>) as{TypeError} (core::int*, core::double*) →* core::double*);
+ self::takeOON((#C1<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::num*);
+ self::takeOOO((#C1<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::num*);
+ self::takeIII(#C2<core::int*>);
+ self::takeDDD(#C2<core::double*>);
+ self::takeNNN(#C2<core::num*>);
+ self::takeIDN(#C2<core::num*>);
+ self::takeDIN(#C2<core::num*>);
+ self::takeIIN(#C2<core::int*>);
+ self::takeDDN(#C2<core::double*>);
+ self::takeIIO(#C2<core::int*>);
+ self::takeDDO(#C2<core::double*>);
+ self::takeOOI((#C2<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::int*);
self::takeIDI(let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:46:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
takeIDI(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
- ^" in (#C9) as{TypeError} (core::double*, core::int*) →* core::int*);
+ ^" in (#C2<core::num*>) as{TypeError} (core::double*, core::int*) →* core::int*);
self::takeDID(let final Never* #t4 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:47:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
takeDID(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
- ^" in (#C9) as{TypeError} (core::int*, core::double*) →* core::double*);
- self::takeOON((#C10) as{TypeError} (core::Object*, core::Object*) →* core::num*);
- self::takeOOO((#C10) as{TypeError} (core::Object*, core::Object*) →* core::num*);
+ ^" in (#C2<core::num*>) as{TypeError} (core::int*, core::double*) →* core::double*);
+ self::takeOON((#C2<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::num*);
+ self::takeOOO((#C2<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::num*);
self::takeIII(new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::int*>);
self::takeDDD(new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::double*>);
self::takeNNN(new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::num*>);
@@ -177,13 +177,5 @@
constants {
#C1 = tearoff math::max
- #C2 = partial-instantiation math::max <core::int*>
- #C3 = partial-instantiation math::max <core::double*>
- #C4 = partial-instantiation math::max <core::num*>
- #C5 = partial-instantiation math::max <core::Object*>
- #C6 = tearoff math::min
- #C7 = partial-instantiation math::min <core::int*>
- #C8 = partial-instantiation math::min <core::double*>
- #C9 = partial-instantiation math::min <core::num*>
- #C10 = partial-instantiation math::min <core::Object*>
+ #C2 = tearoff math::min
}
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.transformed.expect
index 4c414f6..9dc6b9b 100644
--- a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.transformed.expect
@@ -104,42 +104,42 @@
abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
static method test() → dynamic {
- self::takeIII(#C2);
- self::takeDDD(#C3);
- self::takeNNN(#C4);
- self::takeIDN(#C4);
- self::takeDIN(#C4);
- self::takeIIN(#C2);
- self::takeDDN(#C3);
- self::takeIIO(#C2);
- self::takeDDO(#C3);
- self::takeOOI((#C5) as{TypeError} (core::Object*, core::Object*) →* core::int*);
+ self::takeIII(#C1<core::int*>);
+ self::takeDDD(#C1<core::double*>);
+ self::takeNNN(#C1<core::num*>);
+ self::takeIDN(#C1<core::num*>);
+ self::takeDIN(#C1<core::num*>);
+ self::takeIIN(#C1<core::int*>);
+ self::takeDDN(#C1<core::double*>);
+ self::takeIIO(#C1<core::int*>);
+ self::takeDDO(#C1<core::double*>);
+ self::takeOOI((#C1<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::int*);
self::takeIDI(let final Never* #t1 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:28:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
- ^" in (#C4) as{TypeError} (core::double*, core::int*) →* core::int*);
+ ^" in (#C1<core::num*>) as{TypeError} (core::double*, core::int*) →* core::int*);
self::takeDID(let final Never* #t2 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:30:73: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ math.max);
- ^" in (#C4) as{TypeError} (core::int*, core::double*) →* core::double*);
- self::takeOON((#C5) as{TypeError} (core::Object*, core::Object*) →* core::num*);
- self::takeOOO((#C5) as{TypeError} (core::Object*, core::Object*) →* core::num*);
- self::takeIII(#C7);
- self::takeDDD(#C8);
- self::takeNNN(#C9);
- self::takeIDN(#C9);
- self::takeDIN(#C9);
- self::takeIIN(#C7);
- self::takeDDN(#C8);
- self::takeIIO(#C7);
- self::takeDDO(#C8);
- self::takeOOI((#C10) as{TypeError} (core::Object*, core::Object*) →* core::int*);
+ ^" in (#C1<core::num*>) as{TypeError} (core::int*, core::double*) →* core::double*);
+ self::takeOON((#C1<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::num*);
+ self::takeOOO((#C1<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::num*);
+ self::takeIII(#C2<core::int*>);
+ self::takeDDD(#C2<core::double*>);
+ self::takeNNN(#C2<core::num*>);
+ self::takeIDN(#C2<core::num*>);
+ self::takeDIN(#C2<core::num*>);
+ self::takeIIN(#C2<core::int*>);
+ self::takeDDN(#C2<core::double*>);
+ self::takeIIO(#C2<core::int*>);
+ self::takeDDO(#C2<core::double*>);
+ self::takeOOI((#C2<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::int*);
self::takeIDI(let final Never* #t3 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:46:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'int Function(double, int)'.
takeIDI(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
- ^" in (#C9) as{TypeError} (core::double*, core::int*) →* core::int*);
+ ^" in (#C2<core::num*>) as{TypeError} (core::double*, core::int*) →* core::int*);
self::takeDID(let final Never* #t4 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart:47:72: Error: The argument type 'num Function(num, num)' can't be assigned to the parameter type 'double Function(int, double)'.
takeDID(/*error:COULD_NOT_INFER,error:ARGUMENT_TYPE_NOT_ASSIGNABLE*/ min);
- ^" in (#C9) as{TypeError} (core::int*, core::double*) →* core::double*);
- self::takeOON((#C10) as{TypeError} (core::Object*, core::Object*) →* core::num*);
- self::takeOOO((#C10) as{TypeError} (core::Object*, core::Object*) →* core::num*);
+ ^" in (#C2<core::num*>) as{TypeError} (core::int*, core::double*) →* core::double*);
+ self::takeOON((#C2<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::num*);
+ self::takeOOO((#C2<core::Object*>) as{TypeError} (core::Object*, core::Object*) →* core::num*);
self::takeIII(new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::int*>);
self::takeDDD(new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::double*>);
self::takeNNN(new self::C::•().{self::C::m}{<T extends core::num*>(T*, T*) →* T*}<core::num*>);
@@ -177,13 +177,36 @@
constants {
#C1 = tearoff math::max
- #C2 = partial-instantiation math::max <core::int*>
- #C3 = partial-instantiation math::max <core::double*>
- #C4 = partial-instantiation math::max <core::num*>
- #C5 = partial-instantiation math::max <core::Object*>
- #C6 = tearoff math::min
- #C7 = partial-instantiation math::min <core::int*>
- #C8 = partial-instantiation math::min <core::double*>
- #C9 = partial-instantiation math::min <core::num*>
- #C10 = partial-instantiation math::min <core::Object*>
+ #C2 = tearoff math::min
}
+
+Extra constant evaluation status:
+Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:16:16 -> InstantiationConstant(max<int*>)
+Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:17:16 -> InstantiationConstant(max<double*>)
+Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:18:16 -> InstantiationConstant(max<num*>)
+Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:19:16 -> InstantiationConstant(max<num*>)
+Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:20:16 -> InstantiationConstant(max<num*>)
+Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:21:16 -> InstantiationConstant(max<int*>)
+Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:22:16 -> InstantiationConstant(max<double*>)
+Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:23:16 -> InstantiationConstant(max<int*>)
+Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:24:16 -> InstantiationConstant(max<double*>)
+Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:26:70 -> InstantiationConstant(max<Object*>)
+Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:28:73 -> InstantiationConstant(max<num*>)
+Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:30:73 -> InstantiationConstant(max<num*>)
+Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:31:70 -> InstantiationConstant(max<Object*>)
+Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:32:70 -> InstantiationConstant(max<Object*>)
+Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:35:11 -> InstantiationConstant(min<int*>)
+Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:36:11 -> InstantiationConstant(min<double*>)
+Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:37:11 -> InstantiationConstant(min<num*>)
+Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:38:11 -> InstantiationConstant(min<num*>)
+Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:39:11 -> InstantiationConstant(min<num*>)
+Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:40:11 -> InstantiationConstant(min<int*>)
+Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:41:11 -> InstantiationConstant(min<double*>)
+Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:42:11 -> InstantiationConstant(min<int*>)
+Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:43:11 -> InstantiationConstant(min<double*>)
+Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:45:65 -> InstantiationConstant(min<Object*>)
+Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:46:72 -> InstantiationConstant(min<num*>)
+Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:47:72 -> InstantiationConstant(min<num*>)
+Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:48:65 -> InstantiationConstant(min<Object*>)
+Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:49:65 -> InstantiationConstant(min<Object*>)
+Extra constant evaluation: evaluated: 133, effectively constant: 28
diff --git a/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.expect b/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.expect
index a4f335a..34108a8 100644
--- a/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.expect
@@ -39,11 +39,10 @@
static method main() → dynamic {
core::List<self::Trace*>* traces = <self::Trace*>[];
core::int* longest = traces.{core::Iterable::map}<core::int*>((self::Trace* trace) → core::int* {
- return trace.{self::Trace::frames}{core::List<self::Frame*>*}.{core::Iterable::map}<core::int*>((self::Frame* frame) → core::int* => frame.{self::Frame::location}{core::String*}.{core::String::length}{core::int*}){((self::Frame*) →* core::int*) →* core::Iterable<core::int*>*}.{core::Iterable::fold}<core::int*>(0, #C2){(core::int*, (core::int*, core::int*) →* core::int*) →* core::int*};
- }){((self::Trace*) →* core::int*) →* core::Iterable<core::int*>*}.{core::Iterable::fold}<core::int*>(0, #C2){(core::int*, (core::int*, core::int*) →* core::int*) →* core::int*};
+ return trace.{self::Trace::frames}{core::List<self::Frame*>*}.{core::Iterable::map}<core::int*>((self::Frame* frame) → core::int* => frame.{self::Frame::location}{core::String*}.{core::String::length}{core::int*}){((self::Frame*) →* core::int*) →* core::Iterable<core::int*>*}.{core::Iterable::fold}<core::int*>(0, #C1<core::int*>){(core::int*, (core::int*, core::int*) →* core::int*) →* core::int*};
+ }){((self::Trace*) →* core::int*) →* core::Iterable<core::int*>*}.{core::Iterable::fold}<core::int*>(0, #C1<core::int*>){(core::int*, (core::int*, core::int*) →* core::int*) →* core::int*};
}
constants {
#C1 = tearoff math::max
- #C2 = partial-instantiation math::max <core::int*>
}
diff --git a/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.transformed.expect
index 712cd8d..8af73b0 100644
--- a/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.transformed.expect
@@ -39,11 +39,15 @@
static method main() → dynamic {
core::List<self::Trace*>* traces = core::_GrowableList::•<self::Trace*>(0);
core::int* longest = traces.{core::Iterable::map}<core::int*>((self::Trace* trace) → core::int* {
- return trace.{self::Trace::frames}{core::List<self::Frame*>*}.{core::Iterable::map}<core::int*>((self::Frame* frame) → core::int* => frame.{self::Frame::location}{core::String*}.{core::String::length}{core::int*}){((self::Frame*) →* core::int*) →* core::Iterable<core::int*>*}.{core::Iterable::fold}<core::int*>(0, #C2){(core::int*, (core::int*, core::int*) →* core::int*) →* core::int*};
- }){((self::Trace*) →* core::int*) →* core::Iterable<core::int*>*}.{core::Iterable::fold}<core::int*>(0, #C2){(core::int*, (core::int*, core::int*) →* core::int*) →* core::int*};
+ return trace.{self::Trace::frames}{core::List<self::Frame*>*}.{core::Iterable::map}<core::int*>((self::Frame* frame) → core::int* => frame.{self::Frame::location}{core::String*}.{core::String::length}{core::int*}){((self::Frame*) →* core::int*) →* core::Iterable<core::int*>*}.{core::Iterable::fold}<core::int*>(0, #C1<core::int*>){(core::int*, (core::int*, core::int*) →* core::int*) →* core::int*};
+ }){((self::Trace*) →* core::int*) →* core::Iterable<core::int*>*}.{core::Iterable::fold}<core::int*>(0, #C1<core::int*>){(core::int*, (core::int*, core::int*) →* core::int*) →* core::int*};
}
constants {
#C1 = tearoff math::max
- #C2 = partial-instantiation math::max <core::int*>
}
+
+Extra constant evaluation status:
+Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_nested_generic_instantiation.dart:28:71 -> InstantiationConstant(max<int*>)
+Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_nested_generic_instantiation.dart:29:67 -> InstantiationConstant(max<int*>)
+Extra constant evaluation: evaluated: 16, effectively constant: 2
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.expect b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.expect
index 060082e..41e2e41 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.expect
@@ -36,16 +36,14 @@
function h<T extends core::Object* = dynamic>(T* x) → T*
return x;
(core::int*) →* core::int* func;
- func = #C2;
+ func = #C1<core::int*>;
func = new self::C::•().{self::C::f}{<T extends core::Object* = dynamic>(T*) →* T*}<core::int*>;
- func = #C4;
+ func = #C2<core::int*>;
func = h<core::int*>;
}
static method main() → dynamic {}
constants {
#C1 = tearoff self::f
- #C2 = partial-instantiation self::f <core::int*>
- #C3 = tearoff self::C::g
- #C4 = partial-instantiation self::C::g <core::int*>
+ #C2 = tearoff self::C::g
}
diff --git a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.transformed.expect b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.transformed.expect
index 060082e..4c5080b 100644
--- a/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.transformed.expect
@@ -36,16 +36,19 @@
function h<T extends core::Object* = dynamic>(T* x) → T*
return x;
(core::int*) →* core::int* func;
- func = #C2;
+ func = #C1<core::int*>;
func = new self::C::•().{self::C::f}{<T extends core::Object* = dynamic>(T*) →* T*}<core::int*>;
- func = #C4;
+ func = #C2<core::int*>;
func = h<core::int*>;
}
static method main() → dynamic {}
constants {
#C1 = tearoff self::f
- #C2 = partial-instantiation self::f <core::int*>
- #C3 = tearoff self::C::g
- #C4 = partial-instantiation self::C::g <core::int*>
+ #C2 = tearoff self::C::g
}
+
+Extra constant evaluation status:
+Evaluated: Instantiation @ org-dartlang-testcase:///instantiate_tearoff.dart:25:10 -> InstantiationConstant(f<int*>)
+Evaluated: Instantiation @ org-dartlang-testcase:///instantiate_tearoff.dart:27:12 -> InstantiationConstant(C.g<int*>)
+Extra constant evaluation: evaluated: 18, effectively constant: 2
diff --git a/pkg/front_end/testcases/nnbd/issue42433.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42433.dart.strong.expect
index ca3b3bf..2d7f2f7 100644
--- a/pkg/front_end/testcases/nnbd/issue42433.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42433.dart.strong.expect
@@ -10,10 +10,9 @@
}
static method checkme<T extends self::X>(self::checkme::T? t) → dynamic {}
static method main() → dynamic {
- (self::X?) → dynamic t2 = #C2;
+ (self::X?) → dynamic t2 = #C1<self::X>;
}
constants {
#C1 = tearoff self::checkme
- #C2 = partial-instantiation self::checkme <self::X>
}
diff --git a/pkg/front_end/testcases/nnbd/issue42433.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42433.dart.strong.transformed.expect
index ca3b3bf..62a035b 100644
--- a/pkg/front_end/testcases/nnbd/issue42433.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42433.dart.strong.transformed.expect
@@ -10,10 +10,13 @@
}
static method checkme<T extends self::X>(self::checkme::T? t) → dynamic {}
static method main() → dynamic {
- (self::X?) → dynamic t2 = #C2;
+ (self::X?) → dynamic t2 = #C1<self::X>;
}
constants {
#C1 = tearoff self::checkme
- #C2 = partial-instantiation self::checkme <self::X>
}
+
+Extra constant evaluation status:
+Evaluated: Instantiation @ org-dartlang-testcase:///issue42433.dart:11:16 -> InstantiationConstant(checkme<X>)
+Extra constant evaluation: evaluated: 1, effectively constant: 1
diff --git a/pkg/front_end/testcases/nnbd/issue42433.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42433.dart.weak.expect
index d2dd558..2d7f2f7 100644
--- a/pkg/front_end/testcases/nnbd/issue42433.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42433.dart.weak.expect
@@ -10,10 +10,9 @@
}
static method checkme<T extends self::X>(self::checkme::T? t) → dynamic {}
static method main() → dynamic {
- (self::X?) → dynamic t2 = #C2;
+ (self::X?) → dynamic t2 = #C1<self::X>;
}
constants {
#C1 = tearoff self::checkme
- #C2 = partial-instantiation self::checkme <self::X*>
}
diff --git a/pkg/front_end/testcases/nnbd/issue42433.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42433.dart.weak.transformed.expect
index d2dd558..0fd30a8 100644
--- a/pkg/front_end/testcases/nnbd/issue42433.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42433.dart.weak.transformed.expect
@@ -10,10 +10,13 @@
}
static method checkme<T extends self::X>(self::checkme::T? t) → dynamic {}
static method main() → dynamic {
- (self::X?) → dynamic t2 = #C2;
+ (self::X?) → dynamic t2 = #C1<self::X>;
}
constants {
#C1 = tearoff self::checkme
- #C2 = partial-instantiation self::checkme <self::X*>
}
+
+Extra constant evaluation status:
+Evaluated: Instantiation @ org-dartlang-testcase:///issue42433.dart:11:16 -> InstantiationConstant(checkme<X*>)
+Extra constant evaluation: evaluated: 1, effectively constant: 1
diff --git a/tools/VERSION b/tools/VERSION
index b35aa89..a619ee9 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 14
PATCH 0
-PRERELEASE 275
+PRERELEASE 276
PRERELEASE_PATCH 0
\ No newline at end of file