# HG changeset patch # User sergey # Date 1359983805 -14400 # Node ID af8af4b8337e1b7567de09d9c08aa9a49b0a5673 # Parent 4ddb27ff4a0b6e817f1deab7e388bef2af5ef3cb sync diff -r 4ddb27ff4a0b -r af8af4b8337e Lib/IMPL/Class/Meta.pm --- a/Lib/IMPL/Class/Meta.pm Mon Feb 04 02:10:37 2013 +0400 +++ b/Lib/IMPL/Class/Meta.pm Mon Feb 04 17:16:45 2013 +0400 @@ -1,7 +1,7 @@ package IMPL::Class::Meta; use strict; -use Carp qw(carp); +use Carp qw(carp confess); use IMPL::clone qw(clone); my %class_meta; @@ -9,11 +9,11 @@ sub SetMeta { my ($class,$meta_data) = @_; - $class = ref $class if ref $class; + $class = ref $class || $class; # тут нельзя использовать стандартное исключение, поскольку для него используется # класс IMPL::Object::Accessor, который наследуется от текущего класса - die "The meta_data parameter should be an object" if not ref $meta_data; + confess "The meta_data parameter should be an object" if not ref $meta_data; push @{$class_meta{$class}{ref $meta_data}},$meta_data; } diff -r 4ddb27ff4a0b -r af8af4b8337e Lib/IMPL/declare.pm --- a/Lib/IMPL/declare.pm Mon Feb 04 02:10:37 2013 +0400 +++ b/Lib/IMPL/declare.pm Mon Feb 04 17:16:45 2013 +0400 @@ -73,8 +73,12 @@ } } - *{"${caller}::CTOR"} = \%ctor; - *{"${caller}::ISA"} = \@isa; + %{"${caller}::CTOR"} = %ctor; + push @{"${caller}::ISA"}, @isa; + + if(ref($args->{meta}) eq 'ARRAY') { + $caller->SetMeta($_) foreach @{$args->{meta}}; + } my $props = $args->{props} || [];