1f2a19305Safresh1__END__ 2f2a19305Safresh1# Method calls on no args 3f2a19305Safresh1no warnings 'experimental::class'; 4f2a19305Safresh1use feature 'class'; 5f2a19305Safresh1class XXX { method m { } } 6f2a19305Safresh1XXX::m() 7f2a19305Safresh1EXPECT 8f2a19305Safresh1Cannot invoke method "m" on a non-instance at - line 5. 9f2a19305Safresh1######## 10f2a19305Safresh1# Method calls on non-ref 11f2a19305Safresh1no warnings 'experimental::class'; 12f2a19305Safresh1use feature 'class'; 13f2a19305Safresh1class XXX { method m { } } 14f2a19305Safresh1XXX::m(123) 15f2a19305Safresh1EXPECT 16f2a19305Safresh1Cannot invoke method "m" on a non-instance at - line 5. 17f2a19305Safresh1######## 18f2a19305Safresh1# Method calls on non-object 19f2a19305Safresh1no warnings 'experimental::class'; 20f2a19305Safresh1use feature 'class'; 21f2a19305Safresh1class XXX { method m { } } 22f2a19305Safresh1XXX::m([]) 23f2a19305Safresh1EXPECT 24f2a19305Safresh1Cannot invoke method "m" on a non-instance at - line 5. 25f2a19305Safresh1######## 26f2a19305Safresh1# Method calls from a different class 27f2a19305Safresh1no warnings 'experimental::class'; 28f2a19305Safresh1use feature 'class'; 29f2a19305Safresh1class XXX { method m { } } 30f2a19305Safresh1class YYY {} 31f2a19305Safresh1YYY->new->XXX::m(); 32f2a19305Safresh1EXPECT 33f2a19305Safresh1Cannot invoke a method of "XXX" on an instance of "YYY" at - line 6. 34f2a19305Safresh1######## 35f2a19305Safresh1no warnings 'experimental::class'; 36f2a19305Safresh1use feature 'class'; 37f2a19305Safresh1class XXX {} 38f2a19305Safresh1bless [], "XXX"; 39f2a19305Safresh1EXPECT 40f2a19305Safresh1Attempt to bless into a class at - line 4. 41f2a19305Safresh1######## 42f2a19305Safresh1no warnings 'experimental::class'; 43f2a19305Safresh1use feature 'class'; 44f2a19305Safresh1class XXX {} 45f2a19305Safresh1bless(XXX->new, "main"); 46f2a19305Safresh1EXPECT 47f2a19305Safresh1Can't bless an object reference at - line 4. 48f2a19305Safresh1######## 49f2a19305Safresh1no warnings 'experimental::class'; 50f2a19305Safresh1use feature 'class'; 51f2a19305Safresh1class XXX { field $zz; $zz = 123; } 52f2a19305Safresh1EXPECT 53f2a19305Safresh1Field $zz is not accessible outside a method at - line 3. 54f2a19305Safresh1######## 55f2a19305Safresh1no warnings 'experimental::class'; 56f2a19305Safresh1use feature 'class'; 57f2a19305Safresh1class XXX { field $x; sub f { print $x } } 58f2a19305Safresh1EXPECT 59f2a19305Safresh1Field $x is not accessible outside a method at - line 3. 60f2a19305Safresh1######## 61f2a19305Safresh1no warnings 'experimental::class'; 62f2a19305Safresh1use feature 'class'; 63f2a19305Safresh1class XXX { 64f2a19305Safresh1 field $x; 65f2a19305Safresh1 class YYY { method m { print $x } } 66f2a19305Safresh1} 67f2a19305Safresh1EXPECT 68f2a19305Safresh1Field $x of "XXX" is not accessible in a method of "YYY" at - line 5. 69f2a19305Safresh1######## 70f2a19305Safresh1no warnings 'experimental::class'; 71f2a19305Safresh1use feature 'class'; 72f2a19305Safresh1class XXX {} 73f2a19305Safresh1class XXX {} 74f2a19305Safresh1EXPECT 75f2a19305Safresh1Cannot reopen existing class "XXX" at - line 4. 76f2a19305Safresh1######## 77f2a19305Safresh1no warnings 'experimental::class'; 78f2a19305Safresh1use feature 'class'; 79f2a19305Safresh1class XXX {} 80f2a19305Safresh1push @XXX::ISA, q(Another); 81f2a19305Safresh1EXPECT 82f2a19305Safresh1Modification of a read-only value attempted at - line 4. 83f2a19305Safresh1######## 84f2a19305Safresh1no warnings 'experimental::class'; 85f2a19305Safresh1use feature 'class'; 86f2a19305Safresh1BEGIN { push @XXX::ISA, q(Another); } 87f2a19305Safresh1class XXX {} 88f2a19305Safresh1EXPECT 89f2a19305Safresh1Cannot create class XXX as it already has a non-empty @ISA at - line 4. 90f2a19305Safresh1######## 91f2a19305Safresh1use strict; 92f2a19305Safresh1no warnings 'experimental::class'; 93f2a19305Safresh1use feature 'class'; 94f2a19305Safresh1class XXX { 95f2a19305Safresh1 field $x = $self + 1; 96f2a19305Safresh1} 97f2a19305Safresh1EXPECT 98f2a19305Safresh1Global symbol "$self" requires explicit package name (did you forget to declare "my $self"?) at - line 5. 99f2a19305Safresh1Execution of - aborted due to compilation errors. 100f2a19305Safresh1######## 101*5486feefSafresh1# This test is known to leak: see GH #20812. 102f2a19305Safresh1no warnings 'experimental::class'; 103f2a19305Safresh1use feature 'class'; 104f2a19305Safresh1class XXX { 105f2a19305Safresh1 field $x = last; 106f2a19305Safresh1} 107f2a19305Safresh1EXPECT 108f2a19305Safresh1Can't "last" out of field initialiser expression at - line 5. 109f2a19305Safresh1######## 110f2a19305Safresh1use strict; 111f2a19305Safresh1no warnings 'experimental::class'; 112f2a19305Safresh1use feature 'class'; 113f2a19305Safresh1class XXX { 114f2a19305Safresh1 field $x :param(p); 115f2a19305Safresh1 field $y :param(p); 116f2a19305Safresh1} 117f2a19305Safresh1EXPECT 118f2a19305Safresh1Cannot assign :param(p) to field $y because that name is already in use at - line 6. 119f2a19305Safresh1######## 120f2a19305Safresh1use strict; 121f2a19305Safresh1no warnings 'experimental::class'; 122f2a19305Safresh1use feature 'class'; 123f2a19305Safresh1class XXX { 124f2a19305Safresh1 field $x :param(p); 125f2a19305Safresh1} 126f2a19305Safresh1class YYY :isa(XXX) { 127f2a19305Safresh1 field $y :param(p); 128f2a19305Safresh1} 129f2a19305Safresh1EXPECT 130f2a19305Safresh1Cannot assign :param(p) to field $y because that name is already in use at - line 8. 131*5486feefSafresh1######## 132*5486feefSafresh1use strict; 133*5486feefSafresh1no warnings 'experimental::class'; 134*5486feefSafresh1use feature 'class'; 135*5486feefSafresh1class XXX { 136*5486feefSafresh1 my $classname = __CLASS__; 137*5486feefSafresh1} 138*5486feefSafresh1EXPECT 139*5486feefSafresh1Cannot use __CLASS__ outside of a method or field initializer expression at - line 5. 140*5486feefSafresh1######## 141*5486feefSafresh1# NAME try to create an object of incomplete class (error) 142*5486feefSafresh1use v5.36; 143*5486feefSafresh1use feature 'class'; 144*5486feefSafresh1no warnings 'experimental::class'; 145*5486feefSafresh1eval "class C {"; 146*5486feefSafresh1C->new; 147*5486feefSafresh1EXPECT 148*5486feefSafresh1Cannot create an object of incomplete class "C" at - line 5. 149*5486feefSafresh1######## 150*5486feefSafresh1# NAME try to create an object of incomplete class (compile-time) 151*5486feefSafresh1use v5.36; 152*5486feefSafresh1use feature 'class'; 153*5486feefSafresh1no warnings 'experimental::class'; 154*5486feefSafresh1class C { BEGIN { C->new; } }; 155*5486feefSafresh1EXPECT 156*5486feefSafresh1Cannot create an object of incomplete class "C" at - line 4. 157*5486feefSafresh1BEGIN failed--compilation aborted at - line 4. 158