view Lib/IMPL/Class/MemberInfo.pm @ 142:4c9849f0f879

minor changes
author wizard
date Wed, 07 Jul 2010 17:30:40 +0400
parents 44977efed303
children 6ce1f052b90a
line wrap: on
line source

package IMPL::Class::MemberInfo;
use strict;
use base qw(IMPL::Object::Accessor);

require IMPL::Exception;
require IMPL::Class::Member;

__PACKAGE__->mk_accessors(
    qw(
        Name
        Access
        Virtual
        Class
        Frozen
        Implementor
        Attributes
    )
);
__PACKAGE__->PassThroughArgs;

sub CTOR {
    my $this = shift;
    
    die new IMPL::Exception('The name is required for the member') unless $this->Name;
    die new IMPL::Exception('The class is required for the member') unless $this->Class;
    
    $this->Attributes({}) unless defined $this->Attributes;
    $this->Frozen(0);
    $this->Virtual(0) unless defined $this->Virtual;
    $this->Access(3) unless $this->Access;
}

sub Implement {
    my ($this) = @_;
    $this->Implementor->Make($this);
    $this->Frozen(1);
    $this->Class->set_meta($this);
    return;
}

#TODO: Debug version
#sub set {
#    my $this = shift;
#    if ($this->Frozen) {
#        die new IMPL::Exception('The member information is frozen', $this->Name);
#    }
#    $this->SUPER::set(@_);
#}

1;