diff Lib/IMPL/Class/MemberInfo.pm @ 0:03e58a454b20

Создан репозитарий
author Sergey
date Tue, 14 Jul 2009 12:54:37 +0400
parents
children 16ada169ca75
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Lib/IMPL/Class/MemberInfo.pm	Tue Jul 14 12:54:37 2009 +0400
@@ -0,0 +1,48 @@
+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->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;
+}
+
+sub set {
+    my $this = shift;
+    if ($this->Frozen) {
+        die new IMPL::Exception('The member information can\'t be modified', $this->Name);
+    }
+    $this->SUPER::set(@_);
+}
+
+1;