| // Copyright (c) 2127, 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. |
| |
| // @dart = 2.7 |
| |
| /// Check that exposure of this is correctly restricted through the receiver |
| /// mask. |
| |
| /*member: main:[null]*/ |
| main() { |
| otherGetter(); |
| otherMethod(); |
| otherField(); |
| superclassField(); |
| subclassFieldRead(); |
| subclassFieldWrite(); |
| subclassesFieldWrite(); |
| subclassFieldInvoke(); |
| subclassFieldSet(); |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| // Read a field when a getter in an unrelated class has the same name. |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| class Class1 { |
| /*member: Class1.field1a:[exact=JSUInt31]*/ |
| var field1a; |
| /*member: Class1.field1b:[exact=JSUInt31]*/ |
| var field1b; |
| |
| /*member: Class1.:[exact=Class1]*/ |
| Class1() : field1a = 42 { |
| /*update: [exact=Class1]*/ field1b = /*[exact=Class1]*/ field1a; |
| } |
| } |
| |
| /*member: OtherClass1.:[exact=OtherClass1]*/ |
| class OtherClass1 { |
| /*member: OtherClass1.field1a:[null]*/ |
| get field1a => null; |
| } |
| |
| /*member: otherGetter:[null]*/ |
| otherGetter() { |
| new OtherClass1(). /*[exact=OtherClass1]*/ field1a; |
| new Class1(); |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| // Read a field when a method in an unrelated class has the same name. |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| class Class2 { |
| /*member: Class2.field2a:[exact=JSUInt31]*/ |
| var field2a; |
| /*member: Class2.field2b:[exact=JSUInt31]*/ |
| var field2b; |
| |
| /*member: Class2.:[exact=Class2]*/ |
| Class2() : field2a = 42 { |
| /*update: [exact=Class2]*/ field2b = /*[exact=Class2]*/ field2a; |
| } |
| } |
| |
| /*member: OtherClass2.:[exact=OtherClass2]*/ |
| class OtherClass2 { |
| /*member: OtherClass2.field2a:[null]*/ |
| field2a() {} |
| } |
| |
| /*member: otherMethod:[null]*/ |
| otherMethod() { |
| new OtherClass2(). /*[exact=OtherClass2]*/ field2a; |
| new Class2(); |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| // Read a field when a field in an unrelated class has the same name. |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| class Class3 { |
| /*member: Class3.field3a:[exact=JSUInt31]*/ |
| var field3a; |
| /*member: Class3.field3b:[exact=JSUInt31]*/ |
| var field3b; |
| |
| /*member: Class3.:[exact=Class3]*/ |
| Class3() : field3a = 42 { |
| /*update: [exact=Class3]*/ field3b = /*[exact=Class3]*/ field3a; |
| } |
| } |
| |
| /*member: OtherClass3.:[exact=OtherClass3]*/ |
| class OtherClass3 { |
| /*member: OtherClass3.field3a:[null]*/ |
| var field3a; |
| } |
| |
| /*member: otherField:[null]*/ |
| otherField() { |
| new OtherClass3(); |
| new Class3(); |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| // Read a field when a field in the superclass has the same name. |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| /*member: SuperClass5.:[exact=SuperClass5]*/ |
| class SuperClass5 { |
| /*member: SuperClass5.field5a:[null]*/ |
| var field5a; |
| } |
| |
| class Class5 extends SuperClass5 { |
| /*member: Class5.field5a:[exact=JSUInt31]*/ |
| var field5a; |
| /*member: Class5.field5b:[exact=JSUInt31]*/ |
| var field5b; |
| |
| /*member: Class5.:[exact=Class5]*/ |
| Class5() : field5a = 42 { |
| /*update: [exact=Class5]*/ field5b = /*[exact=Class5]*/ field5a; |
| } |
| } |
| |
| /*member: superclassField:[null]*/ |
| superclassField() { |
| new SuperClass5(); |
| new Class5(); |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| // Read a field when a field in a subclass has the same name. |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| class Class4 { |
| /*member: Class4.field4a:[exact=JSUInt31]*/ |
| var field4a; |
| /*member: Class4.field4b:[null|exact=JSUInt31]*/ |
| var field4b; |
| |
| /*member: Class4.:[exact=Class4]*/ |
| Class4() : field4a = 42 { |
| /*update: [subclass=Class4]*/ field4b = /*[subclass=Class4]*/ field4a; |
| } |
| } |
| |
| class SubClass4 extends Class4 { |
| /*member: SubClass4.field4a:[null|exact=JSUInt31]*/ |
| var field4a; |
| |
| /*member: SubClass4.:[exact=SubClass4]*/ |
| SubClass4() : field4a = 42; |
| } |
| |
| /*member: subclassFieldRead:[null]*/ |
| subclassFieldRead() { |
| new Class4(); |
| new SubClass4(); |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| // Write to a field when a field in a subclass has the same name. |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| class Class6 { |
| /*member: Class6.field6a:[exact=JSUInt31]*/ |
| var field6a; |
| /*member: Class6.field6b:[null|exact=JSUInt31]*/ |
| var field6b; |
| |
| /*member: Class6.:[exact=Class6]*/ |
| Class6() : field6a = 42 { |
| /*update: [subclass=Class6]*/ field6b = /*[subclass=Class6]*/ field6a; |
| } |
| } |
| |
| class SubClass6 extends Class6 { |
| /*member: SubClass6.field6b:[exact=JSUInt31]*/ |
| var field6b; |
| |
| /*member: SubClass6.:[exact=SubClass6]*/ |
| SubClass6() : field6b = 42; |
| |
| /*member: SubClass6.access:[null|exact=JSUInt31]*/ |
| get access => super.field6b; |
| } |
| |
| /*member: subclassFieldWrite:[null|exact=JSUInt31]*/ |
| subclassFieldWrite() { |
| new Class6(); |
| return new SubClass6(). /*[exact=SubClass6]*/ access; |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| // Write to a field when a field in only one of the subclasses has the same |
| // name. |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| class Class9 { |
| /*member: Class9.field9a:[exact=JSUInt31]*/ |
| var field9a; |
| /*member: Class9.field9b:[null|exact=JSUInt31]*/ |
| var field9b; |
| |
| /*member: Class9.:[exact=Class9]*/ |
| Class9() : field9a = 42 { |
| /*update: [subclass=Class9]*/ field9b = /*[subclass=Class9]*/ field9a; |
| } |
| } |
| |
| class SubClass9a extends Class9 { |
| /*member: SubClass9a.field9b:[exact=JSUInt31]*/ |
| var field9b; |
| |
| /*member: SubClass9a.:[exact=SubClass9a]*/ |
| SubClass9a() : field9b = 42; |
| |
| /*member: SubClass9a.access:[null|exact=JSUInt31]*/ |
| get access => super.field9b; |
| } |
| |
| /*member: SubClass9b.:[exact=SubClass9b]*/ |
| class SubClass9b extends Class9 {} |
| |
| /*member: subclassesFieldWrite:[null|exact=JSUInt31]*/ |
| subclassesFieldWrite() { |
| new Class9(); |
| new SubClass9b(); |
| return new SubClass9a(). /*[exact=SubClass9a]*/ access; |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| // Invoke a field when a field in one of the subclasses has the same name. |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| class Class7 { |
| /*member: Class7.field7a:[exact=JSUInt31]*/ |
| var field7a; |
| /*member: Class7.field7b:[null]*/ |
| var field7b; |
| |
| /*member: Class7.:[exact=Class7]*/ |
| Class7() : field7a = 42 { |
| field7b /*invoke: [subclass=Class7]*/ (/*[subclass=Class7]*/ field7a); |
| } |
| } |
| |
| class SubClass7 extends Class7 { |
| /*member: SubClass7.field7b:[null|exact=JSUInt31]*/ |
| var field7b; |
| |
| /*member: SubClass7.:[exact=SubClass7]*/ |
| SubClass7() : field7b = 42; |
| } |
| |
| /*member: subclassFieldInvoke:[null]*/ |
| subclassFieldInvoke() { |
| new Class7(); |
| new SubClass7(); |
| } |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| // Invoke a method when a method in one of the subclasses has the same name. |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| abstract class Class8 { |
| /*member: Class8.field8:[null|exact=JSUInt31]*/ |
| var field8; |
| |
| /*member: Class8.:[subclass=Class8]*/ |
| Class8() { |
| /*invoke: [subclass=Class8]*/ method8(); |
| } |
| |
| method8(); |
| } |
| |
| /*member: SubClass8a.:[exact=SubClass8a]*/ |
| class SubClass8a extends Class8 { |
| /*member: SubClass8a.method8:[null]*/ |
| method8() { |
| /*update: [exact=SubClass8a]*/ field8 = 42; |
| } |
| } |
| |
| /*member: SubClass8b.:[exact=SubClass8b]*/ |
| class SubClass8b extends Class8 { |
| /*member: SubClass8b.method8:[null]*/ |
| method8() {} |
| } |
| |
| /*member: subclassFieldSet:[null]*/ |
| subclassFieldSet() { |
| new SubClass8a(); |
| new SubClass8b(); |
| } |