[cfe] Implements copyWith in valueClass transformation
Change-Id: I37d32c23176a9324c313031fcb283f6ab7250944
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/162703
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
Commit-Queue: Javier López-Contreras <jlcontreras@google.com>
diff --git a/pkg/front_end/testcases/value_class/empty.dart.strong.expect b/pkg/front_end/testcases/value_class/empty.dart.strong.expect
index 129465c..e659acf 100644
--- a/pkg/front_end/testcases/value_class/empty.dart.strong.expect
+++ b/pkg/front_end/testcases/value_class/empty.dart.strong.expect
@@ -13,6 +13,8 @@
return other is self::EmptyClass;
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish("org-dartlang-testcase:///empty.dartEmptyClass".{core::String::hashCode});
+ method /*isNullableByDefault*/ copyWith() → dynamic
+ return new self::EmptyClass::•();
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/value_class/empty.dart.strong.transformed.expect b/pkg/front_end/testcases/value_class/empty.dart.strong.transformed.expect
index 129465c..e659acf 100644
--- a/pkg/front_end/testcases/value_class/empty.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/value_class/empty.dart.strong.transformed.expect
@@ -13,6 +13,8 @@
return other is self::EmptyClass;
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish("org-dartlang-testcase:///empty.dartEmptyClass".{core::String::hashCode});
+ method /*isNullableByDefault*/ copyWith() → dynamic
+ return new self::EmptyClass::•();
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/value_class/empty.dart.weak.expect b/pkg/front_end/testcases/value_class/empty.dart.weak.expect
index 129465c..e659acf 100644
--- a/pkg/front_end/testcases/value_class/empty.dart.weak.expect
+++ b/pkg/front_end/testcases/value_class/empty.dart.weak.expect
@@ -13,6 +13,8 @@
return other is self::EmptyClass;
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish("org-dartlang-testcase:///empty.dartEmptyClass".{core::String::hashCode});
+ method /*isNullableByDefault*/ copyWith() → dynamic
+ return new self::EmptyClass::•();
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/value_class/empty.dart.weak.transformed.expect b/pkg/front_end/testcases/value_class/empty.dart.weak.transformed.expect
index 129465c..e659acf 100644
--- a/pkg/front_end/testcases/value_class/empty.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/value_class/empty.dart.weak.transformed.expect
@@ -13,6 +13,8 @@
return other is self::EmptyClass;
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish("org-dartlang-testcase:///empty.dartEmptyClass".{core::String::hashCode});
+ method /*isNullableByDefault*/ copyWith() → dynamic
+ return new self::EmptyClass::•();
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/value_class/explicit_mixin.dart.strong.expect b/pkg/front_end/testcases/value_class/explicit_mixin.dart.strong.expect
index c465cf0..6852df4 100644
--- a/pkg/front_end/testcases/value_class/explicit_mixin.dart.strong.expect
+++ b/pkg/front_end/testcases/value_class/explicit_mixin.dart.strong.expect
@@ -13,6 +13,8 @@
return other is self::A;
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish("org-dartlang-testcase:///explicit_mixin.dartA".{core::String::hashCode});
+ method /*isNullableByDefault*/ copyWith() → dynamic
+ return new self::A::•();
}
class B extends core::Object {
synthetic constructor •() → self::B
@@ -42,6 +44,8 @@
return other is self::F;
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish("org-dartlang-testcase:///explicit_mixin.dartF".{core::String::hashCode});
+ method /*isNullableByDefault*/ copyWith() → dynamic
+ return new self::F::•();
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/value_class/explicit_mixin.dart.strong.transformed.expect b/pkg/front_end/testcases/value_class/explicit_mixin.dart.strong.transformed.expect
index 93db2ab..27d97db 100644
--- a/pkg/front_end/testcases/value_class/explicit_mixin.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/value_class/explicit_mixin.dart.strong.transformed.expect
@@ -13,6 +13,8 @@
return other is self::A;
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish("org-dartlang-testcase:///explicit_mixin.dartA".{core::String::hashCode});
+ method /*isNullableByDefault*/ copyWith() → dynamic
+ return new self::A::•();
}
class B extends core::Object {
synthetic constructor •() → self::B
@@ -37,6 +39,8 @@
return other is self::A;
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish("org-dartlang-testcase:///explicit_mixin.dartA".{core::String::hashCode});
+ method /*isNullableByDefault*/ copyWith() → dynamic
+ return new self::A::•();
}
class F extends self::B implements self::C /*isEliminatedMixin*/ {
synthetic constructor •() → self::F
@@ -46,6 +50,8 @@
return other is self::F;
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish("org-dartlang-testcase:///explicit_mixin.dartF".{core::String::hashCode});
+ method /*isNullableByDefault*/ copyWith() → dynamic
+ return new self::F::•();
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/value_class/explicit_mixin.dart.weak.expect b/pkg/front_end/testcases/value_class/explicit_mixin.dart.weak.expect
index c465cf0..6852df4 100644
--- a/pkg/front_end/testcases/value_class/explicit_mixin.dart.weak.expect
+++ b/pkg/front_end/testcases/value_class/explicit_mixin.dart.weak.expect
@@ -13,6 +13,8 @@
return other is self::A;
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish("org-dartlang-testcase:///explicit_mixin.dartA".{core::String::hashCode});
+ method /*isNullableByDefault*/ copyWith() → dynamic
+ return new self::A::•();
}
class B extends core::Object {
synthetic constructor •() → self::B
@@ -42,6 +44,8 @@
return other is self::F;
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish("org-dartlang-testcase:///explicit_mixin.dartF".{core::String::hashCode});
+ method /*isNullableByDefault*/ copyWith() → dynamic
+ return new self::F::•();
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/value_class/explicit_mixin.dart.weak.transformed.expect b/pkg/front_end/testcases/value_class/explicit_mixin.dart.weak.transformed.expect
index 93db2ab..27d97db 100644
--- a/pkg/front_end/testcases/value_class/explicit_mixin.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/value_class/explicit_mixin.dart.weak.transformed.expect
@@ -13,6 +13,8 @@
return other is self::A;
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish("org-dartlang-testcase:///explicit_mixin.dartA".{core::String::hashCode});
+ method /*isNullableByDefault*/ copyWith() → dynamic
+ return new self::A::•();
}
class B extends core::Object {
synthetic constructor •() → self::B
@@ -37,6 +39,8 @@
return other is self::A;
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish("org-dartlang-testcase:///explicit_mixin.dartA".{core::String::hashCode});
+ method /*isNullableByDefault*/ copyWith() → dynamic
+ return new self::A::•();
}
class F extends self::B implements self::C /*isEliminatedMixin*/ {
synthetic constructor •() → self::F
@@ -46,6 +50,8 @@
return other is self::F;
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish("org-dartlang-testcase:///explicit_mixin.dartF".{core::String::hashCode});
+ method /*isNullableByDefault*/ copyWith() → dynamic
+ return new self::F::•();
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/value_class/non_final_field_error.dart.strong.expect b/pkg/front_end/testcases/value_class/non_final_field_error.dart.strong.expect
index 32fe546..ae9077e 100644
--- a/pkg/front_end/testcases/value_class/non_final_field_error.dart.strong.expect
+++ b/pkg/front_end/testcases/value_class/non_final_field_error.dart.strong.expect
@@ -21,6 +21,8 @@
return other is self::Animal && this.{self::Animal::numberOfLegs}.{core::num::==}(other{self::Animal}.{self::Animal::numberOfLegs});
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish(val::JenkinsSmiHash::combine("org-dartlang-testcase:///non_final_field_error.dartAnimal".{core::String::hashCode}, this.{self::Animal::numberOfLegs}.{core::num::hashCode}));
+ method /*isNullableByDefault*/ copyWith({core::int numberOfLegs}) → dynamic
+ return new self::Animal::•(numberOfLegs: numberOfLegs);
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/value_class/non_final_field_error.dart.strong.transformed.expect b/pkg/front_end/testcases/value_class/non_final_field_error.dart.strong.transformed.expect
index 32fe546..ae9077e 100644
--- a/pkg/front_end/testcases/value_class/non_final_field_error.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/value_class/non_final_field_error.dart.strong.transformed.expect
@@ -21,6 +21,8 @@
return other is self::Animal && this.{self::Animal::numberOfLegs}.{core::num::==}(other{self::Animal}.{self::Animal::numberOfLegs});
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish(val::JenkinsSmiHash::combine("org-dartlang-testcase:///non_final_field_error.dartAnimal".{core::String::hashCode}, this.{self::Animal::numberOfLegs}.{core::num::hashCode}));
+ method /*isNullableByDefault*/ copyWith({core::int numberOfLegs}) → dynamic
+ return new self::Animal::•(numberOfLegs: numberOfLegs);
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/value_class/non_final_field_error.dart.weak.expect b/pkg/front_end/testcases/value_class/non_final_field_error.dart.weak.expect
index 32fe546..ae9077e 100644
--- a/pkg/front_end/testcases/value_class/non_final_field_error.dart.weak.expect
+++ b/pkg/front_end/testcases/value_class/non_final_field_error.dart.weak.expect
@@ -21,6 +21,8 @@
return other is self::Animal && this.{self::Animal::numberOfLegs}.{core::num::==}(other{self::Animal}.{self::Animal::numberOfLegs});
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish(val::JenkinsSmiHash::combine("org-dartlang-testcase:///non_final_field_error.dartAnimal".{core::String::hashCode}, this.{self::Animal::numberOfLegs}.{core::num::hashCode}));
+ method /*isNullableByDefault*/ copyWith({core::int numberOfLegs}) → dynamic
+ return new self::Animal::•(numberOfLegs: numberOfLegs);
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/value_class/non_final_field_error.dart.weak.transformed.expect b/pkg/front_end/testcases/value_class/non_final_field_error.dart.weak.transformed.expect
index 32fe546..ae9077e 100644
--- a/pkg/front_end/testcases/value_class/non_final_field_error.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/value_class/non_final_field_error.dart.weak.transformed.expect
@@ -21,6 +21,8 @@
return other is self::Animal && this.{self::Animal::numberOfLegs}.{core::num::==}(other{self::Animal}.{self::Animal::numberOfLegs});
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish(val::JenkinsSmiHash::combine("org-dartlang-testcase:///non_final_field_error.dartAnimal".{core::String::hashCode}, this.{self::Animal::numberOfLegs}.{core::num::hashCode}));
+ method /*isNullableByDefault*/ copyWith({core::int numberOfLegs}) → dynamic
+ return new self::Animal::•(numberOfLegs: numberOfLegs);
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/value_class/non_value_extends_value_error.dart.strong.expect b/pkg/front_end/testcases/value_class/non_value_extends_value_error.dart.strong.expect
index e0bd784..805f287 100644
--- a/pkg/front_end/testcases/value_class/non_value_extends_value_error.dart.strong.expect
+++ b/pkg/front_end/testcases/value_class/non_value_extends_value_error.dart.strong.expect
@@ -22,6 +22,8 @@
return other is self::Animal && this.{self::Animal::numberOfLegs}.{core::num::==}(other{self::Animal}.{self::Animal::numberOfLegs});
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish(val::JenkinsSmiHash::combine("org-dartlang-testcase:///non_value_extends_value_error.dartAnimal".{core::String::hashCode}, this.{self::Animal::numberOfLegs}.{core::num::hashCode}));
+ method /*isNullableByDefault*/ copyWith({core::int numberOfLegs}) → dynamic
+ return new self::Animal::•(numberOfLegs: numberOfLegs);
}
class Cat extends self::Animal {
synthetic constructor •() → self::Cat
diff --git a/pkg/front_end/testcases/value_class/non_value_extends_value_error.dart.strong.transformed.expect b/pkg/front_end/testcases/value_class/non_value_extends_value_error.dart.strong.transformed.expect
index e0bd784..805f287 100644
--- a/pkg/front_end/testcases/value_class/non_value_extends_value_error.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/value_class/non_value_extends_value_error.dart.strong.transformed.expect
@@ -22,6 +22,8 @@
return other is self::Animal && this.{self::Animal::numberOfLegs}.{core::num::==}(other{self::Animal}.{self::Animal::numberOfLegs});
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish(val::JenkinsSmiHash::combine("org-dartlang-testcase:///non_value_extends_value_error.dartAnimal".{core::String::hashCode}, this.{self::Animal::numberOfLegs}.{core::num::hashCode}));
+ method /*isNullableByDefault*/ copyWith({core::int numberOfLegs}) → dynamic
+ return new self::Animal::•(numberOfLegs: numberOfLegs);
}
class Cat extends self::Animal {
synthetic constructor •() → self::Cat
diff --git a/pkg/front_end/testcases/value_class/non_value_extends_value_error.dart.weak.expect b/pkg/front_end/testcases/value_class/non_value_extends_value_error.dart.weak.expect
index e0bd784..805f287 100644
--- a/pkg/front_end/testcases/value_class/non_value_extends_value_error.dart.weak.expect
+++ b/pkg/front_end/testcases/value_class/non_value_extends_value_error.dart.weak.expect
@@ -22,6 +22,8 @@
return other is self::Animal && this.{self::Animal::numberOfLegs}.{core::num::==}(other{self::Animal}.{self::Animal::numberOfLegs});
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish(val::JenkinsSmiHash::combine("org-dartlang-testcase:///non_value_extends_value_error.dartAnimal".{core::String::hashCode}, this.{self::Animal::numberOfLegs}.{core::num::hashCode}));
+ method /*isNullableByDefault*/ copyWith({core::int numberOfLegs}) → dynamic
+ return new self::Animal::•(numberOfLegs: numberOfLegs);
}
class Cat extends self::Animal {
synthetic constructor •() → self::Cat
diff --git a/pkg/front_end/testcases/value_class/non_value_extends_value_error.dart.weak.transformed.expect b/pkg/front_end/testcases/value_class/non_value_extends_value_error.dart.weak.transformed.expect
index e0bd784..805f287 100644
--- a/pkg/front_end/testcases/value_class/non_value_extends_value_error.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/value_class/non_value_extends_value_error.dart.weak.transformed.expect
@@ -22,6 +22,8 @@
return other is self::Animal && this.{self::Animal::numberOfLegs}.{core::num::==}(other{self::Animal}.{self::Animal::numberOfLegs});
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish(val::JenkinsSmiHash::combine("org-dartlang-testcase:///non_value_extends_value_error.dartAnimal".{core::String::hashCode}, this.{self::Animal::numberOfLegs}.{core::num::hashCode}));
+ method /*isNullableByDefault*/ copyWith({core::int numberOfLegs}) → dynamic
+ return new self::Animal::•(numberOfLegs: numberOfLegs);
}
class Cat extends self::Animal {
synthetic constructor •() → self::Cat
diff --git a/pkg/front_end/testcases/value_class/non_value_implements_value_error.dart.strong.expect b/pkg/front_end/testcases/value_class/non_value_implements_value_error.dart.strong.expect
index 67b715f..95373ed 100644
--- a/pkg/front_end/testcases/value_class/non_value_implements_value_error.dart.strong.expect
+++ b/pkg/front_end/testcases/value_class/non_value_implements_value_error.dart.strong.expect
@@ -27,6 +27,8 @@
return other is self::Animal && this.{self::Animal::numberOfLegs}.{core::num::==}(other{self::Animal}.{self::Animal::numberOfLegs});
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish(val::JenkinsSmiHash::combine("org-dartlang-testcase:///non_value_implements_value_error.dartAnimal".{core::String::hashCode}, this.{self::Animal::numberOfLegs}.{core::num::hashCode}));
+ method /*isNullableByDefault*/ copyWith({core::int numberOfLegs}) → dynamic
+ return new self::Animal::•(numberOfLegs: numberOfLegs);
}
class Cat extends core::Object implements self::Animal {
final field core::int numberOfLegs = null;
diff --git a/pkg/front_end/testcases/value_class/non_value_implements_value_error.dart.strong.transformed.expect b/pkg/front_end/testcases/value_class/non_value_implements_value_error.dart.strong.transformed.expect
index 67b715f..95373ed 100644
--- a/pkg/front_end/testcases/value_class/non_value_implements_value_error.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/value_class/non_value_implements_value_error.dart.strong.transformed.expect
@@ -27,6 +27,8 @@
return other is self::Animal && this.{self::Animal::numberOfLegs}.{core::num::==}(other{self::Animal}.{self::Animal::numberOfLegs});
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish(val::JenkinsSmiHash::combine("org-dartlang-testcase:///non_value_implements_value_error.dartAnimal".{core::String::hashCode}, this.{self::Animal::numberOfLegs}.{core::num::hashCode}));
+ method /*isNullableByDefault*/ copyWith({core::int numberOfLegs}) → dynamic
+ return new self::Animal::•(numberOfLegs: numberOfLegs);
}
class Cat extends core::Object implements self::Animal {
final field core::int numberOfLegs = null;
diff --git a/pkg/front_end/testcases/value_class/non_value_implements_value_error.dart.weak.expect b/pkg/front_end/testcases/value_class/non_value_implements_value_error.dart.weak.expect
index 67b715f..95373ed 100644
--- a/pkg/front_end/testcases/value_class/non_value_implements_value_error.dart.weak.expect
+++ b/pkg/front_end/testcases/value_class/non_value_implements_value_error.dart.weak.expect
@@ -27,6 +27,8 @@
return other is self::Animal && this.{self::Animal::numberOfLegs}.{core::num::==}(other{self::Animal}.{self::Animal::numberOfLegs});
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish(val::JenkinsSmiHash::combine("org-dartlang-testcase:///non_value_implements_value_error.dartAnimal".{core::String::hashCode}, this.{self::Animal::numberOfLegs}.{core::num::hashCode}));
+ method /*isNullableByDefault*/ copyWith({core::int numberOfLegs}) → dynamic
+ return new self::Animal::•(numberOfLegs: numberOfLegs);
}
class Cat extends core::Object implements self::Animal {
final field core::int numberOfLegs = null;
diff --git a/pkg/front_end/testcases/value_class/non_value_implements_value_error.dart.weak.transformed.expect b/pkg/front_end/testcases/value_class/non_value_implements_value_error.dart.weak.transformed.expect
index 67b715f..95373ed 100644
--- a/pkg/front_end/testcases/value_class/non_value_implements_value_error.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/value_class/non_value_implements_value_error.dart.weak.transformed.expect
@@ -27,6 +27,8 @@
return other is self::Animal && this.{self::Animal::numberOfLegs}.{core::num::==}(other{self::Animal}.{self::Animal::numberOfLegs});
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish(val::JenkinsSmiHash::combine("org-dartlang-testcase:///non_value_implements_value_error.dartAnimal".{core::String::hashCode}, this.{self::Animal::numberOfLegs}.{core::num::hashCode}));
+ method /*isNullableByDefault*/ copyWith({core::int numberOfLegs}) → dynamic
+ return new self::Animal::•(numberOfLegs: numberOfLegs);
}
class Cat extends core::Object implements self::Animal {
final field core::int numberOfLegs = null;
diff --git a/pkg/front_end/testcases/value_class/simple.dart.strong.expect b/pkg/front_end/testcases/value_class/simple.dart.strong.expect
index 218ec9f..862862f 100644
--- a/pkg/front_end/testcases/value_class/simple.dart.strong.expect
+++ b/pkg/front_end/testcases/value_class/simple.dart.strong.expect
@@ -43,6 +43,8 @@
return other is self::Animal && this.{self::Animal::numberOfLegs}.{core::num::==}(other{self::Animal}.{self::Animal::numberOfLegs});
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish(val::JenkinsSmiHash::combine("org-dartlang-testcase:///simple.dartAnimal".{core::String::hashCode}, this.{self::Animal::numberOfLegs}.{core::num::hashCode}));
+ method /*isNullableByDefault*/ copyWith({core::int numberOfLegs}) → dynamic
+ return new self::Animal::•(numberOfLegs: numberOfLegs);
}
static method main() → dynamic {
self::Animal firstAnimal = invalid-expression "pkg/front_end/testcases/value_class/simple.dart:13:31: Error: No named parameter with the name 'numberOfLegs'.
diff --git a/pkg/front_end/testcases/value_class/simple.dart.strong.transformed.expect b/pkg/front_end/testcases/value_class/simple.dart.strong.transformed.expect
index 9845aaa..3213a78 100644
--- a/pkg/front_end/testcases/value_class/simple.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/value_class/simple.dart.strong.transformed.expect
@@ -43,6 +43,8 @@
return other is self::Animal && this.{self::Animal::numberOfLegs}.{core::num::==}(other{self::Animal}.{self::Animal::numberOfLegs});
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish(val::JenkinsSmiHash::combine("org-dartlang-testcase:///simple.dartAnimal".{core::String::hashCode}, this.{self::Animal::numberOfLegs}.{core::num::hashCode}));
+ method /*isNullableByDefault*/ copyWith({core::int numberOfLegs}) → dynamic
+ return new self::Animal::•(numberOfLegs: numberOfLegs);
}
static method main() → dynamic {
self::Animal firstAnimal = invalid-expression "pkg/front_end/testcases/value_class/simple.dart:13:31: Error: No named parameter with the name 'numberOfLegs'.
diff --git a/pkg/front_end/testcases/value_class/simple.dart.weak.expect b/pkg/front_end/testcases/value_class/simple.dart.weak.expect
index 218ec9f..862862f 100644
--- a/pkg/front_end/testcases/value_class/simple.dart.weak.expect
+++ b/pkg/front_end/testcases/value_class/simple.dart.weak.expect
@@ -43,6 +43,8 @@
return other is self::Animal && this.{self::Animal::numberOfLegs}.{core::num::==}(other{self::Animal}.{self::Animal::numberOfLegs});
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish(val::JenkinsSmiHash::combine("org-dartlang-testcase:///simple.dartAnimal".{core::String::hashCode}, this.{self::Animal::numberOfLegs}.{core::num::hashCode}));
+ method /*isNullableByDefault*/ copyWith({core::int numberOfLegs}) → dynamic
+ return new self::Animal::•(numberOfLegs: numberOfLegs);
}
static method main() → dynamic {
self::Animal firstAnimal = invalid-expression "pkg/front_end/testcases/value_class/simple.dart:13:31: Error: No named parameter with the name 'numberOfLegs'.
diff --git a/pkg/front_end/testcases/value_class/simple.dart.weak.transformed.expect b/pkg/front_end/testcases/value_class/simple.dart.weak.transformed.expect
index 9845aaa..3213a78 100644
--- a/pkg/front_end/testcases/value_class/simple.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/value_class/simple.dart.weak.transformed.expect
@@ -43,6 +43,8 @@
return other is self::Animal && this.{self::Animal::numberOfLegs}.{core::num::==}(other{self::Animal}.{self::Animal::numberOfLegs});
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish(val::JenkinsSmiHash::combine("org-dartlang-testcase:///simple.dartAnimal".{core::String::hashCode}, this.{self::Animal::numberOfLegs}.{core::num::hashCode}));
+ method /*isNullableByDefault*/ copyWith({core::int numberOfLegs}) → dynamic
+ return new self::Animal::•(numberOfLegs: numberOfLegs);
}
static method main() → dynamic {
self::Animal firstAnimal = invalid-expression "pkg/front_end/testcases/value_class/simple.dart:13:31: Error: No named parameter with the name 'numberOfLegs'.
diff --git a/pkg/front_end/testcases/value_class/value_extends_non_value.dart.strong.expect b/pkg/front_end/testcases/value_class/value_extends_non_value.dart.strong.expect
index d3224ed..d02e298 100644
--- a/pkg/front_end/testcases/value_class/value_extends_non_value.dart.strong.expect
+++ b/pkg/front_end/testcases/value_class/value_extends_non_value.dart.strong.expect
@@ -49,6 +49,8 @@
return other is self::Cat && this.{self::Animal::numberOfLegs}.{core::num::==}(other{self::Cat}.{self::Animal::numberOfLegs}) && this.{self::Cat::numberOfWhiskers}.{core::num::==}(other{self::Cat}.{self::Cat::numberOfWhiskers});
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish(val::JenkinsSmiHash::combine(val::JenkinsSmiHash::combine("org-dartlang-testcase:///value_extends_non_value.dartCat".{core::String::hashCode}, this.{self::Animal::numberOfLegs}.{core::num::hashCode}), this.{self::Cat::numberOfWhiskers}.{core::num::hashCode}));
+ method /*isNullableByDefault*/ copyWith({core::int numberOfLegs, core::int numberOfWhiskers}) → dynamic
+ return new self::Cat::•(numberOfLegs: numberOfLegs, numberOfWhiskers: numberOfWhiskers);
}
static method main() → dynamic {
self::Cat firstCat = invalid-expression "pkg/front_end/testcases/value_class/value_extends_non_value.dart:18:22: Error: No named parameter with the name 'numberOfLegs'.
diff --git a/pkg/front_end/testcases/value_class/value_extends_non_value.dart.strong.transformed.expect b/pkg/front_end/testcases/value_class/value_extends_non_value.dart.strong.transformed.expect
index bf869ee..6ed1828 100644
--- a/pkg/front_end/testcases/value_class/value_extends_non_value.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/value_class/value_extends_non_value.dart.strong.transformed.expect
@@ -49,6 +49,8 @@
return other is self::Cat && this.{self::Animal::numberOfLegs}.{core::num::==}(other{self::Cat}.{self::Animal::numberOfLegs}) && this.{self::Cat::numberOfWhiskers}.{core::num::==}(other{self::Cat}.{self::Cat::numberOfWhiskers});
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish(val::JenkinsSmiHash::combine(val::JenkinsSmiHash::combine("org-dartlang-testcase:///value_extends_non_value.dartCat".{core::String::hashCode}, this.{self::Animal::numberOfLegs}.{core::num::hashCode}), this.{self::Cat::numberOfWhiskers}.{core::num::hashCode}));
+ method /*isNullableByDefault*/ copyWith({core::int numberOfLegs, core::int numberOfWhiskers}) → dynamic
+ return new self::Cat::•(numberOfLegs: numberOfLegs, numberOfWhiskers: numberOfWhiskers);
}
static method main() → dynamic {
self::Cat firstCat = invalid-expression "pkg/front_end/testcases/value_class/value_extends_non_value.dart:18:22: Error: No named parameter with the name 'numberOfLegs'.
diff --git a/pkg/front_end/testcases/value_class/value_extends_non_value.dart.weak.expect b/pkg/front_end/testcases/value_class/value_extends_non_value.dart.weak.expect
index d3224ed..d02e298 100644
--- a/pkg/front_end/testcases/value_class/value_extends_non_value.dart.weak.expect
+++ b/pkg/front_end/testcases/value_class/value_extends_non_value.dart.weak.expect
@@ -49,6 +49,8 @@
return other is self::Cat && this.{self::Animal::numberOfLegs}.{core::num::==}(other{self::Cat}.{self::Animal::numberOfLegs}) && this.{self::Cat::numberOfWhiskers}.{core::num::==}(other{self::Cat}.{self::Cat::numberOfWhiskers});
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish(val::JenkinsSmiHash::combine(val::JenkinsSmiHash::combine("org-dartlang-testcase:///value_extends_non_value.dartCat".{core::String::hashCode}, this.{self::Animal::numberOfLegs}.{core::num::hashCode}), this.{self::Cat::numberOfWhiskers}.{core::num::hashCode}));
+ method /*isNullableByDefault*/ copyWith({core::int numberOfLegs, core::int numberOfWhiskers}) → dynamic
+ return new self::Cat::•(numberOfLegs: numberOfLegs, numberOfWhiskers: numberOfWhiskers);
}
static method main() → dynamic {
self::Cat firstCat = invalid-expression "pkg/front_end/testcases/value_class/value_extends_non_value.dart:18:22: Error: No named parameter with the name 'numberOfLegs'.
diff --git a/pkg/front_end/testcases/value_class/value_extends_non_value.dart.weak.transformed.expect b/pkg/front_end/testcases/value_class/value_extends_non_value.dart.weak.transformed.expect
index bf869ee..6ed1828 100644
--- a/pkg/front_end/testcases/value_class/value_extends_non_value.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/value_class/value_extends_non_value.dart.weak.transformed.expect
@@ -49,6 +49,8 @@
return other is self::Cat && this.{self::Animal::numberOfLegs}.{core::num::==}(other{self::Cat}.{self::Animal::numberOfLegs}) && this.{self::Cat::numberOfWhiskers}.{core::num::==}(other{self::Cat}.{self::Cat::numberOfWhiskers});
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish(val::JenkinsSmiHash::combine(val::JenkinsSmiHash::combine("org-dartlang-testcase:///value_extends_non_value.dartCat".{core::String::hashCode}, this.{self::Animal::numberOfLegs}.{core::num::hashCode}), this.{self::Cat::numberOfWhiskers}.{core::num::hashCode}));
+ method /*isNullableByDefault*/ copyWith({core::int numberOfLegs, core::int numberOfWhiskers}) → dynamic
+ return new self::Cat::•(numberOfLegs: numberOfLegs, numberOfWhiskers: numberOfWhiskers);
}
static method main() → dynamic {
self::Cat firstCat = invalid-expression "pkg/front_end/testcases/value_class/value_extends_non_value.dart:18:22: Error: No named parameter with the name 'numberOfLegs'.
diff --git a/pkg/front_end/testcases/value_class/value_extends_non_value_error.dart.strong.expect b/pkg/front_end/testcases/value_class/value_extends_non_value_error.dart.strong.expect
index b1b9373..240ae96 100644
--- a/pkg/front_end/testcases/value_class/value_extends_non_value_error.dart.strong.expect
+++ b/pkg/front_end/testcases/value_class/value_extends_non_value_error.dart.strong.expect
@@ -31,6 +31,8 @@
return other is self::Cat;
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish("org-dartlang-testcase:///value_extends_non_value_error.dartCat".{core::String::hashCode});
+ method /*isNullableByDefault*/ copyWith() → dynamic
+ return new self::Cat::•();
}
class Animal2 extends core::Object {
final field core::int numberOfLegs = null;
@@ -46,6 +48,8 @@
return other is self::Cat2;
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish("org-dartlang-testcase:///value_extends_non_value_error.dartCat2".{core::String::hashCode});
+ method /*isNullableByDefault*/ copyWith() → dynamic
+ return new self::Cat2::•();
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/value_class/value_extends_non_value_error.dart.strong.transformed.expect b/pkg/front_end/testcases/value_class/value_extends_non_value_error.dart.strong.transformed.expect
index b1b9373..240ae96 100644
--- a/pkg/front_end/testcases/value_class/value_extends_non_value_error.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/value_class/value_extends_non_value_error.dart.strong.transformed.expect
@@ -31,6 +31,8 @@
return other is self::Cat;
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish("org-dartlang-testcase:///value_extends_non_value_error.dartCat".{core::String::hashCode});
+ method /*isNullableByDefault*/ copyWith() → dynamic
+ return new self::Cat::•();
}
class Animal2 extends core::Object {
final field core::int numberOfLegs = null;
@@ -46,6 +48,8 @@
return other is self::Cat2;
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish("org-dartlang-testcase:///value_extends_non_value_error.dartCat2".{core::String::hashCode});
+ method /*isNullableByDefault*/ copyWith() → dynamic
+ return new self::Cat2::•();
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/value_class/value_extends_non_value_error.dart.weak.expect b/pkg/front_end/testcases/value_class/value_extends_non_value_error.dart.weak.expect
index b1b9373..240ae96 100644
--- a/pkg/front_end/testcases/value_class/value_extends_non_value_error.dart.weak.expect
+++ b/pkg/front_end/testcases/value_class/value_extends_non_value_error.dart.weak.expect
@@ -31,6 +31,8 @@
return other is self::Cat;
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish("org-dartlang-testcase:///value_extends_non_value_error.dartCat".{core::String::hashCode});
+ method /*isNullableByDefault*/ copyWith() → dynamic
+ return new self::Cat::•();
}
class Animal2 extends core::Object {
final field core::int numberOfLegs = null;
@@ -46,6 +48,8 @@
return other is self::Cat2;
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish("org-dartlang-testcase:///value_extends_non_value_error.dartCat2".{core::String::hashCode});
+ method /*isNullableByDefault*/ copyWith() → dynamic
+ return new self::Cat2::•();
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/value_class/value_extends_non_value_error.dart.weak.transformed.expect b/pkg/front_end/testcases/value_class/value_extends_non_value_error.dart.weak.transformed.expect
index b1b9373..240ae96 100644
--- a/pkg/front_end/testcases/value_class/value_extends_non_value_error.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/value_class/value_extends_non_value_error.dart.weak.transformed.expect
@@ -31,6 +31,8 @@
return other is self::Cat;
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish("org-dartlang-testcase:///value_extends_non_value_error.dartCat".{core::String::hashCode});
+ method /*isNullableByDefault*/ copyWith() → dynamic
+ return new self::Cat::•();
}
class Animal2 extends core::Object {
final field core::int numberOfLegs = null;
@@ -46,6 +48,8 @@
return other is self::Cat2;
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish("org-dartlang-testcase:///value_extends_non_value_error.dartCat2".{core::String::hashCode});
+ method /*isNullableByDefault*/ copyWith() → dynamic
+ return new self::Cat2::•();
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/value_class/value_implements_non_value.dart.strong.expect b/pkg/front_end/testcases/value_class/value_implements_non_value.dart.strong.expect
index a0f49ac..81644f5 100644
--- a/pkg/front_end/testcases/value_class/value_implements_non_value.dart.strong.expect
+++ b/pkg/front_end/testcases/value_class/value_implements_non_value.dart.strong.expect
@@ -92,6 +92,8 @@
return other is self::Cat && this.{self::Cat::numberOfLegs}.{core::num::==}(other{self::Cat}.{self::Cat::numberOfLegs}) && this.{self::Cat::numberOfWhiskers}.{core::num::==}(other{self::Cat}.{self::Cat::numberOfWhiskers});
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish(val::JenkinsSmiHash::combine(val::JenkinsSmiHash::combine("org-dartlang-testcase:///value_implements_non_value.dartCat".{core::String::hashCode}, this.{self::Cat::numberOfLegs}.{core::num::hashCode}), this.{self::Cat::numberOfWhiskers}.{core::num::hashCode}));
+ method /*isNullableByDefault*/ copyWith({core::int numberOfLegs, core::int numberOfWhiskers}) → dynamic
+ return new self::Cat::•(numberOfLegs: numberOfLegs, numberOfWhiskers: numberOfWhiskers);
}
abstract class Animal2 extends core::Object {
synthetic constructor •() → self::Animal2
@@ -109,6 +111,8 @@
return other is self::Cat2 && this.{self::Cat2::numberOfLegs}.{core::num::==}(other{self::Cat2}.{self::Cat2::numberOfLegs}) && this.{self::Cat2::numberOfWhiskers}.{core::num::==}(other{self::Cat2}.{self::Cat2::numberOfWhiskers});
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish(val::JenkinsSmiHash::combine(val::JenkinsSmiHash::combine("org-dartlang-testcase:///value_implements_non_value.dartCat2".{core::String::hashCode}, this.{self::Cat2::numberOfLegs}.{core::num::hashCode}), this.{self::Cat2::numberOfWhiskers}.{core::num::hashCode}));
+ method /*isNullableByDefault*/ copyWith({core::int numberOfLegs, core::int numberOfWhiskers}) → dynamic
+ return new self::Cat2::•(numberOfLegs: numberOfLegs, numberOfWhiskers: numberOfWhiskers);
}
static method main() → dynamic {
self::Cat firstCat = invalid-expression "pkg/front_end/testcases/value_class/value_implements_non_value.dart:30:22: Error: No named parameter with the name 'numberOfLegs'.
diff --git a/pkg/front_end/testcases/value_class/value_implements_non_value.dart.strong.transformed.expect b/pkg/front_end/testcases/value_class/value_implements_non_value.dart.strong.transformed.expect
index e412416..bcf2a6e 100644
--- a/pkg/front_end/testcases/value_class/value_implements_non_value.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/value_class/value_implements_non_value.dart.strong.transformed.expect
@@ -92,6 +92,8 @@
return other is self::Cat && this.{self::Cat::numberOfLegs}.{core::num::==}(other{self::Cat}.{self::Cat::numberOfLegs}) && this.{self::Cat::numberOfWhiskers}.{core::num::==}(other{self::Cat}.{self::Cat::numberOfWhiskers});
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish(val::JenkinsSmiHash::combine(val::JenkinsSmiHash::combine("org-dartlang-testcase:///value_implements_non_value.dartCat".{core::String::hashCode}, this.{self::Cat::numberOfLegs}.{core::num::hashCode}), this.{self::Cat::numberOfWhiskers}.{core::num::hashCode}));
+ method /*isNullableByDefault*/ copyWith({core::int numberOfLegs, core::int numberOfWhiskers}) → dynamic
+ return new self::Cat::•(numberOfLegs: numberOfLegs, numberOfWhiskers: numberOfWhiskers);
}
abstract class Animal2 extends core::Object {
synthetic constructor •() → self::Animal2
@@ -109,6 +111,8 @@
return other is self::Cat2 && this.{self::Cat2::numberOfLegs}.{core::num::==}(other{self::Cat2}.{self::Cat2::numberOfLegs}) && this.{self::Cat2::numberOfWhiskers}.{core::num::==}(other{self::Cat2}.{self::Cat2::numberOfWhiskers});
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish(val::JenkinsSmiHash::combine(val::JenkinsSmiHash::combine("org-dartlang-testcase:///value_implements_non_value.dartCat2".{core::String::hashCode}, this.{self::Cat2::numberOfLegs}.{core::num::hashCode}), this.{self::Cat2::numberOfWhiskers}.{core::num::hashCode}));
+ method /*isNullableByDefault*/ copyWith({core::int numberOfLegs, core::int numberOfWhiskers}) → dynamic
+ return new self::Cat2::•(numberOfLegs: numberOfLegs, numberOfWhiskers: numberOfWhiskers);
}
static method main() → dynamic {
self::Cat firstCat = invalid-expression "pkg/front_end/testcases/value_class/value_implements_non_value.dart:30:22: Error: No named parameter with the name 'numberOfLegs'.
diff --git a/pkg/front_end/testcases/value_class/value_implements_non_value.dart.weak.expect b/pkg/front_end/testcases/value_class/value_implements_non_value.dart.weak.expect
index 7ff4c88..5c550c6 100644
--- a/pkg/front_end/testcases/value_class/value_implements_non_value.dart.weak.expect
+++ b/pkg/front_end/testcases/value_class/value_implements_non_value.dart.weak.expect
@@ -92,6 +92,8 @@
return other is self::Cat && this.{self::Cat::numberOfLegs}.{core::num::==}(other{self::Cat}.{self::Cat::numberOfLegs}) && this.{self::Cat::numberOfWhiskers}.{core::num::==}(other{self::Cat}.{self::Cat::numberOfWhiskers});
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish(val::JenkinsSmiHash::combine(val::JenkinsSmiHash::combine("org-dartlang-testcase:///value_implements_non_value.dartCat".{core::String::hashCode}, this.{self::Cat::numberOfLegs}.{core::num::hashCode}), this.{self::Cat::numberOfWhiskers}.{core::num::hashCode}));
+ method /*isNullableByDefault*/ copyWith({core::int numberOfLegs, core::int numberOfWhiskers}) → dynamic
+ return new self::Cat::•(numberOfLegs: numberOfLegs, numberOfWhiskers: numberOfWhiskers);
}
abstract class Animal2 extends core::Object {
synthetic constructor •() → self::Animal2
@@ -109,6 +111,8 @@
return other is self::Cat2 && this.{self::Cat2::numberOfLegs}.{core::num::==}(other{self::Cat2}.{self::Cat2::numberOfLegs}) && this.{self::Cat2::numberOfWhiskers}.{core::num::==}(other{self::Cat2}.{self::Cat2::numberOfWhiskers});
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish(val::JenkinsSmiHash::combine(val::JenkinsSmiHash::combine("org-dartlang-testcase:///value_implements_non_value.dartCat2".{core::String::hashCode}, this.{self::Cat2::numberOfLegs}.{core::num::hashCode}), this.{self::Cat2::numberOfWhiskers}.{core::num::hashCode}));
+ method /*isNullableByDefault*/ copyWith({core::int numberOfLegs, core::int numberOfWhiskers}) → dynamic
+ return new self::Cat2::•(numberOfLegs: numberOfLegs, numberOfWhiskers: numberOfWhiskers);
}
static method main() → dynamic {
self::Cat firstCat = invalid-expression "pkg/front_end/testcases/value_class/value_implements_non_value.dart:30:22: Error: No named parameter with the name 'numberOfLegs'.
diff --git a/pkg/front_end/testcases/value_class/value_implements_non_value.dart.weak.transformed.expect b/pkg/front_end/testcases/value_class/value_implements_non_value.dart.weak.transformed.expect
index 939015f..455ce4f 100644
--- a/pkg/front_end/testcases/value_class/value_implements_non_value.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/value_class/value_implements_non_value.dart.weak.transformed.expect
@@ -92,6 +92,8 @@
return other is self::Cat && this.{self::Cat::numberOfLegs}.{core::num::==}(other{self::Cat}.{self::Cat::numberOfLegs}) && this.{self::Cat::numberOfWhiskers}.{core::num::==}(other{self::Cat}.{self::Cat::numberOfWhiskers});
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish(val::JenkinsSmiHash::combine(val::JenkinsSmiHash::combine("org-dartlang-testcase:///value_implements_non_value.dartCat".{core::String::hashCode}, this.{self::Cat::numberOfLegs}.{core::num::hashCode}), this.{self::Cat::numberOfWhiskers}.{core::num::hashCode}));
+ method /*isNullableByDefault*/ copyWith({core::int numberOfLegs, core::int numberOfWhiskers}) → dynamic
+ return new self::Cat::•(numberOfLegs: numberOfLegs, numberOfWhiskers: numberOfWhiskers);
}
abstract class Animal2 extends core::Object {
synthetic constructor •() → self::Animal2
@@ -109,6 +111,8 @@
return other is self::Cat2 && this.{self::Cat2::numberOfLegs}.{core::num::==}(other{self::Cat2}.{self::Cat2::numberOfLegs}) && this.{self::Cat2::numberOfWhiskers}.{core::num::==}(other{self::Cat2}.{self::Cat2::numberOfWhiskers});
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish(val::JenkinsSmiHash::combine(val::JenkinsSmiHash::combine("org-dartlang-testcase:///value_implements_non_value.dartCat2".{core::String::hashCode}, this.{self::Cat2::numberOfLegs}.{core::num::hashCode}), this.{self::Cat2::numberOfWhiskers}.{core::num::hashCode}));
+ method /*isNullableByDefault*/ copyWith({core::int numberOfLegs, core::int numberOfWhiskers}) → dynamic
+ return new self::Cat2::•(numberOfLegs: numberOfLegs, numberOfWhiskers: numberOfWhiskers);
}
static method main() → dynamic {
self::Cat firstCat = invalid-expression "pkg/front_end/testcases/value_class/value_implements_non_value.dart:30:22: Error: No named parameter with the name 'numberOfLegs'.
diff --git a/pkg/front_end/testcases/value_class/value_mixin_error.dart.strong.expect b/pkg/front_end/testcases/value_class/value_mixin_error.dart.strong.expect
index 7e226a5..f0c520b 100644
--- a/pkg/front_end/testcases/value_class/value_mixin_error.dart.strong.expect
+++ b/pkg/front_end/testcases/value_class/value_mixin_error.dart.strong.expect
@@ -13,6 +13,8 @@
return other is self::A;
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish("org-dartlang-testcase:///value_mixin_error.dartA".{core::String::hashCode});
+ method /*isNullableByDefault*/ copyWith() → dynamic
+ return new self::A::•();
}
class B extends core::Object {
synthetic constructor •() → self::B
diff --git a/pkg/front_end/testcases/value_class/value_mixin_error.dart.strong.transformed.expect b/pkg/front_end/testcases/value_class/value_mixin_error.dart.strong.transformed.expect
index 6ae17d2..4ea2146 100644
--- a/pkg/front_end/testcases/value_class/value_mixin_error.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/value_class/value_mixin_error.dart.strong.transformed.expect
@@ -13,6 +13,8 @@
return other is self::A;
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish("org-dartlang-testcase:///value_mixin_error.dartA".{core::String::hashCode});
+ method /*isNullableByDefault*/ copyWith() → dynamic
+ return new self::A::•();
}
class B extends core::Object {
synthetic constructor •() → self::B
@@ -27,6 +29,8 @@
return other is self::A;
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish("org-dartlang-testcase:///value_mixin_error.dartA".{core::String::hashCode});
+ method /*isNullableByDefault*/ copyWith() → dynamic
+ return new self::A::•();
}
class C extends self::_C&B&A {
synthetic constructor •() → self::C
diff --git a/pkg/front_end/testcases/value_class/value_mixin_error.dart.weak.expect b/pkg/front_end/testcases/value_class/value_mixin_error.dart.weak.expect
index 7e226a5..f0c520b 100644
--- a/pkg/front_end/testcases/value_class/value_mixin_error.dart.weak.expect
+++ b/pkg/front_end/testcases/value_class/value_mixin_error.dart.weak.expect
@@ -13,6 +13,8 @@
return other is self::A;
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish("org-dartlang-testcase:///value_mixin_error.dartA".{core::String::hashCode});
+ method /*isNullableByDefault*/ copyWith() → dynamic
+ return new self::A::•();
}
class B extends core::Object {
synthetic constructor •() → self::B
diff --git a/pkg/front_end/testcases/value_class/value_mixin_error.dart.weak.transformed.expect b/pkg/front_end/testcases/value_class/value_mixin_error.dart.weak.transformed.expect
index 6ae17d2..4ea2146 100644
--- a/pkg/front_end/testcases/value_class/value_mixin_error.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/value_class/value_mixin_error.dart.weak.transformed.expect
@@ -13,6 +13,8 @@
return other is self::A;
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish("org-dartlang-testcase:///value_mixin_error.dartA".{core::String::hashCode});
+ method /*isNullableByDefault*/ copyWith() → dynamic
+ return new self::A::•();
}
class B extends core::Object {
synthetic constructor •() → self::B
@@ -27,6 +29,8 @@
return other is self::A;
get /*isNullableByDefault*/ hashCode() → core::int
return val::JenkinsSmiHash::finish("org-dartlang-testcase:///value_mixin_error.dartA".{core::String::hashCode});
+ method /*isNullableByDefault*/ copyWith() → dynamic
+ return new self::A::•();
}
class C extends self::_C&B&A {
synthetic constructor •() → self::C
diff --git a/pkg/kernel/lib/transformations/value_class.dart b/pkg/kernel/lib/transformations/value_class.dart
index dc2d71a..dfea2de 100644
--- a/pkg/kernel/lib/transformations/value_class.dart
+++ b/pkg/kernel/lib/transformations/value_class.dart
@@ -54,19 +54,7 @@
void transformValueClass(
Class cls, CoreTypes coreTypes, ClassHierarchy hierarchy) {
- addConstructor(cls, coreTypes);
- addEqualsOperator(cls, coreTypes, hierarchy);
- addHashCode(cls, coreTypes, hierarchy);
- // addCopyWith(cls);
-}
-
-void addConstructor(Class cls, CoreTypes coreTypes) {
- Constructor superConstructor = null;
- for (Constructor constructor in cls.superclass.constructors) {
- if (constructor.name.name == "") {
- superConstructor = constructor;
- }
- }
+ List<VariableDeclaration> allVariables = queryAllInstanceVariables(cls);
Constructor syntheticConstructor = null;
for (Constructor constructor in cls.constructors) {
if (constructor.isSynthetic) {
@@ -74,6 +62,21 @@
}
}
+ addConstructor(cls, coreTypes, syntheticConstructor);
+ addEqualsOperator(cls, coreTypes, hierarchy, allVariables.toList());
+ addHashCode(cls, coreTypes, hierarchy, allVariables.toList());
+ addCopyWith(
+ cls, coreTypes, hierarchy, allVariables.toList(), syntheticConstructor);
+}
+
+void addConstructor(
+ Class cls, CoreTypes coreTypes, Constructor syntheticConstructor) {
+ Constructor superConstructor = null;
+ for (Constructor constructor in cls.superclass.constructors) {
+ if (constructor.name.name == "") {
+ superConstructor = constructor;
+ }
+ }
List<VariableDeclaration> superParameters = superConstructor
.function.namedParameters
.map<VariableDeclaration>((e) => VariableDeclaration(e.name, type: e.type)
@@ -117,8 +120,8 @@
cls.annotations.removeAt(valueClassAnnotationIndex);
}
-void addEqualsOperator(
- Class cls, CoreTypes coreTypes, ClassHierarchy hierarchy) {
+void addEqualsOperator(Class cls, CoreTypes coreTypes, ClassHierarchy hierarchy,
+ List<VariableDeclaration> allVariables) {
for (Procedure procedure in cls.procedures) {
if (procedure.kind == ProcedureKind.Operator &&
procedure.name.name == "==") {
@@ -131,21 +134,8 @@
: coreTypes.boolLegacyRawType;
DartType myType = coreTypes.thisInterfaceType(cls, Nullability.nonNullable);
- Constructor superConstructor = null;
- for (Constructor constructor in cls.superclass.constructors) {
- if (constructor.name.name == "") {
- superConstructor = constructor;
- }
- }
VariableDeclaration other = VariableDeclaration("other",
type: coreTypes.objectRawType(Nullability.nonNullable));
- List<VariableDeclaration> allVariables = superConstructor
- .function.namedParameters
- .map<VariableDeclaration>(
- (f) => VariableDeclaration(f.name, type: f.type))
- .toList()
- ..addAll(cls.fields.map<VariableDeclaration>(
- (f) => VariableDeclaration(f.name.name, type: f.type)));
Map<VariableDeclaration, Member> targetsEquals = new Map();
Map<VariableDeclaration, Member> targets = new Map();
@@ -186,7 +176,8 @@
cls.addMember(equalsOperator);
}
-void addHashCode(Class cls, CoreTypes coreTypes, ClassHierarchy hierarchy) {
+void addHashCode(Class cls, CoreTypes coreTypes, ClassHierarchy hierarchy,
+ List<VariableDeclaration> allVariables) {
for (Procedure procedure in cls.procedures) {
if (procedure.kind == ProcedureKind.Getter &&
procedure.name.name == "hashCode") {
@@ -198,13 +189,6 @@
? coreTypes.intNonNullableRawType
: coreTypes.intLegacyRawType;
- Constructor superConstructor = null;
- for (Constructor constructor in cls.superclass.constructors) {
- if (constructor.name.name == "") {
- superConstructor = constructor;
- }
- }
-
Procedure hashCombine, hashFinish;
HashCombineMethodsScanner hashCombineMethodsScanner =
new HashCombineMethodsScanner();
@@ -219,14 +203,6 @@
}
}
- List<VariableDeclaration> allVariables = superConstructor
- .function.namedParameters
- .map<VariableDeclaration>(
- (f) => VariableDeclaration(f.name, type: f.type))
- .toList()
- ..addAll(cls.fields.map<VariableDeclaration>(
- (f) => VariableDeclaration(f.name.name, type: f.type)));
-
Map<VariableDeclaration, Member> targetsHashcode = new Map();
Map<VariableDeclaration, Member> targets = new Map();
for (VariableDeclaration variable in allVariables) {
@@ -269,17 +245,21 @@
..fileOffset = cls.fileOffset);
}
-/*
-void addCopyWith(Class cls) {
- Map<String, VariableDeclaration> environment = Map.fromIterable(cls.fields,
- key: (f) => f.name.name,
- value: (f) => VariableDeclaration(f.name.name, type: f.type));
-
- Constructor syntheticConstructor = null;
- for (Constructor constructor in cls.constructors) {
- if (constructor.isSynthetic) {
- syntheticConstructor = constructor;
+void addCopyWith(Class cls, CoreTypes coreTypes, ClassHierarchy hierarchy,
+ List<VariableDeclaration> allVariables, Constructor syntheticConstructor) {
+ Map<VariableDeclaration, Member> targetsEquals = new Map();
+ Map<VariableDeclaration, Member> targets = new Map();
+ for (VariableDeclaration variable in allVariables) {
+ Member target = coreTypes.objectEquals;
+ Member targetEquals = coreTypes.objectEquals;
+ DartType fieldsType = variable.type;
+ if (fieldsType is InterfaceType) {
+ targetEquals =
+ hierarchy.getInterfaceMember(fieldsType.classNode, Name("=="));
+ target = hierarchy.getInterfaceMember(cls, Name(variable.name));
}
+ targetsEquals[variable] = targetEquals;
+ targets[variable] = target;
}
cls.addMember(Procedure(
@@ -288,15 +268,26 @@
FunctionNode(
ReturnStatement(ConstructorInvocation(
syntheticConstructor,
- Arguments(cls.fields
- .map((f) => ConditionalExpression(
- MethodInvocation(VariableGet(environment[f.name.name]),
- Name('=='), Arguments([NullLiteral()])),
- PropertyGet(ThisExpression(), f.name, f),
- VariableGet(environment[f.name.name]),
- f.type))
- .toList()))),
- namedParameters:
- cls.fields.map((f) => environment[f.name.name]).toList())));
+ Arguments([],
+ named: allVariables
+ .map((f) => NamedExpression(f.name, VariableGet(f)))
+ .toList()))),
+ namedParameters: allVariables),
+ fileUri: cls.fileUri)
+ ..fileOffset = cls.fileOffset);
}
-*/
+
+List<VariableDeclaration> queryAllInstanceVariables(Class cls) {
+ Constructor superConstructor = null;
+ for (Constructor constructor in cls.superclass.constructors) {
+ if (constructor.name.name == "") {
+ superConstructor = constructor;
+ }
+ }
+ return superConstructor.function.namedParameters
+ .map<VariableDeclaration>(
+ (f) => VariableDeclaration(f.name, type: f.type))
+ .toList()
+ ..addAll(cls.fields.map<VariableDeclaration>(
+ (f) => VariableDeclaration(f.name.name, type: f.type)));
+}