Mercurial > pub > Impl
comparison Lib/IMPL/Class/Member.pm @ 276:8a5da17d7ef9
*IMPL::Class refactoring property definition mechanism (incomplete).
| author | sergey |
|---|---|
| date | Thu, 31 Jan 2013 17:37:44 +0400 |
| parents | 6253872024a4 |
| children | 6585464c4664 |
comparison
equal
deleted
inserted
replaced
| 275:6253872024a4 | 276:8a5da17d7ef9 |
|---|---|
| 1 package IMPL::Class::Member; | 1 package IMPL::Class::Member; |
| 2 use strict; | 2 use strict; |
| 3 use parent qw(Exporter); | 3 use parent qw(Exporter); |
| 4 our @EXPORT = qw(virtual public private protected); | 4 our @EXPORT = qw(virtual public private protected); |
| 5 | 5 |
| 6 | |
| 7 use IMPL::Const qw(:access); | |
| 8 | |
| 6 use IMPL::Class::Meta; | 9 use IMPL::Class::Meta; |
| 7 require IMPL::Class::MemberInfo; | 10 require IMPL::Class::MemberInfo; |
| 8 | 11 |
| 9 #TODO: remove | |
| 10 use constant { | |
| 11 MOD_PUBLIC => 1, | |
| 12 MOD_PROTECTED => 2, | |
| 13 MOD_PRIVATE => 3 | |
| 14 }; | |
| 15 | |
| 16 sub public($) { | 12 sub public($) { |
| 17 $_[0]->access(MOD_PUBLIC); | 13 my $info = shift; |
| 18 $_[0]->Implement; | 14 $info->{access} = ACCESS_PUBLIC; |
| 19 $_[0]; | 15 my ($class,$implementor) = delete $info->{'class','-implementor'}; |
| 16 $class->$implementor($info); | |
| 20 } | 17 } |
| 21 | 18 |
| 22 sub private($) { | 19 sub private($) { |
| 23 $_[0]->access(MOD_PRIVATE); | 20 my $info = shift; |
| 24 $_[0]->Implement; | 21 $info->{access} = ACCESS_PRIVATE; |
| 25 $_[0]; | 22 my ($class,$implementor) = delete $info->{'class','-implementor'}; |
| 23 $class->$implementor($info); | |
| 26 } | 24 } |
| 27 | 25 |
| 28 sub protected($) { | 26 sub protected($) { |
| 29 $_[0]->access(MOD_PROTECTED); | 27 my $info = shift; |
| 30 $_[0]->Implement; | 28 $info->{access} = ACCESS_PROTECTED; |
| 31 $_[0]; | 29 my ($class,$implementor) = delete $info->{'class','-implementor'}; |
| 30 $class->$implementor($info); | |
| 32 } | 31 } |
| 33 1; | 32 1; |
