Version 2.15.0-68.0.dev
Merge commit 'c13b0bbe9735713bcb5affdd6d56f28f0252a12e' into 'dev'
diff --git a/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.dart b/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.dart
index a64606e..37971a9 100644
--- a/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.dart
@@ -316,8 +316,8 @@
Name targetName =
new Name(constructorName, declaration.library.library);
Procedure tearOff = tearOffs![targetName] =
- createTypedefTearOffProcedure(
- name, constructorName, library, fileUri, charOffset);
+ createTypedefTearOffProcedure(name, constructorName, library,
+ target.fileUri, target.fileOffset);
_tearOffDependencies![tearOff] = target;
buildTypedefTearOffProcedure(tearOff, target, declaration.cls,
diff --git a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.strong.expect
index 91acfd5..1ecd540 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.strong.expect
@@ -90,19 +90,19 @@
core::String typeName = (#C7).{core::Type::toString}(){() → core::String};
core::String functionTypeName = (local<core::int>).{core::Object::runtimeType}{core::Type}.{core::Type::toString}(){() → core::String};
}
-static method _#ListList#new#tearOff<T extends core::Object? = dynamic>([core::int? length = #C9]) → core::List<core::List<self::_#ListList#new#tearOff::T%>>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#new#tearOff<T extends core::Object? = dynamic>([core::int? length = #C9]) → core::List<core::List<self::_#ListList#new#tearOff::T%>>
return core::List::•<core::List<self::_#ListList#new#tearOff::T%>>(length);
-static method _#ListList#filled#tearOff<T extends core::Object? = dynamic>(core::int length, core::List<self::_#ListList#filled#tearOff::T%> fill, {core::bool growable = #C10}) → core::List<core::List<self::_#ListList#filled#tearOff::T%>>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#filled#tearOff<T extends core::Object? = dynamic>(core::int length, core::List<self::_#ListList#filled#tearOff::T%> fill, {core::bool growable = #C10}) → core::List<core::List<self::_#ListList#filled#tearOff::T%>>
return core::List::filled<core::List<self::_#ListList#filled#tearOff::T%>>(length, fill, growable: growable);
-static method _#ListList#empty#tearOff<T extends core::Object? = dynamic>({core::bool growable = #C10}) → core::List<core::List<self::_#ListList#empty#tearOff::T%>>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#empty#tearOff<T extends core::Object? = dynamic>({core::bool growable = #C10}) → core::List<core::List<self::_#ListList#empty#tearOff::T%>>
return core::List::empty<core::List<self::_#ListList#empty#tearOff::T%>>(growable: growable);
-static method _#ListList#from#tearOff<T extends core::Object? = dynamic>(core::Iterable<dynamic> elements, {core::bool growable = #C11}) → core::List<core::List<self::_#ListList#from#tearOff::T%>>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#from#tearOff<T extends core::Object? = dynamic>(core::Iterable<dynamic> elements, {core::bool growable = #C11}) → core::List<core::List<self::_#ListList#from#tearOff::T%>>
return core::List::from<core::List<self::_#ListList#from#tearOff::T%>>(elements, growable: growable);
-static method _#ListList#of#tearOff<T extends core::Object? = dynamic>(core::Iterable<core::List<self::_#ListList#of#tearOff::T%>> elements, {core::bool growable = #C11}) → core::List<core::List<self::_#ListList#of#tearOff::T%>>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#of#tearOff<T extends core::Object? = dynamic>(core::Iterable<core::List<self::_#ListList#of#tearOff::T%>> elements, {core::bool growable = #C11}) → core::List<core::List<self::_#ListList#of#tearOff::T%>>
return core::List::of<core::List<self::_#ListList#of#tearOff::T%>>(elements, growable: growable);
-static method _#ListList#generate#tearOff<T extends core::Object? = dynamic>(core::int length, (core::int) → core::List<self::_#ListList#generate#tearOff::T%> generator, {core::bool growable = #C11}) → core::List<core::List<self::_#ListList#generate#tearOff::T%>>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#generate#tearOff<T extends core::Object? = dynamic>(core::int length, (core::int) → core::List<self::_#ListList#generate#tearOff::T%> generator, {core::bool growable = #C11}) → core::List<core::List<self::_#ListList#generate#tearOff::T%>>
return core::List::generate<core::List<self::_#ListList#generate#tearOff::T%>>(length, generator, growable: growable);
-static method _#ListList#unmodifiable#tearOff<T extends core::Object? = dynamic>(core::Iterable<dynamic> elements) → core::List<core::List<self::_#ListList#unmodifiable#tearOff::T%>>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#unmodifiable#tearOff<T extends core::Object? = dynamic>(core::Iterable<dynamic> elements) → core::List<core::List<self::_#ListList#unmodifiable#tearOff::T%>>
return core::List::unmodifiable<core::List<self::_#ListList#unmodifiable#tearOff::T%>>(elements);
constants {
diff --git a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.strong.transformed.expect
index 5ba5c40..4176e23 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.strong.transformed.expect
@@ -98,19 +98,19 @@
core::String typeName = (#C7).{core::Type::toString}(){() → core::String};
core::String functionTypeName = (local<core::int>).{core::Object::runtimeType}{core::Type}.{core::Type::toString}(){() → core::String};
}
-static method _#ListList#new#tearOff<T extends core::Object? = dynamic>([core::int? length = #C9]) → core::List<core::List<self::_#ListList#new#tearOff::T%>>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#new#tearOff<T extends core::Object? = dynamic>([core::int? length = #C9]) → core::List<core::List<self::_#ListList#new#tearOff::T%>>
return core::_List::•<core::List<self::_#ListList#new#tearOff::T%>>(length);
-static method _#ListList#filled#tearOff<T extends core::Object? = dynamic>(core::int length, core::List<self::_#ListList#filled#tearOff::T%> fill, {core::bool growable = #C10}) → core::List<core::List<self::_#ListList#filled#tearOff::T%>>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#filled#tearOff<T extends core::Object? = dynamic>(core::int length, core::List<self::_#ListList#filled#tearOff::T%> fill, {core::bool growable = #C10}) → core::List<core::List<self::_#ListList#filled#tearOff::T%>>
return core::List::filled<core::List<self::_#ListList#filled#tearOff::T%>>(length, fill, growable: growable);
-static method _#ListList#empty#tearOff<T extends core::Object? = dynamic>({core::bool growable = #C10}) → core::List<core::List<self::_#ListList#empty#tearOff::T%>>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#empty#tearOff<T extends core::Object? = dynamic>({core::bool growable = #C10}) → core::List<core::List<self::_#ListList#empty#tearOff::T%>>
return core::List::empty<core::List<self::_#ListList#empty#tearOff::T%>>(growable: growable);
-static method _#ListList#from#tearOff<T extends core::Object? = dynamic>(core::Iterable<dynamic> elements, {core::bool growable = #C11}) → core::List<core::List<self::_#ListList#from#tearOff::T%>>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#from#tearOff<T extends core::Object? = dynamic>(core::Iterable<dynamic> elements, {core::bool growable = #C11}) → core::List<core::List<self::_#ListList#from#tearOff::T%>>
return core::List::from<core::List<self::_#ListList#from#tearOff::T%>>(elements, growable: growable);
-static method _#ListList#of#tearOff<T extends core::Object? = dynamic>(core::Iterable<core::List<self::_#ListList#of#tearOff::T%>> elements, {core::bool growable = #C11}) → core::List<core::List<self::_#ListList#of#tearOff::T%>>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#of#tearOff<T extends core::Object? = dynamic>(core::Iterable<core::List<self::_#ListList#of#tearOff::T%>> elements, {core::bool growable = #C11}) → core::List<core::List<self::_#ListList#of#tearOff::T%>>
return core::List::of<core::List<self::_#ListList#of#tearOff::T%>>(elements, growable: growable);
-static method _#ListList#generate#tearOff<T extends core::Object? = dynamic>(core::int length, (core::int) → core::List<self::_#ListList#generate#tearOff::T%> generator, {core::bool growable = #C11}) → core::List<core::List<self::_#ListList#generate#tearOff::T%>>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#generate#tearOff<T extends core::Object? = dynamic>(core::int length, (core::int) → core::List<self::_#ListList#generate#tearOff::T%> generator, {core::bool growable = #C11}) → core::List<core::List<self::_#ListList#generate#tearOff::T%>>
return core::List::generate<core::List<self::_#ListList#generate#tearOff::T%>>(length, generator, growable: growable);
-static method _#ListList#unmodifiable#tearOff<T extends core::Object? = dynamic>(core::Iterable<dynamic> elements) → core::List<core::List<self::_#ListList#unmodifiable#tearOff::T%>>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#unmodifiable#tearOff<T extends core::Object? = dynamic>(core::Iterable<dynamic> elements) → core::List<core::List<self::_#ListList#unmodifiable#tearOff::T%>>
return core::List::unmodifiable<core::List<self::_#ListList#unmodifiable#tearOff::T%>>(elements);
constants {
diff --git a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.weak.expect
index d11b021..10969f4 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.weak.expect
@@ -90,19 +90,19 @@
core::String typeName = (#C7).{core::Type::toString}(){() → core::String};
core::String functionTypeName = (local<core::int>).{core::Object::runtimeType}{core::Type}.{core::Type::toString}(){() → core::String};
}
-static method _#ListList#new#tearOff<T extends core::Object? = dynamic>([core::int? length = #C9]) → core::List<core::List<self::_#ListList#new#tearOff::T%>>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#new#tearOff<T extends core::Object? = dynamic>([core::int? length = #C9]) → core::List<core::List<self::_#ListList#new#tearOff::T%>>
return core::List::•<core::List<self::_#ListList#new#tearOff::T%>>(length);
-static method _#ListList#filled#tearOff<T extends core::Object? = dynamic>(core::int length, core::List<self::_#ListList#filled#tearOff::T%> fill, {core::bool growable = #C10}) → core::List<core::List<self::_#ListList#filled#tearOff::T%>>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#filled#tearOff<T extends core::Object? = dynamic>(core::int length, core::List<self::_#ListList#filled#tearOff::T%> fill, {core::bool growable = #C10}) → core::List<core::List<self::_#ListList#filled#tearOff::T%>>
return core::List::filled<core::List<self::_#ListList#filled#tearOff::T%>>(length, fill, growable: growable);
-static method _#ListList#empty#tearOff<T extends core::Object? = dynamic>({core::bool growable = #C10}) → core::List<core::List<self::_#ListList#empty#tearOff::T%>>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#empty#tearOff<T extends core::Object? = dynamic>({core::bool growable = #C10}) → core::List<core::List<self::_#ListList#empty#tearOff::T%>>
return core::List::empty<core::List<self::_#ListList#empty#tearOff::T%>>(growable: growable);
-static method _#ListList#from#tearOff<T extends core::Object? = dynamic>(core::Iterable<dynamic> elements, {core::bool growable = #C11}) → core::List<core::List<self::_#ListList#from#tearOff::T%>>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#from#tearOff<T extends core::Object? = dynamic>(core::Iterable<dynamic> elements, {core::bool growable = #C11}) → core::List<core::List<self::_#ListList#from#tearOff::T%>>
return core::List::from<core::List<self::_#ListList#from#tearOff::T%>>(elements, growable: growable);
-static method _#ListList#of#tearOff<T extends core::Object? = dynamic>(core::Iterable<core::List<self::_#ListList#of#tearOff::T%>> elements, {core::bool growable = #C11}) → core::List<core::List<self::_#ListList#of#tearOff::T%>>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#of#tearOff<T extends core::Object? = dynamic>(core::Iterable<core::List<self::_#ListList#of#tearOff::T%>> elements, {core::bool growable = #C11}) → core::List<core::List<self::_#ListList#of#tearOff::T%>>
return core::List::of<core::List<self::_#ListList#of#tearOff::T%>>(elements, growable: growable);
-static method _#ListList#generate#tearOff<T extends core::Object? = dynamic>(core::int length, (core::int) → core::List<self::_#ListList#generate#tearOff::T%> generator, {core::bool growable = #C11}) → core::List<core::List<self::_#ListList#generate#tearOff::T%>>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#generate#tearOff<T extends core::Object? = dynamic>(core::int length, (core::int) → core::List<self::_#ListList#generate#tearOff::T%> generator, {core::bool growable = #C11}) → core::List<core::List<self::_#ListList#generate#tearOff::T%>>
return core::List::generate<core::List<self::_#ListList#generate#tearOff::T%>>(length, generator, growable: growable);
-static method _#ListList#unmodifiable#tearOff<T extends core::Object? = dynamic>(core::Iterable<dynamic> elements) → core::List<core::List<self::_#ListList#unmodifiable#tearOff::T%>>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#unmodifiable#tearOff<T extends core::Object? = dynamic>(core::Iterable<dynamic> elements) → core::List<core::List<self::_#ListList#unmodifiable#tearOff::T%>>
return core::List::unmodifiable<core::List<self::_#ListList#unmodifiable#tearOff::T%>>(elements);
constants {
diff --git a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.weak.outline.expect
index 989a2cb..0db844e 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.weak.outline.expect
@@ -57,17 +57,17 @@
return () → void => self::Ext|emethod(#this);
static method main() → void
;
-static method _#ListList#new#tearOff<T extends core::Object? = dynamic>([core::int? length]) → core::List<core::List<self::_#ListList#new#tearOff::T%>>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#new#tearOff<T extends core::Object? = dynamic>([core::int? length]) → core::List<core::List<self::_#ListList#new#tearOff::T%>>
return core::List::•<core::List<self::_#ListList#new#tearOff::T%>>(length);
-static method _#ListList#filled#tearOff<T extends core::Object? = dynamic>(core::int length, core::List<self::_#ListList#filled#tearOff::T%> fill, {core::bool growable}) → core::List<core::List<self::_#ListList#filled#tearOff::T%>>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#filled#tearOff<T extends core::Object? = dynamic>(core::int length, core::List<self::_#ListList#filled#tearOff::T%> fill, {core::bool growable}) → core::List<core::List<self::_#ListList#filled#tearOff::T%>>
return core::List::filled<core::List<self::_#ListList#filled#tearOff::T%>>(length, fill, growable: growable);
-static method _#ListList#empty#tearOff<T extends core::Object? = dynamic>({core::bool growable}) → core::List<core::List<self::_#ListList#empty#tearOff::T%>>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#empty#tearOff<T extends core::Object? = dynamic>({core::bool growable}) → core::List<core::List<self::_#ListList#empty#tearOff::T%>>
return core::List::empty<core::List<self::_#ListList#empty#tearOff::T%>>(growable: growable);
-static method _#ListList#from#tearOff<T extends core::Object? = dynamic>(core::Iterable<dynamic> elements, {core::bool growable}) → core::List<core::List<self::_#ListList#from#tearOff::T%>>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#from#tearOff<T extends core::Object? = dynamic>(core::Iterable<dynamic> elements, {core::bool growable}) → core::List<core::List<self::_#ListList#from#tearOff::T%>>
return core::List::from<core::List<self::_#ListList#from#tearOff::T%>>(elements, growable: growable);
-static method _#ListList#of#tearOff<T extends core::Object? = dynamic>(core::Iterable<core::List<self::_#ListList#of#tearOff::T%>> elements, {core::bool growable}) → core::List<core::List<self::_#ListList#of#tearOff::T%>>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#of#tearOff<T extends core::Object? = dynamic>(core::Iterable<core::List<self::_#ListList#of#tearOff::T%>> elements, {core::bool growable}) → core::List<core::List<self::_#ListList#of#tearOff::T%>>
return core::List::of<core::List<self::_#ListList#of#tearOff::T%>>(elements, growable: growable);
-static method _#ListList#generate#tearOff<T extends core::Object? = dynamic>(core::int length, (core::int) → core::List<self::_#ListList#generate#tearOff::T%> generator, {core::bool growable}) → core::List<core::List<self::_#ListList#generate#tearOff::T%>>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#generate#tearOff<T extends core::Object? = dynamic>(core::int length, (core::int) → core::List<self::_#ListList#generate#tearOff::T%> generator, {core::bool growable}) → core::List<core::List<self::_#ListList#generate#tearOff::T%>>
return core::List::generate<core::List<self::_#ListList#generate#tearOff::T%>>(length, generator, growable: growable);
-static method _#ListList#unmodifiable#tearOff<T extends core::Object? = dynamic>(core::Iterable<dynamic> elements) → core::List<core::List<self::_#ListList#unmodifiable#tearOff::T%>>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#unmodifiable#tearOff<T extends core::Object? = dynamic>(core::Iterable<dynamic> elements) → core::List<core::List<self::_#ListList#unmodifiable#tearOff::T%>>
return core::List::unmodifiable<core::List<self::_#ListList#unmodifiable#tearOff::T%>>(elements);
diff --git a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.weak.transformed.expect
index c8e2bba..f3202b5 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/explicit_instantiation.dart.weak.transformed.expect
@@ -98,19 +98,19 @@
core::String typeName = (#C7).{core::Type::toString}(){() → core::String};
core::String functionTypeName = (local<core::int>).{core::Object::runtimeType}{core::Type}.{core::Type::toString}(){() → core::String};
}
-static method _#ListList#new#tearOff<T extends core::Object? = dynamic>([core::int? length = #C9]) → core::List<core::List<self::_#ListList#new#tearOff::T%>>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#new#tearOff<T extends core::Object? = dynamic>([core::int? length = #C9]) → core::List<core::List<self::_#ListList#new#tearOff::T%>>
return core::_List::•<core::List<self::_#ListList#new#tearOff::T%>>(length);
-static method _#ListList#filled#tearOff<T extends core::Object? = dynamic>(core::int length, core::List<self::_#ListList#filled#tearOff::T%> fill, {core::bool growable = #C10}) → core::List<core::List<self::_#ListList#filled#tearOff::T%>>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#filled#tearOff<T extends core::Object? = dynamic>(core::int length, core::List<self::_#ListList#filled#tearOff::T%> fill, {core::bool growable = #C10}) → core::List<core::List<self::_#ListList#filled#tearOff::T%>>
return core::List::filled<core::List<self::_#ListList#filled#tearOff::T%>>(length, fill, growable: growable);
-static method _#ListList#empty#tearOff<T extends core::Object? = dynamic>({core::bool growable = #C10}) → core::List<core::List<self::_#ListList#empty#tearOff::T%>>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#empty#tearOff<T extends core::Object? = dynamic>({core::bool growable = #C10}) → core::List<core::List<self::_#ListList#empty#tearOff::T%>>
return core::List::empty<core::List<self::_#ListList#empty#tearOff::T%>>(growable: growable);
-static method _#ListList#from#tearOff<T extends core::Object? = dynamic>(core::Iterable<dynamic> elements, {core::bool growable = #C11}) → core::List<core::List<self::_#ListList#from#tearOff::T%>>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#from#tearOff<T extends core::Object? = dynamic>(core::Iterable<dynamic> elements, {core::bool growable = #C11}) → core::List<core::List<self::_#ListList#from#tearOff::T%>>
return core::List::from<core::List<self::_#ListList#from#tearOff::T%>>(elements, growable: growable);
-static method _#ListList#of#tearOff<T extends core::Object? = dynamic>(core::Iterable<core::List<self::_#ListList#of#tearOff::T%>> elements, {core::bool growable = #C11}) → core::List<core::List<self::_#ListList#of#tearOff::T%>>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#of#tearOff<T extends core::Object? = dynamic>(core::Iterable<core::List<self::_#ListList#of#tearOff::T%>> elements, {core::bool growable = #C11}) → core::List<core::List<self::_#ListList#of#tearOff::T%>>
return core::List::of<core::List<self::_#ListList#of#tearOff::T%>>(elements, growable: growable);
-static method _#ListList#generate#tearOff<T extends core::Object? = dynamic>(core::int length, (core::int) → core::List<self::_#ListList#generate#tearOff::T%> generator, {core::bool growable = #C11}) → core::List<core::List<self::_#ListList#generate#tearOff::T%>>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#generate#tearOff<T extends core::Object? = dynamic>(core::int length, (core::int) → core::List<self::_#ListList#generate#tearOff::T%> generator, {core::bool growable = #C11}) → core::List<core::List<self::_#ListList#generate#tearOff::T%>>
return core::List::generate<core::List<self::_#ListList#generate#tearOff::T%>>(length, generator, growable: growable);
-static method _#ListList#unmodifiable#tearOff<T extends core::Object? = dynamic>(core::Iterable<dynamic> elements) → core::List<core::List<self::_#ListList#unmodifiable#tearOff::T%>>
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/array_patch.dart */ _#ListList#unmodifiable#tearOff<T extends core::Object? = dynamic>(core::Iterable<dynamic> elements) → core::List<core::List<self::_#ListList#unmodifiable#tearOff::T%>>
return core::List::unmodifiable<core::List<self::_#ListList#unmodifiable#tearOff::T%>>(elements);
constants {
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart
new file mode 100644
index 0000000..6dd9ff1
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart
@@ -0,0 +1,80 @@
+// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
+// 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.
+
+import 'typedef_from_lib.dart';
+
+part 'typedef_from_part.dart';
+
+main() {
+ var aNew = A.new;
+ var aNamed = A.named;
+ var aFact = A.fact;
+ var aRedirect = A.redirect;
+
+ aNew('', '');
+ aNew(0, '');
+ aNamed('');
+ aNamed(0, '');
+ aNamed('', '', 87);
+ aFact(0);
+ aFact('', b: '');
+ aFact(0, c: 87);
+ aFact('', c: 87, b: '');
+ aRedirect('');
+ aRedirect(0);
+
+ var aNewInst = aNew<bool>;
+ var aNamedInst = aNamed<bool>;
+ var aFactInst = aFact<bool>;
+ var aRedirectInst = aRedirect<bool>;
+
+ aNewInst(true, '');
+ aNamedInst(false);
+ aNamedInst(true, '');
+ aNamedInst(false, '', 87);
+ aFactInst(true);
+ aFactInst(false, b: '');
+ aFactInst(true, c: 87);
+ aFactInst(false, c: 87, b: '');
+ aRedirectInst(true);
+
+ var bNew = B.new;
+ var bNamed = B.named;
+ var bFact = B.fact;
+ var bRedirect = B.redirect;
+
+ bNew('', 0);
+ bNew(0, 0);
+ bNamed('');
+ bNamed(0, 0);
+ bNamed('', 0, 87);
+ bFact(0);
+ bFact('', b: 0);
+ bFact(0, c: 87);
+ bFact('', c: 87, b: 0);
+ bRedirect('');
+ bRedirect(0);
+
+ var bNewInst = bNew<bool>;
+ var bNamedInst = bNamed<bool>;
+ var bFactInst = bFact<bool>;
+ var bRedirectInst = bRedirect<bool>;
+
+ bNewInst(true, 0);
+ bNamedInst(false);
+ bNamedInst(true, 0);
+ bNamedInst(false, 0, 87);
+ bFactInst(true);
+ bFactInst(false, b: 0);
+ bFactInst(true, c: 87);
+ bFactInst(false, c: 87, b: 0);
+ bRedirectInst(true);
+}
+
+class Class<S, T> {
+ Class(S a, T b);
+ Class.named(S a, [T? b, int c = 42]);
+ factory Class.fact(S a, {T? b, int c: 42}) => Class.named(a, b, c);
+ factory Class.redirect(S a) = Class.named;
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.strong.expect
new file mode 100644
index 0000000..3f74e4e
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.strong.expect
@@ -0,0 +1,125 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///typedef_from_lib.dart";
+
+part typedef_from_part.dart;
+typedef B<S extends core::Object? = dynamic> = self::Class<S%, core::int>;
+class Class<S extends core::Object? = dynamic, T extends core::Object? = dynamic> extends core::Object {
+ static final field dynamic _redirecting# = <dynamic>[self::Class::redirect]/*isLegacy*/;
+ constructor •(self::Class::S% a, self::Class::T% b) → self::Class<self::Class::S%, self::Class::T%>
+ : super core::Object::•()
+ ;
+ constructor named(self::Class::S% a, [self::Class::T? b = #C1, core::int c = #C2]) → self::Class<self::Class::S%, self::Class::T%>
+ : super core::Object::•()
+ ;
+ static method _#new#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#new#tearOff::S% a, self::Class::_#new#tearOff::T% b) → self::Class<self::Class::_#new#tearOff::S%, self::Class::_#new#tearOff::T%>
+ return new self::Class::•<self::Class::_#new#tearOff::S%, self::Class::_#new#tearOff::T%>(a, b);
+ static method _#named#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#named#tearOff::S% a, [self::Class::_#named#tearOff::T? b = #C1, core::int c = #C2]) → self::Class<self::Class::_#named#tearOff::S%, self::Class::_#named#tearOff::T%>
+ return new self::Class::named<self::Class::_#named#tearOff::S%, self::Class::_#named#tearOff::T%>(a, b, c);
+ static factory fact<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::fact::S% a, {self::Class::fact::T? b = #C1, core::int c = #C2}) → self::Class<self::Class::fact::S%, self::Class::fact::T%>
+ return new self::Class::named<self::Class::fact::S%, self::Class::fact::T%>(a, b, c);
+ static method _#fact#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#fact#tearOff::S% a, {self::Class::_#fact#tearOff::T? b = #C1, core::int c = #C2}) → self::Class<self::Class::_#fact#tearOff::S%, self::Class::_#fact#tearOff::T%>
+ return self::Class::fact<self::Class::_#fact#tearOff::S%, self::Class::_#fact#tearOff::T%>(a, b: b, c: c);
+ static factory redirect<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::redirect::S% a) → self::Class<self::Class::redirect::S%, self::Class::redirect::T%>
+ return new self::Class::named<self::Class::redirect::S%, self::Class::redirect::T%>(a);
+ static method _#redirect#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#redirect#tearOff::S% a) → self::Class<self::Class::_#redirect#tearOff::S%, self::Class::_#redirect#tearOff::T%>
+ return new self::Class::named<self::Class::_#redirect#tearOff::S%, self::Class::_#redirect#tearOff::T%>(a);
+}
+static method main() → dynamic {
+ <T extends core::Object? = dynamic>(T%, core::String) → self::Class<T%, core::String> aNew = #C3;
+ <T extends core::Object? = dynamic>(T%, [core::String?, core::int]) → self::Class<T%, core::String> aNamed = #C4;
+ <T extends core::Object? = dynamic>(T%, {b: core::String?, c: core::int}) → self::Class<T%, core::String> aFact = #C5;
+ <T extends core::Object? = dynamic>(T%) → self::Class<T%, core::String> aRedirect = #C6;
+ aNew<core::String>("", ""){(core::String, core::String) → self::Class<core::String, core::String>};
+ aNew<core::int>(0, ""){(core::int, core::String) → self::Class<core::int, core::String>};
+ aNamed<core::String>(""){(core::String, [core::String?, core::int]) → self::Class<core::String, core::String>};
+ aNamed<core::int>(0, ""){(core::int, [core::String?, core::int]) → self::Class<core::int, core::String>};
+ aNamed<core::String>("", "", 87){(core::String, [core::String?, core::int]) → self::Class<core::String, core::String>};
+ aFact<core::int>(0){(core::int, {b: core::String?, c: core::int}) → self::Class<core::int, core::String>};
+ aFact<core::String>("", b: ""){(core::String, {b: core::String?, c: core::int}) → self::Class<core::String, core::String>};
+ aFact<core::int>(0, c: 87){(core::int, {b: core::String?, c: core::int}) → self::Class<core::int, core::String>};
+ aFact<core::String>("", c: 87, b: ""){(core::String, {b: core::String?, c: core::int}) → self::Class<core::String, core::String>};
+ aRedirect<core::String>(""){(core::String) → self::Class<core::String, core::String>};
+ aRedirect<core::int>(0){(core::int) → self::Class<core::int, core::String>};
+ (core::bool, core::String) → self::Class<core::bool, core::String> aNewInst = aNew<core::bool>;
+ (core::bool, [core::String?, core::int]) → self::Class<core::bool, core::String> aNamedInst = aNamed<core::bool>;
+ (core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String> aFactInst = aFact<core::bool>;
+ (core::bool) → self::Class<core::bool, core::String> aRedirectInst = aRedirect<core::bool>;
+ aNewInst(true, ""){(core::bool, core::String) → self::Class<core::bool, core::String>};
+ aNamedInst(false){(core::bool, [core::String?, core::int]) → self::Class<core::bool, core::String>};
+ aNamedInst(true, ""){(core::bool, [core::String?, core::int]) → self::Class<core::bool, core::String>};
+ aNamedInst(false, "", 87){(core::bool, [core::String?, core::int]) → self::Class<core::bool, core::String>};
+ aFactInst(true){(core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String>};
+ aFactInst(false, b: ""){(core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String>};
+ aFactInst(true, c: 87){(core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String>};
+ aFactInst(false, c: 87, b: ""){(core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String>};
+ aRedirectInst(true){(core::bool) → self::Class<core::bool, core::String>};
+ <S extends core::Object? = dynamic>(S%, core::int) → self::Class<S%, core::int> bNew = #C7;
+ <S extends core::Object? = dynamic>(S%, [core::int?, core::int]) → self::Class<S%, core::int> bNamed = #C8;
+ <S extends core::Object? = dynamic>(S%, {b: core::int?, c: core::int}) → self::Class<S%, core::int> bFact = #C9;
+ <S extends core::Object? = dynamic>(S%) → self::Class<S%, core::int> bRedirect = #C10;
+ bNew<core::String>("", 0){(core::String, core::int) → self::Class<core::String, core::int>};
+ bNew<core::int>(0, 0){(core::int, core::int) → self::Class<core::int, core::int>};
+ bNamed<core::String>(""){(core::String, [core::int?, core::int]) → self::Class<core::String, core::int>};
+ bNamed<core::int>(0, 0){(core::int, [core::int?, core::int]) → self::Class<core::int, core::int>};
+ bNamed<core::String>("", 0, 87){(core::String, [core::int?, core::int]) → self::Class<core::String, core::int>};
+ bFact<core::int>(0){(core::int, {b: core::int?, c: core::int}) → self::Class<core::int, core::int>};
+ bFact<core::String>("", b: 0){(core::String, {b: core::int?, c: core::int}) → self::Class<core::String, core::int>};
+ bFact<core::int>(0, c: 87){(core::int, {b: core::int?, c: core::int}) → self::Class<core::int, core::int>};
+ bFact<core::String>("", c: 87, b: 0){(core::String, {b: core::int?, c: core::int}) → self::Class<core::String, core::int>};
+ bRedirect<core::String>(""){(core::String) → self::Class<core::String, core::int>};
+ bRedirect<core::int>(0){(core::int) → self::Class<core::int, core::int>};
+ (core::bool, core::int) → self::Class<core::bool, core::int> bNewInst = bNew<core::bool>;
+ (core::bool, [core::int?, core::int]) → self::Class<core::bool, core::int> bNamedInst = bNamed<core::bool>;
+ (core::bool, {b: core::int?, c: core::int}) → self::Class<core::bool, core::int> bFactInst = bFact<core::bool>;
+ (core::bool) → self::Class<core::bool, core::int> bRedirectInst = bRedirect<core::bool>;
+ bNewInst(true, 0){(core::bool, core::int) → self::Class<core::bool, core::int>};
+ bNamedInst(false){(core::bool, [core::int?, core::int]) → self::Class<core::bool, core::int>};
+ bNamedInst(true, 0){(core::bool, [core::int?, core::int]) → self::Class<core::bool, core::int>};
+ bNamedInst(false, 0, 87){(core::bool, [core::int?, core::int]) → self::Class<core::bool, core::int>};
+ bFactInst(true){(core::bool, {b: core::int?, c: core::int}) → self::Class<core::bool, core::int>};
+ bFactInst(false, b: 0){(core::bool, {b: core::int?, c: core::int}) → self::Class<core::bool, core::int>};
+ bFactInst(true, c: 87){(core::bool, {b: core::int?, c: core::int}) → self::Class<core::bool, core::int>};
+ bFactInst(false, c: 87, b: 0){(core::bool, {b: core::int?, c: core::int}) → self::Class<core::bool, core::int>};
+ bRedirectInst(true){(core::bool) → self::Class<core::bool, core::int>};
+}
+static method _#B#new#tearOff<S extends core::Object? = dynamic>(self::_#B#new#tearOff::S% a, core::int b) → self::Class<self::_#B#new#tearOff::S%, core::int>
+ return new self::Class::•<self::_#B#new#tearOff::S%, core::int>(a, b);
+static method _#B#named#tearOff<S extends core::Object? = dynamic>(self::_#B#named#tearOff::S% a, [core::int? b = #C1, core::int c = #C2]) → self::Class<self::_#B#named#tearOff::S%, core::int>
+ return new self::Class::named<self::_#B#named#tearOff::S%, core::int>(a, b, c);
+static method _#B#fact#tearOff<S extends core::Object? = dynamic>(self::_#B#fact#tearOff::S% a, {core::int? b = #C1, core::int c = #C2}) → self::Class<self::_#B#fact#tearOff::S%, core::int>
+ return self::Class::fact<self::_#B#fact#tearOff::S%, core::int>(a, b: b, c: c);
+static method _#B#redirect#tearOff<S extends core::Object? = dynamic>(self::_#B#redirect#tearOff::S% a) → self::Class<self::_#B#redirect#tearOff::S%, core::int>
+ return self::Class::_#redirect#tearOff<self::_#B#redirect#tearOff::S%, core::int>(a);
+
+library /*isNonNullableByDefault*/;
+import self as self2;
+import "dart:core" as core;
+import "typedef_from.dart" as self;
+
+import "org-dartlang-testcase:///typedef_from.dart";
+
+typedef A<T extends core::Object? = dynamic> = self::Class<T%, core::String>;
+static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#new#tearOff<T extends core::Object? = dynamic>(self2::_#A#new#tearOff::T% a, core::String b) → self::Class<self2::_#A#new#tearOff::T%, core::String>
+ return new self::Class::•<self2::_#A#new#tearOff::T%, core::String>(a, b);
+static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#named#tearOff<T extends core::Object? = dynamic>(self2::_#A#named#tearOff::T% a, [core::String? b = #C1, core::int c = #C2]) → self::Class<self2::_#A#named#tearOff::T%, core::String>
+ return new self::Class::named<self2::_#A#named#tearOff::T%, core::String>(a, b, c);
+static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#fact#tearOff<T extends core::Object? = dynamic>(self2::_#A#fact#tearOff::T% a, {core::String? b = #C1, core::int c = #C2}) → self::Class<self2::_#A#fact#tearOff::T%, core::String>
+ return self::Class::fact<self2::_#A#fact#tearOff::T%, core::String>(a, b: b, c: c);
+static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#redirect#tearOff<T extends core::Object? = dynamic>(self2::_#A#redirect#tearOff::T% a) → self::Class<self2::_#A#redirect#tearOff::T%, core::String>
+ return self::Class::_#redirect#tearOff<self2::_#A#redirect#tearOff::T%, core::String>(a);
+
+constants {
+ #C1 = null
+ #C2 = 42
+ #C3 = static-tearoff self2::_#A#new#tearOff
+ #C4 = static-tearoff self2::_#A#named#tearOff
+ #C5 = static-tearoff self2::_#A#fact#tearOff
+ #C6 = static-tearoff self2::_#A#redirect#tearOff
+ #C7 = static-tearoff self::_#B#new#tearOff
+ #C8 = static-tearoff self::_#B#named#tearOff
+ #C9 = static-tearoff self::_#B#fact#tearOff
+ #C10 = static-tearoff self::_#B#redirect#tearOff
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.strong.transformed.expect
new file mode 100644
index 0000000..3f74e4e
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.strong.transformed.expect
@@ -0,0 +1,125 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///typedef_from_lib.dart";
+
+part typedef_from_part.dart;
+typedef B<S extends core::Object? = dynamic> = self::Class<S%, core::int>;
+class Class<S extends core::Object? = dynamic, T extends core::Object? = dynamic> extends core::Object {
+ static final field dynamic _redirecting# = <dynamic>[self::Class::redirect]/*isLegacy*/;
+ constructor •(self::Class::S% a, self::Class::T% b) → self::Class<self::Class::S%, self::Class::T%>
+ : super core::Object::•()
+ ;
+ constructor named(self::Class::S% a, [self::Class::T? b = #C1, core::int c = #C2]) → self::Class<self::Class::S%, self::Class::T%>
+ : super core::Object::•()
+ ;
+ static method _#new#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#new#tearOff::S% a, self::Class::_#new#tearOff::T% b) → self::Class<self::Class::_#new#tearOff::S%, self::Class::_#new#tearOff::T%>
+ return new self::Class::•<self::Class::_#new#tearOff::S%, self::Class::_#new#tearOff::T%>(a, b);
+ static method _#named#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#named#tearOff::S% a, [self::Class::_#named#tearOff::T? b = #C1, core::int c = #C2]) → self::Class<self::Class::_#named#tearOff::S%, self::Class::_#named#tearOff::T%>
+ return new self::Class::named<self::Class::_#named#tearOff::S%, self::Class::_#named#tearOff::T%>(a, b, c);
+ static factory fact<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::fact::S% a, {self::Class::fact::T? b = #C1, core::int c = #C2}) → self::Class<self::Class::fact::S%, self::Class::fact::T%>
+ return new self::Class::named<self::Class::fact::S%, self::Class::fact::T%>(a, b, c);
+ static method _#fact#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#fact#tearOff::S% a, {self::Class::_#fact#tearOff::T? b = #C1, core::int c = #C2}) → self::Class<self::Class::_#fact#tearOff::S%, self::Class::_#fact#tearOff::T%>
+ return self::Class::fact<self::Class::_#fact#tearOff::S%, self::Class::_#fact#tearOff::T%>(a, b: b, c: c);
+ static factory redirect<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::redirect::S% a) → self::Class<self::Class::redirect::S%, self::Class::redirect::T%>
+ return new self::Class::named<self::Class::redirect::S%, self::Class::redirect::T%>(a);
+ static method _#redirect#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#redirect#tearOff::S% a) → self::Class<self::Class::_#redirect#tearOff::S%, self::Class::_#redirect#tearOff::T%>
+ return new self::Class::named<self::Class::_#redirect#tearOff::S%, self::Class::_#redirect#tearOff::T%>(a);
+}
+static method main() → dynamic {
+ <T extends core::Object? = dynamic>(T%, core::String) → self::Class<T%, core::String> aNew = #C3;
+ <T extends core::Object? = dynamic>(T%, [core::String?, core::int]) → self::Class<T%, core::String> aNamed = #C4;
+ <T extends core::Object? = dynamic>(T%, {b: core::String?, c: core::int}) → self::Class<T%, core::String> aFact = #C5;
+ <T extends core::Object? = dynamic>(T%) → self::Class<T%, core::String> aRedirect = #C6;
+ aNew<core::String>("", ""){(core::String, core::String) → self::Class<core::String, core::String>};
+ aNew<core::int>(0, ""){(core::int, core::String) → self::Class<core::int, core::String>};
+ aNamed<core::String>(""){(core::String, [core::String?, core::int]) → self::Class<core::String, core::String>};
+ aNamed<core::int>(0, ""){(core::int, [core::String?, core::int]) → self::Class<core::int, core::String>};
+ aNamed<core::String>("", "", 87){(core::String, [core::String?, core::int]) → self::Class<core::String, core::String>};
+ aFact<core::int>(0){(core::int, {b: core::String?, c: core::int}) → self::Class<core::int, core::String>};
+ aFact<core::String>("", b: ""){(core::String, {b: core::String?, c: core::int}) → self::Class<core::String, core::String>};
+ aFact<core::int>(0, c: 87){(core::int, {b: core::String?, c: core::int}) → self::Class<core::int, core::String>};
+ aFact<core::String>("", c: 87, b: ""){(core::String, {b: core::String?, c: core::int}) → self::Class<core::String, core::String>};
+ aRedirect<core::String>(""){(core::String) → self::Class<core::String, core::String>};
+ aRedirect<core::int>(0){(core::int) → self::Class<core::int, core::String>};
+ (core::bool, core::String) → self::Class<core::bool, core::String> aNewInst = aNew<core::bool>;
+ (core::bool, [core::String?, core::int]) → self::Class<core::bool, core::String> aNamedInst = aNamed<core::bool>;
+ (core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String> aFactInst = aFact<core::bool>;
+ (core::bool) → self::Class<core::bool, core::String> aRedirectInst = aRedirect<core::bool>;
+ aNewInst(true, ""){(core::bool, core::String) → self::Class<core::bool, core::String>};
+ aNamedInst(false){(core::bool, [core::String?, core::int]) → self::Class<core::bool, core::String>};
+ aNamedInst(true, ""){(core::bool, [core::String?, core::int]) → self::Class<core::bool, core::String>};
+ aNamedInst(false, "", 87){(core::bool, [core::String?, core::int]) → self::Class<core::bool, core::String>};
+ aFactInst(true){(core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String>};
+ aFactInst(false, b: ""){(core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String>};
+ aFactInst(true, c: 87){(core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String>};
+ aFactInst(false, c: 87, b: ""){(core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String>};
+ aRedirectInst(true){(core::bool) → self::Class<core::bool, core::String>};
+ <S extends core::Object? = dynamic>(S%, core::int) → self::Class<S%, core::int> bNew = #C7;
+ <S extends core::Object? = dynamic>(S%, [core::int?, core::int]) → self::Class<S%, core::int> bNamed = #C8;
+ <S extends core::Object? = dynamic>(S%, {b: core::int?, c: core::int}) → self::Class<S%, core::int> bFact = #C9;
+ <S extends core::Object? = dynamic>(S%) → self::Class<S%, core::int> bRedirect = #C10;
+ bNew<core::String>("", 0){(core::String, core::int) → self::Class<core::String, core::int>};
+ bNew<core::int>(0, 0){(core::int, core::int) → self::Class<core::int, core::int>};
+ bNamed<core::String>(""){(core::String, [core::int?, core::int]) → self::Class<core::String, core::int>};
+ bNamed<core::int>(0, 0){(core::int, [core::int?, core::int]) → self::Class<core::int, core::int>};
+ bNamed<core::String>("", 0, 87){(core::String, [core::int?, core::int]) → self::Class<core::String, core::int>};
+ bFact<core::int>(0){(core::int, {b: core::int?, c: core::int}) → self::Class<core::int, core::int>};
+ bFact<core::String>("", b: 0){(core::String, {b: core::int?, c: core::int}) → self::Class<core::String, core::int>};
+ bFact<core::int>(0, c: 87){(core::int, {b: core::int?, c: core::int}) → self::Class<core::int, core::int>};
+ bFact<core::String>("", c: 87, b: 0){(core::String, {b: core::int?, c: core::int}) → self::Class<core::String, core::int>};
+ bRedirect<core::String>(""){(core::String) → self::Class<core::String, core::int>};
+ bRedirect<core::int>(0){(core::int) → self::Class<core::int, core::int>};
+ (core::bool, core::int) → self::Class<core::bool, core::int> bNewInst = bNew<core::bool>;
+ (core::bool, [core::int?, core::int]) → self::Class<core::bool, core::int> bNamedInst = bNamed<core::bool>;
+ (core::bool, {b: core::int?, c: core::int}) → self::Class<core::bool, core::int> bFactInst = bFact<core::bool>;
+ (core::bool) → self::Class<core::bool, core::int> bRedirectInst = bRedirect<core::bool>;
+ bNewInst(true, 0){(core::bool, core::int) → self::Class<core::bool, core::int>};
+ bNamedInst(false){(core::bool, [core::int?, core::int]) → self::Class<core::bool, core::int>};
+ bNamedInst(true, 0){(core::bool, [core::int?, core::int]) → self::Class<core::bool, core::int>};
+ bNamedInst(false, 0, 87){(core::bool, [core::int?, core::int]) → self::Class<core::bool, core::int>};
+ bFactInst(true){(core::bool, {b: core::int?, c: core::int}) → self::Class<core::bool, core::int>};
+ bFactInst(false, b: 0){(core::bool, {b: core::int?, c: core::int}) → self::Class<core::bool, core::int>};
+ bFactInst(true, c: 87){(core::bool, {b: core::int?, c: core::int}) → self::Class<core::bool, core::int>};
+ bFactInst(false, c: 87, b: 0){(core::bool, {b: core::int?, c: core::int}) → self::Class<core::bool, core::int>};
+ bRedirectInst(true){(core::bool) → self::Class<core::bool, core::int>};
+}
+static method _#B#new#tearOff<S extends core::Object? = dynamic>(self::_#B#new#tearOff::S% a, core::int b) → self::Class<self::_#B#new#tearOff::S%, core::int>
+ return new self::Class::•<self::_#B#new#tearOff::S%, core::int>(a, b);
+static method _#B#named#tearOff<S extends core::Object? = dynamic>(self::_#B#named#tearOff::S% a, [core::int? b = #C1, core::int c = #C2]) → self::Class<self::_#B#named#tearOff::S%, core::int>
+ return new self::Class::named<self::_#B#named#tearOff::S%, core::int>(a, b, c);
+static method _#B#fact#tearOff<S extends core::Object? = dynamic>(self::_#B#fact#tearOff::S% a, {core::int? b = #C1, core::int c = #C2}) → self::Class<self::_#B#fact#tearOff::S%, core::int>
+ return self::Class::fact<self::_#B#fact#tearOff::S%, core::int>(a, b: b, c: c);
+static method _#B#redirect#tearOff<S extends core::Object? = dynamic>(self::_#B#redirect#tearOff::S% a) → self::Class<self::_#B#redirect#tearOff::S%, core::int>
+ return self::Class::_#redirect#tearOff<self::_#B#redirect#tearOff::S%, core::int>(a);
+
+library /*isNonNullableByDefault*/;
+import self as self2;
+import "dart:core" as core;
+import "typedef_from.dart" as self;
+
+import "org-dartlang-testcase:///typedef_from.dart";
+
+typedef A<T extends core::Object? = dynamic> = self::Class<T%, core::String>;
+static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#new#tearOff<T extends core::Object? = dynamic>(self2::_#A#new#tearOff::T% a, core::String b) → self::Class<self2::_#A#new#tearOff::T%, core::String>
+ return new self::Class::•<self2::_#A#new#tearOff::T%, core::String>(a, b);
+static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#named#tearOff<T extends core::Object? = dynamic>(self2::_#A#named#tearOff::T% a, [core::String? b = #C1, core::int c = #C2]) → self::Class<self2::_#A#named#tearOff::T%, core::String>
+ return new self::Class::named<self2::_#A#named#tearOff::T%, core::String>(a, b, c);
+static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#fact#tearOff<T extends core::Object? = dynamic>(self2::_#A#fact#tearOff::T% a, {core::String? b = #C1, core::int c = #C2}) → self::Class<self2::_#A#fact#tearOff::T%, core::String>
+ return self::Class::fact<self2::_#A#fact#tearOff::T%, core::String>(a, b: b, c: c);
+static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#redirect#tearOff<T extends core::Object? = dynamic>(self2::_#A#redirect#tearOff::T% a) → self::Class<self2::_#A#redirect#tearOff::T%, core::String>
+ return self::Class::_#redirect#tearOff<self2::_#A#redirect#tearOff::T%, core::String>(a);
+
+constants {
+ #C1 = null
+ #C2 = 42
+ #C3 = static-tearoff self2::_#A#new#tearOff
+ #C4 = static-tearoff self2::_#A#named#tearOff
+ #C5 = static-tearoff self2::_#A#fact#tearOff
+ #C6 = static-tearoff self2::_#A#redirect#tearOff
+ #C7 = static-tearoff self::_#B#new#tearOff
+ #C8 = static-tearoff self::_#B#named#tearOff
+ #C9 = static-tearoff self::_#B#fact#tearOff
+ #C10 = static-tearoff self::_#B#redirect#tearOff
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.textual_outline.expect
new file mode 100644
index 0000000..d0244db
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.textual_outline.expect
@@ -0,0 +1,11 @@
+import 'typedef_from_lib.dart';
+part 'typedef_from_part.dart';
+
+main() {}
+
+class Class<S, T> {
+ Class(S a, T b);
+ Class.named(S a, [T? b, int c = 42]);
+ factory Class.fact(S a, {T? b, int c: 42}) => Class.named(a, b, c);
+ factory Class.redirect(S a) = Class.named;
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..704e8ee
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.textual_outline_modelled.expect
@@ -0,0 +1,11 @@
+import 'typedef_from_lib.dart';
+part 'typedef_from_part.dart';
+
+class Class<S, T> {
+ Class(S a, T b);
+ Class.named(S a, [T? b, int c = 42]);
+ factory Class.fact(S a, {T? b, int c: 42}) => Class.named(a, b, c);
+ factory Class.redirect(S a) = Class.named;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.expect
new file mode 100644
index 0000000..3f74e4e
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.expect
@@ -0,0 +1,125 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///typedef_from_lib.dart";
+
+part typedef_from_part.dart;
+typedef B<S extends core::Object? = dynamic> = self::Class<S%, core::int>;
+class Class<S extends core::Object? = dynamic, T extends core::Object? = dynamic> extends core::Object {
+ static final field dynamic _redirecting# = <dynamic>[self::Class::redirect]/*isLegacy*/;
+ constructor •(self::Class::S% a, self::Class::T% b) → self::Class<self::Class::S%, self::Class::T%>
+ : super core::Object::•()
+ ;
+ constructor named(self::Class::S% a, [self::Class::T? b = #C1, core::int c = #C2]) → self::Class<self::Class::S%, self::Class::T%>
+ : super core::Object::•()
+ ;
+ static method _#new#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#new#tearOff::S% a, self::Class::_#new#tearOff::T% b) → self::Class<self::Class::_#new#tearOff::S%, self::Class::_#new#tearOff::T%>
+ return new self::Class::•<self::Class::_#new#tearOff::S%, self::Class::_#new#tearOff::T%>(a, b);
+ static method _#named#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#named#tearOff::S% a, [self::Class::_#named#tearOff::T? b = #C1, core::int c = #C2]) → self::Class<self::Class::_#named#tearOff::S%, self::Class::_#named#tearOff::T%>
+ return new self::Class::named<self::Class::_#named#tearOff::S%, self::Class::_#named#tearOff::T%>(a, b, c);
+ static factory fact<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::fact::S% a, {self::Class::fact::T? b = #C1, core::int c = #C2}) → self::Class<self::Class::fact::S%, self::Class::fact::T%>
+ return new self::Class::named<self::Class::fact::S%, self::Class::fact::T%>(a, b, c);
+ static method _#fact#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#fact#tearOff::S% a, {self::Class::_#fact#tearOff::T? b = #C1, core::int c = #C2}) → self::Class<self::Class::_#fact#tearOff::S%, self::Class::_#fact#tearOff::T%>
+ return self::Class::fact<self::Class::_#fact#tearOff::S%, self::Class::_#fact#tearOff::T%>(a, b: b, c: c);
+ static factory redirect<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::redirect::S% a) → self::Class<self::Class::redirect::S%, self::Class::redirect::T%>
+ return new self::Class::named<self::Class::redirect::S%, self::Class::redirect::T%>(a);
+ static method _#redirect#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#redirect#tearOff::S% a) → self::Class<self::Class::_#redirect#tearOff::S%, self::Class::_#redirect#tearOff::T%>
+ return new self::Class::named<self::Class::_#redirect#tearOff::S%, self::Class::_#redirect#tearOff::T%>(a);
+}
+static method main() → dynamic {
+ <T extends core::Object? = dynamic>(T%, core::String) → self::Class<T%, core::String> aNew = #C3;
+ <T extends core::Object? = dynamic>(T%, [core::String?, core::int]) → self::Class<T%, core::String> aNamed = #C4;
+ <T extends core::Object? = dynamic>(T%, {b: core::String?, c: core::int}) → self::Class<T%, core::String> aFact = #C5;
+ <T extends core::Object? = dynamic>(T%) → self::Class<T%, core::String> aRedirect = #C6;
+ aNew<core::String>("", ""){(core::String, core::String) → self::Class<core::String, core::String>};
+ aNew<core::int>(0, ""){(core::int, core::String) → self::Class<core::int, core::String>};
+ aNamed<core::String>(""){(core::String, [core::String?, core::int]) → self::Class<core::String, core::String>};
+ aNamed<core::int>(0, ""){(core::int, [core::String?, core::int]) → self::Class<core::int, core::String>};
+ aNamed<core::String>("", "", 87){(core::String, [core::String?, core::int]) → self::Class<core::String, core::String>};
+ aFact<core::int>(0){(core::int, {b: core::String?, c: core::int}) → self::Class<core::int, core::String>};
+ aFact<core::String>("", b: ""){(core::String, {b: core::String?, c: core::int}) → self::Class<core::String, core::String>};
+ aFact<core::int>(0, c: 87){(core::int, {b: core::String?, c: core::int}) → self::Class<core::int, core::String>};
+ aFact<core::String>("", c: 87, b: ""){(core::String, {b: core::String?, c: core::int}) → self::Class<core::String, core::String>};
+ aRedirect<core::String>(""){(core::String) → self::Class<core::String, core::String>};
+ aRedirect<core::int>(0){(core::int) → self::Class<core::int, core::String>};
+ (core::bool, core::String) → self::Class<core::bool, core::String> aNewInst = aNew<core::bool>;
+ (core::bool, [core::String?, core::int]) → self::Class<core::bool, core::String> aNamedInst = aNamed<core::bool>;
+ (core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String> aFactInst = aFact<core::bool>;
+ (core::bool) → self::Class<core::bool, core::String> aRedirectInst = aRedirect<core::bool>;
+ aNewInst(true, ""){(core::bool, core::String) → self::Class<core::bool, core::String>};
+ aNamedInst(false){(core::bool, [core::String?, core::int]) → self::Class<core::bool, core::String>};
+ aNamedInst(true, ""){(core::bool, [core::String?, core::int]) → self::Class<core::bool, core::String>};
+ aNamedInst(false, "", 87){(core::bool, [core::String?, core::int]) → self::Class<core::bool, core::String>};
+ aFactInst(true){(core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String>};
+ aFactInst(false, b: ""){(core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String>};
+ aFactInst(true, c: 87){(core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String>};
+ aFactInst(false, c: 87, b: ""){(core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String>};
+ aRedirectInst(true){(core::bool) → self::Class<core::bool, core::String>};
+ <S extends core::Object? = dynamic>(S%, core::int) → self::Class<S%, core::int> bNew = #C7;
+ <S extends core::Object? = dynamic>(S%, [core::int?, core::int]) → self::Class<S%, core::int> bNamed = #C8;
+ <S extends core::Object? = dynamic>(S%, {b: core::int?, c: core::int}) → self::Class<S%, core::int> bFact = #C9;
+ <S extends core::Object? = dynamic>(S%) → self::Class<S%, core::int> bRedirect = #C10;
+ bNew<core::String>("", 0){(core::String, core::int) → self::Class<core::String, core::int>};
+ bNew<core::int>(0, 0){(core::int, core::int) → self::Class<core::int, core::int>};
+ bNamed<core::String>(""){(core::String, [core::int?, core::int]) → self::Class<core::String, core::int>};
+ bNamed<core::int>(0, 0){(core::int, [core::int?, core::int]) → self::Class<core::int, core::int>};
+ bNamed<core::String>("", 0, 87){(core::String, [core::int?, core::int]) → self::Class<core::String, core::int>};
+ bFact<core::int>(0){(core::int, {b: core::int?, c: core::int}) → self::Class<core::int, core::int>};
+ bFact<core::String>("", b: 0){(core::String, {b: core::int?, c: core::int}) → self::Class<core::String, core::int>};
+ bFact<core::int>(0, c: 87){(core::int, {b: core::int?, c: core::int}) → self::Class<core::int, core::int>};
+ bFact<core::String>("", c: 87, b: 0){(core::String, {b: core::int?, c: core::int}) → self::Class<core::String, core::int>};
+ bRedirect<core::String>(""){(core::String) → self::Class<core::String, core::int>};
+ bRedirect<core::int>(0){(core::int) → self::Class<core::int, core::int>};
+ (core::bool, core::int) → self::Class<core::bool, core::int> bNewInst = bNew<core::bool>;
+ (core::bool, [core::int?, core::int]) → self::Class<core::bool, core::int> bNamedInst = bNamed<core::bool>;
+ (core::bool, {b: core::int?, c: core::int}) → self::Class<core::bool, core::int> bFactInst = bFact<core::bool>;
+ (core::bool) → self::Class<core::bool, core::int> bRedirectInst = bRedirect<core::bool>;
+ bNewInst(true, 0){(core::bool, core::int) → self::Class<core::bool, core::int>};
+ bNamedInst(false){(core::bool, [core::int?, core::int]) → self::Class<core::bool, core::int>};
+ bNamedInst(true, 0){(core::bool, [core::int?, core::int]) → self::Class<core::bool, core::int>};
+ bNamedInst(false, 0, 87){(core::bool, [core::int?, core::int]) → self::Class<core::bool, core::int>};
+ bFactInst(true){(core::bool, {b: core::int?, c: core::int}) → self::Class<core::bool, core::int>};
+ bFactInst(false, b: 0){(core::bool, {b: core::int?, c: core::int}) → self::Class<core::bool, core::int>};
+ bFactInst(true, c: 87){(core::bool, {b: core::int?, c: core::int}) → self::Class<core::bool, core::int>};
+ bFactInst(false, c: 87, b: 0){(core::bool, {b: core::int?, c: core::int}) → self::Class<core::bool, core::int>};
+ bRedirectInst(true){(core::bool) → self::Class<core::bool, core::int>};
+}
+static method _#B#new#tearOff<S extends core::Object? = dynamic>(self::_#B#new#tearOff::S% a, core::int b) → self::Class<self::_#B#new#tearOff::S%, core::int>
+ return new self::Class::•<self::_#B#new#tearOff::S%, core::int>(a, b);
+static method _#B#named#tearOff<S extends core::Object? = dynamic>(self::_#B#named#tearOff::S% a, [core::int? b = #C1, core::int c = #C2]) → self::Class<self::_#B#named#tearOff::S%, core::int>
+ return new self::Class::named<self::_#B#named#tearOff::S%, core::int>(a, b, c);
+static method _#B#fact#tearOff<S extends core::Object? = dynamic>(self::_#B#fact#tearOff::S% a, {core::int? b = #C1, core::int c = #C2}) → self::Class<self::_#B#fact#tearOff::S%, core::int>
+ return self::Class::fact<self::_#B#fact#tearOff::S%, core::int>(a, b: b, c: c);
+static method _#B#redirect#tearOff<S extends core::Object? = dynamic>(self::_#B#redirect#tearOff::S% a) → self::Class<self::_#B#redirect#tearOff::S%, core::int>
+ return self::Class::_#redirect#tearOff<self::_#B#redirect#tearOff::S%, core::int>(a);
+
+library /*isNonNullableByDefault*/;
+import self as self2;
+import "dart:core" as core;
+import "typedef_from.dart" as self;
+
+import "org-dartlang-testcase:///typedef_from.dart";
+
+typedef A<T extends core::Object? = dynamic> = self::Class<T%, core::String>;
+static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#new#tearOff<T extends core::Object? = dynamic>(self2::_#A#new#tearOff::T% a, core::String b) → self::Class<self2::_#A#new#tearOff::T%, core::String>
+ return new self::Class::•<self2::_#A#new#tearOff::T%, core::String>(a, b);
+static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#named#tearOff<T extends core::Object? = dynamic>(self2::_#A#named#tearOff::T% a, [core::String? b = #C1, core::int c = #C2]) → self::Class<self2::_#A#named#tearOff::T%, core::String>
+ return new self::Class::named<self2::_#A#named#tearOff::T%, core::String>(a, b, c);
+static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#fact#tearOff<T extends core::Object? = dynamic>(self2::_#A#fact#tearOff::T% a, {core::String? b = #C1, core::int c = #C2}) → self::Class<self2::_#A#fact#tearOff::T%, core::String>
+ return self::Class::fact<self2::_#A#fact#tearOff::T%, core::String>(a, b: b, c: c);
+static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#redirect#tearOff<T extends core::Object? = dynamic>(self2::_#A#redirect#tearOff::T% a) → self::Class<self2::_#A#redirect#tearOff::T%, core::String>
+ return self::Class::_#redirect#tearOff<self2::_#A#redirect#tearOff::T%, core::String>(a);
+
+constants {
+ #C1 = null
+ #C2 = 42
+ #C3 = static-tearoff self2::_#A#new#tearOff
+ #C4 = static-tearoff self2::_#A#named#tearOff
+ #C5 = static-tearoff self2::_#A#fact#tearOff
+ #C6 = static-tearoff self2::_#A#redirect#tearOff
+ #C7 = static-tearoff self::_#B#new#tearOff
+ #C8 = static-tearoff self::_#B#named#tearOff
+ #C9 = static-tearoff self::_#B#fact#tearOff
+ #C10 = static-tearoff self::_#B#redirect#tearOff
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.outline.expect
new file mode 100644
index 0000000..d0d9059
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.outline.expect
@@ -0,0 +1,54 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///typedef_from_lib.dart";
+
+part typedef_from_part.dart;
+typedef B<S extends core::Object? = dynamic> = self::Class<S%, core::int>;
+class Class<S extends core::Object? = dynamic, T extends core::Object? = dynamic> extends core::Object {
+ static final field dynamic _redirecting# = <dynamic>[self::Class::redirect]/*isLegacy*/;
+ constructor •(self::Class::S% a, self::Class::T% b) → self::Class<self::Class::S%, self::Class::T%>
+ ;
+ constructor named(self::Class::S% a, [self::Class::T? b, core::int c]) → self::Class<self::Class::S%, self::Class::T%>
+ ;
+ static method _#new#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#new#tearOff::S% a, self::Class::_#new#tearOff::T% b) → self::Class<self::Class::_#new#tearOff::S%, self::Class::_#new#tearOff::T%>
+ return new self::Class::•<self::Class::_#new#tearOff::S%, self::Class::_#new#tearOff::T%>(a, b);
+ static method _#named#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#named#tearOff::S% a, [self::Class::_#named#tearOff::T? b, core::int c]) → self::Class<self::Class::_#named#tearOff::S%, self::Class::_#named#tearOff::T%>
+ return new self::Class::named<self::Class::_#named#tearOff::S%, self::Class::_#named#tearOff::T%>(a, b, c);
+ static factory fact<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::fact::S% a, {self::Class::fact::T? b, core::int c}) → self::Class<self::Class::fact::S%, self::Class::fact::T%>
+ ;
+ static method _#fact#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#fact#tearOff::S% a, {self::Class::_#fact#tearOff::T? b, core::int c}) → self::Class<self::Class::_#fact#tearOff::S%, self::Class::_#fact#tearOff::T%>
+ return self::Class::fact<self::Class::_#fact#tearOff::S%, self::Class::_#fact#tearOff::T%>(a, b: b, c: c);
+ static factory redirect<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::redirect::S% a) → self::Class<self::Class::redirect::S%, self::Class::redirect::T%>
+ return new self::Class::named<self::Class::redirect::S%, self::Class::redirect::T%>(a);
+ static method _#redirect#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#redirect#tearOff::S% a) → self::Class<self::Class::_#redirect#tearOff::S%, self::Class::_#redirect#tearOff::T%>
+ return new self::Class::named<self::Class::_#redirect#tearOff::S%, self::Class::_#redirect#tearOff::T%>(a);
+}
+static method main() → dynamic
+ ;
+static method _#B#new#tearOff<S extends core::Object? = dynamic>(self::_#B#new#tearOff::S% a, core::int b) → self::Class<self::_#B#new#tearOff::S%, core::int>
+ return new self::Class::•<self::_#B#new#tearOff::S%, core::int>(a, b);
+static method _#B#named#tearOff<S extends core::Object? = dynamic>(self::_#B#named#tearOff::S% a, [core::int? b, core::int c]) → self::Class<self::_#B#named#tearOff::S%, core::int>
+ return new self::Class::named<self::_#B#named#tearOff::S%, core::int>(a, b, c);
+static method _#B#fact#tearOff<S extends core::Object? = dynamic>(self::_#B#fact#tearOff::S% a, {core::int? b, core::int c}) → self::Class<self::_#B#fact#tearOff::S%, core::int>
+ return self::Class::fact<self::_#B#fact#tearOff::S%, core::int>(a, b: b, c: c);
+static method _#B#redirect#tearOff<S extends core::Object? = dynamic>(self::_#B#redirect#tearOff::S% a) → self::Class<self::_#B#redirect#tearOff::S%, core::int>
+ return self::Class::_#redirect#tearOff<self::_#B#redirect#tearOff::S%, core::int>(a);
+
+library /*isNonNullableByDefault*/;
+import self as self2;
+import "dart:core" as core;
+import "typedef_from.dart" as self;
+
+import "org-dartlang-testcase:///typedef_from.dart";
+
+typedef A<T extends core::Object? = dynamic> = self::Class<T%, core::String>;
+static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#new#tearOff<T extends core::Object? = dynamic>(self2::_#A#new#tearOff::T% a, core::String b) → self::Class<self2::_#A#new#tearOff::T%, core::String>
+ return new self::Class::•<self2::_#A#new#tearOff::T%, core::String>(a, b);
+static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#named#tearOff<T extends core::Object? = dynamic>(self2::_#A#named#tearOff::T% a, [core::String? b, core::int c]) → self::Class<self2::_#A#named#tearOff::T%, core::String>
+ return new self::Class::named<self2::_#A#named#tearOff::T%, core::String>(a, b, c);
+static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#fact#tearOff<T extends core::Object? = dynamic>(self2::_#A#fact#tearOff::T% a, {core::String? b, core::int c}) → self::Class<self2::_#A#fact#tearOff::T%, core::String>
+ return self::Class::fact<self2::_#A#fact#tearOff::T%, core::String>(a, b: b, c: c);
+static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#redirect#tearOff<T extends core::Object? = dynamic>(self2::_#A#redirect#tearOff::T% a) → self::Class<self2::_#A#redirect#tearOff::T%, core::String>
+ return self::Class::_#redirect#tearOff<self2::_#A#redirect#tearOff::T%, core::String>(a);
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.transformed.expect
new file mode 100644
index 0000000..3f74e4e
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from.dart.weak.transformed.expect
@@ -0,0 +1,125 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///typedef_from_lib.dart";
+
+part typedef_from_part.dart;
+typedef B<S extends core::Object? = dynamic> = self::Class<S%, core::int>;
+class Class<S extends core::Object? = dynamic, T extends core::Object? = dynamic> extends core::Object {
+ static final field dynamic _redirecting# = <dynamic>[self::Class::redirect]/*isLegacy*/;
+ constructor •(self::Class::S% a, self::Class::T% b) → self::Class<self::Class::S%, self::Class::T%>
+ : super core::Object::•()
+ ;
+ constructor named(self::Class::S% a, [self::Class::T? b = #C1, core::int c = #C2]) → self::Class<self::Class::S%, self::Class::T%>
+ : super core::Object::•()
+ ;
+ static method _#new#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#new#tearOff::S% a, self::Class::_#new#tearOff::T% b) → self::Class<self::Class::_#new#tearOff::S%, self::Class::_#new#tearOff::T%>
+ return new self::Class::•<self::Class::_#new#tearOff::S%, self::Class::_#new#tearOff::T%>(a, b);
+ static method _#named#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#named#tearOff::S% a, [self::Class::_#named#tearOff::T? b = #C1, core::int c = #C2]) → self::Class<self::Class::_#named#tearOff::S%, self::Class::_#named#tearOff::T%>
+ return new self::Class::named<self::Class::_#named#tearOff::S%, self::Class::_#named#tearOff::T%>(a, b, c);
+ static factory fact<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::fact::S% a, {self::Class::fact::T? b = #C1, core::int c = #C2}) → self::Class<self::Class::fact::S%, self::Class::fact::T%>
+ return new self::Class::named<self::Class::fact::S%, self::Class::fact::T%>(a, b, c);
+ static method _#fact#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#fact#tearOff::S% a, {self::Class::_#fact#tearOff::T? b = #C1, core::int c = #C2}) → self::Class<self::Class::_#fact#tearOff::S%, self::Class::_#fact#tearOff::T%>
+ return self::Class::fact<self::Class::_#fact#tearOff::S%, self::Class::_#fact#tearOff::T%>(a, b: b, c: c);
+ static factory redirect<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::redirect::S% a) → self::Class<self::Class::redirect::S%, self::Class::redirect::T%>
+ return new self::Class::named<self::Class::redirect::S%, self::Class::redirect::T%>(a);
+ static method _#redirect#tearOff<S extends core::Object? = dynamic, T extends core::Object? = dynamic>(self::Class::_#redirect#tearOff::S% a) → self::Class<self::Class::_#redirect#tearOff::S%, self::Class::_#redirect#tearOff::T%>
+ return new self::Class::named<self::Class::_#redirect#tearOff::S%, self::Class::_#redirect#tearOff::T%>(a);
+}
+static method main() → dynamic {
+ <T extends core::Object? = dynamic>(T%, core::String) → self::Class<T%, core::String> aNew = #C3;
+ <T extends core::Object? = dynamic>(T%, [core::String?, core::int]) → self::Class<T%, core::String> aNamed = #C4;
+ <T extends core::Object? = dynamic>(T%, {b: core::String?, c: core::int}) → self::Class<T%, core::String> aFact = #C5;
+ <T extends core::Object? = dynamic>(T%) → self::Class<T%, core::String> aRedirect = #C6;
+ aNew<core::String>("", ""){(core::String, core::String) → self::Class<core::String, core::String>};
+ aNew<core::int>(0, ""){(core::int, core::String) → self::Class<core::int, core::String>};
+ aNamed<core::String>(""){(core::String, [core::String?, core::int]) → self::Class<core::String, core::String>};
+ aNamed<core::int>(0, ""){(core::int, [core::String?, core::int]) → self::Class<core::int, core::String>};
+ aNamed<core::String>("", "", 87){(core::String, [core::String?, core::int]) → self::Class<core::String, core::String>};
+ aFact<core::int>(0){(core::int, {b: core::String?, c: core::int}) → self::Class<core::int, core::String>};
+ aFact<core::String>("", b: ""){(core::String, {b: core::String?, c: core::int}) → self::Class<core::String, core::String>};
+ aFact<core::int>(0, c: 87){(core::int, {b: core::String?, c: core::int}) → self::Class<core::int, core::String>};
+ aFact<core::String>("", c: 87, b: ""){(core::String, {b: core::String?, c: core::int}) → self::Class<core::String, core::String>};
+ aRedirect<core::String>(""){(core::String) → self::Class<core::String, core::String>};
+ aRedirect<core::int>(0){(core::int) → self::Class<core::int, core::String>};
+ (core::bool, core::String) → self::Class<core::bool, core::String> aNewInst = aNew<core::bool>;
+ (core::bool, [core::String?, core::int]) → self::Class<core::bool, core::String> aNamedInst = aNamed<core::bool>;
+ (core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String> aFactInst = aFact<core::bool>;
+ (core::bool) → self::Class<core::bool, core::String> aRedirectInst = aRedirect<core::bool>;
+ aNewInst(true, ""){(core::bool, core::String) → self::Class<core::bool, core::String>};
+ aNamedInst(false){(core::bool, [core::String?, core::int]) → self::Class<core::bool, core::String>};
+ aNamedInst(true, ""){(core::bool, [core::String?, core::int]) → self::Class<core::bool, core::String>};
+ aNamedInst(false, "", 87){(core::bool, [core::String?, core::int]) → self::Class<core::bool, core::String>};
+ aFactInst(true){(core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String>};
+ aFactInst(false, b: ""){(core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String>};
+ aFactInst(true, c: 87){(core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String>};
+ aFactInst(false, c: 87, b: ""){(core::bool, {b: core::String?, c: core::int}) → self::Class<core::bool, core::String>};
+ aRedirectInst(true){(core::bool) → self::Class<core::bool, core::String>};
+ <S extends core::Object? = dynamic>(S%, core::int) → self::Class<S%, core::int> bNew = #C7;
+ <S extends core::Object? = dynamic>(S%, [core::int?, core::int]) → self::Class<S%, core::int> bNamed = #C8;
+ <S extends core::Object? = dynamic>(S%, {b: core::int?, c: core::int}) → self::Class<S%, core::int> bFact = #C9;
+ <S extends core::Object? = dynamic>(S%) → self::Class<S%, core::int> bRedirect = #C10;
+ bNew<core::String>("", 0){(core::String, core::int) → self::Class<core::String, core::int>};
+ bNew<core::int>(0, 0){(core::int, core::int) → self::Class<core::int, core::int>};
+ bNamed<core::String>(""){(core::String, [core::int?, core::int]) → self::Class<core::String, core::int>};
+ bNamed<core::int>(0, 0){(core::int, [core::int?, core::int]) → self::Class<core::int, core::int>};
+ bNamed<core::String>("", 0, 87){(core::String, [core::int?, core::int]) → self::Class<core::String, core::int>};
+ bFact<core::int>(0){(core::int, {b: core::int?, c: core::int}) → self::Class<core::int, core::int>};
+ bFact<core::String>("", b: 0){(core::String, {b: core::int?, c: core::int}) → self::Class<core::String, core::int>};
+ bFact<core::int>(0, c: 87){(core::int, {b: core::int?, c: core::int}) → self::Class<core::int, core::int>};
+ bFact<core::String>("", c: 87, b: 0){(core::String, {b: core::int?, c: core::int}) → self::Class<core::String, core::int>};
+ bRedirect<core::String>(""){(core::String) → self::Class<core::String, core::int>};
+ bRedirect<core::int>(0){(core::int) → self::Class<core::int, core::int>};
+ (core::bool, core::int) → self::Class<core::bool, core::int> bNewInst = bNew<core::bool>;
+ (core::bool, [core::int?, core::int]) → self::Class<core::bool, core::int> bNamedInst = bNamed<core::bool>;
+ (core::bool, {b: core::int?, c: core::int}) → self::Class<core::bool, core::int> bFactInst = bFact<core::bool>;
+ (core::bool) → self::Class<core::bool, core::int> bRedirectInst = bRedirect<core::bool>;
+ bNewInst(true, 0){(core::bool, core::int) → self::Class<core::bool, core::int>};
+ bNamedInst(false){(core::bool, [core::int?, core::int]) → self::Class<core::bool, core::int>};
+ bNamedInst(true, 0){(core::bool, [core::int?, core::int]) → self::Class<core::bool, core::int>};
+ bNamedInst(false, 0, 87){(core::bool, [core::int?, core::int]) → self::Class<core::bool, core::int>};
+ bFactInst(true){(core::bool, {b: core::int?, c: core::int}) → self::Class<core::bool, core::int>};
+ bFactInst(false, b: 0){(core::bool, {b: core::int?, c: core::int}) → self::Class<core::bool, core::int>};
+ bFactInst(true, c: 87){(core::bool, {b: core::int?, c: core::int}) → self::Class<core::bool, core::int>};
+ bFactInst(false, c: 87, b: 0){(core::bool, {b: core::int?, c: core::int}) → self::Class<core::bool, core::int>};
+ bRedirectInst(true){(core::bool) → self::Class<core::bool, core::int>};
+}
+static method _#B#new#tearOff<S extends core::Object? = dynamic>(self::_#B#new#tearOff::S% a, core::int b) → self::Class<self::_#B#new#tearOff::S%, core::int>
+ return new self::Class::•<self::_#B#new#tearOff::S%, core::int>(a, b);
+static method _#B#named#tearOff<S extends core::Object? = dynamic>(self::_#B#named#tearOff::S% a, [core::int? b = #C1, core::int c = #C2]) → self::Class<self::_#B#named#tearOff::S%, core::int>
+ return new self::Class::named<self::_#B#named#tearOff::S%, core::int>(a, b, c);
+static method _#B#fact#tearOff<S extends core::Object? = dynamic>(self::_#B#fact#tearOff::S% a, {core::int? b = #C1, core::int c = #C2}) → self::Class<self::_#B#fact#tearOff::S%, core::int>
+ return self::Class::fact<self::_#B#fact#tearOff::S%, core::int>(a, b: b, c: c);
+static method _#B#redirect#tearOff<S extends core::Object? = dynamic>(self::_#B#redirect#tearOff::S% a) → self::Class<self::_#B#redirect#tearOff::S%, core::int>
+ return self::Class::_#redirect#tearOff<self::_#B#redirect#tearOff::S%, core::int>(a);
+
+library /*isNonNullableByDefault*/;
+import self as self2;
+import "dart:core" as core;
+import "typedef_from.dart" as self;
+
+import "org-dartlang-testcase:///typedef_from.dart";
+
+typedef A<T extends core::Object? = dynamic> = self::Class<T%, core::String>;
+static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#new#tearOff<T extends core::Object? = dynamic>(self2::_#A#new#tearOff::T% a, core::String b) → self::Class<self2::_#A#new#tearOff::T%, core::String>
+ return new self::Class::•<self2::_#A#new#tearOff::T%, core::String>(a, b);
+static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#named#tearOff<T extends core::Object? = dynamic>(self2::_#A#named#tearOff::T% a, [core::String? b = #C1, core::int c = #C2]) → self::Class<self2::_#A#named#tearOff::T%, core::String>
+ return new self::Class::named<self2::_#A#named#tearOff::T%, core::String>(a, b, c);
+static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#fact#tearOff<T extends core::Object? = dynamic>(self2::_#A#fact#tearOff::T% a, {core::String? b = #C1, core::int c = #C2}) → self::Class<self2::_#A#fact#tearOff::T%, core::String>
+ return self::Class::fact<self2::_#A#fact#tearOff::T%, core::String>(a, b: b, c: c);
+static method /* from org-dartlang-testcase:///typedef_from.dart */ _#A#redirect#tearOff<T extends core::Object? = dynamic>(self2::_#A#redirect#tearOff::T% a) → self::Class<self2::_#A#redirect#tearOff::T%, core::String>
+ return self::Class::_#redirect#tearOff<self2::_#A#redirect#tearOff::T%, core::String>(a);
+
+constants {
+ #C1 = null
+ #C2 = 42
+ #C3 = static-tearoff self2::_#A#new#tearOff
+ #C4 = static-tearoff self2::_#A#named#tearOff
+ #C5 = static-tearoff self2::_#A#fact#tearOff
+ #C6 = static-tearoff self2::_#A#redirect#tearOff
+ #C7 = static-tearoff self::_#B#new#tearOff
+ #C8 = static-tearoff self::_#B#named#tearOff
+ #C9 = static-tearoff self::_#B#fact#tearOff
+ #C10 = static-tearoff self::_#B#redirect#tearOff
+}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.strong.expect
index ad13134..90eb13b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.strong.expect
@@ -68,13 +68,13 @@
if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
throw "Expected ${expected}, actual ${actual}";
}
-static method _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b = #C9, core::int c = #C10}) → mai::A<self::_#H#fact#tearOff::Y%>
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b = #C9, core::int c = #C10}) → mai::A<self::_#H#fact#tearOff::Y%>
return mai::A::fact<self::_#H#fact#tearOff::Y%>(a, b: b, c: c);
-static method _#H#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<self::_#H#redirect#tearOff::Y%>
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<self::_#H#redirect#tearOff::Y%>
return mai::A::_#redirect#tearOff<self::_#H#redirect#tearOff::Y%>();
-static method _#H#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<self::_#H#new#tearOff::Y%>
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<self::_#H#new#tearOff::Y%>
return new mai::A::•<self::_#H#new#tearOff::Y%>();
-static method _#H#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#named#tearOff::Y% a, [core::int? b = #C9]) → mai::A<self::_#H#named#tearOff::Y%>
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#named#tearOff::Y% a, [core::int? b = #C9]) → mai::A<self::_#H#named#tearOff::Y%>
return new mai::A::named<self::_#H#named#tearOff::Y%>(a, b);
library /*isNonNullableByDefault*/;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.strong.transformed.expect
index ad13134..90eb13b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.strong.transformed.expect
@@ -68,13 +68,13 @@
if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
throw "Expected ${expected}, actual ${actual}";
}
-static method _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b = #C9, core::int c = #C10}) → mai::A<self::_#H#fact#tearOff::Y%>
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b = #C9, core::int c = #C10}) → mai::A<self::_#H#fact#tearOff::Y%>
return mai::A::fact<self::_#H#fact#tearOff::Y%>(a, b: b, c: c);
-static method _#H#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<self::_#H#redirect#tearOff::Y%>
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<self::_#H#redirect#tearOff::Y%>
return mai::A::_#redirect#tearOff<self::_#H#redirect#tearOff::Y%>();
-static method _#H#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<self::_#H#new#tearOff::Y%>
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<self::_#H#new#tearOff::Y%>
return new mai::A::•<self::_#H#new#tearOff::Y%>();
-static method _#H#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#named#tearOff::Y% a, [core::int? b = #C9]) → mai::A<self::_#H#named#tearOff::Y%>
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#named#tearOff::Y% a, [core::int? b = #C9]) → mai::A<self::_#H#named#tearOff::Y%>
return new mai::A::named<self::_#H#named#tearOff::Y%>(a, b);
library /*isNonNullableByDefault*/;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.expect
index ad13134..90eb13b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.expect
@@ -68,13 +68,13 @@
if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
throw "Expected ${expected}, actual ${actual}";
}
-static method _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b = #C9, core::int c = #C10}) → mai::A<self::_#H#fact#tearOff::Y%>
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b = #C9, core::int c = #C10}) → mai::A<self::_#H#fact#tearOff::Y%>
return mai::A::fact<self::_#H#fact#tearOff::Y%>(a, b: b, c: c);
-static method _#H#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<self::_#H#redirect#tearOff::Y%>
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<self::_#H#redirect#tearOff::Y%>
return mai::A::_#redirect#tearOff<self::_#H#redirect#tearOff::Y%>();
-static method _#H#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<self::_#H#new#tearOff::Y%>
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<self::_#H#new#tearOff::Y%>
return new mai::A::•<self::_#H#new#tearOff::Y%>();
-static method _#H#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#named#tearOff::Y% a, [core::int? b = #C9]) → mai::A<self::_#H#named#tearOff::Y%>
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#named#tearOff::Y% a, [core::int? b = #C9]) → mai::A<self::_#H#named#tearOff::Y%>
return new mai::A::named<self::_#H#named#tearOff::Y%>(a, b);
library /*isNonNullableByDefault*/;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.outline.expect
index cd0b2f3..0e4f276 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.outline.expect
@@ -18,13 +18,13 @@
;
static method expect(dynamic expected, dynamic actual) → dynamic
;
-static method _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b, core::int c}) → mai::A<self::_#H#fact#tearOff::Y%>
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b, core::int c}) → mai::A<self::_#H#fact#tearOff::Y%>
return mai::A::fact<self::_#H#fact#tearOff::Y%>(a, b: b, c: c);
-static method _#H#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<self::_#H#redirect#tearOff::Y%>
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<self::_#H#redirect#tearOff::Y%>
return mai::A::_#redirect#tearOff<self::_#H#redirect#tearOff::Y%>();
-static method _#H#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<self::_#H#new#tearOff::Y%>
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<self::_#H#new#tearOff::Y%>
return new mai::A::•<self::_#H#new#tearOff::Y%>();
-static method _#H#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#named#tearOff::Y% a, [core::int? b]) → mai::A<self::_#H#named#tearOff::Y%>
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#named#tearOff::Y% a, [core::int? b]) → mai::A<self::_#H#named#tearOff::Y%>
return new mai::A::named<self::_#H#named#tearOff::Y%>(a, b);
library /*isNonNullableByDefault*/;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.transformed.expect
index ad13134..90eb13b 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_dill/main.dart.weak.transformed.expect
@@ -68,13 +68,13 @@
if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
throw "Expected ${expected}, actual ${actual}";
}
-static method _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b = #C9, core::int c = #C10}) → mai::A<self::_#H#fact#tearOff::Y%>
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b = #C9, core::int c = #C10}) → mai::A<self::_#H#fact#tearOff::Y%>
return mai::A::fact<self::_#H#fact#tearOff::Y%>(a, b: b, c: c);
-static method _#H#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<self::_#H#redirect#tearOff::Y%>
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<self::_#H#redirect#tearOff::Y%>
return mai::A::_#redirect#tearOff<self::_#H#redirect#tearOff::Y%>();
-static method _#H#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<self::_#H#new#tearOff::Y%>
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → mai::A<self::_#H#new#tearOff::Y%>
return new mai::A::•<self::_#H#new#tearOff::Y%>();
-static method _#H#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#named#tearOff::Y% a, [core::int? b = #C9]) → mai::A<self::_#H#named#tearOff::Y%>
+static method /* from org-dartlang-testcase:///main_lib.dart */ _#H#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#named#tearOff::Y% a, [core::int? b = #C9]) → mai::A<self::_#H#named#tearOff::Y%>
return new mai::A::named<self::_#H#named#tearOff::Y%>(a, b);
library /*isNonNullableByDefault*/;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_lib.dart b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_lib.dart
new file mode 100644
index 0000000..ff58b28
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_lib.dart
@@ -0,0 +1,7 @@
+// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
+// 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.
+
+import 'typedef_from.dart';
+
+typedef A<T> = Class<T, String>;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_part.dart b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_part.dart
new file mode 100644
index 0000000..5710fab
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_from_part.dart
@@ -0,0 +1,7 @@
+// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
+// 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.
+
+part of 'typedef_from.dart';
+
+typedef B<S> = Class<S, int>;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.strong.expect
index 4a19911..81462df 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.strong.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.strong.expect
@@ -68,13 +68,13 @@
if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
throw "Expected ${expected}, actual ${actual}";
}
-static method _#H#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<self::_#H#new#tearOff::Y%>
+static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<self::_#H#new#tearOff::Y%>
return new typ::A::•<self::_#H#new#tearOff::Y%>();
-static method _#H#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#named#tearOff::Y% a, [core::int? b = #C9]) → typ::A<self::_#H#named#tearOff::Y%>
+static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#named#tearOff::Y% a, [core::int? b = #C9]) → typ::A<self::_#H#named#tearOff::Y%>
return new typ::A::named<self::_#H#named#tearOff::Y%>(a, b);
-static method _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b = #C9, core::int c = #C10}) → typ::A<self::_#H#fact#tearOff::Y%>
+static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b = #C9, core::int c = #C10}) → typ::A<self::_#H#fact#tearOff::Y%>
return typ::A::fact<self::_#H#fact#tearOff::Y%>(a, b: b, c: c);
-static method _#H#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<self::_#H#redirect#tearOff::Y%>
+static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<self::_#H#redirect#tearOff::Y%>
return typ::A::_#redirect#tearOff<self::_#H#redirect#tearOff::Y%>();
library /*isNonNullableByDefault*/;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.strong.transformed.expect
index 4a19911..81462df 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.strong.transformed.expect
@@ -68,13 +68,13 @@
if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
throw "Expected ${expected}, actual ${actual}";
}
-static method _#H#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<self::_#H#new#tearOff::Y%>
+static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<self::_#H#new#tearOff::Y%>
return new typ::A::•<self::_#H#new#tearOff::Y%>();
-static method _#H#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#named#tearOff::Y% a, [core::int? b = #C9]) → typ::A<self::_#H#named#tearOff::Y%>
+static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#named#tearOff::Y% a, [core::int? b = #C9]) → typ::A<self::_#H#named#tearOff::Y%>
return new typ::A::named<self::_#H#named#tearOff::Y%>(a, b);
-static method _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b = #C9, core::int c = #C10}) → typ::A<self::_#H#fact#tearOff::Y%>
+static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b = #C9, core::int c = #C10}) → typ::A<self::_#H#fact#tearOff::Y%>
return typ::A::fact<self::_#H#fact#tearOff::Y%>(a, b: b, c: c);
-static method _#H#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<self::_#H#redirect#tearOff::Y%>
+static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<self::_#H#redirect#tearOff::Y%>
return typ::A::_#redirect#tearOff<self::_#H#redirect#tearOff::Y%>();
library /*isNonNullableByDefault*/;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.expect
index 4a19911..81462df 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.expect
@@ -68,13 +68,13 @@
if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
throw "Expected ${expected}, actual ${actual}";
}
-static method _#H#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<self::_#H#new#tearOff::Y%>
+static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<self::_#H#new#tearOff::Y%>
return new typ::A::•<self::_#H#new#tearOff::Y%>();
-static method _#H#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#named#tearOff::Y% a, [core::int? b = #C9]) → typ::A<self::_#H#named#tearOff::Y%>
+static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#named#tearOff::Y% a, [core::int? b = #C9]) → typ::A<self::_#H#named#tearOff::Y%>
return new typ::A::named<self::_#H#named#tearOff::Y%>(a, b);
-static method _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b = #C9, core::int c = #C10}) → typ::A<self::_#H#fact#tearOff::Y%>
+static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b = #C9, core::int c = #C10}) → typ::A<self::_#H#fact#tearOff::Y%>
return typ::A::fact<self::_#H#fact#tearOff::Y%>(a, b: b, c: c);
-static method _#H#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<self::_#H#redirect#tearOff::Y%>
+static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<self::_#H#redirect#tearOff::Y%>
return typ::A::_#redirect#tearOff<self::_#H#redirect#tearOff::Y%>();
library /*isNonNullableByDefault*/;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.outline.expect
index cca6cc2..b6ebfa4 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.outline.expect
@@ -18,13 +18,13 @@
;
static method expect(dynamic expected, dynamic actual) → dynamic
;
-static method _#H#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<self::_#H#new#tearOff::Y%>
+static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<self::_#H#new#tearOff::Y%>
return new typ::A::•<self::_#H#new#tearOff::Y%>();
-static method _#H#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#named#tearOff::Y% a, [core::int? b]) → typ::A<self::_#H#named#tearOff::Y%>
+static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#named#tearOff::Y% a, [core::int? b]) → typ::A<self::_#H#named#tearOff::Y%>
return new typ::A::named<self::_#H#named#tearOff::Y%>(a, b);
-static method _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b, core::int c}) → typ::A<self::_#H#fact#tearOff::Y%>
+static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b, core::int c}) → typ::A<self::_#H#fact#tearOff::Y%>
return typ::A::fact<self::_#H#fact#tearOff::Y%>(a, b: b, c: c);
-static method _#H#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<self::_#H#redirect#tearOff::Y%>
+static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<self::_#H#redirect#tearOff::Y%>
return typ::A::_#redirect#tearOff<self::_#H#redirect#tearOff::Y%>();
library /*isNonNullableByDefault*/;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.transformed.expect
index 4a19911..81462df 100644
--- a/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/constructor_tearoffs/lowering/typedef_identical.dart.weak.transformed.expect
@@ -68,13 +68,13 @@
if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
throw "Expected ${expected}, actual ${actual}";
}
-static method _#H#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<self::_#H#new#tearOff::Y%>
+static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#new#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<self::_#H#new#tearOff::Y%>
return new typ::A::•<self::_#H#new#tearOff::Y%>();
-static method _#H#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#named#tearOff::Y% a, [core::int? b = #C9]) → typ::A<self::_#H#named#tearOff::Y%>
+static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#named#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#named#tearOff::Y% a, [core::int? b = #C9]) → typ::A<self::_#H#named#tearOff::Y%>
return new typ::A::named<self::_#H#named#tearOff::Y%>(a, b);
-static method _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b = #C9, core::int c = #C10}) → typ::A<self::_#H#fact#tearOff::Y%>
+static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#fact#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>(self::_#H#fact#tearOff::Y% a, {core::int? b = #C9, core::int c = #C10}) → typ::A<self::_#H#fact#tearOff::Y%>
return typ::A::fact<self::_#H#fact#tearOff::Y%>(a, b: b, c: c);
-static method _#H#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<self::_#H#redirect#tearOff::Y%>
+static method /* from org-dartlang-testcase:///typedef_identical_lib.dart */ _#H#redirect#tearOff<unrelated X extends core::Object? = dynamic, Y extends core::Object? = dynamic>() → typ::A<self::_#H#redirect#tearOff::Y%>
return typ::A::_#redirect#tearOff<self::_#H#redirect#tearOff::Y%>();
library /*isNonNullableByDefault*/;
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.strong.expect b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.strong.expect
index 7e82df9..94e4635 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.strong.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.strong.expect
@@ -36,17 +36,17 @@
core::String a;
}
static method main() → dynamic {}
-static method _#A#fromCharCodes#tearOff<unrelated X extends core::int>(core::Iterable<core::int> charCodes, [core::int start = #C1, core::int? end = #C2]) → core::String
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#A#fromCharCodes#tearOff<unrelated X extends core::int>(core::Iterable<core::int> charCodes, [core::int start = #C1, core::int? end = #C2]) → core::String
return core::String::fromCharCodes(charCodes, start, end);
-static method _#A#fromCharCode#tearOff<unrelated X extends core::int>(core::int charCode) → core::String
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#A#fromCharCode#tearOff<unrelated X extends core::int>(core::int charCode) → core::String
return core::String::fromCharCode(charCode);
-static method _#A#fromEnvironment#tearOff<unrelated X extends core::int>(core::String name, {core::String defaultValue = #C3}) → core::String
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#A#fromEnvironment#tearOff<unrelated X extends core::int>(core::String name, {core::String defaultValue = #C3}) → core::String
return core::String::fromEnvironment(name, defaultValue: defaultValue);
-static method _#B#fromCharCodes#tearOff<unrelated X extends core::int>(core::Iterable<core::int> charCodes, [core::int start = #C1, core::int? end = #C2]) → core::String
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#B#fromCharCodes#tearOff<unrelated X extends core::int>(core::Iterable<core::int> charCodes, [core::int start = #C1, core::int? end = #C2]) → core::String
return core::String::fromCharCodes(charCodes, start, end);
-static method _#B#fromCharCode#tearOff<unrelated X extends core::int>(core::int charCode) → core::String
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#B#fromCharCode#tearOff<unrelated X extends core::int>(core::int charCode) → core::String
return core::String::fromCharCode(charCode);
-static method _#B#fromEnvironment#tearOff<unrelated X extends core::int>(core::String name, {core::String defaultValue = #C3}) → core::String
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#B#fromEnvironment#tearOff<unrelated X extends core::int>(core::String name, {core::String defaultValue = #C3}) → core::String
return core::String::fromEnvironment(name, defaultValue: defaultValue);
constants {
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.strong.transformed.expect b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.strong.transformed.expect
index 7e82df9..94e4635 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.strong.transformed.expect
@@ -36,17 +36,17 @@
core::String a;
}
static method main() → dynamic {}
-static method _#A#fromCharCodes#tearOff<unrelated X extends core::int>(core::Iterable<core::int> charCodes, [core::int start = #C1, core::int? end = #C2]) → core::String
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#A#fromCharCodes#tearOff<unrelated X extends core::int>(core::Iterable<core::int> charCodes, [core::int start = #C1, core::int? end = #C2]) → core::String
return core::String::fromCharCodes(charCodes, start, end);
-static method _#A#fromCharCode#tearOff<unrelated X extends core::int>(core::int charCode) → core::String
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#A#fromCharCode#tearOff<unrelated X extends core::int>(core::int charCode) → core::String
return core::String::fromCharCode(charCode);
-static method _#A#fromEnvironment#tearOff<unrelated X extends core::int>(core::String name, {core::String defaultValue = #C3}) → core::String
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#A#fromEnvironment#tearOff<unrelated X extends core::int>(core::String name, {core::String defaultValue = #C3}) → core::String
return core::String::fromEnvironment(name, defaultValue: defaultValue);
-static method _#B#fromCharCodes#tearOff<unrelated X extends core::int>(core::Iterable<core::int> charCodes, [core::int start = #C1, core::int? end = #C2]) → core::String
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#B#fromCharCodes#tearOff<unrelated X extends core::int>(core::Iterable<core::int> charCodes, [core::int start = #C1, core::int? end = #C2]) → core::String
return core::String::fromCharCodes(charCodes, start, end);
-static method _#B#fromCharCode#tearOff<unrelated X extends core::int>(core::int charCode) → core::String
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#B#fromCharCode#tearOff<unrelated X extends core::int>(core::int charCode) → core::String
return core::String::fromCharCode(charCode);
-static method _#B#fromEnvironment#tearOff<unrelated X extends core::int>(core::String name, {core::String defaultValue = #C3}) → core::String
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#B#fromEnvironment#tearOff<unrelated X extends core::int>(core::String name, {core::String defaultValue = #C3}) → core::String
return core::String::fromEnvironment(name, defaultValue: defaultValue);
constants {
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.weak.expect b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.weak.expect
index 7e82df9..94e4635 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.weak.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.weak.expect
@@ -36,17 +36,17 @@
core::String a;
}
static method main() → dynamic {}
-static method _#A#fromCharCodes#tearOff<unrelated X extends core::int>(core::Iterable<core::int> charCodes, [core::int start = #C1, core::int? end = #C2]) → core::String
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#A#fromCharCodes#tearOff<unrelated X extends core::int>(core::Iterable<core::int> charCodes, [core::int start = #C1, core::int? end = #C2]) → core::String
return core::String::fromCharCodes(charCodes, start, end);
-static method _#A#fromCharCode#tearOff<unrelated X extends core::int>(core::int charCode) → core::String
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#A#fromCharCode#tearOff<unrelated X extends core::int>(core::int charCode) → core::String
return core::String::fromCharCode(charCode);
-static method _#A#fromEnvironment#tearOff<unrelated X extends core::int>(core::String name, {core::String defaultValue = #C3}) → core::String
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#A#fromEnvironment#tearOff<unrelated X extends core::int>(core::String name, {core::String defaultValue = #C3}) → core::String
return core::String::fromEnvironment(name, defaultValue: defaultValue);
-static method _#B#fromCharCodes#tearOff<unrelated X extends core::int>(core::Iterable<core::int> charCodes, [core::int start = #C1, core::int? end = #C2]) → core::String
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#B#fromCharCodes#tearOff<unrelated X extends core::int>(core::Iterable<core::int> charCodes, [core::int start = #C1, core::int? end = #C2]) → core::String
return core::String::fromCharCodes(charCodes, start, end);
-static method _#B#fromCharCode#tearOff<unrelated X extends core::int>(core::int charCode) → core::String
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#B#fromCharCode#tearOff<unrelated X extends core::int>(core::int charCode) → core::String
return core::String::fromCharCode(charCode);
-static method _#B#fromEnvironment#tearOff<unrelated X extends core::int>(core::String name, {core::String defaultValue = #C3}) → core::String
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#B#fromEnvironment#tearOff<unrelated X extends core::int>(core::String name, {core::String defaultValue = #C3}) → core::String
return core::String::fromEnvironment(name, defaultValue: defaultValue);
constants {
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.weak.outline.expect b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.weak.outline.expect
index 3fd24b5..782f6eb 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.weak.outline.expect
@@ -28,15 +28,15 @@
;
static method main() → dynamic
;
-static method _#A#fromCharCodes#tearOff<unrelated X extends core::int>(core::Iterable<core::int> charCodes, [core::int start, core::int? end]) → core::String
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#A#fromCharCodes#tearOff<unrelated X extends core::int>(core::Iterable<core::int> charCodes, [core::int start, core::int? end]) → core::String
return core::String::fromCharCodes(charCodes, start, end);
-static method _#A#fromCharCode#tearOff<unrelated X extends core::int>(core::int charCode) → core::String
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#A#fromCharCode#tearOff<unrelated X extends core::int>(core::int charCode) → core::String
return core::String::fromCharCode(charCode);
-static method _#A#fromEnvironment#tearOff<unrelated X extends core::int>(core::String name, {core::String defaultValue}) → core::String
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#A#fromEnvironment#tearOff<unrelated X extends core::int>(core::String name, {core::String defaultValue}) → core::String
return core::String::fromEnvironment(name, defaultValue: defaultValue);
-static method _#B#fromCharCodes#tearOff<unrelated X extends core::int>(core::Iterable<core::int> charCodes, [core::int start, core::int? end]) → core::String
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#B#fromCharCodes#tearOff<unrelated X extends core::int>(core::Iterable<core::int> charCodes, [core::int start, core::int? end]) → core::String
return core::String::fromCharCodes(charCodes, start, end);
-static method _#B#fromCharCode#tearOff<unrelated X extends core::int>(core::int charCode) → core::String
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#B#fromCharCode#tearOff<unrelated X extends core::int>(core::int charCode) → core::String
return core::String::fromCharCode(charCode);
-static method _#B#fromEnvironment#tearOff<unrelated X extends core::int>(core::String name, {core::String defaultValue}) → core::String
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#B#fromEnvironment#tearOff<unrelated X extends core::int>(core::String name, {core::String defaultValue}) → core::String
return core::String::fromEnvironment(name, defaultValue: defaultValue);
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.weak.transformed.expect b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.weak.transformed.expect
index 7e82df9..94e4635 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/aliased_checks_in_typedef.dart.weak.transformed.expect
@@ -36,17 +36,17 @@
core::String a;
}
static method main() → dynamic {}
-static method _#A#fromCharCodes#tearOff<unrelated X extends core::int>(core::Iterable<core::int> charCodes, [core::int start = #C1, core::int? end = #C2]) → core::String
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#A#fromCharCodes#tearOff<unrelated X extends core::int>(core::Iterable<core::int> charCodes, [core::int start = #C1, core::int? end = #C2]) → core::String
return core::String::fromCharCodes(charCodes, start, end);
-static method _#A#fromCharCode#tearOff<unrelated X extends core::int>(core::int charCode) → core::String
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#A#fromCharCode#tearOff<unrelated X extends core::int>(core::int charCode) → core::String
return core::String::fromCharCode(charCode);
-static method _#A#fromEnvironment#tearOff<unrelated X extends core::int>(core::String name, {core::String defaultValue = #C3}) → core::String
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#A#fromEnvironment#tearOff<unrelated X extends core::int>(core::String name, {core::String defaultValue = #C3}) → core::String
return core::String::fromEnvironment(name, defaultValue: defaultValue);
-static method _#B#fromCharCodes#tearOff<unrelated X extends core::int>(core::Iterable<core::int> charCodes, [core::int start = #C1, core::int? end = #C2]) → core::String
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#B#fromCharCodes#tearOff<unrelated X extends core::int>(core::Iterable<core::int> charCodes, [core::int start = #C1, core::int? end = #C2]) → core::String
return core::String::fromCharCodes(charCodes, start, end);
-static method _#B#fromCharCode#tearOff<unrelated X extends core::int>(core::int charCode) → core::String
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#B#fromCharCode#tearOff<unrelated X extends core::int>(core::int charCode) → core::String
return core::String::fromCharCode(charCode);
-static method _#B#fromEnvironment#tearOff<unrelated X extends core::int>(core::String name, {core::String defaultValue = #C3}) → core::String
+static method /* from org-dartlang-sdk:///sdk/lib/_internal/vm/lib/string_patch.dart */ _#B#fromEnvironment#tearOff<unrelated X extends core::int>(core::String name, {core::String defaultValue = #C3}) → core::String
return core::String::fromEnvironment(name, defaultValue: defaultValue);
constants {
diff --git a/tools/VERSION b/tools/VERSION
index f3425e5..ef5f560 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 15
PATCH 0
-PRERELEASE 67
+PRERELEASE 68
PRERELEASE_PATCH 0
\ No newline at end of file