Version 2.14.0-261.0.dev
Merge commit 'f65d4b829c7abcaaee900e975a944dcca2dc4beb' into 'dev'
diff --git a/DEPS b/DEPS
index e569bfd..e7492f9 100644
--- a/DEPS
+++ b/DEPS
@@ -73,7 +73,7 @@
# Revisions of /third_party/* dependencies.
"args_rev": "d8fea36c10ef96797be02e3d132d572445cd86f4",
- "async_rev": "b8850b3851026676083413c67fa0a22f63a8edbc",
+ "async_rev": "92e7119aa068bfb86a6a9519d44037ffff5eece8",
"bazel_worker_rev": "0885637b037979afbf5bcd05fd748b309fd669c0",
"benchmark_harness_rev": "c546dbd9f639f75cd2f75de8df2eb9f8ea15e8e7",
"boolean_selector_rev": "665e6921ab246569420376f827bff4585dff0b14",
diff --git a/pkg/compiler/lib/src/inferrer/builder_kernel.dart b/pkg/compiler/lib/src/inferrer/builder_kernel.dart
index d6def19..40e1ebe 100644
--- a/pkg/compiler/lib/src/inferrer/builder_kernel.dart
+++ b/pkg/compiler/lib/src/inferrer/builder_kernel.dart
@@ -2284,14 +2284,13 @@
}
@override
- TypeInformation visitPartialInstantiationConstant(
- ir.PartialInstantiationConstant node) {
+ TypeInformation visitInstantiationConstant(ir.InstantiationConstant node) {
return builder.createInstantiationTypeInformation(
visitConstant(node.tearOffConstant));
}
@override
- TypeInformation visitTearOffConstant(ir.TearOffConstant node) {
+ TypeInformation visitStaticTearOffConstant(ir.StaticTearOffConstant node) {
return builder.createStaticGetTypeInformation(node, node.procedure);
}
diff --git a/pkg/compiler/lib/src/ir/constants.dart b/pkg/compiler/lib/src/ir/constants.dart
index c951716..4a936f6 100644
--- a/pkg/compiler/lib/src/ir/constants.dart
+++ b/pkg/compiler/lib/src/ir/constants.dart
@@ -124,7 +124,7 @@
bool visitUnevaluatedConstant(ir.UnevaluatedConstant node) => true;
@override
- bool visitPartialInstantiationConstant(ir.PartialInstantiationConstant node) {
+ bool visitInstantiationConstant(ir.InstantiationConstant node) {
return node.tearOffConstant.accept(this);
}
diff --git a/pkg/compiler/lib/src/ir/impact.dart b/pkg/compiler/lib/src/ir/impact.dart
index 7fabac6..33640a7 100644
--- a/pkg/compiler/lib/src/ir/impact.dart
+++ b/pkg/compiler/lib/src/ir/impact.dart
@@ -748,20 +748,30 @@
}
@override
- void visitTearOffConstant(ir.TearOffConstant node) {
- registry.registerStaticTearOff(node.procedure, import);
+ void visitStaticTearOffConstant(ir.StaticTearOffConstant node) {
+ ir.Member member = node.procedure;
+ if (member is ir.Procedure) {
+ registry.registerStaticTearOff(member, import);
+ } else {
+ throw new UnsupportedError("Unexpected member (${member.runtimeType}).");
+ }
}
@override
- void visitPartialInstantiationConstant(ir.PartialInstantiationConstant node) {
+ void visitInstantiationConstant(ir.InstantiationConstant node) {
registry.registerGenericInstantiation(
- node.tearOffConstant.procedure.function.computeFunctionType(
- node.tearOffConstant.procedure.enclosingLibrary.nonNullable),
+ node.tearOffConstant.function.computeFunctionType(
+ node.tearOffConstant.member.enclosingLibrary.nonNullable),
node.types);
visitConstant(node.tearOffConstant);
}
@override
+ void visitTypedefTearOffConstant(ir.TypedefTearOffConstant node) {
+ defaultConstant(node);
+ }
+
+ @override
void visitInstanceConstant(ir.InstanceConstant node) {
registry.registerConstInstantiation(
node.classNode, node.typeArguments, import);
diff --git a/pkg/compiler/lib/src/ir/visitors.dart b/pkg/compiler/lib/src/ir/visitors.dart
index 31b5158..0335a73 100644
--- a/pkg/compiler/lib/src/ir/visitors.dart
+++ b/pkg/compiler/lib/src/ir/visitors.dart
@@ -212,15 +212,20 @@
}
@override
- ConstantValue visitTearOffConstant(ir.TearOffConstant node) {
- FunctionEntity function = elementMap.getMethod(node.procedure);
- DartType type = elementMap.getFunctionType(node.procedure.function);
- return new FunctionConstantValue(function, type);
+ ConstantValue visitStaticTearOffConstant(ir.StaticTearOffConstant node) {
+ ir.Member member = node.procedure;
+ if (member is ir.Procedure) {
+ FunctionEntity function = elementMap.getMethod(member);
+ DartType type = elementMap.getFunctionType(member.function);
+ return new FunctionConstantValue(function, type);
+ } else {
+ throw new UnsupportedError(
+ "Unexpected torn off member kind (${member.runtimeType}).");
+ }
}
@override
- ConstantValue visitPartialInstantiationConstant(
- ir.PartialInstantiationConstant node) {
+ ConstantValue visitInstantiationConstant(ir.InstantiationConstant node) {
List<DartType> typeArguments = [];
for (ir.DartType type in node.types) {
typeArguments.add(elementMap.getDartType(type));
diff --git a/pkg/compiler/lib/src/serialization/node_indexer.dart b/pkg/compiler/lib/src/serialization/node_indexer.dart
index 663e593..e0c56a2 100644
--- a/pkg/compiler/lib/src/serialization/node_indexer.dart
+++ b/pkg/compiler/lib/src/serialization/node_indexer.dart
@@ -307,10 +307,18 @@
void visitTypeLiteralConstant(ir.TypeLiteralConstant node) {}
@override
- void visitTearOffConstant(ir.TearOffConstant node) {}
+ void visitStaticTearOffConstant(ir.StaticTearOffConstant node) {}
@override
- void visitPartialInstantiationConstant(ir.PartialInstantiationConstant node) {
+ void visitConstructorTearOffConstant(ir.ConstructorTearOffConstant node) {}
+
+ @override
+ void visitInstantiationConstant(ir.InstantiationConstant node) {
+ node.tearOffConstant.accept(this);
+ }
+
+ @override
+ void visitTypedefTearOffConstant(ir.TypedefTearOffConstant node) {
node.tearOffConstant.accept(this);
}
diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart
index ad8f434..765039b 100644
--- a/pkg/compiler/lib/src/ssa/builder_kernel.dart
+++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart
@@ -4489,9 +4489,10 @@
}
}
} else if (closure is ir.ConstantExpression &&
- closure.constant is ir.TearOffConstant) {
- ir.TearOffConstant tearOff = closure.constant;
- if (handleTarget(tearOff.procedure)) {
+ closure.constant is ir.StaticTearOffConstant) {
+ ir.StaticTearOffConstant tearOff = closure.constant;
+ ir.Member member = tearOff.procedure;
+ if (member is ir.Procedure && handleTarget(member)) {
return;
}
}
diff --git a/pkg/dev_compiler/lib/src/kernel/compiler.dart b/pkg/dev_compiler/lib/src/kernel/compiler.dart
index c384ce9..3bd5de9 100644
--- a/pkg/dev_compiler/lib/src/kernel/compiler.dart
+++ b/pkg/dev_compiler/lib/src/kernel/compiler.dart
@@ -5851,6 +5851,11 @@
}
@override
+ js_ast.Expression visitTypedefTearOff(TypedefTearOff node) {
+ throw UnsupportedError('Typedef instantiation');
+ }
+
+ @override
js_ast.Expression visitIsExpression(IsExpression node) {
return _emitIsExpression(node.operand, node.type);
}
@@ -6232,7 +6237,7 @@
@override
js_ast.Expression visitConstant(Constant node) {
- if (node is TearOffConstant) {
+ if (node is StaticTearOffConstant) {
// JS() or external JS consts should not be lazily loaded.
var isSdk = node.procedure.enclosingLibrary.importUri.scheme == 'dart';
if (_isInForeignJS) {
@@ -6418,7 +6423,7 @@
}
@override
- js_ast.Expression visitTearOffConstant(TearOffConstant node) {
+ js_ast.Expression visitStaticTearOffConstant(StaticTearOffConstant node) {
_declareBeforeUse(node.procedure.enclosingClass);
return _emitStaticGet(node.procedure);
}
@@ -6428,8 +6433,7 @@
_emitTypeLiteral(node.type);
@override
- js_ast.Expression visitPartialInstantiationConstant(
- PartialInstantiationConstant node) =>
+ js_ast.Expression visitInstantiationConstant(InstantiationConstant node) =>
canonicalizeConstObject(runtimeCall('gbind(#, #)', [
visitConstant(node.tearOffConstant),
node.types.map(_emitType).toList()
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 737f649..fa2b398 100644
--- a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
@@ -328,8 +328,7 @@
}
@override
- Constant? visitPartialInstantiationConstant(
- PartialInstantiationConstant node) {
+ Constant? visitInstantiationConstant(InstantiationConstant node) {
List<DartType>? types;
for (int index = 0; index < node.types.length; index++) {
DartType? type = computeConstCanonicalType(
@@ -341,13 +340,13 @@
}
}
if (types != null) {
- return new PartialInstantiationConstant(node.tearOffConstant, types);
+ return new InstantiationConstant(node.tearOffConstant, types);
}
return null;
}
@override
- Constant? visitTearOffConstant(TearOffConstant node) => null;
+ Constant? visitStaticTearOffConstant(StaticTearOffConstant node) => null;
@override
Constant? visitTypeLiteralConstant(TypeLiteralConstant node) {
@@ -2917,7 +2916,7 @@
.withArguments(target.name.text));
} else if (target is Procedure) {
if (target.kind == ProcedureKind.Method) {
- return canonicalize(new TearOffConstant(target));
+ return canonicalize(new StaticTearOffConstant(target));
}
return createErrorConstant(
node,
@@ -2936,7 +2935,7 @@
final Member target = node.target;
if (target is Procedure) {
if (target.kind == ProcedureKind.Method) {
- return canonicalize(new TearOffConstant(target));
+ return canonicalize(new StaticTearOffConstant(target));
}
return createErrorConstant(
node,
@@ -3402,28 +3401,42 @@
new Instantiation(extract(constant),
node.typeArguments.map((t) => env.substituteType(t)).toList()));
}
- if (constant is TearOffConstant) {
- if (node.typeArguments.length ==
- constant.procedure.function.typeParameters.length) {
- List<DartType>? types = _evaluateDartTypes(node, node.typeArguments);
- if (types == null) {
- AbortConstant error = _gotError!;
- _gotError = null;
- return error;
- }
- assert(_gotError == null);
- // ignore: unnecessary_null_comparison
- assert(types != null);
+ if (constant is StaticTearOffConstant) {
+ Member constantMember = constant.procedure;
+ if (constantMember is Procedure) {
+ if (node.typeArguments.length ==
+ constantMember.function.typeParameters.length) {
+ List<DartType>? types = _evaluateDartTypes(node, node.typeArguments);
+ if (types == null) {
+ AbortConstant error = _gotError!;
+ _gotError = null;
+ return error;
+ }
+ assert(_gotError == null);
+ // ignore: unnecessary_null_comparison
+ assert(types != null);
- final List<DartType> typeArguments = convertTypes(types);
- return canonicalize(
- new PartialInstantiationConstant(constant, typeArguments));
+ final List<DartType> typeArguments = convertTypes(types);
+ return canonicalize(
+ new InstantiationConstant(constant, typeArguments));
+ } else {
+ // Probably unreachable.
+ return createInvalidExpressionConstant(
+ node,
+ 'The number of type arguments supplied in the partial '
+ 'instantiation does not match the number of type arguments '
+ 'of the $constant.');
+ }
+ } else if (constantMember is Constructor) {
+ // TODO(dmitryas): Add support for instantiated constructor tear-offs.
+ return defaultExpression(node);
+ } else {
+ // Probably unreachable.
+ return createInvalidExpressionConstant(
+ node,
+ "Unsupported kind of a torn off member: "
+ "'${constantMember.runtimeType}'.");
}
- // Probably unreachable.
- return createInvalidExpressionConstant(
- node,
- 'The number of type arguments supplied in the partial instantiation '
- 'does not match the number of type arguments of the $constant.');
}
// The inner expression in an instantiation can never be null, since
// instantiations are only inferred on direct references to declarations.
@@ -3438,6 +3451,11 @@
}
@override
+ Constant visitTypedefTearOff(TypedefTearOff node) {
+ return defaultExpression(node);
+ }
+
+ @override
Constant visitCheckLibraryIsLoaded(CheckLibraryIsLoaded node) {
return createErrorConstant(node,
templateConstEvalDeferredLibrary.withArguments(node.import.name!));
diff --git a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
index 3ff0062..d8265a8 100644
--- a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
@@ -221,6 +221,12 @@
}
@override
+ ExpressionInferenceResult visitTypedefTearOff(
+ TypedefTearOff node, DartType typeContext) {
+ return _unhandledExpression(node, typeContext);
+ }
+
+ @override
ExpressionInferenceResult visitListConcatenation(
ListConcatenation node, DartType typeContext) {
return _unhandledExpression(node, typeContext);
diff --git a/pkg/front_end/lib/src/fasta/kernel/type_labeler.dart b/pkg/front_end/lib/src/fasta/kernel/type_labeler.dart
index 9ac22d9..aeb1696 100644
--- a/pkg/front_end/lib/src/fasta/kernel/type_labeler.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/type_labeler.dart
@@ -360,7 +360,7 @@
result.add("}");
}
- void visitTearOffConstant(TearOffConstant node) {
+ void visitStaticTearOffConstant(StaticTearOffConstant node) {
Procedure procedure = node.procedure;
Class? classNode = procedure.enclosingClass;
if (classNode != null) {
@@ -374,7 +374,19 @@
result.add(procedure.name.text);
}
- void visitPartialInstantiationConstant(PartialInstantiationConstant node) {
+ void visitConstructorTearOffConstant(ConstructorTearOffConstant node) {
+ Constructor constructor = node.constructor;
+ Class? classNode = constructor.enclosingClass;
+ result.add(nameForEntity(
+ classNode,
+ classNode.name,
+ classNode.enclosingLibrary.importUri,
+ classNode.enclosingLibrary.fileUri));
+ result.add(".");
+ result.add(constructor.name.text);
+ }
+
+ void visitInstantiationConstant(InstantiationConstant node) {
node.tearOffConstant.accept(this);
if (node.types.isNotEmpty) {
result.add("<");
@@ -388,6 +400,36 @@
}
}
+ void visitTypedefTearOffConstant(TypedefTearOffConstant node) {
+ node.tearOffConstant.accept(this);
+ if (node.parameters.isNotEmpty) {
+ result.add("<");
+ bool first = true;
+ for (TypeParameter param in node.parameters) {
+ if (!first) result.add(", ");
+ result.add(param.name ?? '');
+ if (isObject(param.bound) && param.defaultType is DynamicType) {
+ // Bound was not specified, and therefore should not be printed.
+ } else {
+ result.add(" extends ");
+ param.bound.accept(this);
+ }
+ first = false;
+ }
+ result.add(">");
+ }
+ if (node.types.isNotEmpty) {
+ result.add("<");
+ bool first = true;
+ for (DartType typeArg in node.types) {
+ if (!first) result.add(", ");
+ typeArg.accept(this);
+ first = false;
+ }
+ result.add(">");
+ }
+ }
+
void visitTypeLiteralConstant(TypeLiteralConstant node) {
node.type.accept(this);
}
diff --git a/pkg/front_end/lib/src/testing/id_testing_utils.dart b/pkg/front_end/lib/src/testing/id_testing_utils.dart
index 68cbf92..eaba8c7 100644
--- a/pkg/front_end/lib/src/testing/id_testing_utils.dart
+++ b/pkg/front_end/lib/src/testing/id_testing_utils.dart
@@ -401,20 +401,54 @@
sb.write(')');
}
- void visitPartialInstantiationConstant(PartialInstantiationConstant node) {
+ void visitInstantiationConstant(InstantiationConstant node) {
sb.write('Instantiation(');
- sb.write(getMemberName(node.tearOffConstant.procedure));
+ sb.write(getMemberName(node.tearOffConstant.member));
sb.write('<');
typeToText.visitList(node.types);
sb.write('>)');
}
- void visitTearOffConstant(TearOffConstant node) {
+ void visitTypedefTearOffConstant(TypedefTearOffConstant node) {
+ sb.write('TypedefTearOff(');
+ sb.write(getMemberName(node.tearOffConstant.member));
+ if (node.parameters.isNotEmpty) {
+ sb.write('<');
+ for (int i = 0; i < node.parameters.length; i++) {
+ if (i > 0) {
+ sb.write(',');
+ if (typeToText.typeRepresentation ==
+ TypeRepresentation.analyzerNonNullableByDefault) {
+ sb.write(' ');
+ }
+ }
+ TypeParameter typeParameter = node.parameters[i];
+ sb.write(typeParameter.name);
+ DartType bound = typeParameter.bound;
+ if (!(bound is InterfaceType && bound.classNode.name == 'Object')) {
+ sb.write(' extends ');
+ typeToText.visit(bound);
+ }
+ }
+ sb.write('>');
+ }
+ sb.write('<');
+ typeToText.visitList(node.types);
+ sb.write('>)');
+ }
+
+ void visitStaticTearOffConstant(StaticTearOffConstant node) {
sb.write('Function(');
sb.write(getMemberName(node.procedure));
sb.write(')');
}
+ void visitConstructorTearOffConstant(ConstructorTearOffConstant node) {
+ sb.write('Constructor(');
+ sb.write(getMemberName(node.constructor));
+ sb.write(')');
+ }
+
void visitTypeLiteralConstant(TypeLiteralConstant node) {
sb.write('TypeLiteral(');
typeToText.visit(node.type);
diff --git a/pkg/front_end/test/incremental_bulk_compiler_full.dart b/pkg/front_end/test/incremental_bulk_compiler_full.dart
index ac018cb..b067117 100644
--- a/pkg/front_end/test/incremental_bulk_compiler_full.dart
+++ b/pkg/front_end/test/incremental_bulk_compiler_full.dart
@@ -97,6 +97,7 @@
bulkSerialized = util.postProcess(bulkCompiledComponent);
} catch (e) {
bulkFailed = true;
+ context.compiler = null;
}
// Compile again - the serialized output should be the same.
@@ -112,6 +113,7 @@
bulkSerialized2 = util.postProcess(bulkCompiledComponent);
} catch (e) {
bulk2Failed = true;
+ context.compiler = null;
}
if (bulkFailed || oneShotFailed) {
diff --git a/pkg/front_end/test/type_labeler_test.dart b/pkg/front_end/test/type_labeler_test.dart
index 3acfa34..cde0695 100644
--- a/pkg/front_end/test/type_labeler_test.dart
+++ b/pkg/front_end/test/type_labeler_test.dart
@@ -285,11 +285,11 @@
]);
check({mapConst: "<bool, num>{true: 2, false: 2.5}"}, 0);
- Constant tearOffConst = new TearOffConstant(gooMethod);
+ Constant tearOffConst = new StaticTearOffConstant(gooMethod);
check({tearOffConst: "Foo.goo"}, 1);
Constant partialInstantiationConst =
- new PartialInstantiationConstant(tearOffConst, [intType]);
+ new InstantiationConstant(tearOffConst, [intType]);
check({partialInstantiationConst: "Foo.goo<int>"}, 1);
Constant typeLiteralConst = new TypeLiteralConstant(foo);
diff --git a/pkg/front_end/testcases/constructor_tearoffs/identical_instantiated_function_tearoffs.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/identical_instantiated_function_tearoffs.dart.weak.outline.expect
index d3f2e88..4ccf7ac 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/identical_instantiated_function_tearoffs.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/identical_instantiated_function_tearoffs.dart.weak.outline.expect
@@ -17,6 +17,6 @@
Extra constant evaluation status:
-Evaluated: Instantiation @ org-dartlang-testcase:///identical_instantiated_function_tearoffs.dart:9:54 -> PartialInstantiationConstant(id<int*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///identical_instantiated_function_tearoffs.dart:10:38 -> PartialInstantiationConstant(id<int*>)
+Evaluated: Instantiation @ org-dartlang-testcase:///identical_instantiated_function_tearoffs.dart:9:54 -> InstantiationConstant(id<int*>)
+Evaluated: Instantiation @ org-dartlang-testcase:///identical_instantiated_function_tearoffs.dart:10:38 -> InstantiationConstant(id<int*>)
Extra constant evaluation: evaluated: 2, effectively constant: 2
diff --git a/pkg/front_end/testcases/general/constants/various.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/various.dart.weak.outline.expect
index 4722f57..1023df5 100644
--- a/pkg/front_end/testcases/general/constants/various.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/various.dart.weak.outline.expect
@@ -445,7 +445,7 @@
Evaluated: EqualsCall @ org-dartlang-testcase:///various.dart:195:24 -> BoolConstant(false)
Evaluated: ConditionalExpression @ org-dartlang-testcase:///various.dart:200:66 -> NullConstant(null)
Evaluated: AsExpression @ org-dartlang-testcase:///various.dart:203:39 -> NullConstant(null)
-Evaluated: AsExpression @ org-dartlang-testcase:///various.dart:205:39 -> PartialInstantiationConstant(id1<int*>)
+Evaluated: AsExpression @ org-dartlang-testcase:///various.dart:205:39 -> InstantiationConstant(id1<int*>)
Evaluated: Not @ org-dartlang-testcase:///various.dart:208:20 -> BoolConstant(false)
Evaluated: ConditionalExpression @ org-dartlang-testcase:///various.dart:210:46 -> BoolConstant(true)
Evaluated: ConditionalExpression @ org-dartlang-testcase:///various.dart:211:38 -> BoolConstant(false)
diff --git a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various_2.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various_2.dart.weak.outline.expect
index 91fb49a..373d6b4 100644
--- a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various_2.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various_2.dart.weak.outline.expect
@@ -78,7 +78,7 @@
Extra constant evaluation status:
Evaluated: TypeLiteral @ org-dartlang-testcase:///various_2.dart:10:27 -> TypeLiteralConstant(Object*)
-Evaluated: Instantiation @ org-dartlang-testcase:///various_2.dart:11:52 -> PartialInstantiationConstant(id1<int*>)
+Evaluated: Instantiation @ org-dartlang-testcase:///various_2.dart:11:52 -> InstantiationConstant(id1<int*>)
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various_2.dart:12:24 -> InstanceConstant(const Class<int*>{Class.field: 0})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various_2.dart:13:25 -> InstanceConstant(const Class<dynamic>{Class.field: const <int*>[42]})
Evaluated: TypeLiteral @ org-dartlang-testcase:///various_2.dart:15:29 -> TypeLiteralConstant(dynamic Function(dynamic)*)
@@ -94,8 +94,8 @@
Evaluated: MapConcatenation @ org-dartlang-testcase:///various_2.dart:32:7 -> MapConstant(const <int*, String*>{0: "foo"})
Evaluated: StaticInvocation @ org-dartlang-testcase:///various_2.dart:35:5 -> BoolConstant(true)
Evaluated with empty environment: StaticInvocation @ org-dartlang-testcase:///various_2.dart:37:5 -> BoolConstant(false)
-Evaluated: StaticGet @ org-dartlang-testcase:///various_2.dart:37:15 -> PartialInstantiationConstant(id1<int*>)
-Evaluated with empty environment: StaticGet @ org-dartlang-testcase:///various_2.dart:37:41 -> PartialInstantiationConstant(id2<int*>)
+Evaluated: StaticGet @ org-dartlang-testcase:///various_2.dart:37:15 -> InstantiationConstant(id1<int*>)
+Evaluated with empty environment: StaticGet @ org-dartlang-testcase:///various_2.dart:37:41 -> InstantiationConstant(id2<int*>)
Evaluated: StaticInvocation @ org-dartlang-testcase:///various_2.dart:38:27 -> BoolConstant(true)
Evaluated: StaticInvocation @ org-dartlang-testcase:///various_2.dart:39:28 -> BoolConstant(true)
Evaluated: StaticInvocation @ org-dartlang-testcase:///various_2.dart:41:5 -> BoolConstant(true)
@@ -110,13 +110,13 @@
Evaluated: StaticInvocation @ org-dartlang-testcase:///various_2.dart:53:5 -> BoolConstant(true)
Evaluated: StaticInvocation @ org-dartlang-testcase:///various_2.dart:55:5 -> BoolConstant(true)
Evaluated: TypeLiteral @ org-dartlang-testcase:///various_2_lib.dart:17:27 -> TypeLiteralConstant(Object*)
-Evaluated: StaticTearOff @ org-dartlang-testcase:///various_2_lib.dart:18:12 -> TearOffConstant(identical)
-Evaluated with empty environment: ConditionalExpression @ org-dartlang-testcase:///various_2_lib.dart:20:39 -> PartialInstantiationConstant(id2<int*>)
+Evaluated: StaticTearOff @ org-dartlang-testcase:///various_2_lib.dart:18:12 -> StaticTearOffConstant(identical)
+Evaluated with empty environment: ConditionalExpression @ org-dartlang-testcase:///various_2_lib.dart:20:39 -> InstantiationConstant(id2<int*>)
Evaluated with empty environment: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various_2_lib.dart:20:11 -> BoolConstant(false)
-Evaluated with empty environment: Instantiation @ org-dartlang-testcase:///various_2_lib.dart:20:41 -> PartialInstantiationConstant(id1<int*>)
-Evaluated: StaticTearOff @ org-dartlang-testcase:///various_2_lib.dart:20:41 -> TearOffConstant(id1)
-Evaluated with empty environment: Instantiation @ org-dartlang-testcase:///various_2_lib.dart:20:47 -> PartialInstantiationConstant(id2<int*>)
-Evaluated: StaticTearOff @ org-dartlang-testcase:///various_2_lib.dart:20:47 -> TearOffConstant(id2)
+Evaluated with empty environment: Instantiation @ org-dartlang-testcase:///various_2_lib.dart:20:41 -> InstantiationConstant(id1<int*>)
+Evaluated: StaticTearOff @ org-dartlang-testcase:///various_2_lib.dart:20:41 -> StaticTearOffConstant(id1)
+Evaluated with empty environment: Instantiation @ org-dartlang-testcase:///various_2_lib.dart:20:47 -> InstantiationConstant(id2<int*>)
+Evaluated: StaticTearOff @ org-dartlang-testcase:///various_2_lib.dart:20:47 -> StaticTearOffConstant(id2)
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various_2_lib.dart:21:24 -> InstanceConstant(const Class<int*>{Class.field: 0})
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various_2_lib.dart:22:25 -> InstanceConstant(const Class<dynamic>{Class.field: const <int*>[42]})
Evaluated: TypeLiteral @ org-dartlang-testcase:///various_2_lib.dart:23:29 -> TypeLiteralConstant(dynamic Function(dynamic)*)
diff --git a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various_2.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various_2.dart.weak.transformed.expect
index 3e10527..2830193 100644
--- a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various_2.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various_2.dart.weak.transformed.expect
@@ -130,10 +130,10 @@
}
Extra constant evaluation status:
-Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///various_2.dart:15:28 -> PartialInstantiationConstant(id2<int*>)
+Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///various_2.dart:15:28 -> InstantiationConstant(id2<int*>)
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///various_2.dart:37:5 -> BoolConstant(false)
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///various_2.dart:37:5 -> BoolConstant(false)
-Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///various_2_lib.dart:20:39 -> PartialInstantiationConstant(id2<int*>)
+Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///various_2_lib.dart:20:39 -> InstantiationConstant(id2<int*>)
Extra constant evaluation: evaluated: 41, effectively constant: 4
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 02a352f..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:17:54 -> PartialInstantiationConstant(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 ad67316..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
@@ -28,5 +28,5 @@
Extra constant evaluation status:
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 -> PartialInstantiationConstant(id<int*>)
+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.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.weak.transformed.expect
index d465ca9..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
@@ -181,32 +181,32 @@
}
Extra constant evaluation status:
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:16:16 -> PartialInstantiationConstant(max<int*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:17:16 -> PartialInstantiationConstant(max<double*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:18:16 -> PartialInstantiationConstant(max<num*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:19:16 -> PartialInstantiationConstant(max<num*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:20:16 -> PartialInstantiationConstant(max<num*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:21:16 -> PartialInstantiationConstant(max<int*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:22:16 -> PartialInstantiationConstant(max<double*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:23:16 -> PartialInstantiationConstant(max<int*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:24:16 -> PartialInstantiationConstant(max<double*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:26:70 -> PartialInstantiationConstant(max<Object*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:28:73 -> PartialInstantiationConstant(max<num*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:30:73 -> PartialInstantiationConstant(max<num*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:31:70 -> PartialInstantiationConstant(max<Object*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:32:70 -> PartialInstantiationConstant(max<Object*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:35:11 -> PartialInstantiationConstant(min<int*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:36:11 -> PartialInstantiationConstant(min<double*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:37:11 -> PartialInstantiationConstant(min<num*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:38:11 -> PartialInstantiationConstant(min<num*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:39:11 -> PartialInstantiationConstant(min<num*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:40:11 -> PartialInstantiationConstant(min<int*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:41:11 -> PartialInstantiationConstant(min<double*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:42:11 -> PartialInstantiationConstant(min<int*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:43:11 -> PartialInstantiationConstant(min<double*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:45:65 -> PartialInstantiationConstant(min<Object*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:46:72 -> PartialInstantiationConstant(min<num*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:47:72 -> PartialInstantiationConstant(min<num*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:48:65 -> PartialInstantiationConstant(min<Object*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_infer_generic_instantiation.dart:49:65 -> PartialInstantiationConstant(min<Object*>)
+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.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.weak.transformed.expect
index 947bd81..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
@@ -48,6 +48,6 @@
}
Extra constant evaluation status:
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_nested_generic_instantiation.dart:28:71 -> PartialInstantiationConstant(max<int*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///generic_methods_nested_generic_instantiation.dart:29:67 -> PartialInstantiationConstant(max<int*>)
+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.transformed.expect b/pkg/front_end/testcases/inference/instantiate_tearoff.dart.weak.transformed.expect
index 8efaf12..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
@@ -49,6 +49,6 @@
}
Extra constant evaluation status:
-Evaluated: Instantiation @ org-dartlang-testcase:///instantiate_tearoff.dart:25:10 -> PartialInstantiationConstant(f<int*>)
-Evaluated: Instantiation @ org-dartlang-testcase:///instantiate_tearoff.dart:27:12 -> PartialInstantiationConstant(C.g<int*>)
+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/inference/static_method_tear_off.dart.weak.outline.expect b/pkg/front_end/testcases/inference/static_method_tear_off.dart.weak.outline.expect
index b473f71..b2c575b 100644
--- a/pkg/front_end/testcases/inference/static_method_tear_off.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/inference/static_method_tear_off.dart.weak.outline.expect
@@ -24,5 +24,5 @@
Extra constant evaluation status:
-Evaluated: StaticTearOff @ org-dartlang-testcase:///static_method_tear_off.dart:8:13 -> TearOffConstant(C.f)
+Evaluated: StaticTearOff @ org-dartlang-testcase:///static_method_tear_off.dart:8:13 -> StaticTearOffConstant(C.f)
Extra constant evaluation: evaluated: 1, effectively constant: 1
diff --git a/pkg/front_end/testcases/nnbd/constants.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/constants.dart.weak.outline.expect
index b25d8c4..1d425f6 100644
--- a/pkg/front_end/testcases/nnbd/constants.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/constants.dart.weak.outline.expect
@@ -64,7 +64,7 @@
Extra constant evaluation status:
Evaluated: TypeLiteral @ org-dartlang-testcase:///constants.dart:10:27 -> TypeLiteralConstant(Object*)
-Evaluated: Instantiation @ org-dartlang-testcase:///constants.dart:11:52 -> PartialInstantiationConstant(id<int*>)
+Evaluated: Instantiation @ org-dartlang-testcase:///constants.dart:11:52 -> InstantiationConstant(id<int*>)
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///constants.dart:12:24 -> InstanceConstant(const Class<int*>{Class.field: 0})
Evaluated: TypeLiteral @ org-dartlang-testcase:///constants.dart:13:29 -> TypeLiteralConstant(dynamic Function(dynamic)*)
Evaluated: TypeLiteral @ org-dartlang-testcase:///constants.dart:14:36 -> TypeLiteralConstant(T* Function<T>(T*)*)
@@ -86,8 +86,8 @@
Evaluated: StaticInvocation @ org-dartlang-testcase:///constants.dart:37:5 -> BoolConstant(true)
Evaluated: StaticInvocation @ org-dartlang-testcase:///constants.dart:39:5 -> BoolConstant(true)
Evaluated: TypeLiteral @ org-dartlang-testcase:///constants_lib.dart:16:27 -> TypeLiteralConstant(Object*)
-Evaluated: StaticTearOff @ org-dartlang-testcase:///constants_lib.dart:17:12 -> TearOffConstant(identical)
-Evaluated: Instantiation @ org-dartlang-testcase:///constants_lib.dart:18:48 -> PartialInstantiationConstant(id<int*>)
+Evaluated: StaticTearOff @ org-dartlang-testcase:///constants_lib.dart:17:12 -> StaticTearOffConstant(identical)
+Evaluated: Instantiation @ org-dartlang-testcase:///constants_lib.dart:18:48 -> InstantiationConstant(id<int*>)
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///constants_lib.dart:19:24 -> InstanceConstant(const Class<int*>{Class.field: 0})
Evaluated: TypeLiteral @ org-dartlang-testcase:///constants_lib.dart:20:29 -> TypeLiteralConstant(dynamic Function(dynamic)*)
Evaluated: TypeLiteral @ org-dartlang-testcase:///constants_lib.dart:21:36 -> TypeLiteralConstant(T* Function<T>(T*)*)
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 bb2b62a..62a035b 100644
--- a/pkg/front_end/testcases/nnbd/issue42433.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42433.dart.strong.transformed.expect
@@ -18,5 +18,5 @@
}
Extra constant evaluation status:
-Evaluated: Instantiation @ org-dartlang-testcase:///issue42433.dart:11:16 -> PartialInstantiationConstant(checkme<X>)
+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.transformed.expect b/pkg/front_end/testcases/nnbd/issue42433.dart.weak.transformed.expect
index 4754890..0fd30a8 100644
--- a/pkg/front_end/testcases/nnbd/issue42433.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42433.dart.weak.transformed.expect
@@ -18,5 +18,5 @@
}
Extra constant evaluation status:
-Evaluated: Instantiation @ org-dartlang-testcase:///issue42433.dart:11:16 -> PartialInstantiationConstant(checkme<X*>)
+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/potentially_constant_type_as.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart.weak.outline.expect
index b3e41d5..c031ded 100644
--- a/pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart.weak.outline.expect
@@ -49,5 +49,5 @@
Extra constant evaluation status:
Evaluated: StaticGet @ org-dartlang-testcase:///potentially_constant_type_as.dart:22:36 -> IntConstant(3)
-Evaluated: Instantiation @ org-dartlang-testcase:///potentially_constant_type_as.dart:11:43 -> PartialInstantiationConstant(idFunction<int*>)
+Evaluated: Instantiation @ org-dartlang-testcase:///potentially_constant_type_as.dart:11:43 -> InstantiationConstant(idFunction<int*>)
Extra constant evaluation: evaluated: 11, effectively constant: 2
diff --git a/pkg/front_end/testcases/nnbd/potentially_constant_type_is.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/potentially_constant_type_is.dart.weak.outline.expect
index ba55100..b22c34f 100644
--- a/pkg/front_end/testcases/nnbd/potentially_constant_type_is.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/potentially_constant_type_is.dart.weak.outline.expect
@@ -45,5 +45,5 @@
Extra constant evaluation status:
Evaluated: StaticGet @ org-dartlang-testcase:///potentially_constant_type_is.dart:22:36 -> IntConstant(3)
-Evaluated: Instantiation @ org-dartlang-testcase:///potentially_constant_type_is.dart:11:43 -> PartialInstantiationConstant(idFunction<int*>)
+Evaluated: Instantiation @ org-dartlang-testcase:///potentially_constant_type_is.dart:11:43 -> InstantiationConstant(idFunction<int*>)
Extra constant evaluation: evaluated: 11, effectively constant: 2
diff --git a/pkg/front_end/testcases/nnbd_mixed/constants.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd_mixed/constants.dart.weak.outline.expect
index 9f91d26..6e8783d 100644
--- a/pkg/front_end/testcases/nnbd_mixed/constants.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd_mixed/constants.dart.weak.outline.expect
@@ -62,7 +62,7 @@
Extra constant evaluation status:
-Evaluated: Instantiation @ org-dartlang-testcase:///constants.dart:7:52 -> PartialInstantiationConstant(id<int*>)
+Evaluated: Instantiation @ org-dartlang-testcase:///constants.dart:7:52 -> InstantiationConstant(id<int*>)
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///constants.dart:8:24 -> InstanceConstant(const Class<int*>{Class.field: 0})
Evaluated: ListLiteral @ org-dartlang-testcase:///constants.dart:9:26 -> ListConstant(const <int*>[0])
Evaluated: SetLiteral @ org-dartlang-testcase:///constants.dart:10:25 -> InstanceConstant(const _UnmodifiableSet<int*>{_UnmodifiableSet._map: const _ImmutableMap<int*, Null>{_ImmutableMap._kvPairs: const <dynamic>[0, null]}})
@@ -78,8 +78,8 @@
Evaluated: StaticInvocation @ org-dartlang-testcase:///constants.dart:23:5 -> BoolConstant(true)
Evaluated: StaticInvocation @ org-dartlang-testcase:///constants.dart:25:5 -> BoolConstant(true)
Evaluated: StaticInvocation @ org-dartlang-testcase:///constants.dart:27:5 -> BoolConstant(true)
-Evaluated: StaticTearOff @ org-dartlang-testcase:///constants_lib.dart:18:12 -> TearOffConstant(identical)
-Evaluated: Instantiation @ org-dartlang-testcase:///constants_lib.dart:19:48 -> PartialInstantiationConstant(id<int*>)
+Evaluated: StaticTearOff @ org-dartlang-testcase:///constants_lib.dart:18:12 -> StaticTearOffConstant(identical)
+Evaluated: Instantiation @ org-dartlang-testcase:///constants_lib.dart:19:48 -> InstantiationConstant(id<int*>)
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///constants_lib.dart:20:24 -> InstanceConstant(const Class<int*>{Class.field: 0})
Evaluated: ListLiteral @ org-dartlang-testcase:///constants_lib.dart:21:26 -> ListConstant(const <int*>[0])
Evaluated: SetLiteral @ org-dartlang-testcase:///constants_lib.dart:22:25 -> InstanceConstant(const _UnmodifiableSet<int*>{_UnmodifiableSet._map: const _ImmutableMap<int*, Null>{_ImmutableMap._kvPairs: const <dynamic>[0, null]}})
diff --git a/pkg/front_end/testcases/rasta/static.dart.weak.transformed.expect b/pkg/front_end/testcases/rasta/static.dart.weak.transformed.expect
index fd27fff..f510042 100644
--- a/pkg/front_end/testcases/rasta/static.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/rasta/static.dart.weak.transformed.expect
@@ -340,9 +340,9 @@
Extra constant evaluation status:
Evaluated: VariableGet @ org-dartlang-testcase:///static.dart:32:13 -> IntConstant(42)
-Evaluated: VariableGet @ org-dartlang-testcase:///static.dart:36:13 -> TearOffConstant(Foo.staticFunction)
+Evaluated: VariableGet @ org-dartlang-testcase:///static.dart:36:13 -> StaticTearOffConstant(Foo.staticFunction)
Evaluated: ConditionalExpression @ org-dartlang-testcase:///static.dart:75:24 -> NullConstant(null)
Evaluated: Let @ org-dartlang-testcase:///static.dart:76:28 -> IntConstant(42)
Evaluated: ConditionalExpression @ org-dartlang-testcase:///static.dart:79:24 -> NullConstant(null)
-Evaluated: Let @ org-dartlang-testcase:///static.dart:80:28 -> TearOffConstant(Foo.staticFunction)
+Evaluated: Let @ org-dartlang-testcase:///static.dart:80:28 -> StaticTearOffConstant(Foo.staticFunction)
Extra constant evaluation: evaluated: 122, effectively constant: 6
diff --git a/pkg/kernel/binary.md b/pkg/kernel/binary.md
index dfed538..4dd9aa7 100644
--- a/pkg/kernel/binary.md
+++ b/pkg/kernel/binary.md
@@ -147,7 +147,7 @@
type ComponentFile {
UInt32 magic = 0x90ABCDEF;
- UInt32 formatVersion = 66;
+ UInt32 formatVersion = 67;
Byte[10] shortSdkHash;
List<String> problemsAsJson; // Described in problems.md.
Library[] libraries;
@@ -707,6 +707,13 @@
Option<List<DartType>> typeArguments;
}
+type TypedefTearOff extends Expression {
+ Byte tag = 83;
+ List<TypeParameter> typeParameters;
+ Expression expression;
+ List<DartType> typeArguments;
+}
+
type StaticSet extends Expression {
Byte tag = 27;
FileOffset fileOffset;
@@ -1179,13 +1186,13 @@
List<Pair<FieldReference, ConstantReference>> values;
}
-type PartialInstantiationConstant extends Constant {
+type InstantiationConstant extends Constant {
Byte tag = 9;
ConstantReference tearOffConstant;
List<DartType> typeArguments;
}
-type TearOffConstant extends Constant {
+type StaticTearOffConstant extends Constant {
Byte tag = 10;
CanonicalNameReference staticProcedureReference;
}
@@ -1200,6 +1207,18 @@
Expression expression;
}
+type TypedefTearOffConstant extends Constant {
+ Byte tag = 14;
+ List<TypeParameter> parameters;
+ CanonicalNameReference staticProcedureReference;
+ List<DartType> types;
+}
+
+type ConstructorTearOffConstant extends Constant {
+ Byte tag = 15;
+ CanonicalNameReference constructorReference;
+}
+
abstract type Statement extends Node {}
type ExpressionStatement extends Statement {
diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart
index 3e8f7b2..4a2284a 100644
--- a/pkg/kernel/lib/ast.dart
+++ b/pkg/kernel/lib/ast.dart
@@ -8659,6 +8659,82 @@
}
}
+class TypedefTearOff extends Expression {
+ final List<TypeParameter> typeParameters;
+ Expression expression;
+ final List<DartType> typeArguments;
+
+ TypedefTearOff(this.typeParameters, this.expression, this.typeArguments) {
+ expression.parent = this;
+ setParents(typeParameters, this);
+ }
+
+ @override
+ DartType getStaticTypeInternal(StaticTypeContext context) {
+ FreshTypeParameters freshTypeParameters =
+ getFreshTypeParameters(typeParameters);
+ FunctionType type = expression.getStaticType(context) as FunctionType;
+ type = Substitution.combine(
+ Substitution.fromPairs(type.typeParameters, typeArguments),
+ freshTypeParameters.substitution)
+ .substituteType(type.withoutTypeParameters) as FunctionType;
+ return new FunctionType(
+ type.positionalParameters, type.returnType, type.declaredNullability,
+ namedParameters: type.namedParameters,
+ typeParameters: freshTypeParameters.freshTypeParameters,
+ requiredParameterCount: type.requiredParameterCount,
+ typedefType: null);
+ }
+
+ @override
+ R accept<R>(ExpressionVisitor<R> v) => v.visitTypedefTearOff(this);
+
+ @override
+ R accept1<R, A>(ExpressionVisitor1<R, A> v, A arg) =>
+ v.visitTypedefTearOff(this, arg);
+
+ @override
+ void visitChildren(Visitor v) {
+ expression.accept(v);
+ visitList(typeParameters, v);
+ visitList(typeArguments, v);
+ }
+
+ @override
+ void transformChildren(Transformer v) {
+ // ignore: unnecessary_null_comparison
+ if (expression != null) {
+ expression = v.transform(expression);
+ expression.parent = this;
+ }
+ v.transformList(typeParameters, this);
+ v.transformDartTypeList(typeArguments);
+ }
+
+ @override
+ void transformOrRemoveChildren(RemovingTransformer v) {
+ // ignore: unnecessary_null_comparison
+ if (expression != null) {
+ expression = v.transform(expression);
+ expression.parent = this;
+ }
+ v.transformList(typeParameters, this, dummyTypeParameter);
+ v.transformDartTypeList(typeArguments);
+ }
+
+ @override
+ String toString() {
+ return "TypedefTearOff(${toStringInternal()})";
+ }
+
+ @override
+ void toTextInternal(AstPrinter printer) {
+ printer.writeExpression(expression);
+ printer.writeTypeParameters(typeParameters);
+ printer.writeTypeArguments(typeArguments);
+ }
+}
+
// ------------------------------------------------------------------------
// STATEMENTS
// ------------------------------------------------------------------------
@@ -12777,21 +12853,20 @@
new InterfaceType(classNode, context.nonNullable, typeArguments);
}
-class PartialInstantiationConstant extends Constant {
+class InstantiationConstant extends Constant {
final TearOffConstant tearOffConstant;
final List<DartType> types;
- PartialInstantiationConstant(this.tearOffConstant, this.types);
+ InstantiationConstant(this.tearOffConstant, this.types);
visitChildren(Visitor v) {
tearOffConstant.acceptReference(v);
visitList(types, v);
}
- R accept<R>(ConstantVisitor<R> v) =>
- v.visitPartialInstantiationConstant(this);
+ R accept<R>(ConstantVisitor<R> v) => v.visitInstantiationConstant(this);
R acceptReference<R>(Visitor<R> v) =>
- v.visitPartialInstantiationConstantReference(this);
+ v.visitInstantiationConstantReference(this);
@override
void toTextInternal(AstPrinter printer) {
@@ -12800,19 +12875,19 @@
}
@override
- String toString() => 'PartialInstantiationConstant(${toStringInternal()})';
+ String toString() => 'InstantiationConstant(${toStringInternal()})';
int get hashCode => _Hash.combineFinish(
tearOffConstant.hashCode, _Hash.combineListHash(types));
bool operator ==(Object other) {
- return other is PartialInstantiationConstant &&
+ return other is InstantiationConstant &&
other.tearOffConstant == tearOffConstant &&
listEquals(other.types, types);
}
DartType getType(StaticTypeContext context) {
- final FunctionType type = tearOffConstant.getType(context);
+ final FunctionType type = tearOffConstant.getType(context) as FunctionType;
final Map<TypeParameter, DartType> mapping = <TypeParameter, DartType>{};
for (final TypeParameter parameter in type.typeParameters) {
mapping[parameter] = types[mapping.length];
@@ -12821,38 +12896,52 @@
}
}
-class TearOffConstant extends Constant {
- final Reference procedureReference;
+abstract class TearOffConstant implements Constant {
+ Reference get memberReference;
+ Member get member;
+ FunctionNode get function;
+}
- TearOffConstant(Procedure procedure)
- : procedureReference = procedure.reference {
+class StaticTearOffConstant extends Constant implements TearOffConstant {
+ @override
+ final Reference memberReference;
+
+ StaticTearOffConstant(Procedure procedure)
+ : memberReference = procedure.reference {
assert(procedure.isStatic);
}
- TearOffConstant.byReference(this.procedureReference);
+ StaticTearOffConstant.byReference(this.memberReference);
- Procedure get procedure => procedureReference.asProcedure;
+ @override
+ Member get member => memberReference.asMember;
+
+ @override
+ FunctionNode get function => procedure.function;
+
+ Procedure get procedure => memberReference.asProcedure;
visitChildren(Visitor v) {
- procedureReference.asProcedure.acceptReference(v);
+ memberReference.asProcedure.acceptReference(v);
}
- R accept<R>(ConstantVisitor<R> v) => v.visitTearOffConstant(this);
- R acceptReference<R>(Visitor<R> v) => v.visitTearOffConstantReference(this);
+ R accept<R>(ConstantVisitor<R> v) => v.visitStaticTearOffConstant(this);
+ R acceptReference<R>(Visitor<R> v) =>
+ v.visitStaticTearOffConstantReference(this);
@override
void toTextInternal(AstPrinter printer) {
- printer.writeMemberName(procedureReference);
+ printer.writeMemberName(memberReference);
}
@override
- String toString() => 'TearOffConstant(${toStringInternal()})';
+ String toString() => 'StaticTearOffConstant(${toStringInternal()})';
- int get hashCode => procedureReference.hashCode;
+ int get hashCode => memberReference.hashCode;
bool operator ==(Object other) {
- return other is TearOffConstant &&
- other.procedureReference == procedureReference;
+ return other is StaticTearOffConstant &&
+ other.memberReference == memberReference;
}
FunctionType getType(StaticTypeContext context) {
@@ -12860,6 +12949,114 @@
}
}
+class ConstructorTearOffConstant extends Constant implements TearOffConstant {
+ @override
+ final Reference memberReference;
+
+ ConstructorTearOffConstant(Constructor constructor)
+ : memberReference = constructor.reference;
+
+ ConstructorTearOffConstant.byReference(this.memberReference);
+
+ @override
+ Member get member => memberReference.asMember;
+
+ @override
+ FunctionNode get function => constructor.function;
+
+ Constructor get constructor => memberReference.asConstructor;
+
+ visitChildren(Visitor v) {
+ memberReference.asProcedure.acceptReference(v);
+ }
+
+ R accept<R>(ConstantVisitor<R> v) => v.visitConstructorTearOffConstant(this);
+ R acceptReference<R>(Visitor<R> v) =>
+ v.visitConstructorTearOffConstantReference(this);
+
+ @override
+ void toTextInternal(AstPrinter printer) {
+ printer.writeMemberName(memberReference);
+ }
+
+ @override
+ String toString() => 'ConstructorTearOffConstant(${toStringInternal()})';
+
+ int get hashCode => memberReference.hashCode;
+
+ bool operator ==(Object other) {
+ return other is StaticTearOffConstant &&
+ other.memberReference == memberReference;
+ }
+
+ FunctionType getType(StaticTypeContext context) {
+ return constructor.function.computeFunctionType(context.nonNullable);
+ }
+}
+
+class TypedefTearOffConstant extends Constant {
+ final List<TypeParameter> parameters;
+ final TearOffConstant tearOffConstant;
+ final List<DartType> types;
+
+ TypedefTearOffConstant(this.parameters, this.tearOffConstant, this.types);
+
+ visitChildren(Visitor v) {
+ visitList(parameters, v);
+ tearOffConstant.acceptReference(v);
+ visitList(types, v);
+ }
+
+ R accept<R>(ConstantVisitor<R> v) => v.visitTypedefTearOffConstant(this);
+ R acceptReference<R>(Visitor<R> v) => v.visitTypedefTearOffConstant(this);
+
+ @override
+ void toTextInternal(AstPrinter printer) {
+ printer.writeConstant(tearOffConstant);
+ printer.writeTypeParameters(parameters);
+ printer.writeTypeArguments(types);
+ }
+
+ @override
+ String toString() => 'TypedefTearOffConstant(${toStringInternal()})';
+
+ bool operator ==(Object other) {
+ if (other is! TypedefTearOffConstant) return false;
+ if (other.tearOffConstant != tearOffConstant) return false;
+ if (other.parameters.length != parameters.length) return false;
+ if (parameters.isNotEmpty) {
+ Map<TypeParameter, DartType> substitutionMap =
+ <TypeParameter, DartType>{};
+ for (int i = 0; i < parameters.length; ++i) {
+ substitutionMap[parameters[i]] = new TypeParameterType.forAlphaRenaming(
+ other.parameters[i], parameters[i]);
+ }
+ Substitution substitution = Substitution.fromMap(substitutionMap);
+ for (int i = 0; i < parameters.length; ++i) {
+ if (types[i] != substitution.substituteType(other.types[i])) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
+ DartType getType(StaticTypeContext context) {
+ FunctionType type = tearOffConstant.getType(context) as FunctionType;
+ FreshTypeParameters freshTypeParameters =
+ getFreshTypeParameters(parameters);
+ type = freshTypeParameters.substitute(
+ Substitution.fromPairs(parameters, types).substituteType(type))
+ as FunctionType;
+ return new FunctionType(
+ type.positionalParameters, type.returnType, type.declaredNullability,
+ namedParameters: type.namedParameters,
+ typeParameters: freshTypeParameters.freshTypeParameters,
+ requiredParameterCount: type.requiredParameterCount,
+ typedefType: null);
+ }
+}
+
class TypeLiteralConstant extends Constant {
final DartType type;
diff --git a/pkg/kernel/lib/binary/ast_from_binary.dart b/pkg/kernel/lib/binary/ast_from_binary.dart
index 54b51cc..a257708 100644
--- a/pkg/kernel/lib/binary/ast_from_binary.dart
+++ b/pkg/kernel/lib/binary/ast_from_binary.dart
@@ -365,10 +365,14 @@
return _readSetConstant();
case ConstantTag.InstanceConstant:
return _readInstanceConstant();
- case ConstantTag.PartialInstantiationConstant:
- return _readPartialInstantiationConstant();
- case ConstantTag.TearOffConstant:
- return _readTearOffConstant();
+ case ConstantTag.InstantiationConstant:
+ return _readInstantiationConstant();
+ case ConstantTag.TypedefTearOffConstant:
+ return _readTypedefTearOffConstant();
+ case ConstantTag.StaticTearOffConstant:
+ return _readStaticTearOffConstant();
+ case ConstantTag.ConstructorTearOffConstant:
+ return _readConstructorTearOffConstant();
case ConstantTag.TypeLiteralConstant:
return _readTypeLiteralConstant();
case ConstantTag.UnevaluatedConstant:
@@ -441,16 +445,29 @@
return new InstanceConstant(classReference, typeArguments, fieldValues);
}
- Constant _readPartialInstantiationConstant() {
- final TearOffConstant tearOffConstant =
- readConstantReference() as TearOffConstant;
+ Constant _readInstantiationConstant() {
+ final StaticTearOffConstant tearOffConstant =
+ readConstantReference() as StaticTearOffConstant;
final List<DartType> types = readDartTypeList();
- return new PartialInstantiationConstant(tearOffConstant, types);
+ return new InstantiationConstant(tearOffConstant, types);
}
- Constant _readTearOffConstant() {
+ Constant _readTypedefTearOffConstant() {
+ final List<TypeParameter> parameters = readAndPushTypeParameterList();
+ final StaticTearOffConstant tearOffConstant =
+ readConstantReference() as StaticTearOffConstant;
+ final List<DartType> types = readDartTypeList();
+ return new TypedefTearOffConstant(parameters, tearOffConstant, types);
+ }
+
+ Constant _readStaticTearOffConstant() {
final Reference reference = readNonNullCanonicalNameReference().reference;
- return new TearOffConstant.byReference(reference);
+ return new StaticTearOffConstant.byReference(reference);
+ }
+
+ Constant _readConstructorTearOffConstant() {
+ final Reference reference = readNonNullCanonicalNameReference().reference;
+ return new ConstructorTearOffConstant.byReference(reference);
}
Constant _readTypeLiteralConstant() {
@@ -1968,6 +1985,8 @@
return _readStaticSet();
case Tag.ConstructorTearOff:
return _readConstructorTearOff();
+ case Tag.TypedefTearOff:
+ return _readTypedefTearOff();
case Tag.MethodInvocation:
return _readMethodInvocation();
case Tag.InstanceInvocation:
@@ -2204,6 +2223,14 @@
..fileOffset = offset;
}
+ Expression _readTypedefTearOff() {
+ List<TypeParameter> typeParameters = readAndPushTypeParameterList();
+ Expression expression = readExpression();
+ List<DartType> typeArguments = readDartTypeList();
+ typeParameterStack.length -= typeParameters.length;
+ return new TypedefTearOff(typeParameters, expression, typeArguments);
+ }
+
Expression _readStaticTearOff() {
int offset = readOffset();
return new StaticTearOff.byReference(readNonNullMemberReference())
diff --git a/pkg/kernel/lib/binary/ast_to_binary.dart b/pkg/kernel/lib/binary/ast_to_binary.dart
index 01e46ba..5460a6e 100644
--- a/pkg/kernel/lib/binary/ast_to_binary.dart
+++ b/pkg/kernel/lib/binary/ast_to_binary.dart
@@ -253,24 +253,39 @@
writeNonNullCanonicalNameReference(fieldRef.canonicalName!);
writeConstantReference(value);
});
- } else if (constant is PartialInstantiationConstant) {
- writeByte(ConstantTag.PartialInstantiationConstant);
+ } else if (constant is InstantiationConstant) {
+ writeByte(ConstantTag.InstantiationConstant);
writeConstantReference(constant.tearOffConstant);
final int length = constant.types.length;
writeUInt30(length);
for (int i = 0; i < length; ++i) {
writeDartType(constant.types[i]);
}
- } else if (constant is TearOffConstant) {
- writeByte(ConstantTag.TearOffConstant);
+ } else if (constant is StaticTearOffConstant) {
+ writeByte(ConstantTag.StaticTearOffConstant);
writeNonNullCanonicalNameReference(
constant.procedure.reference.canonicalName!);
+ } else if (constant is ConstructorTearOffConstant) {
+ writeByte(ConstantTag.ConstructorTearOffConstant);
+ writeNonNullCanonicalNameReference(
+ constant.constructor.reference.canonicalName!);
} else if (constant is TypeLiteralConstant) {
writeByte(ConstantTag.TypeLiteralConstant);
writeDartType(constant.type);
} else if (constant is UnevaluatedConstant) {
writeByte(ConstantTag.UnevaluatedConstant);
writeNode(constant.expression);
+ } else if (constant is TypedefTearOffConstant) {
+ writeByte(ConstantTag.TypedefTearOffConstant);
+ enterScope(typeParameters: constant.parameters);
+ writeNodeList(constant.parameters);
+ writeConstantReference(constant.tearOffConstant);
+ final int length = constant.types.length;
+ writeUInt30(length);
+ for (int i = 0; i < length; ++i) {
+ writeDartType(constant.types[i]);
+ }
+ leaveScope(typeParameters: constant.parameters);
} else {
throw new ArgumentError('Unsupported constant $constant');
}
@@ -1598,6 +1613,14 @@
}
@override
+ void visitTypedefTearOff(TypedefTearOff node) {
+ writeByte(Tag.TypedefTearOff);
+ writeNodeList(node.typeParameters);
+ writeNode(node.expression);
+ writeNodeList(node.typeArguments);
+ }
+
+ @override
void visitStaticTearOff(StaticTearOff node) {
writeByte(Tag.StaticTearOff);
writeOffset(node.fileOffset);
@@ -2689,26 +2712,42 @@
}
@override
- void visitPartialInstantiationConstant(PartialInstantiationConstant node) {
+ void visitInstantiationConstant(InstantiationConstant node) {
+ throw new UnsupportedError('serialization of InstantiationConstants ');
+ }
+
+ @override
+ void visitInstantiationConstantReference(InstantiationConstant node) {
throw new UnsupportedError(
- 'serialization of PartialInstantiationConstants ');
+ 'serialization of InstantiationConstant references');
}
@override
- void visitPartialInstantiationConstantReference(
- PartialInstantiationConstant node) {
+ void visitTypedefTearOffConstant(TypedefTearOffConstant node) {
+ throw new UnsupportedError('serialization of TypedefTearOffConstants ');
+ }
+
+ @override
+ void visitStaticTearOffConstant(StaticTearOffConstant node) {
+ throw new UnsupportedError('serialization of StaticTearOffConstants ');
+ }
+
+ @override
+ void visitConstructorTearOffConstant(ConstructorTearOffConstant node) {
+ throw new UnsupportedError('serialization of ConstructorTearOffConstants ');
+ }
+
+ @override
+ void visitStaticTearOffConstantReference(StaticTearOffConstant node) {
throw new UnsupportedError(
- 'serialization of PartialInstantiationConstant references');
+ 'serialization of StaticTearOffConstant references');
}
@override
- void visitTearOffConstant(TearOffConstant node) {
- throw new UnsupportedError('serialization of TearOffConstants ');
- }
-
- @override
- void visitTearOffConstantReference(TearOffConstant node) {
- throw new UnsupportedError('serialization of TearOffConstant references');
+ void visitConstructorTearOffConstantReference(
+ ConstructorTearOffConstant node) {
+ throw new UnsupportedError(
+ 'serialization of ConstructorTearOffConstant references');
}
@override
diff --git a/pkg/kernel/lib/binary/tag.dart b/pkg/kernel/lib/binary/tag.dart
index 9c0d0f9..e5291c5 100644
--- a/pkg/kernel/lib/binary/tag.dart
+++ b/pkg/kernel/lib/binary/tag.dart
@@ -77,6 +77,7 @@
static const int ConstListLiteral = 58;
static const int ConstMapLiteral = 59;
static const int ConstructorTearOff = 60;
+ static const int TypedefTearOff = 83;
static const int SetLiteral = 109;
static const int ConstSetLiteral = 110;
@@ -123,6 +124,7 @@
static const int AsyncForInStatement = 80;
static const int AssertBlock = 81;
// 82 is occupied by [BlockExpression] (expression).
+ // 83 is occupied by [TypedefTearOff] (expression).
// Types
static const int TypedefType = 87;
@@ -175,7 +177,7 @@
/// Internal version of kernel binary format.
/// Bump it when making incompatible changes in kernel binaries.
/// Keep in sync with runtime/vm/kernel_binary.h, pkg/kernel/binary.md.
- static const int BinaryFormatVersion = 66;
+ static const int BinaryFormatVersion = 67;
}
abstract class ConstantTag {
@@ -189,11 +191,13 @@
static const int ListConstant = 7;
static const int SetConstant = 13;
static const int InstanceConstant = 8;
- static const int PartialInstantiationConstant = 9;
- static const int TearOffConstant = 10;
+ static const int InstantiationConstant = 9;
+ static const int StaticTearOffConstant = 10;
static const int TypeLiteralConstant = 11;
static const int UnevaluatedConstant = 12;
// 13 is occupied by [SetConstant]
+ static const int TypedefTearOffConstant = 14;
+ static const int ConstructorTearOffConstant = 15;
}
const int sdkHashLength = 10; // Bytes, a Git "short hash".
diff --git a/pkg/kernel/lib/clone.dart b/pkg/kernel/lib/clone.dart
index efbe399..86e78d6 100644
--- a/pkg/kernel/lib/clone.dart
+++ b/pkg/kernel/lib/clone.dart
@@ -507,7 +507,7 @@
}
}
- visitTypeParameter(TypeParameter node) {
+ TypeParameter visitTypeParameter(TypeParameter node) {
TypeParameter newNode = typeParams[node]!;
newNode.bound = visitType(node.bound);
// ignore: unnecessary_null_comparison
@@ -740,6 +740,15 @@
TreeNode visitConstructorTearOff(ConstructorTearOff node) {
return new ConstructorTearOff.byReference(node.constructorReference);
}
+
+ @override
+ TreeNode visitTypedefTearOff(TypedefTearOff node) {
+ prepareTypeParameters(node.typeParameters);
+ return new TypedefTearOff(
+ node.typeParameters.map(visitTypeParameter).toList(),
+ clone(node.expression),
+ node.typeArguments.map(visitType).toList());
+ }
}
/// Visitor that return a clone of a tree, maintaining references to cloned
diff --git a/pkg/kernel/lib/text/ast_to_text.dart b/pkg/kernel/lib/text/ast_to_text.dart
index 0017fd4..b9ab3da 100644
--- a/pkg/kernel/lib/text/ast_to_text.dart
+++ b/pkg/kernel/lib/text/ast_to_text.dart
@@ -49,7 +49,7 @@
// Name everything in post-order visit of DAG.
getName(value);
}
- } else if (constant is TearOffConstant) {
+ } else if (constant is StaticTearOffConstant) {
// We only care about naming the constants themselves. [TearOffConstant]
// has no Constant children.
// Avoid visiting `TearOffConstant.procedureReference`.
@@ -2659,13 +2659,13 @@
endLine('}');
}
- visitPartialInstantiationConstant(PartialInstantiationConstant node) {
+ visitInstantiationConstant(InstantiationConstant node) {
writeIndentation();
writeConstantReference(node);
writeSpaced('=');
writeWord('partial-instantiation');
writeSpace();
- writeMemberReferenceFromReference(node.tearOffConstant.procedureReference);
+ writeMemberReferenceFromReference(node.tearOffConstant.memberReference);
writeSpace();
writeSymbol('<');
writeList(node.types, writeType);
@@ -2680,13 +2680,13 @@
endLine('"${escapeString(node.value)}"');
}
- visitTearOffConstant(TearOffConstant node) {
+ visitStaticTearOffConstant(StaticTearOffConstant node) {
writeIndentation();
writeConstantReference(node);
writeSpaced('=');
writeWord('tearoff');
writeSpace();
- writeMemberReferenceFromReference(node.procedureReference);
+ writeMemberReferenceFromReference(node.memberReference);
endLine();
}
@@ -2906,6 +2906,9 @@
int visitConstructorTearOff(ConstructorTearOff node) => PRIMARY;
@override
+ int visitTypedefTearOff(TypedefTearOff node) => EXPRESSION;
+
+ @override
int visitLet(Let node) => EXPRESSION;
@override
diff --git a/pkg/kernel/lib/text/text_serializer.dart b/pkg/kernel/lib/text/text_serializer.dart
index c96bed2..0c4f26e 100644
--- a/pkg/kernel/lib/text/text_serializer.dart
+++ b/pkg/kernel/lib/text/text_serializer.dart
@@ -2204,12 +2204,13 @@
String visitListConstant(ListConstant node) => "const-list";
String visitMapConstant(MapConstant node) => "const-map";
String visitNullConstant(NullConstant node) => "const-null";
- String visitPartialInstantiationConstant(PartialInstantiationConstant node) =>
+ String visitInstantiationConstant(InstantiationConstant node) =>
"const-apply";
String visitSetConstant(SetConstant node) => "const-set";
String visitStringConstant(StringConstant node) => "const-string";
String visitSymbolConstant(SymbolConstant node) => "const-symbol";
- String visitTearOffConstant(TearOffConstant node) => "const-tearoff";
+ String visitStaticTearOffConstant(StaticTearOffConstant node) =>
+ "const-tearoff";
String visitTypeLiteralConstant(TypeLiteralConstant node) => "const-type";
String visitUnevaluatedConstant(UnevaluatedConstant node) => "const-expr";
@@ -2254,12 +2255,10 @@
TextSerializer<NullConstant> nullConstantSerializer =
Wrapped<void, NullConstant>((w) => null, (u) => NullConstant(), Nothing());
-TextSerializer<PartialInstantiationConstant>
- partialInstantiationConstantSerializer = Wrapped<
- Tuple2<TearOffConstant, List<DartType>>,
- PartialInstantiationConstant>(
+TextSerializer<InstantiationConstant> instantiationConstantSerializer =
+ Wrapped<Tuple2<TearOffConstant, List<DartType>>, InstantiationConstant>(
(w) => Tuple2(w.tearOffConstant, w.types),
- (u) => PartialInstantiationConstant(u.first, u.second),
+ (u) => InstantiationConstant(u.first, u.second),
Tuple2Serializer(
tearOffConstantSerializer, ListSerializer(dartTypeSerializer)));
@@ -2280,10 +2279,10 @@
(u) => SymbolConstant(u.first, u.second?.reference),
Tuple2Serializer(DartString(), Optional(CanonicalNameSerializer())));
-TextSerializer<TearOffConstant> tearOffConstantSerializer =
- Wrapped<CanonicalName, TearOffConstant>(
- (w) => w.procedureReference.canonicalName!,
- (u) => TearOffConstant.byReference(u.reference),
+TextSerializer<StaticTearOffConstant> tearOffConstantSerializer =
+ Wrapped<CanonicalName, StaticTearOffConstant>(
+ (w) => w.memberReference.canonicalName!,
+ (u) => StaticTearOffConstant.byReference(u.reference),
CanonicalNameSerializer());
TextSerializer<TypeLiteralConstant> typeLiteralConstantSerializer =
@@ -2656,7 +2655,7 @@
"const-list": listConstantSerializer,
"const-map": mapConstantSerializer,
"const-null": nullConstantSerializer,
- "const-apply": partialInstantiationConstantSerializer,
+ "const-apply": instantiationConstantSerializer,
"const-set": setConstantSerializer,
"const-string": stringConstantSerializer,
"const-symbol": symbolConstantSerializer,
diff --git a/pkg/kernel/lib/type_checker.dart b/pkg/kernel/lib/type_checker.dart
index 777875d..af4d5e3 100644
--- a/pkg/kernel/lib/type_checker.dart
+++ b/pkg/kernel/lib/type_checker.dart
@@ -526,6 +526,31 @@
}
@override
+ DartType visitTypedefTearOff(TypedefTearOff node) {
+ DartType type = visitExpression(node.expression);
+ if (type is! FunctionType) {
+ fail(node, 'Not a function type: $type');
+ return NeverType.fromNullability(currentLibrary!.nonNullable);
+ }
+ FunctionType functionType = type;
+ if (functionType.typeParameters.length != node.typeArguments.length) {
+ fail(node, 'Wrong number of type arguments');
+ return NeverType.fromNullability(currentLibrary!.nonNullable);
+ }
+ FreshTypeParameters freshTypeParameters =
+ getFreshTypeParameters(node.typeParameters);
+ FunctionType result = freshTypeParameters.substitute(_instantiateFunction(
+ functionType.typeParameters, node.typeArguments, node)
+ .substituteType(functionType.withoutTypeParameters)) as FunctionType;
+ return new FunctionType(result.positionalParameters, result.returnType,
+ result.declaredNullability,
+ namedParameters: result.namedParameters,
+ typeParameters: freshTypeParameters.freshTypeParameters,
+ requiredParameterCount: result.requiredParameterCount,
+ typedefType: null);
+ }
+
+ @override
DartType visitListLiteral(ListLiteral node) {
for (int i = 0; i < node.expressions.length; ++i) {
node.expressions[i] =
diff --git a/pkg/kernel/lib/visitor.dart b/pkg/kernel/lib/visitor.dart
index ae31864b..1f71e2c 100644
--- a/pkg/kernel/lib/visitor.dart
+++ b/pkg/kernel/lib/visitor.dart
@@ -82,6 +82,7 @@
R visitCheckLibraryIsLoaded(CheckLibraryIsLoaded node) =>
defaultExpression(node);
R visitConstructorTearOff(ConstructorTearOff node) => defaultExpression(node);
+ R visitTypedefTearOff(TypedefTearOff node) => defaultExpression(node);
}
abstract class StatementVisitor<R> {
@@ -257,6 +258,7 @@
R visitCheckLibraryIsLoaded(CheckLibraryIsLoaded node) =>
defaultExpression(node);
R visitConstructorTearOff(ConstructorTearOff node) => defaultExpression(node);
+ R visitTypedefTearOff(TypedefTearOff node) => defaultExpression(node);
// Statements
R defaultStatement(Statement node) => defaultTreeNode(node);
@@ -434,6 +436,8 @@
defaultExpression(node, arg);
R visitConstructorTearOff(ConstructorTearOff node, A arg) =>
defaultExpression(node, arg);
+ R visitTypedefTearOff(TypedefTearOff node, A arg) =>
+ defaultExpression(node, arg);
// Statements
R defaultStatement(Statement node, A arg) => defaultTreeNode(node, arg);
@@ -577,9 +581,14 @@
R visitListConstant(ListConstant node) => defaultConstant(node);
R visitSetConstant(SetConstant node) => defaultConstant(node);
R visitInstanceConstant(InstanceConstant node) => defaultConstant(node);
- R visitPartialInstantiationConstant(PartialInstantiationConstant node) =>
+ R visitInstantiationConstant(InstantiationConstant node) =>
defaultConstant(node);
- R visitTearOffConstant(TearOffConstant node) => defaultConstant(node);
+ R visitTypedefTearOffConstant(TypedefTearOffConstant node) =>
+ defaultConstant(node);
+ R visitStaticTearOffConstant(StaticTearOffConstant node) =>
+ defaultConstant(node);
+ R visitConstructorTearOffConstant(ConstructorTearOffConstant node) =>
+ defaultConstant(node);
R visitTypeLiteralConstant(TypeLiteralConstant node) => defaultConstant(node);
R visitUnevaluatedConstant(UnevaluatedConstant node) => defaultConstant(node);
}
@@ -597,8 +606,10 @@
R visitListConstant(ListConstant node);
R visitSetConstant(SetConstant node);
R visitInstanceConstant(InstanceConstant node);
- R visitPartialInstantiationConstant(PartialInstantiationConstant node);
- R visitTearOffConstant(TearOffConstant node);
+ R visitInstantiationConstant(InstantiationConstant node);
+ R visitTypedefTearOffConstant(TypedefTearOffConstant node);
+ R visitStaticTearOffConstant(StaticTearOffConstant node);
+ R visitConstructorTearOffConstant(ConstructorTearOffConstant node);
R visitTypeLiteralConstant(TypeLiteralConstant node);
R visitUnevaluatedConstant(UnevaluatedConstant node);
}
@@ -617,12 +628,20 @@
_callback.visitTypeLiteralConstant(node);
@override
- R visitTearOffConstant(TearOffConstant node) =>
- _callback.visitTearOffConstant(node);
+ R visitStaticTearOffConstant(StaticTearOffConstant node) =>
+ _callback.visitStaticTearOffConstant(node);
@override
- R visitPartialInstantiationConstant(PartialInstantiationConstant node) =>
- _callback.visitPartialInstantiationConstant(node);
+ R visitConstructorTearOffConstant(ConstructorTearOffConstant node) =>
+ _callback.visitConstructorTearOffConstant(node);
+
+ @override
+ R visitInstantiationConstant(InstantiationConstant node) =>
+ _callback.visitInstantiationConstant(node);
+
+ @override
+ R visitTypedefTearOffConstant(TypedefTearOffConstant node) =>
+ _callback.visitTypedefTearOffConstant(node);
@override
R visitInstanceConstant(InstanceConstant node) =>
@@ -703,9 +722,14 @@
R visitListConstant(ListConstant node) => defaultConstant(node);
R visitSetConstant(SetConstant node) => defaultConstant(node);
R visitInstanceConstant(InstanceConstant node) => defaultConstant(node);
- R visitPartialInstantiationConstant(PartialInstantiationConstant node) =>
+ R visitInstantiationConstant(InstantiationConstant node) =>
defaultConstant(node);
- R visitTearOffConstant(TearOffConstant node) => defaultConstant(node);
+ R visitTypedefTearOffConstant(TypedefTearOffConstant node) =>
+ defaultConstant(node);
+ R visitStaticTearOffConstant(StaticTearOffConstant node) =>
+ defaultConstant(node);
+ R visitConstructorTearOffConstant(ConstructorTearOffConstant node) =>
+ defaultConstant(node);
R visitTypeLiteralConstant(TypeLiteralConstant node) => defaultConstant(node);
R visitUnevaluatedConstant(UnevaluatedConstant node) => defaultConstant(node);
}
@@ -744,9 +768,12 @@
void visitListConstant(ListConstant node) => defaultConstant(node);
void visitSetConstant(SetConstant node) => defaultConstant(node);
void visitInstanceConstant(InstanceConstant node) => defaultConstant(node);
- void visitPartialInstantiationConstant(PartialInstantiationConstant node) =>
+ void visitInstantiationConstant(InstantiationConstant node) =>
defaultConstant(node);
- void visitTearOffConstant(TearOffConstant node) => defaultConstant(node);
+ void visitStaticTearOffConstant(StaticTearOffConstant node) =>
+ defaultConstant(node);
+ void visitConstructorTearOffConstant(ConstructorTearOffConstant node) =>
+ defaultConstant(node);
void visitTypeLiteralConstant(TypeLiteralConstant node) =>
defaultConstant(node);
void visitUnevaluatedConstant(UnevaluatedConstant node) =>
@@ -804,9 +831,14 @@
R visitListConstant(ListConstant node) => defaultConstant(node);
R visitSetConstant(SetConstant node) => defaultConstant(node);
R visitInstanceConstant(InstanceConstant node) => defaultConstant(node);
- R visitPartialInstantiationConstant(PartialInstantiationConstant node) =>
+ R visitInstantiationConstant(InstantiationConstant node) =>
defaultConstant(node);
- R visitTearOffConstant(TearOffConstant node) => defaultConstant(node);
+ R visitTypedefTearOffConstant(TypedefTearOffConstant node) =>
+ defaultConstant(node);
+ R visitStaticTearOffConstant(StaticTearOffConstant node) =>
+ defaultConstant(node);
+ R visitConstructorTearOffConstant(ConstructorTearOffConstant node) =>
+ defaultConstant(node);
R visitTypeLiteralConstant(TypeLiteralConstant node) => defaultConstant(node);
R visitUnevaluatedConstant(UnevaluatedConstant node) => defaultConstant(node);
@@ -840,10 +872,11 @@
defaultConstantReference(node);
R visitInstanceConstantReference(InstanceConstant node) =>
defaultConstantReference(node);
- R visitPartialInstantiationConstantReference(
- PartialInstantiationConstant node) =>
+ R visitInstantiationConstantReference(InstantiationConstant node) =>
defaultConstantReference(node);
- R visitTearOffConstantReference(TearOffConstant node) =>
+ R visitStaticTearOffConstantReference(StaticTearOffConstant node) =>
+ defaultConstantReference(node);
+ R visitConstructorTearOffConstantReference(ConstructorTearOffConstant node) =>
defaultConstantReference(node);
R visitTypeLiteralConstantReference(TypeLiteralConstant node) =>
defaultConstantReference(node);
@@ -1548,6 +1581,8 @@
defaultExpression(node, arg);
R visitConstructorTearOff(ConstructorTearOff node, T arg) =>
defaultExpression(node, arg);
+ R visitTypedefTearOff(TypedefTearOff node, T arg) =>
+ defaultExpression(node, arg);
}
abstract class StatementVisitor1<R, T> {
diff --git a/pkg/vm/lib/transformations/ffi_use_sites.dart b/pkg/vm/lib/transformations/ffi_use_sites.dart
index 8cce3b0..4600fde 100644
--- a/pkg/vm/lib/transformations/ffi_use_sites.dart
+++ b/pkg/vm/lib/transformations/ffi_use_sites.dart
@@ -770,7 +770,8 @@
void _ensureIsStaticFunction(Expression node) {
if ((node is StaticGet && node.target is Procedure) ||
- (node is ConstantExpression && node.constant is TearOffConstant)) {
+ (node is ConstantExpression &&
+ node.constant is StaticTearOffConstant)) {
return;
}
diagnosticReporter.report(
diff --git a/pkg/vm/lib/transformations/type_flow/summary_collector.dart b/pkg/vm/lib/transformations/type_flow/summary_collector.dart
index 0986d7e..fac8e00 100644
--- a/pkg/vm/lib/transformations/type_flow/summary_collector.dart
+++ b/pkg/vm/lib/transformations/type_flow/summary_collector.dart
@@ -2474,17 +2474,20 @@
}
@override
- Type visitTearOffConstant(TearOffConstant constant) {
- final Procedure procedure = constant.procedure;
+ Type visitStaticTearOffConstant(StaticTearOffConstant constant) {
+ final Member member = constant.procedure;
summaryCollector._entryPointsListener
- .addRawCall(new DirectSelector(procedure));
- summaryCollector._entryPointsListener.recordTearOff(procedure);
+ .addRawCall(new DirectSelector(member));
+ if (member is Constructor) {
+ summaryCollector._entryPointsListener
+ .addAllocatedClass(member.enclosingClass);
+ }
+ summaryCollector._entryPointsListener.recordTearOff(member);
return _getStaticType(constant);
}
@override
- Type visitPartialInstantiationConstant(
- PartialInstantiationConstant constant) {
+ Type visitInstantiationConstant(InstantiationConstant constant) {
constant.tearOffConstant.accept(this);
return _getStaticType(constant);
}
diff --git a/pkg/vm/lib/transformations/type_flow/transformer.dart b/pkg/vm/lib/transformations/type_flow/transformer.dart
index 47cce1b..e9473dd 100644
--- a/pkg/vm/lib/transformations/type_flow/transformer.dart
+++ b/pkg/vm/lib/transformations/type_flow/transformer.dart
@@ -1794,12 +1794,12 @@
}
@override
- visitTearOffConstant(TearOffConstant constant) {
+ visitStaticTearOffConstant(StaticTearOffConstant constant) {
shaker.addUsedMember(constant.procedure);
}
@override
- visitPartialInstantiationConstant(PartialInstantiationConstant constant) {
+ visitInstantiationConstant(InstantiationConstant constant) {
analyzeConstant(constant.tearOffConstant);
}
diff --git a/runtime/vm/compiler/frontend/constant_reader.cc b/runtime/vm/compiler/frontend/constant_reader.cc
index a9bd54f..f2c7656 100644
--- a/runtime/vm/compiler/frontend/constant_reader.cc
+++ b/runtime/vm/compiler/frontend/constant_reader.cc
@@ -310,7 +310,7 @@
}
break;
}
- case kPartialInstantiationConstant: {
+ case kInstantiationConstant: {
// Recurse into lazily evaluating the "sub" constant
// needed to evaluate the current constant.
const intptr_t entry_index = reader.ReadUInt();
@@ -345,7 +345,7 @@
type_arguments, function, context, Heap::kOld);
break;
}
- case kTearOffConstant: {
+ case kStaticTearOffConstant: {
const NameIndex index = reader.ReadCanonicalNameReference();
Function& function =
Function::Handle(Z, H.LookupStaticMethodByKernelProcedure(index));
diff --git a/runtime/vm/kernel_binary.h b/runtime/vm/kernel_binary.h
index 1c55440..57b229a 100644
--- a/runtime/vm/kernel_binary.h
+++ b/runtime/vm/kernel_binary.h
@@ -20,8 +20,8 @@
static const uint32_t kMagicProgramFile = 0x90ABCDEFu;
// Both version numbers are inclusive.
-static const uint32_t kMinSupportedKernelFormatVersion = 66;
-static const uint32_t kMaxSupportedKernelFormatVersion = 66;
+static const uint32_t kMinSupportedKernelFormatVersion = 67;
+static const uint32_t kMaxSupportedKernelFormatVersion = 67;
// Keep in sync with package:kernel/lib/binary/tag.dart
#define KERNEL_TAG_LIST(V) \
@@ -97,6 +97,7 @@
V(ConstSetLiteral, 110) \
V(ConstMapLiteral, 59) \
V(ConstructorTearOff, 60) \
+ V(TypedefTearOff, 83) \
V(ExpressionStatement, 61) \
V(Block, 62) \
V(EmptyStatement, 63) \
@@ -166,12 +167,14 @@
kListConstant = 7,
kSetConstant = 13,
kInstanceConstant = 8,
- kPartialInstantiationConstant = 9,
- kTearOffConstant = 10,
+ kInstantiationConstant = 9,
+ kStaticTearOffConstant = 10,
kTypeLiteralConstant = 11,
// These constants are not expected to be seen by the VM, because all
// constants are fully evaluated.
kUnevaluatedConstant = 12,
+ kTypedefTearOffConstant = 14,
+ kConstructorTearOffConstant = 15,
};
// Keep in sync with package:kernel/lib/ast.dart
diff --git a/tools/VERSION b/tools/VERSION
index 4a7410b..d53fa3f 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 14
PATCH 0
-PRERELEASE 260
+PRERELEASE 261
PRERELEASE_PATCH 0
\ No newline at end of file