metaattr-0.1/0040775000175200017560000000000007653661705013474 5ustar stephensstephensmetaattr-0.1/src/0040775000175200017560000000000007653661705014263 5ustar stephensstephensmetaattr-0.1/src/metaattr/0042775000175200017560000000000007402126032016063 5ustar stephensstephensmetaattr-0.1/src/metaattr/CVS/0042775000175200017560000000000007436761064016537 5ustar stephensstephensmetaattr-0.1/src/metaattr/CVS/Entries0100644000175200017560000000007107402126033020042 0ustar stephensstephensD/lib//// D/test//// /PKG/1.1/Sat Dec 1 10:08:26 2001// metaattr-0.1/src/metaattr/CVS/Root0100664000175200017560000000006107336072171017366 0ustar stephensstephens:ext:stephens@cvs.ionink.com:/cvs/ioncvs/cvsroot metaattr-0.1/src/metaattr/CVS/Repository0100664000175200017560000000002607325775505020634 0ustar stephensstephenshome/ion/src/metaattr metaattr-0.1/src/metaattr/lib/0042775000175200017560000000000007411225327016640 5ustar stephensstephensmetaattr-0.1/src/metaattr/lib/CVS/0042775000175200017560000000000007436761065017306 5ustar stephensstephensmetaattr-0.1/src/metaattr/lib/CVS/Root0100664000175200017560000000006107336072171020134 0ustar stephensstephens:ext:stephens@cvs.ionink.com:/cvs/ioncvs/cvsroot metaattr-0.1/src/metaattr/lib/CVS/Repository0100664000175200017560000000003207325775505021377 0ustar stephensstephenshome/ion/src/metaattr/lib metaattr-0.1/src/metaattr/lib/CVS/Entries0100664000175200017560000000001307325775505020630 0ustar stephensstephensD/perl//// metaattr-0.1/src/metaattr/lib/perl/0042775000175200017560000000000007436557622017617 5ustar stephensstephensmetaattr-0.1/src/metaattr/lib/perl/CVS/0042775000175200017560000000000007436766120020245 5ustar stephensstephensmetaattr-0.1/src/metaattr/lib/perl/CVS/Root0100664000175200017560000000006107336072171021076 0ustar stephensstephens:ext:stephens@cvs.ionink.com:/cvs/ioncvs/cvsroot metaattr-0.1/src/metaattr/lib/perl/CVS/Repository0100664000175200017560000000003707325775505022346 0ustar stephensstephenshome/ion/src/metaattr/lib/perl metaattr-0.1/src/metaattr/lib/perl/CVS/Entries0100644000175200017560000000007307436766120021572 0ustar stephensstephensD/MetaAttr//// /MetaAttr.pm/1.4/Tue Feb 26 01:06:26 2002// metaattr-0.1/src/metaattr/lib/perl/MetaAttr/0042775000175200017560000000000007460727144021333 5ustar stephensstephensmetaattr-0.1/src/metaattr/lib/perl/MetaAttr/CVS/0042775000175200017560000000000007460727144021766 5ustar stephensstephensmetaattr-0.1/src/metaattr/lib/perl/MetaAttr/CVS/Entries0100644000175200017560000000026407460727144023315 0ustar stephensstephensD/Meta//// /Method.pm/1.6/Tue Feb 26 01:10:26 2002// /Attribute.pm/1.9/Mon Apr 1 16:37:53 2002// /Base.pm/1.9/Mon Apr 22 06:36:59 2002// /Class.pm/1.14/Mon Apr 22 06:36:59 2002// metaattr-0.1/src/metaattr/lib/perl/MetaAttr/CVS/Root0100664000175200017560000000006107336072171022617 0ustar stephensstephens:ext:stephens@cvs.ionink.com:/cvs/ioncvs/cvsroot metaattr-0.1/src/metaattr/lib/perl/MetaAttr/CVS/Repository0100664000175200017560000000005007436761102024051 0ustar stephensstephenshome/ion/src/metaattr/lib/perl/MetaAttr metaattr-0.1/src/metaattr/lib/perl/MetaAttr/Meta/0042775000175200017560000000000007460727144022221 5ustar stephensstephensmetaattr-0.1/src/metaattr/lib/perl/MetaAttr/Meta/CVS/0042775000175200017560000000000007460727144022654 5ustar stephensstephensmetaattr-0.1/src/metaattr/lib/perl/MetaAttr/Meta/CVS/Root0100664000175200017560000000006107336072171023505 0ustar stephensstephens:ext:stephens@cvs.ionink.com:/cvs/ioncvs/cvsroot metaattr-0.1/src/metaattr/lib/perl/MetaAttr/Meta/CVS/Entries0100644000175200017560000000163207460727144024203 0ustar stephensstephensD/Stored//// /Base.pm/1.3/Tue Feb 26 20:17:41 2002// /Blessed_arrayindex.pm/1.2/Tue Feb 26 01:12:52 2002// /Blessed_hash.pm/1.2/Tue Feb 26 01:13:38 2002// /Capability.pm/1.4/Tue Feb 26 01:14:33 2002// /Debug.pm/1.5/Tue Feb 26 01:15:42 2002// /Getter.pm/1.9/Tue Feb 26 20:17:41 2002// /Setter.pm/1.7/Tue Feb 26 20:17:41 2002// /Ui.pm/1.3/Tue Feb 26 01:27:27 2002// /Use.pm/1.2/Tue Feb 26 01:28:04 2002// /Valid.pm/1.7/Tue Feb 26 20:17:41 2002// /Validset.pm/1.3/Tue Feb 26 20:17:41 2002// /Category.pm/1.3/Mon Apr 1 16:49:57 2002// /Default.pm/1.5/Fri Mar 22 00:41:15 2002// /Desc.pm/1.3/Fri Mar 22 00:41:39 2002// /Memory_model.pm/1.5/Fri Mar 22 00:42:16 2002// /Setonce.pm/1.5/Fri Mar 22 00:42:39 2002// /Storage.pm/1.4/Mon Apr 22 06:36:59 2002// /Stored.pm/1.12/Mon Apr 22 06:36:59 2002// /Superclass.pm/1.7/Thu Mar 28 16:57:40 2002// /Tiedhash.pm/1.3/Fri Mar 22 00:43:55 2002// /Type.pm/1.4/Thu Mar 28 17:55:32 2002// metaattr-0.1/src/metaattr/lib/perl/MetaAttr/Meta/CVS/Repository0100664000175200017560000000005507436761121024745 0ustar stephensstephenshome/ion/src/metaattr/lib/perl/MetaAttr/Meta metaattr-0.1/src/metaattr/lib/perl/MetaAttr/Meta/Stored/0042775000175200017560000000000007460727144023461 5ustar stephensstephensmetaattr-0.1/src/metaattr/lib/perl/MetaAttr/Meta/Stored/CVS/0042775000175200017560000000000007460727144024114 5ustar stephensstephensmetaattr-0.1/src/metaattr/lib/perl/MetaAttr/Meta/Stored/CVS/Repository0100664000175200017560000000006407436761140026206 0ustar stephensstephenshome/ion/src/metaattr/lib/perl/MetaAttr/Meta/Stored metaattr-0.1/src/metaattr/lib/perl/MetaAttr/Meta/Stored/CVS/Root0100664000175200017560000000006107336072171024745 0ustar stephensstephens:ext:stephens@cvs.ionink.com:/cvs/ioncvs/cvsroot metaattr-0.1/src/metaattr/lib/perl/MetaAttr/Meta/Stored/CVS/Entries0100644000175200017560000000006107460727144025436 0ustar stephensstephens/Transaction.pm/1.5/Mon Apr 22 06:36:59 2002// D metaattr-0.1/src/metaattr/lib/perl/MetaAttr/Meta/Stored/Transaction.pm0100644000175200017560000000061707460727613026302 0ustar stephensstephens package MetaAttr::Meta::Stored::Transaction; use strict; our $VERSION = do { my @r = (q$Revision: 1.5 $ =~ /\d+/g); sprintf "%d." . "%02d" x $#r, @r }; ################################################### our $current = __PACKAGE__; sub current { $current; } sub attribute_changed { my ($self, $obj, $attr, $old_value) = @_; print STDERR "TRANSACTION:\t$obj\t$attr\tchanged\n"; } 1; metaattr-0.1/src/metaattr/lib/perl/MetaAttr/Meta/Storage.pm0100644000175200017560000000150307460727613024154 0ustar stephensstephens#!/usr/local/bin/perl ####################################################### package MetaAttr::Meta::Storage; use strict; use warnings; our $VERSION = do { my @r = (q$Revision: 1.4 $ =~ /\d+/g); sprintf "%d." . "%02d" x $#r, @r }; use MetaAttr::Meta::Base; our @ISA = qw(MetaAttr::Meta::Base); use Carp qw(cluck); sub new { my $cls = ref $_[0] ? ref shift : shift; unshift(@_, 'type') if ( @_ & 1 ); my $self = { @_ }; bless $self, $cls; $self; } sub visit { my ($self, $obj, $cntx) = @_; if ( $cntx eq 'attribute' ) { #$DB::single = 1; cluck "Attribute '$obj->{name}' already has storage meta" if $obj->{'storage_meta'}; $obj->{'storage_meta'} = $self; $self->{'storage_attribute'} = $obj; } } sub generate { my ($self, $obj, $cntx) = @_; if ( $cntx eq 'attribute' ) { } } 1; metaattr-0.1/src/metaattr/lib/perl/MetaAttr/Meta/Base.pm0100644000175200017560000000100507436766545023431 0ustar stephensstephens ################################################### package MetaAttr::Meta::Base; use MetaAttr::Base; @ISA = qw(MetaAttr::Base); use strict; our $debug; our $VERSION = do { my @r = (q$Revision: 1.3 $ =~ /\d+/g); sprintf "%d." . "%02d" x $#r, @r }; sub metatype { 'meta'; } sub add_to_class { my ($self, $obj) = @_; $obj->add_meta($self); } sub add_to_attribute { my ($self, $obj) = @_; $obj->add_meta($self); } sub add_to_method { my ($self, $obj) = @_; $obj->add_meta($self); } 1; metaattr-0.1/src/metaattr/lib/perl/MetaAttr/Meta/Getter.pm0100644000175200017560000000517407436766545024024 0ustar stephensstephens#!/usr/local/bin/perl ##################################################### package MetaAttr::Meta::Getter; use strict; our $VERSION = do { my @r = (q$Revision: 1.9 $ =~ /\d+/g); sprintf "%d." . "%02d" x $#r, @r }; use MetaAttr::Meta::Base; our @ISA = qw(MetaAttr::Meta::Base); use MetaAttr::Method; use Carp; sub new { my $cls = ref $_[0] ? ref shift : shift; my $self = { @_ }; bless $self, $cls; $self->initialize(); } sub initialize { my $self = shift; # $self->SUPER::initialize(); $self; } sub getter_method_name { my ($self, $name) = @_; $name; } sub initializer_method_name { my ($self, $name) = @_; "__ma_init_${name}"; } sub visit { my ($self, $obj, $cntx) = @_; if ( $cntx eq 'attribute' ) { # $DB::single = $obj->name eq 'desc'; my $a = $obj->name(); my $r = $obj->ref_str(); #print STDERR "$obj ref_str = '$r'\n"; my $m; confess "UGH" if $self->{'getter_method'}; confess "UGH" if $self->{'initializer_method'}; if ( $self->{'getter_method_name'} && ! $self->{'initializer_method_name'} ) { $self->{'initializer_method_name'} = $self->initializer_method_name($self->{'getter_method_name'}); } ############################## $m = undef; if ( $self->{'getter_method_name'} ) { my $mn = $self->{'getter_method_name'}; $m = MetaAttr::Method->new($self->getter_method_name($a), qq{ # Get value by method. \$_[0]->$mn(\@_);}); } if ( ! $m ) { # Create a getter method. $m = MetaAttr::Method->new($self->getter_method_name($a), qq{ # Get value from attribute. $r;}); } # Add the method. $obj->add_method($m); # Method attribute is a getter of this meta-attribute. $m->{'getter_meta'} = $self; # Method for this meta. $self->{'getter_method'} = $m; $obj->{'getter_method'} = $m; ############################## $m = undef; if ( $self->{'initializer_method_name'} ) { my $mn = $self->{'initializer_method_name'}; $m = MetaAttr::Method->new($self->initializer_method_name($a), qq{ # Get initialize by method. \$_[0]->$mn(\$_[1]);}); } if ( ! $m ) { # Create an initializer method. $m = MetaAttr::Method->new($self->initializer_method_name($a), qq{ # Initialize attribute. $r = \$_[1];}); } # Add the method. $obj->add_method($m); # Method attribute is a getter of this meta-attribute. $m->{'initializer_meta'} = $self; # Method for this meta. $self->{'initializer_method'} = $m; $obj->{'initializer_method'} = $m; ############################## } } 1; metaattr-0.1/src/metaattr/lib/perl/MetaAttr/Meta/Setter.pm0100644000175200017560000000314507436766545024034 0ustar stephensstephens#!/usr/local/bin/perl ################################################### package MetaAttr::Meta::Setter; use strict; our $VERSION = do { my @r = (q$Revision: 1.7 $ =~ /\d+/g); sprintf "%d." . "%02d" x $#r, @r }; use MetaAttr::Meta::Getter; our @ISA=qw(MetaAttr::Meta::Getter); use MetaAttr::Method; use Carp; sub initialize { my $self = shift; $self->SUPER::initialize(); $self; } sub setter_method_name { my ($self, $name) = @_; "set_$name"; } sub visit { my ($self, $obj, $cntx) = @_; if ( $cntx eq 'attribute' ) { $self->{'initializer_method_name'} ||= $self->{'setter_method_name'} if ( $self->{'setter_method_name'} ); } $self->SUPER::visit($obj, $cntx); if ( $cntx eq 'attribute' ) { my $a = $obj->name(); my $r = $obj->ref_str(); # Create a setter method. my $m; confess "UGH" if $self->{'setter_method'}; ####################################### # If a setter_method is named, use it. $m = undef; if ( $self->{'setter_method_name'} ) { my $mn = $self->{'setter_method_name'}; $m = MetaAttr::Method->new($self->setter_method_name($a), qq{ # Set value by method. \$_[0]->$mn(\@_);}); } if ( ! $m ) { $m = MetaAttr::Method->new($self->setter_method_name($a), qq{ # Set value for attribute. $r = \$_[1]; }); } # Add a method to the attribute object. $obj->add_method($m); # what is this method setting? $m->{'setter_meta'} = $self; # what setter method is assocated with this meta? $self->{'setter_method'} = $m; $obj->{'setter_method'} = $m; } } 1; metaattr-0.1/src/metaattr/lib/perl/MetaAttr/Meta/Stored.pm0100644000175200017560000001276107460727613024020 0ustar stephensstephens#!/usr/local/bin/perl ################################################### package MetaAttr::Meta::Stored; use strict; our $VERSION = do { my @r = (q$Revision: 1.12 $ =~ /\d+/g); sprintf "%d." . "%02d" x $#r, @r }; use MetaAttr::Meta::Base; our @ISA = qw(MetaAttr::Meta::Base); ################################################### use MetaAttr::Meta::Stored::Transaction; use Data::Dumper; sub new { my $cls = ref $_[0] ? ref shift : shift; # Handle option hash @_ = %{$_[0]} if ( ref($_[0]) eq 'HASH' ); # Handle type name. unshift(@_, 'type') if ( @_ & 1 ); my $self = { @_ }; #print STDERR Dumper($self); (bless $self, $cls)->defaults->initialize; } sub defaults { my ($self) = @_; $self->{'store'} ||= ''; $self; } sub initialize { my ($self) = @_; $self; } sub type { shift->{'type'}; } sub set_type { $_[0]->{'type'} = $_[1]; } sub visit { my ($self, $obj, $cntx) = @_; if ( $cntx eq 'attribute' || $cntx eq 'class' ) { $obj->{'stored_meta'} = $self; $obj->add_meta($self); } } sub generate { my ($self, $obj, $cntx) = @_; if ( $cntx eq 'attribute' ) { # $DB::single = 1; # Get attribute name. my $n = $obj->name(); my $store = $self->{'store'}; for my $setter ( map($obj->{"${_}_method"}, 'setter', 'adder') ) { # $obj->class->emit('use', 'MetaAttr::Meta::Stored::Transaction'); if ( $setter ) { my $attr = $setter->{'attribute'}; #$DB::single = 1; my $attr_ref = $attr->ref_str; $setter->emit('beg_body', qq{ # Notify transaction of change. MetaAttr::Meta::Stored::Transaction->current->attribute_changed(\$_[0], '$n', $attr_ref, '$store') if $attr_ref ne \$_[1]; }); } } } } ################################################ # Tangram support. my %tangram_type_map = ( 'boolean' => 'int', 'datetime' => 'dmdatetime', 'str' => 'string', #'hash' => ' #'string' => 'varchar(255)', ); my %tangram_type_meta_map = ( 'hash' => 'flat_hash', 'array' => 'flat_array', 'ref_array' => 'iarray', 'iarray' => 'iarray', ); sub tangram_table_name { my ($self, $c, $opts) = @_; $c = $c->metaclass if ( ! ref($c) ); my $table_name; my $v; # Get table name. if ( ($v = $c->{'stored_meta'}) && ($v = $v->{'table_name'}) ) { $table_name = $v; } if ( ! $table_name ) { # Normalize table name from class package name. if ( $opts->{'table_name_filter'} ) { $table_name = $opts->{'table_name_filter'}->($c); } else { $table_name = $c->name; $table_name =~ s/::/:/sg; $table_name =~ s/.*::// if ( $opts->{'no_package_path_in_table_name'} ); $table_name =~ s/[^a-z_0-9]/_/sgi; } } $table_name; } sub tangram_schema { my ($self, $classes, $schema, $opts) = @_; $schema ||= { }; # IMPLEMENT: use log base 10 to compute this based on the number of classes. $schema->{'sql'}{'cid_size'} = 3; #$schema->{'class_table'} = 'Class'; for my $c ( @$classes ) { my $v; # warn "Class $c->{name}"; my $table_name = $self->tangram_table_name($c, $opts); # Use normalize to fix table names. $schema->{'normalize'} ||= sub { $_[1] eq 'tablename' ? $self->tangram_table_name($_[0], $opts) : $_[0]; }; $schema->{'classes'}{$c->name} ||= { }; $schema->{'classes'}{$c->name}{'table'} ||= $table_name; my $sc = $schema->{'classes'}{$c->name}; # Is it abstract? if ( ($v = $c->{'stored_meta'}) && ($v = $v->{'abstract'}) ) { $sc->{'abstract'} = $v; } # Base classes. if ( $c->superclass ) { $sc->{'bases'} = [ map($_->pkg, $c->superclass) ]; } else { # Tangram bug?? $sc->{'bases'} = [ ]; } # Do each attribute that is stored. for my $a ( $c->attributes ) { # warn "Class $c->{name} Attribute $a->{name}"; my $meta; if ( $meta = $a->{'stored_meta'} ) { # Default type to string. my $mt = $meta->{'type'}; # If the attribute has a 'type' meta, # use it for storage type information. if ( ! $mt and $a->{'type_meta'} ) { $mt = $a->{'type_meta'}->type; $mt = $tangram_type_meta_map{$mt} if ( ! $meta->{'class'} and $tangram_type_meta_map{$mt} ); } else { $mt ||= 'string'; # Map stored meta stored type names to Tangram type names. $mt = $tangram_type_map{$mt} if ( $tangram_type_map{$mt} ); } # Make it an iarray if a element class is specified. $mt = 'iarray' if ( $mt eq 'array' && defined $meta->{'class'} ); my $def; my $an = $a->name; # Handle aggregate type options. if ( grep($mt eq $_, 'iarray', 'array', 'hash') ) { $def = { }; %$def = ( map(($_, $meta->{$_}), grep(defined $meta->{$_}, 'class', 'table', 'aggreg', 'deep_update' ) ) ); # Default table name. $def->{'table'} = "${table_name}_${an}" if ( ! defined $def->{'table'} ); # Tangram bug: # Tangram::IntrArray::reschema(): # does not use $schema->{'normalize'}->() when # computing default {coll} and {slot}. # if ( defined $def->{'class'} ) { my $ctn = $self->tangram_table_name($def->{'class'}, $opts); $def->{'coll'} ||= "${ctn}_${an}"; $def->{'slot'} ||= "$def->{coll}_slot"; } # $DB::single = 1 if $mt eq 'iarray' and $c->name eq 'POWER::Capability::Map'; # They use a hash to store other info. $sc->{'fields'}{$mt}{$an} = $def; } else { $def = $an; push(@{$sc->{'fields'}{$mt}}, $def); } } } } # print STDERR Data::Dumper->Dump([ $schema ], [qw($tangram_schema)]); $schema; } 1; metaattr-0.1/src/metaattr/lib/perl/MetaAttr/Meta/Valid.pm0100644000175200017560000000515707436766545023632 0ustar stephensstephens#!/usr/local/bin/perl ############################################################ package MetaAttr::Meta::Valid; use MetaAttr::Meta::Base; @ISA = qw(MetaAttr::Meta::Base); use strict; our $VERSION = do { my @r = (q$Revision: 1.7 $ =~ /\d+/g); sprintf "%d." . "%02d" x $#r, @r }; use vars qw($disabled); use MetaAttr::Method; $disabled = 0; #BEGIN #{ # @MetaAttr::Meta::Valid::ISA = qw(MetaAttr::Meta::Base); # # print STDERR __PACKAGE__ . ": ISA=@MetaAttr::meta::valid::ISA\n"; #} sub new { my $cls = ref $_[0] ? ref shift : shift; my $self = { 'expr', @_ }; bless $self, $cls; $self; } sub valid_method_name { my ($self, $name) = @_; "__ma_valid_${name}"; } sub validate_method_name { my ($self, $name) = @_; "__ma_validate_${name}"; } sub generate_validate_method { my ($self, $mn, $obj) = @_; my $expr = $self->{'expr'}; my $m; my $an = $obj->name; $m = MetaAttr::Method->new($mn, qq{ # Is \$_ a valid value for $an? my (\$self) = shift; shift eq \$self || die 'Bad call to valid method'; # Redundant $self. local \$_ = \$_[0]; $expr; }); $m; } sub visit { my ($self, $obj, $cntx) = @_; if ( $cntx eq 'attribute' ) { my $an = $obj->name(); #print STDERR "$obj ref_str = '$r'\n"; my $m; my $mn; ####################################################### # Generate validate method. $m = $self->generate_validate_method($mn = $self->valid_method_name(${an}), $obj); # Method attribute is a validator of this meta-attribute. $m->{'valid_meta'} = $self; # Method for this meta. $self->{'valid_method'} = $m; $obj->{'valid_method'} = $m; # Add the method. $obj->add_method($m); ####################################################### my $msg = $self->{'message'} || $obj->class->pkg . "::$an invalid"; $m = MetaAttr::Method->new($self->validate_method_name(${an}), qq{ # Check if \$_ a valid value for $an? use Carp; confess(q{$msg}) if ( ! \$MetaAttr::Meta::Valid::disabled && ! \$_[0]->${mn}(\@_) ); }); # Method attribute is a validate of this meta-attribute. $m->{'validate_meta'} = $self; # Method for this meta. $self->{'validate_method'} = $m; $obj->{'validate_method'} = $m; # Add the method. $obj->add_method($m); } } sub generate { my ($self, $obj, $cntx) = @_; if ( $cntx eq 'attribute' ) { my $vn = $obj->{'validate_method'}->name; for my $m ( $obj->{'setter_method'}, $obj->{'initializer_method'} ) { if ( $m ) { $m->emit('beg_body', qq{ # Validate new value. \$_[0]->$vn(\$_[1]); }); } } } } 1; metaattr-0.1/src/metaattr/lib/perl/MetaAttr/Meta/Validset.pm0100644000175200017560000000277007436766545024344 0ustar stephensstephens#!/usr/local/bin/perl ################################################################# package MetaAttr::Meta::Validset; use strict; our $VERSION = do { my @r = (q$Revision: 1.3 $ =~ /\d+/g); sprintf "%d." . "%02d" x $#r, @r }; use MetaAttr::Meta::Valid; our @ISA = qw(MetaAttr::Meta::Valid); use MetaAttr::Method; sub new { my $cls = ref $_[0] ? ref shift : shift; # Turn validset array into a hash. my $self = { 'validset', { @_ } }; bless $self, $cls; $self; } sub generate_validate_method { my ($self, $mn, $obj) = @_; my $an = $obj->name(); my $m; # Initialize a default message. $self->{'message'} ||= "Must be one of the following: " . join(', ', map("'$_'", keys %{$self->{'validset'}})); ####################################################### # Create a validset method to retrieve the validset. my $vs_mn = "${an}_validset"; my $vs_m = MetaAttr::Method->new($vs_mn, qq{ # Returns validset hashref for $an. my (\$self) = shift; \$self->metaclass->attribute_by_name('$an')->{'valid_meta'}{'validset'}; }); # Method attribute is a valid-set of this meta-attribute. $vs_m->{'valid_meta'} = $self; # Method for this meta. $self->{'validset_method'} = $vs_m; $vs_m->{'valid_meta'} = $self; $obj->add_method($vs_m); ####################################################### # Check for existance in validset hash. $self->{expr} = q{exists $self->} . $vs_mn . q{->{shift}}; $self->SUPER::generate_validate_method($mn, $obj); } 1; metaattr-0.1/src/metaattr/lib/perl/MetaAttr/Meta/Blessed_arrayindex.pm0100744000175200017560000000365007436560424026363 0ustar stephensstephens#!/usr/local/bin/perl ################################################### package MetaAttr::Meta::Blessed_array_index; use strict; use vars qw(@ISA); use MetaAttr::Meta::Base; @ISA = qw(MetaAttr::Meta::Base); sub new { my $cls = ref $_[0] ? ref shift : shift; my $self = { @_ }; bless $self, $cls; $self; } sub visit { my ($self, $obj, $cntx) = @_; #$DB::single = 1; $self->SUPER::visit($obj, $cntx); if ( $cntx eq 'end_class' ) { $obj->{'memory_model'} = $self; $self->{'class'} = $obj; $obj->add_meta($self); } #print "visit debug $self, $obj, $cntx\n"; } sub generate { my ($self, $obj, $cntx) = @_; $self->SUPER::generate($obj, $cntx); } ################################################################### # # Memory model interface sub obj_new_support { q{ # Use an object id free list. my $__newid = 0; my @__freeid; sub __newid { my $self = shift; my $objid = eval { $self->SUPER::__newid; }; if ( ! defined($objid) ) { $objid = @__freeid ? pop @__freeid : $__newid ++; } $objid; } sub __freeid { my $self = shift; if ( 1 # eval { $self->SUPER::__freeid; 1; } ) { push @__freeid, $$self; } } }; } sub obj_new #@ Returns a perl expression that creates a new object reference. { q{ my $objid = $cls->__newid(); my $self = \$objid; }; } sub obj_destroy #@ Returns a perl expresion that destroys the object reference. { my ($self, $ref) = @_; $ref = '$_[0]' if ( ! $ref ); qq{ ${ref}->__freeid(); }; } sub obj_attr #@ Returns a perl expression that references a object attribute through an object instance reference. { my ($self, $name, $ref) = @_; '$' . $self->class->pkg . '::__' . $name . '[' . $ref . ']'; } sub obj_attr_declare #@ Returns a perl expression that declares an object attribute at the class package level. { my ($self, $name) = @_; '@' . $self->class->pkg . '::__' . $name; } 1; metaattr-0.1/src/metaattr/lib/perl/MetaAttr/Meta/Blessed_hash.pm0100744000175200017560000000102007436560502025122 0ustar stephensstephens#!/usr/local/bin/perl ################################################### package MetaAttr::Meta::Blessed_hash; use strict; use vars qw(@ISA); use MetaAttr::Meta::Memory_model; @ISA = qw(MetaAttr::Meta::Memory_model); sub obj_new #@ Returns a perl expression that creates a new object reference. { 'my $self = { };'; } sub obj_attr #@ Returns a perl expression that references a object attribute through an object instance reference. { my ($self, $name, $ref, $pkg) = @_; $ref . "->{'" . $name . "'}"; } 1; metaattr-0.1/src/metaattr/lib/perl/MetaAttr/Meta/Capability.pm0100744000175200017560000000541107436560571024635 0ustar stephensstephens#!/usr/local/bin/perl ################################################### package MetaAttr::Meta::Capability; use strict; use vars qw(@ISA); use MetaAttr::Meta::Base; @ISA = qw(MetaAttr::Meta::Base); sub new { my $cls = ref $_[0] ? ref shift : shift; unshift(@_, 'disable') if ( @_ & 1 == 1 ); my $self = { @_ }; bless $self, $cls; $self; } sub visit { my ($self, $obj, $cntx) = @_; #$DB::single = 1; $self->SUPER::visit($obj, $cntx); if ( $cntx eq 'end_class' || $cntx eq 'end_attribute' ) { #$self->msg('***DEBUG META', $obj); if ( $cntx eq 'end_class' ) { # Add a method to return the capability object for this object. my $m = MetaAttr::Method->new('__ma_capability', q{ # Returns the capability object for this object. # ... }); $self->{'capability_method'} = $m; $m->{'capability_meta'} = $self; $obj->add_method($m); # Add a method to check the capability object for this object. my $m = MetaAttr::Method->new('__ma_capability_check', q{ # Check capability for this object. my ($self, $cntx, $attr, $action) = @_; print STDERR join("\t", 'CAPABILITY', @_), "\n"; # ... 1; # OK }); $self->{'capability_method'} = $m; $m->{'capability_meta'} = $self; $obj->add_method($m); # Extend capability model to all attribute of the class. if ( 1 ) { for my $x ( $obj->attributes ) { $self->visit($x, 'end_attribute'); } } } # Extend capability model to all getter setter methods associated with the class. if ( 1 ) { for my $m ( $obj->methods ) { # Is the method associated with the attributes as a getter or setter? if ( $m->{'setter_meta'} || $m->{'getter_meta'} ) { #$self->msg('***DEBUG META', $obj, $m); $m->add_meta($self); } } } } if ( $cntx eq 'method' ) { # Extend capability model to this method; $obj->add_meta($self); } #print "visit debug $self, $obj, $cntx\n"; } sub generate { my ($self, $obj, $cntx) = @_; $self->SUPER::generate($obj, $cntx); if ( $cntx eq 'class' ) { # Create method to return the capability object. #my $pkg = $obj->pkg(); #$obj->emit('beg_class', "\$${pkg}::debug = 0; # Controls debug logging for entire package."); } if ( $cntx eq 'method' ) { if ( $obj ne $self->{'capability_method'} ) { my ($an, $cn); if ( $obj->{'getter_meta'} ) { $an = $obj->{'attribute'}->name; $cn = 'get'; } elsif ( $obj->{'setter_meta'} ) { $an = $obj->{'attribute'}->name; $cn = 'set'; } else { $an = $obj->name; $cn = 'send'; } if ( $an && $cn ) { $obj->emit('beg_body', qq{ # Check capability object for $cn on $an. \$_[0]->__ma_capability_check(undef, '$an', '$cn', \@_); }); } } } } 1; metaattr-0.1/src/metaattr/lib/perl/MetaAttr/Meta/Category.pm0100744000175200017560000000216107452107665024327 0ustar stephensstephens#!/usr/local/bin/perl ################################################### package MetaAttr::Meta::Category; use strict; use MetaAttr::Meta::Base; our @ISA = qw(MetaAttr::Meta::Base); sub new { my $cls = ref $_[0] ? ref shift : shift; unshift(@_, 'name') if ( @_ & 1 ); my $self = { @_ }; bless $self, $cls; $self; } sub initialize { my ($self) = shift; #$self->SUPER::initialize(@_); } sub visit { my ($self, $obj, $cntx) = @_; #$DB::single = 1; $self->SUPER::visit($obj, $cntx); if ( $cntx eq 'end_class' ) { for my $a ( $obj->attributes ) { $self->visit($a, 'beg_attribute'); } } elsif ( $cntx eq 'beg_attribute' ) { if ( $obj->{'category_meta'} && $obj->{'category_meta'} ne $self ) { warn 'Attribute ' . $obj->name . ' already in category ' . $self->name; } else { $obj->{'category_meta'} = $self; $self->{'attribute'} = $obj; $obj->add_meta($self); } } } ############################################################################# # superclass meta package MetaAttr::Attribute; sub category { shift->{'category_meta'}; } 1; metaattr-0.1/src/metaattr/lib/perl/MetaAttr/Meta/Debug.pm0100744000175200017560000000322407436560676023610 0ustar stephensstephens#!/usr/local/bin/perl ################################################### package MetaAttr::Meta::Debug; use strict; use vars qw(@ISA); use MetaAttr::Meta::Base; @ISA = qw(MetaAttr::Meta::Base); sub new { my $cls = ref $_[0] ? ref shift : shift; my $self = { @_ }; bless $self, $cls; $self; } sub visit { my ($self, $obj, $cntx) = @_; #$DB::single = 1; $self->SUPER::visit($obj, $cntx); if ( $cntx eq 'end_class' || $cntx eq 'end_attribute' ) { #$self->msg('***DEBUG META', $obj); if ( $cntx eq 'end_class' ) { for my $x ( $obj->attributes ) { $self->visit($x, 'end_attribute'); } } for my $m ( $obj->methods ) { #$self->msg('***DEBUG META', $obj, $m); $m->add_meta($self); } } #print "visit debug $self, $obj, $cntx\n"; } sub generate { my ($self, $obj, $cntx) = @_; $self->SUPER::generate($obj, $cntx); if ( $cntx eq 'class' ) { # Apply debug annotation to all methods. my $pkg = $obj->pkg(); $obj->emit('beg_class', "\$${pkg}::debug = 0; # Controls debug logging for entire package."); } if ( $cntx eq 'method' ) { # Apply debug annotation to beginning of method body. my $pkg = $obj->pkg(); my $mn = $obj->name(); $obj->emit('beg', qq{\$${pkg}::${mn}_debug = 0; # Controls debug logging for method $mn.}); $obj->emit('beg_body', qq{ # Begin method debug logging. print STDERR "DEBUG:\\t$mn\\t(", join(",\\t", \@_), ")\\n" if ( \$${pkg}::debug || \$${pkg}::${mn}_debug ); }); #$obj->emit('end_body', qq{print STDERR "DEBUG:\\t$mn\\t(", join(",\\t", \@_), "): END\\n" if ( \$${pkg}::debug || \$${pkg}::${mn}_debug ); }); } } 1; metaattr-0.1/src/metaattr/lib/perl/MetaAttr/Meta/Default.pm0100644000175200017560000000252607446476653024153 0ustar stephensstephens#!/usr/local/bin/perl ################################################## package MetaAttr::Meta::Default; use strict; use MetaAttr::Meta::Base; our @ISA = qw(MetaAttr::Meta::Base); use MetaAttr::Method; sub new { my $cls = ref $_[0] ? ref shift : shift; my $self = { 'expr', @_ }; bless $self, $cls; $self; } sub visit { my ($self, $obj, $cntx) = @_; if ( $cntx eq 'attribute' ) { my $an = $obj->name(); my $expr = $self->{'expr'}; #print STDERR "$obj ref_str = '$r'\n"; my $m; my $mn; ####################################################### $m = MetaAttr::Method->new($mn = "__ma_default_${an}", qq{ # Return default value. my (\$self) = \@_; $expr; }); # Method attribute is a default of this meta-attribute. $m->{'default_meta'} = $self; # Method for this meta. $self->{'default_method'} = $m; $obj->{'default_method'} = $m; # Add the method. $obj->add_method($m); } } sub generate { my ($self, $obj, $cntx) = @_; $self->SUPER::generate($self, $obj, $cntx); if ( $cntx eq 'attribute' ) { my $cls = $obj->class; my $an = $obj->name; my $dn = $self->{'default_method'}->name; $cls->emit('defaults', qq{ # Add default for initializer \$defs->{'$an'} = \$self->$dn if ( ! exists \$defs->{'$an'} ); }); } } 1; metaattr-0.1/src/metaattr/lib/perl/MetaAttr/Meta/Desc.pm0100744000175200017560000000200707446476703023434 0ustar stephensstephens#!/usr/local/bin/perl ################################################### package MetaAttr::Meta::Desc; use strict; use MetaAttr::Meta::Base; our @ISA = qw(MetaAttr::Meta::Base); sub new { my $cls = ref $_[0] ? ref shift : shift; unshift(@_, 'doc') if ( @_ & 1 ); my $self = { @_ }; bless $self, $cls; $self; } sub doc { shift->{'doc'}; } sub visit { my ($self, $obj, $cntx) = @_; #$DB::single = 1; $self->SUPER::visit($obj, $cntx); if ( $cntx eq 'beg_class' || $cntx eq 'beg_attribute' || $cntx eq 'beg_method' ) { warn "Description for " . $obj->metatype . ' ' . $obj->name . " defined." if ( $obj->{'desc_meta'} ); $obj->{'desc_meta'} = $self; $obj->add_meta($self); } } ############################################################################# # superclass meta package MetaAttr::Attribute; sub desc { shift->{'desc_meta'}; } package MetaAttr::Class; sub desc { shift->{'desc_meta'}; } package MetaAttr::Method; sub desc { shift->{'desc_meta'}; } 1; metaattr-0.1/src/metaattr/lib/perl/MetaAttr/Meta/Memory_model.pm0100744000175200017560000000617407446476750025221 0ustar stephensstephens#!/usr/local/bin/perl ################################################### package MetaAttr::Meta::Memory_model; use strict; use MetaAttr::Meta::Base; our @ISA = qw(MetaAttr::Meta::Base); use Carp qw(croak); sub new { my $cls = ref $_[0] ? ref shift : shift; my $self = { @_ }; bless $self, $cls; $self; } sub visit { my ($self, $obj, $cntx) = @_; #$DB::single = 1; $self->SUPER::visit($obj, $cntx); if ( $cntx eq 'beg_class' ) { die 'Memory model already specified' if ( $obj->{'memory_model'} ); $obj->{'memory_model'} = $self; $self->{'class'} = $obj; $obj->add_meta($self); } } sub generate { my ($self, $obj, $cntx) = @_; $self->SUPER::generate($obj, $cntx); } ################################################################### # # Memory model interface sub obj_new_support { undef; } sub obj_new #@ Returns a perl expression that creates a new object reference. { die 'Subclass responsibility'; } sub obj_destroy { undef; } ############################################################# # Object attributes. sub obj_attr #@ Returns a perl expression that references a object attribute through an object instance reference. { my ($self, $name, $ref) = @_; die 'Subclass responsibility'; } sub obj_attr_declare #@ Returns a perl expression that declares an object attribute at the class package level. { my ($self, $name) = @_; undef; # Nothing. } ############################################################################ # class attributes sub cls_attr_declare { my ($self, $name) = @_; qq{ # Class attribute '$name' our \$$name; }; } sub cls_attr { my ($self, $name, $ref) = @_; "\$$name"; }; ############################################################################# # class Memory model interface. # package MetaAttr::Class; use Carp qw(croak); sub memory_model { my ($self) = @_; my $mm; if ( ! ($mm = $self->{'memory_model'}) ) { #$DB::single = 1; $self->{'memory_model'} = 1; # Recursion lock. use MetaAttr::Meta::Superclass; ($mm) = grep($_, map($_->memory_model, $self->superclass)); if ( ! $mm ) { use MetaAttr::Meta::Blessed_hash; warn "No memory model defined for " . $self->name; #$DB::single = 1; $mm = new MetaAttr::Meta::Blessed_hash; $mm->{'class'} = $self; } $self->{'memory_model'} = $mm; } die 'Recursion lock' if ( $mm == 1 ); $mm; } sub obj_attr { my ($self, $name, $ref, $pkg) = @_; $pkg ||= $self->pkg; croak("obj_attr: name not defined") if ( ! $name ); croak("obj_attr: ref not defined") if ( ! $ref ); $self->memory_model->obj_attr($name, $ref, $pkg); } sub obj_attr_declare { my ($self, $name, $pkg) = @_; $pkg ||= $self->pkg; croak("obj_attr_declare: name not defined") if ( ! $name ); $self->memory_model->obj_attr_declare($name, $pkg); } sub cls_attr { my ($self, $name, $pkg) = @_; $pkg ||= $self->pkg; $self->memory_model->cls_attr($name, $pkg); } sub cls_attr_declare { my ($self, $name, $pkg) = @_; $pkg ||= $self->pkg; $self->memory_model->cls_attr_declare($name, $pkg); } 1; metaattr-0.1/src/metaattr/lib/perl/MetaAttr/Meta/Setonce.pm0100744000175200017560000000250107446476777024170 0ustar stephensstephens#!/usr/local/bin/perl ################################################### package MetaAttr::Meta::Setonce; use strict; use MetaAttr::Meta::Base; our @ISA = qw(MetaAttr::Meta::Base); use MetaAttr::Attribute; $debug = 0; sub new { my $cls = ref $_[0] ? ref shift : shift; my $self = { @_ }; bless $self, $cls; $self; } sub visit { my ($self, $obj, $cntx) = @_; if ( $cntx eq 'attribute' && ! $self->{'setonce_attribute'} ) { my $n = $obj->name(); my $attr = MetaAttr::Attribute->new("__${n}_set"); $obj->class()->add_attribute($attr); $self->{'setonce_attribute'} = $attr; print STDERR "**** created attribute $attr for $self\n" if ( $debug ); foreach my $mt ( $obj->metas() ) { if ( $mt->isa('MetaAttr::Meta::Setter') ) { print STDERR "**** found setter $mt for $self\n" if ( $debug ); $self->{'setter_method'} = $mt; my $meth = $mt->{'setter_method'}; print STDERR "**** meth $meth for $mt\n" if ( $debug ); $meth->add_meta($self); } } } } sub generate { my ($self, $obj, $cntx) = @_; if ( $cntx eq 'method' ) { # Apply setonce annotation to beginning of method body. my $ar = $self->{'setonce_attribute'}->ref_str(); my $an = $obj->{'attribute'}->name; $obj->emit('beg_body', qq{die "$an already set" if ( $ar ); $ar = 1; }); } } 1; metaattr-0.1/src/metaattr/lib/perl/MetaAttr/Meta/Superclass.pm0100744000175200017560000000352707450645604024703 0ustar stephensstephens#!/usr/local/bin/perl ################################################### package MetaAttr::Meta::Superclass; use strict; use MetaAttr::Meta::Base; our @ISA = qw(MetaAttr::Meta::Base); our $debug = 0; sub new { my $cls = ref $_[0] ? ref shift : shift; my $self = { 'superclass' => [ @_ ] }; bless $self, $cls; $self; } sub visit { my ($self, $obj, $cntx) = @_; $self->SUPER::visit($obj, $cntx); if ( $cntx eq 'beg_class' ) { die "superclass already defined in " . $obj->name if ( $obj->{'superclass_meta'} ); $obj->{'superclass_meta'} = $self; $obj->add_meta($self); } } sub generate { my ($self, $obj, $cntx) = @_; print STDERR "generate superclass $self, $obj, $cntx\n" if ( $debug ); if ( $cntx eq 'class' ) { # Apply debug annotation to all methods. my $a = $obj->name(); my @s = @{$self->{'superclass'}}; for my $s ( @s ) { $obj->emit('beg_class', qq{use $s; # meta superclass}); } $obj->emit('@ISA', join(' ', @s)); } } sub superclass { my ($self) = @_; # Create a list of metaclass objects for the named metaclasses. #print STDERR "$self->superclass ", $self->class->name, "\n"; #$DB::single = 1; if ( ! $self->{'@superclass'} ) { # Make sure the objects get loaded. grep(eval("use $_;"), @{$self->{'superclass'}}); die $@ if ( $@ ); #print STDERR "$self->superclass=", join(',', @{$self->{'superclass'}}), "\n"; # Map class names to metaclass objects. $self->{'@superclass'} = [ map($_->metaclass, @{$self->{'superclass'}}) ]; } @{$self->{'@superclass'}}; } ############################################################################# # superclass meta package MetaAttr::Class; sub superclass { my $self = shift; use MetaAttr::Meta::Superclass; $self->{'superclass_meta'} ? $self->{'superclass_meta'}->superclass() : (); } 1; metaattr-0.1/src/metaattr/lib/perl/MetaAttr/Meta/Tiedhash.pm0100744000175200017560000000170307446477113024305 0ustar stephensstephens#!/usr/local/bin/perl ################################################### package MetaAttr::Meta::Tiedhash; use strict; use MetaAttr::Meta::Base; our @ISA = qw(MetaAttr::Meta::Base); $debug = 0; sub new { my $cls = ref $_[0] ? ref shift : shift; my $self = { @_ }; bless $self, $cls; $self; } sub generate { my ($self, $obj, $cntx) = @_; print STDERR "generate tiedhash $self, $obj, $cntx\n" if ( $debug ); if ( $cntx eq 'class' ) { # Add tied hash interface support to class. my $pkg = $obj->pkg; $obj->emit('class', q{ ################################ # Hash ref interface. use Tie::Hash; push(@} . $pkg . q{::ISA, qw(Tie::StdHash)); sub STORE { my ($self, $name, $val) = @_; $DB::single = 1; $name = "set_${name}"; $self->$name($val); $val; } sub FETCH { my ($self) = shift; $DB::single = 1; map($self->$_, @_); } sub DELETE { die "Cannot delete hash keys from a " . ref($_[0]); } }); } } 1; metaattr-0.1/src/metaattr/lib/perl/MetaAttr/Meta/Ui.pm0100644000175200017560000000171607436562177023140 0ustar stephensstephens#!/usr/local/bin/perl ################################################### package MetaAttr::Meta::Ui; use strict; use vars qw(@ISA); use MetaAttr::Meta::Base; @ISA = qw(MetaAttr::Meta::Base); sub new { my $cls = ref $_[0] ? ref shift : shift; my $self = { @_ }; bless $self, $cls; $self; } sub initialize { my ($self) = shift; #$self->SUPER::initialize(@_); } sub visit { my ($self, $obj, $cntx) = @_; #$DB::single = 1; $self->SUPER::visit($obj, $cntx); if ( $cntx eq 'beg_class' || $cntx eq 'beg_attribute' || $cntx eq 'beg_method' ) { $obj->{'ui_meta'} = $self; $obj->add_meta($self); } } ############################################################################# # superclass meta package MetaAttr::Attribute; my %empty; sub ui { shift->{'ui_meta'} || \%empty; } package MetaAttr::Class; sub ui { shift->{'ui_meta'} || \%empty; } package MetaAttr::Method; sub ui { shift->{'ui_meta'} || \%empty; } 1; metaattr-0.1/src/metaattr/lib/perl/MetaAttr/Meta/Use.pm0100744000175200017560000000115507436562244023310 0ustar stephensstephens#!/usr/local/bin/perl ################################################### package MetaAttr::Meta::Use; use MetaAttr::Meta::Base; use strict; use vars qw(@ISA $debug); @ISA = qw(MetaAttr::Meta::Base); $debug = 0; sub new { my $cls = ref $_[0] ? ref shift : shift; my $self = { 'use' => [ @_ ] }; bless $self, $cls; $self; } sub generate { my ($self, $obj, $cntx) = @_; print STDERR "generate use $self, $obj, $cntx\n" if ( $debug ); if ( $cntx eq 'class' ) { # Apply use annotation to classes. grep($obj->emit('beg_class', $_), map("use $_; # use meta", @{$self->{'use'}})); } } 1; metaattr-0.1/src/metaattr/lib/perl/MetaAttr/Meta/Type.pm0100644000175200017560000000547507450654424023503 0ustar stephensstephens#!/usr/local/bin/perl ################################################################ package MetaAttr::Meta::Type; use strict; use MetaAttr::Meta::Base; our @ISA = qw(MetaAttr::Meta::Base); our $disabled = 0; sub new { my $cls = ref $_[0] ? ref shift : shift; unshift(@_, 'type') if ( @_ & 1 ); my $self = { @_ }; bless $self, $cls; $self; } sub type { shift->{'type'}; } # These should probably be described as meta objects. my $type_action = { 'array' => { 'init' => q{ ||= [ ]}, 'getter' => sub { qq{ \@_ ? \@{$_[0]}[\@_] : wantarray ? \@{$_[0]} : scalar \@{$_[0]} }; }, 'setter' => sub { 'do { ' . $_[0] . '->[$_[0]] = $_[1]; shift; shift; } while ( @_ )'; }, 'adder' => sub { 'push(@{' . $_[0] . '}, @_[1..$#_] )'; }, }, 'hash' => { 'init' => q{ ||= { }}, 'getter' => sub { qq{ \@_ ? \@{$_[0]}{\@_} : wantarray ? \%{$_[0]} : scalar \%{$_[0]} } }, 'setter' => sub { 'do { ' . $_[0] . '->{$_[0]} = $_[1]; shift; shift; } while ( @_ )'; }, }, 'code' => { 'init' => q{ ||= die "SUB REF NOT DEFINED" }, 'getter' => sub { $_[0] . '->(@_)'; }, 'setter' => sub { qq{ die "not sub ref" if ( ! ref(\$_[0]) eq 'CODE' ); $_[0] = \$_[0] } }, } }; sub visit { my ($self, $obj, $cntx) = @_; if ( $cntx eq 'attribute' ) { my $an = $obj->name(); #print STDERR "$obj ref_str = '$r'\n"; # find all getter and setter methods associated with this attribute. my $type = $self->{'type'}; $obj->{'type_meta'} = $self; my $gm; for my $mt ( 'getter', 'setter' ) { my $m; my $ta; if ( ($m = $obj->{"${mt}_method"}) ) { if ( ($ta = $type_action->{$type}->{$mt}) ) { # Remember meta. $m->{'type_meta'} = $self; $self->{"${mt}_method"} = $m; # Change getter/setter body to handle substructure. my $r = $obj->class->obj_attr($obj->name, '$self'); my $init = 'my $__x = ' . $r . $type_action->{$type}->{'init'}; my $code = $ta->('$__x'); $code = qq{ my \$self = shift; $init; $code; }; $m->set_body($code); } if ( $mt eq 'setter' && ($ta = $type_action->{$type}->{'add'}) ) { # Add a add_method. my $r = $obj->class->obj_attr($obj->name, '$self'); my $code = $ta->('$__x'); $code = qq{ $code; }; my $mn = "add_" . $obj->name; my $method = MetaAttr::Method->new($mn, $code); $method->{'type_meta'} = $self; $self->{'adder_method'} = $method; $obj->add_method($method); } } } # Insert new getter and setter methods. } } sub generate { my ($self, $obj, $cntx) = @_; if ( $cntx eq 'attribute' ) { } } ############################################################################# # superclass meta package MetaAttr::Attribute; sub type { shift->{'type_meta'}; } 1; metaattr-0.1/src/metaattr/lib/perl/MetaAttr/Relation.pm0100644000175200017560000000341607455500756023445 0ustar stephensstephens#!/usr/local/bin/perl ################################################### package MetaAttr::Relation; use strict; use base qw(MetaAttr::Meta); use MetaAttr::Method; sub visit { my ($self, $obj, $cntx) = @_; $self->SUPER::visit($obj, $cntx); if ( $cntx eq 'attribute' ) { my $a = $obj->name(); my $r = $obj->ref_str(); # Create a setter method. my $m = MetaAttr::Method->new($self->setter_method_name($a), qq{ # Set value for instance variable. $r = \$_[1]; }); # what is this method setting? $m->{'setter_meta'} = $self; # what setter method is assocated with this meta? $self->{'setter_method'} = $m; $obj->{'setter_method'} = $m; # Add a method to the attribute object. $obj->add_method($m); } } 1; __END__ # relation name # left multiplicity # left target class # left accessor name # right multiplicity # right target class # right accessor name # # Example: parent/child # my $system = [ [ 'class', 'tree', 'method', [ 'print', [ 'self', 'stream' ], q{ } ], ], [ 'relation', [ 'parent_child', [ 'tree', 'parent', '0..1' ], [ 'tree', 'child', '*' ], ] ], ]; # Example: dealer/chain/product # my $system = [ 'class', [ 'dealer', 'attribute', [ 'name', 'setter' ], ], 'class', [ 'chain', 'attribute', [ 'name', 'setter' ], ], 'class', [ 'product', 'attribute', [ 'name', 'setter' ], 'attribute', [ 'sku', 'setter' ], ], 'relation', [ 'dealer_chain', [ 'dealer', 'chain', '*' ], [ 'chain', 'dealer', '1' ], ], 'relation', [ 'chain_product', [ 'chain', 'products', '1..*' ], [ 'product', 'chains', '1..*' ], ], ], ]; metaattr-0.1/src/metaattr/lib/perl/MetaAttr/System.pm0100644000175200017560000000145607455501053023145 0ustar stephensstephens ################################################### package MetaAttr::System; use strict; use base qw(MetaAttr::Base); our $debug = 0; sub new { my $cls = ref $_[0] ? ref shift : shift; my $name = shift; die "system name '$name' is invalid" if ( $name !~ /^([_a-z][_a-z0-9]*)(::_a-z][_a-z0-9]*)*$/i ); my $self = { 'name' => $name, }; bless $self, $cls; $self->initialize(@_); } sub initialize { my $self = shift; while ( @_ ) { my $x = shift @_; $x->add_to_system($self); } $self; } sub metatype { 'system'; } sub pkg { shift->name; } sub visit_objects { ( 'metas', 'classs' ); } sub generate_objects { ( 'beg_system', 'system', 'end_system' ); } sub generate { my ($self, $obj, $cntx) = @_; $self->SUPER::generate($obj, $cntx); } 1; metaattr-0.1/src/metaattr/lib/perl/MetaAttr/Attribute.pm0100744000175200017560000000473407452106341023625 0ustar stephensstephens ################################################### package MetaAttr::Attribute; use strict; use MetaAttr::Base; our @ISA = qw(MetaAttr::Base); use MetaAttr::Meta::Memory_model; our $debug = 0; sub new { my $cls = ref $_[0] ? ref shift : shift; my $name = shift; die "attribute name '$name' must be [_a-zA-Z][_a-zA-Z0-9]*" if ( $name !~ /^[_a-z][_a-z0-9]*$/i ); my $self = { 'name' => $name, }; bless $self, $cls; $self->initialize(@_); } sub initialize { my $self = shift; while ( @_ ) { my $x = shift @_; $x->add_to_attribute($self); } $self; } sub metatype { 'attribute'; } sub pkg { shift->class->pkg; } sub add_to_class { my ($self, $obj) = @_; $obj->add_attribute($self); } sub storage_type { my ($self) = @_; ($self->{'storage_meta'} && $self->{'storage_meta'}{'type'}) || 'object'; } sub is_virtual { my ($self) = @_; $self->{'storage_meta'} && $self->{'storage_meta'}{'virtual'}; } sub ref_str { my ($self) = shift; if ( $self->storage_type eq 'class' ) { $self->class->cls_attr($self->name, $self->class->pkg); } else { $self->class->obj_attr($self->name, '$_[0]'); } } sub visit_objects { ( 'metas', 'methods' ); } sub generate_objects { ( 'beg_attribute', 'attribute', 'end_attribute' ); } sub generate { my ($self, $obj, $cntx) = @_; $self->SUPER::generate($obj, $cntx); if ( $cntx eq 'class' ) { my $n = $self->name(); # Determine the attribute declaration and initialization code segment. my $decl; my $deinit; if ( $self->storage_type eq 'class' ) { $decl = $self->class->cls_attr_declare($n); $deinit = 'END'; } else { $decl = $self->class->obj_attr_declare($n); $deinit = 'deinit'; } # Determine the deinitialization code fragment. my $deinit_code; if ( $self->is_virtual ) { # Get the setter method. my $setter = $self->{'setter_method'}; if ( $setter ) { # Emit code to deinit the virtual attribute using the setter method. $deinit_code = '$_[0]->' . $setter->name . '(undef);'; } else { $deinit_code = 'undef; # No setter method.' } } else { # The code to reference the attribute. my $attr_ref = $self->ref_str; # Set the attribute to undef. $deinit_code = $attr_ref . '= undef;'; } # Emit storage declaration. $self->emit('beg_attributes', $decl); # Emit deinitialization code. $self->emit($deinit, $deinit_code); } } 1; metaattr-0.1/src/metaattr/lib/perl/MetaAttr/Method.pm0100744000175200017560000000271007436560202023074 0ustar stephensstephens################################################### use strict; package MetaAttr::Method; use MetaAttr::Base; our @ISA = qw(MetaAttr::Base); sub new { my $cls = ref $_[0] ? ref shift : shift; my $name = shift; my $body = shift; die "method name '$name' must be [_a-zA-Z][_a-zA-Z0-9]*" if ( $name !~ /^[_a-z][_a-z0-9]*$/i ); my $self = { 'name' => $name, 'body' => $body, }; bless $self, $cls; $self->initialize(@_); $self; } sub body { shift->{'body'}; } sub set_body { $_[0]->{'body'} = $_[1]; } sub initialize { my $self = shift; while ( @_ ) { my $x = shift @_; $x->add_to_method($self); } $self; } sub metatype { 'method'; } sub pkg { $_[0]->class ? $_[0]->class->pkg : $_[0]->attribute->pkg; } sub add_to_class { my ($self, $obj) = @_; $obj->add_method($self); } sub add_to_attribute { my ($self, $obj) = @_; $obj->add_method($self); } sub visit_objects { ( 'metas' ); } sub generate_objects { ( 'beg_method', 'method', 'end_method' ); } sub finalize { my ($self, $obj) = @_; my $x; my $n = $self->name; $self->emit('body', $self->body); $x .= $self->emit('beg'); $x .= " sub $n { "; $x .= $self->emit('beg_body'); $x .= $self->emit('body'); $x .= $self->emit('end_body'); $x .= " } "; $x .= $self->emit('end'); $self->emit('methods', $x); ########################################################## $obj->emit($self, 'methods'); } 1; metaattr-0.1/src/metaattr/lib/perl/MetaAttr/Class.pm0100644000175200017560000002244307460727613022735 0ustar stephensstephens#!/usr/local/bin/perl ################################################### package MetaAttr::Class; use strict; our $VERSION = do { my @r = (q$Revision: 1.14 $ =~ /\d+/g); sprintf "%d." . "%02d" x $#r, @r }; use MetaAttr::Base; our @ISA = qw(MetaAttr::Base); use FileHandle; use Data::Dumper; use Carp qw(croak); use vars qw($load_force_gen $define_force_gen); sub new { my $cls = ref $_[0] ? ref shift : shift; my $name = shift; croak "class name '$name' is invalid" if ( $name !~ /^[_a-z][_a-z0-9]*(::[_a-z][_a-z0-9]*)*$/i ); my $self = { 'name' => $name, }; bless $self, $cls; $self->initialize(@_); } sub initialize { my $self = shift; while ( @_ ) { my $x = shift @_; $x->add_to_class($self); } $self; } sub metatype { 'class'; } ################################################################################# sub pkg { shift->name(); } ################################################################################# sub add_to_system { my ( $self, $obj ) = @_; $obj->add_class($self); } ################################################################################# sub visit_objects { ( 'metas', 'attributes', 'methods' ); } ################################################################################# sub generate_objects { ( 'beg_class', 'class', 'end_class' ); } ################################################################################# sub _qw { 'qw(' . join(' ', split(/\s+/, join(' ', @_))) . ')'; } sub _sb { my ($self, $x) = @_; my $pkg = $self->pkg; $x =~ s/\@PKG\@/$pkg/sg; $x =~ s/\@EMIT[(]([^\)]+)[)]\@/$self->emit($1)/seg; $x; } sub _unique { my %x = map(($_, $_), @_); values %x; } sub module_def { my ($self) = @_; ######################################################### $self->emit_reset(); #$DB::single = 1; # Visit: each meta-attribute annotates its meta-objects. $self->visit_(); # Generate: generate code for each meta-attribute in the context of its meta-object. $self->generate_(); # Finalize: accumulate the emitted code into a module. $self->finalize_(); ######################################################### my $x; #$x .= "#!/usr/bin/perl\n"; $x .= "# DO NOT EDIT: Created by " . __PACKAGE__ . " $VERSION\n"; my @supers = $self->superclass; my $do_super = @supers ? '' : '#'; $x .= $self->_sb(q{ @EMIT(beg)@ use strict; package @PKG@; #BEGIN { # eval { use @PKG@_impl; }; #} @EMIT(beg_class)@ }); # ISA $x .= $self->_sb('@@PKG@::ISA = ' . _qw($self->emit('@ISA')) . ";\n\n"); # use vars $x .= 'use vars ' . _qw($self->emit('use vars')) . ";\n\n"; # use generic. $x .= join("\n", map("use $_;", _unique(split(/\s+/, $self->emit('use'))))) . "\n"; # Memory model. my $mm_new_support = $self->memory_model->obj_new_support; my $mm_new = $self->memory_model->obj_new; my $mm_new_destroy = $self->memory_model->obj_destroy; $x .= $self->_sb(q{ ################################################################## # Meta-class object support. # $@PKG@::__metaclass; # Place holder for @PKG@ metaclass object. sub metaclass { if ( ! $@PKG@::__metaclass ) { eval { use @PKG@_ma_meta; }; die("Cannot load @PKG@ meta: $@") if ( $@ ); } $@PKG@::__metaclass; } }); $x .= $mm_new_support; $x .= $self->_sb(q~ sub new { my $cls = ref($_[0]) ? ref(shift) : shift; ~ . $mm_new . q~ bless $self, $cls; my %inits = @_; $self->defaults(\%inits); $self->initialize(%inits); } sub defaults { my ($self, $defs) = @_; ~ . $do_super . q~$_[0]->SUPER::defaults($defs); @EMIT(defaults)@ } ~); if ( 0 ) { # Was causing SIGSEGV in Tangram $x .= $self->_sb(q~ sub __ma_deinit { ~ . $do_super . q~$_[0]->SUPER::__ma_deinit(); @EMIT(deinit)@; } sub DESTROY { $_[0]->__ma_deinit(); ~ . $mm_new_destroy . q~ } ~); } $x .= q~ sub initialize { my $self = shift; use MetaAttr::Meta::Getter; ~ . $do_super . q~$self->SUPER::initialize(@_); while ( @_ ) { my $name = shift; my $val = shift; $name = MetaAttr::Meta::Getter->initializer_method_name($name); $self->$name($val) if ( $self->can($name) ); } $self; } ############################### # ~; #"emacs $x .= $self->emit('class'); $x .= $self->emit('beg_attributes'); $x .= $self->emit('attributes'); $x .= $self->emit('end_attributes'); $x .= $self->emit('beg_methods'); $x .= $self->emit('methods'); $x .= $self->emit('end_methods'); $x .= $self->emit('end_class'); $x .= $self->emit('BEGIN'); $x .= $self->emit('END'); $x .= $self->emit('end'); $x .= qq{ 1; }; $x; } sub module_create { my ($self, $lib) = @_; $lib ||= '.'; my $fn = join('/', $lib, split(/::/, $self->pkg)); my $fh = new FileHandle; # Generate class implemetation module. my $fn_gen_pm = "${fn}_ma_gen.pm"; my $fn_meta_pm = "${fn}_ma_meta.pm"; eval { open($fh, ">$fn_gen_pm") || croak "Cannot write '$fn_gen_pm': $!"; print $fh $self->module_def(); close($fh); warn "Wrote: $fn_gen_pm\n"; $self->emit_reset(); # Generate meta-class module. open($fh, ">$fn_meta_pm") || croak "Cannot write '$fn_meta_pm': $!"; my $dd = new Data::Dumper( [ $self ], [ $self->pkg . '::__metaclass' ] ); $dd->Indent(1); $dd->Purity(1); $dd->Useqq(1); $dd->Terse(1); print $fh "#DO NOT EDIT: Created by MetaAttr::Class\n"; print $fh $dd->Dump(); print $fh "1; #DO NOT EDIT: Created by MetaAttr::Class\n"; close($fh); warn "Wrote: $fn_meta_pm\n"; }; if ( $@ ) { unlink($fn_gen_pm, $fn_meta_pm); die $@; } } ######################################################### sub define { my $self = shift; my $pkg = caller; my $cls; my $name = $pkg; #$DB::single = 1; # Convert package name into a filename. my $imp = $pkg; $imp =~ s@::@/@gs; $imp .= '.pm'; # Convert package file into file path. my $imp_path = $INC{$imp}; # Where in the @INC path was $pkg loaded from? my $lib = $imp_path; ($lib =~ s@/$imp$@@s) || ($lib = '.'); # What is the file to be generated? my $gen = $imp; $gen =~ s/\.pm$/_ma_gen\.pm/s; my $gen_path = "$lib/$gen"; if ( 0 ) { warn "pkg='$pkg'\n"; warn "imp='$imp'\n"; warn "imp_path='$imp_path'\n"; warn "lib='$lib'\n"; warn "gen='$gen'\n"; } #exit 1; # If generated module is older than caller, # re-generate the module. my $reason; if ( $reason = (($load_force_gen) && '$load_force_gen') || (($define_force_gen) && '$define_force_gen') || ((! -r $gen_path) && "$gen_path doesnt exist") || ((! -s $gen_path) && "$gen_path is empty") || ((-M $imp_path < -M $gen_path) && ("$imp_path newer than $gen_path: " . (-M $imp_path) . ' ' . (-M $gen_path))) ) { warn "Generating $gen_path because $reason\n"; my $cls = MetaAttr::Class->parse($name, @_); $cls->module_create($lib); } # Now load it into caller. eval("package $pkg; require '$gen';"); if ( $@ ) { $DB::single = 1; die $@; } # Return the $cls object. #if ( ! $cls ) { # $cls = eval("${pkg}->metaclass;"); #} $cls; } sub load { warn "load(): DEPRECATED: Use " . __PACKAGE__ . "->define(...)"; goto &define; } ######################################################### # # These should be broken out into respective classes. # -- kurtstephens@acm.org 2001/08/26 use MetaAttr::Attribute; use MetaAttr::Method; sub _parse_meta { my $self = shift; my $type = shift; croak "metatype '$type' is invalid" if ( $type !~ /^[_a-z][_a-z0-9]*$/i ); #$DB::single = 1; #warn "_parse_meta: type = '$type'"; #$DB::single = 1 if ( $type =~ /^valid/ ); $type = ucfirst($type); eval "package MetaAttr::Class; use MetaAttr::Meta::$type;"; die $@ if ( $@ ); "MetaAttr::Meta::$type"->new(@_); } sub _parse_attribute { my $self = shift; my $name = shift; croak "attribute name '$name' is invalid" if ( $name !~ /^[_a-z][_a-z0-9]*$/i ); #warn "_parse_attribute: name = '$name'"; my @metas; while ( @_ ) { my $type = shift; my @attr; @attr = @{shift @_} if ( ref($_[0]) ); push(@metas, $self->_parse_meta($type, @attr)); } MetaAttr::Attribute->new($name, @metas); } sub _parse_method { my $self = shift; my $name = shift; my $body = shift; croak "method name '$name' is invalid" if ( $name !~ /^[_a-z][_a-z0-9]*$/i ); #warn "_parse_method: name = '$name'"; my @metas; while ( @_ ) { #$DB::single = 1; my $type = shift; my @attr; @attr = @{shift @_} if ( ref($_[0]) ); push(@metas, $self->_parse_meta($type, @attr)); } MetaAttr::Method->new($name, $body, @metas); } sub _parse_class { my $self = shift; my $name = shift; croak "class name '$name' is invalid" if ( $name !~ /^[_a-z][_a-z0-9]*(::[_a-z][_a-z0-9]*)*$/i ); #warn "_parse_class: name = '$name'"; my @metas; while ( @_ ) { # $DB::single = 1; my $type = shift; my @attr; @attr = @{shift @_} if ( ref($_[0]) ); my $meta; if ( $type eq 'attribute' || $type eq 'method' ) { my $x = "_parse_$type"; $meta = $self->$x(@attr); } else { #$DB::single = $type eq 'blessed_hash'; $meta = $self->_parse_meta($type, @attr); } push(@metas, $meta); } MetaAttr::Class->new($name, @metas); } sub parse { my $self = shift; $self->_parse_class(@_); } 1; metaattr-0.1/src/metaattr/lib/perl/MetaAttr/Base.pm0100644000175200017560000001570407460727613022544 0ustar stephensstephens################################################### package MetaAttr::Base; use strict; use warnings; our $VERSION = do { my @r = (q$Revision: 1.9 $ =~ /\d+/g); sprintf "%d." . "%02d" x $#r, @r }; use Carp; #use Exporter; #@ISA = qw(Exporter); #@EXPORT = qw(new); our $debug = 0; our @empty; sub new { } ################################################################################# sub msg_desc { my $self = shift; $self->name ? $self->metatype . '(' . $self->name . ')' : $self; } sub _msg_desc { ref($_[0]) ? $_[0]->msg_desc : $_[0]; } sub msg { my ($self) = shift; my ($tag) = shift; print STDERR join(' ', $tag, map(_msg_desc($_), $self, @_)), "\n" if ( $debug ); } ################################################################################# sub metatype { die "metatype $_[0]: not implemented"; } ################################################################################# sub name { $_[0]->{'name'}; } sub set_name { my ($self, $name) = @_; if ( $name ne $self->name ) { $self->{'name'} = $name; } } ################################################################################# sub add_ { my ($self, $obj, $type, $check) = @_; my $atype = "\@$type"; if ( ! grep($_ eq $obj, @{$self->{$atype}}) ) { confess "$type '" . $obj->name . "' already added to " . $self->metatype . " '" . $self->name . "'" if ( $check && $self->{"\%$type"}->{$obj->name} ); $self->msg("add_$type", $obj); $obj->{$self->metatype} = $self; push(@{$self->{$atype}}, $obj); $self->{"\%$type"}->{$obj->name} = $obj if ( $check ); } } sub remove_ { my ($self, $obj, $type) = @_; my $atype = "\@$type"; %{$self->{"\%$type"}} = map(($_->name, $_), @{$self->{$atype}} = grep($_ ne $obj, @{$self->{$atype}})); } ################################################################################# sub children { @{$_[0]->{'@children'} || \@empty}; } sub add_child { my ($self, $obj) = @_; $self->add_($obj, 'children'); } sub remove_child { my ($self, $obj) = @_; $self->remove_($obj, 'children'); } sub child_by_name { my ($self, $name) = @_; $self->{'%children'}->{$name}; } ################################################################################# sub attribute { $_[0]->{'attribute'}; } sub attributes { @{$_[0]->{'@attributes'} || \@empty}; } sub add_attribute { my ($self, $obj) = @_; $self->add_($obj, 'attributes', 1); } sub remove_attribute { my ($self, $obj) = @_; $self->remove_($obj, 'attributes'); } sub attribute_by_name { my ($self, $name) = @_; $self->{'%attributes'}->{$name}; } ################################################################################# sub class { $_[0]->{'class'}; } sub classes { @{$_[0]->{'@classes'} || \@empty}; } sub add_class { my ($self, $obj) = @_; $self->add_($obj, 'classes', 1); } sub remove_class { my ($self, $obj) = @_; $self->remove_($obj, 'classes'); } sub class_by_name { my ($self, $name) = @_; $self->{'%classes'}->{$name}; } ################################################################################# sub method { $_[0]->{'method'}; } sub add_method { my ($self, $obj) = @_; $self->add_($obj, 'methods', 1); } sub remove_method { my ($self, $obj) = @_; $self->remove_($obj, 'methods'); } sub methods { @{$_[0]->{'@methods'} || \@empty}; } sub method_by_name { my ($self, $name) = @_; $self->{'%methods'}->{$name}; } ################################################################################# sub add_meta { my ($self, $obj) = @_; $self->add_($obj, 'metas'); } sub remove_meta { my ($self, $obj) = @_; $self->remove_($obj, 'metas'); } sub metas { @{$_[0]->{'@metas'} || \@empty}; } ############################################################## sub emit { my $self = shift; $self->msg('emit', @_); if ( ref($_[0]) ) { # Copy all emits from $_[0] into $self. my $obj = shift; my @keys = @_ ? map(('beg_' . $_, $_, 'end_' . $_), @_) : keys %{$obj->{'%emit'}}; for my $k ( @keys ) { $self->emit($k, $obj->{'%emit'}->{$k}); } } else { if ( @_ > 1 ) { print STDERR "emit $_[0] $_[1] $_[2]\n" if ( $debug ); if ( 1 || defined($_[1]) ) { if ( $_[0] =~ /^end_/ ) { $self->{'%emit'}->{$_[0]} = $_[1] . "\n" . $self->{'%emit'}->{$_[0]}; } else { $self->{'%emit'}->{$_[0]} .= $_[1] . "\n"; } } else { $self->{'%emit'}->{$_[0]} = ''; } } else { $self->{'%emit'}->{$_[0]}; } } } sub emit_reset { my @stk = @_; my %visited; #$DB::single = 1; while ( @stk ) { my $x = pop @stk; # print STDERR "$x\n"; if ( ! ($visited{$x} ++) ) { my $xr = ref($x); if ( $xr ) { if ( $x =~ /HASH[(]/ ) { #) #print STDERR "$xr\n"; delete $x->{'%emit'}; delete $x->{'.visited'}; delete $x->{'@superclass'}; push(@stk, values %$x); } elsif ( $x =~ /ARRAY[(]/ ) { #) push(@stk, @$x); } } } } } ############################################################## sub visit_objects { ( 'metas', 'attributes', 'methods' ); } sub visit_ { my ($self) = shift; my $k = join(":", 'visit', @_); if ( ! $self->{'.visited'}->{$k} ) { $self->msg('visit', @_); $self->{'.visited'}->{$k} = 1; ## Preorder. while ( 1 ) { my $visit = 0; for my $cntx ( map($_ . $self->metatype, 'beg_', '', 'end_') ) { for my $y ( $self->visit_objects() ) { for my $x ( $self->$y() ) { $visit |= $x->visit_($self, $cntx); } } } last if ( ! $visit ); } ## Self visit. #$DB::single = 1 if ( $self =~ /::valid/ ); $self->visit(@_); 1; } else { 0; } } sub visit { my ($self, $obj, $cntx) = @_; } ############################################################## sub generate_objects { #warn "generate_objects $_[0]: not implemented"; (); } sub generate_ { my ($self) = shift; my $k = join(":", 'generate', @_); if ( ! $self->{'.visited'}->{$k} ) { $self->msg('generate', @_); $self->{'.visited'}->{$k} = 1; while ( 1 ) { my $visit = 0; for my $y ( $self->generate_objects ) { for my $v ( $self->visit_objects() ) { for my $x ( $self->$v() ) { $visit |= $x->generate_($self, $y); } } } last if ( ! $visit ); } $self->generate(@_); 1; } else { 0; } } sub generate { } ############################################################## sub finalize_objects { my ($self, $obj) = @_; $self->visit_objects(); } sub finalize_ { my ($self, $obj) = @_; $obj = $self if ( ! defined($obj) ); $self->msg('finalize', $obj); for my $y ( $self->finalize_objects() ) { for my $x ( $self->$y() ) { $x->finalize_($obj); } } $self->finalize($obj); } sub finalize { my ($self, $obj) = @_; if ( $obj ne $self ) { $obj->emit($self); } } ############################################################## 1; metaattr-0.1/src/metaattr/lib/perl/MetaAttr.pm0100744000175200017560000000025707436557622021674 0ustar stephensstephens#!/usr/bin/perl ################################################### package MetaAttr; use strict; use MetaAttr::Attribute; use MetaAttr::Method; use MetaAttr::Class; 1; metaattr-0.1/src/metaattr/lib/xml/0042755000175200017560000000000007411225547017442 5ustar stephensstephensmetaattr-0.1/src/metaattr/lib/xml/example.xma0100644000175200017560000000101107411225547021570 0ustar stephensstephens SysX The is the top-level system. ClassA Is a basic class. SysX::SubSysY This is a subsystem. metaattr-0.1/src/metaattr/test/0042775000175200017560000000000007436576431017065 5ustar stephensstephensmetaattr-0.1/src/metaattr/test/CVS/0042775000175200017560000000000007436766121017515 5ustar stephensstephensmetaattr-0.1/src/metaattr/test/CVS/Root0100664000175200017560000000006107336072171020345 0ustar stephensstephens:ext:stephens@cvs.ionink.com:/cvs/ioncvs/cvsroot metaattr-0.1/src/metaattr/test/CVS/Repository0100664000175200017560000000003307325775505021611 0ustar stephensstephenshome/ion/src/metaattr/test metaattr-0.1/src/metaattr/test/CVS/Entries0100644000175200017560000000020607436766121021040 0ustar stephensstephens/FooBar_impl.pm/1.1/Sat Sep 8 02:24:07 2001// /testmo2.pl/1.7/Sat Sep 8 02:24:07 2001// /FooBar.pm/1.6/Tue Feb 26 01:34:48 2002// D metaattr-0.1/src/metaattr/test/FooBar_ma_gen.pm0100644000175200017560000003755307436563245022106 0ustar stephensstephens# DO NOT EDIT: Created by MetaAttr::Class 1.12 use strict; package FooBar; #BEGIN { # eval { use FooBar_impl; }; #} use Carp; # use meta $FooBar::debug = 0; # Controls debug logging for entire package. @FooBar::ISA = qw(); use vars qw(); use MetaAttr::Meta::Stored::Transaction; ################################################################## # Meta-class object support. # $FooBar::__metaclass; # Place holder for FooBar metaclass object. sub metaclass { if ( ! $FooBar::__metaclass ) { eval { use FooBar_ma_meta; }; die("Cannot load FooBar meta: $@") if ( $@ ); } $FooBar::__metaclass; } sub new { my $cls = ref($_[0]) ? ref(shift) : shift; my $self = { }; bless $self, $cls; my %inits = @_; $self->defaults(\%inits); $self->initialize(%inits); } sub defaults { my ($self, $defs) = @_; #$_[0]->SUPER::defaults($defs); } sub initialize { my $self = shift; use MetaAttr::Meta::Getter; #$self->SUPER::initialize(@_); while ( @_ ) { my $name = shift; my $val = shift; $name = MetaAttr::Meta::Getter->initializer_method_name($name); $self->$name($val) if ( $self->can($name) ); } $self; } ############################### # $FooBar::foo_debug = 0; # Controls debug logging for method foo. sub foo { # Begin method debug logging. print STDERR "DEBUG:\tfoo\t(", join(",\t", @_), ")\n" if ( $FooBar::debug || $FooBar::foo_debug ); # Check capability object for get on foo. $_[0]->__ma_capability_check(undef, 'foo', 'get', @_); # Get value from attribute. $_[0]->{'foo'}; } $FooBar::__ma_init_foo_debug = 0; # Controls debug logging for method __ma_init_foo. sub __ma_init_foo { # Begin method debug logging. print STDERR "DEBUG:\t__ma_init_foo\t(", join(",\t", @_), ")\n" if ( $FooBar::debug || $FooBar::__ma_init_foo_debug ); # Initialize attribute. $_[0]->{'foo'} = $_[1]; } $FooBar::bar_debug = 0; # Controls debug logging for method bar. sub bar { # Begin method debug logging. print STDERR "DEBUG:\tbar\t(", join(",\t", @_), ")\n" if ( $FooBar::debug || $FooBar::bar_debug ); # Check capability object for get on bar. $_[0]->__ma_capability_check(undef, 'bar', 'get', @_); # Get value from attribute. $_[0]->{'bar'}; } $FooBar::__ma_init_bar_debug = 0; # Controls debug logging for method __ma_init_bar. sub __ma_init_bar { # Begin method debug logging. print STDERR "DEBUG:\t__ma_init_bar\t(", join(",\t", @_), ")\n" if ( $FooBar::debug || $FooBar::__ma_init_bar_debug ); # Initialize attribute. $_[0]->{'bar'} = $_[1]; } $FooBar::set_bar_debug = 0; # Controls debug logging for method set_bar. sub set_bar { die "bar already set" if ( $_[0]->{'__bar_set'} ); $_[0]->{'__bar_set'} = 1; # Begin method debug logging. print STDERR "DEBUG:\tset_bar\t(", join(",\t", @_), ")\n" if ( $FooBar::debug || $FooBar::set_bar_debug ); # Check capability object for set on bar. $_[0]->__ma_capability_check(undef, 'bar', 'set', @_); # Notify transaction of change. MetaAttr::Meta::Stored::Transaction->current->attribute_changed($_[0], 'bar', $_[0]->{'bar'}) if $_[0]->{'bar'} ne $_[1]; # Set value for attribute. $_[0]->{'bar'} = $_[1]; } $FooBar::baz_debug = 0; # Controls debug logging for method baz. sub baz { # Begin method debug logging. print STDERR "DEBUG:\tbaz\t(", join(",\t", @_), ")\n" if ( $FooBar::debug || $FooBar::baz_debug ); # Check capability object for get on baz. $_[0]->__ma_capability_check(undef, 'baz', 'get', @_); # Get value from attribute. $_[0]->{'baz'}; } $FooBar::__ma_init_baz_debug = 0; # Controls debug logging for method __ma_init_baz. sub __ma_init_baz { # Begin method debug logging. print STDERR "DEBUG:\t__ma_init_baz\t(", join(",\t", @_), ")\n" if ( $FooBar::debug || $FooBar::__ma_init_baz_debug ); # Validate new value. $_[0]->__ma_validate_baz($_[1]); # Initialize attribute. $_[0]->{'baz'} = $_[1]; } $FooBar::set_baz_debug = 0; # Controls debug logging for method set_baz. sub set_baz { # Begin method debug logging. print STDERR "DEBUG:\tset_baz\t(", join(",\t", @_), ")\n" if ( $FooBar::debug || $FooBar::set_baz_debug ); # Check capability object for set on baz. $_[0]->__ma_capability_check(undef, 'baz', 'set', @_); # Validate new value. $_[0]->__ma_validate_baz($_[1]); # Notify transaction of change. MetaAttr::Meta::Stored::Transaction->current->attribute_changed($_[0], 'baz', $_[0]->{'baz'}) if $_[0]->{'baz'} ne $_[1]; # Set value for attribute. $_[0]->{'baz'} = $_[1]; } $FooBar::__ma_valid_baz_debug = 0; # Controls debug logging for method __ma_valid_baz. sub __ma_valid_baz { # Begin method debug logging. print STDERR "DEBUG:\t__ma_valid_baz\t(", join(",\t", @_), ")\n" if ( $FooBar::debug || $FooBar::__ma_valid_baz_debug ); # Is $_ a valid value for baz? my ($self) = shift; shift eq $self || die 'Bad call to valid method'; # Redundant MetaAttr::Meta::Valid=HASH(0x825fa5c). local $_ = $_[0]; /^[0-9]+$/ ; } $FooBar::__ma_validate_baz_debug = 0; # Controls debug logging for method __ma_validate_baz. sub __ma_validate_baz { # Begin method debug logging. print STDERR "DEBUG:\t__ma_validate_baz\t(", join(",\t", @_), ")\n" if ( $FooBar::debug || $FooBar::__ma_validate_baz_debug ); # Check if $_ a valid value for baz? use Carp; confess(q{FooBar::baz invalid}) if ( ! $MetaAttr::Meta::Valid::disabled && ! $_[0]->__ma_valid_baz(@_) ); } $FooBar::x_debug = 0; # Controls debug logging for method x. sub x { # Begin method debug logging. print STDERR "DEBUG:\tx\t(", join(",\t", @_), ")\n" if ( $FooBar::debug || $FooBar::x_debug ); # Check capability object for get on x. $_[0]->__ma_capability_check(undef, 'x', 'get', @_); # Get value from attribute. $_[0]->{'x'}; } $FooBar::__ma_init_x_debug = 0; # Controls debug logging for method __ma_init_x. sub __ma_init_x { # Begin method debug logging. print STDERR "DEBUG:\t__ma_init_x\t(", join(",\t", @_), ")\n" if ( $FooBar::debug || $FooBar::__ma_init_x_debug ); # Validate new value. $_[0]->__ma_validate_x($_[1]); # Initialize attribute. $_[0]->{'x'} = $_[1]; } $FooBar::set_x_debug = 0; # Controls debug logging for method set_x. sub set_x { # Begin method debug logging. print STDERR "DEBUG:\tset_x\t(", join(",\t", @_), ")\n" if ( $FooBar::debug || $FooBar::set_x_debug ); # Check capability object for set on x. $_[0]->__ma_capability_check(undef, 'x', 'set', @_); # Validate new value. $_[0]->__ma_validate_x($_[1]); # Set value for attribute. $_[0]->{'x'} = $_[1]; } $FooBar::__ma_valid_x_debug = 0; # Controls debug logging for method __ma_valid_x. sub __ma_valid_x { # Begin method debug logging. print STDERR "DEBUG:\t__ma_valid_x\t(", join(",\t", @_), ")\n" if ( $FooBar::debug || $FooBar::__ma_valid_x_debug ); # Is $_ a valid value for x? my ($self) = shift; shift eq $self || die 'Bad call to valid method'; # Redundant MetaAttr::Meta::Valid=HASH(0x8263fc0). local $_ = $_[0]; ref($_) eq 'ARRAY'; ; } $FooBar::__ma_validate_x_debug = 0; # Controls debug logging for method __ma_validate_x. sub __ma_validate_x { # Begin method debug logging. print STDERR "DEBUG:\t__ma_validate_x\t(", join(",\t", @_), ")\n" if ( $FooBar::debug || $FooBar::__ma_validate_x_debug ); # Check if $_ a valid value for x? use Carp; confess(q{FooBar::x invalid}) if ( ! $MetaAttr::Meta::Valid::disabled && ! $_[0]->__ma_valid_x(@_) ); } $FooBar::an_array_debug = 0; # Controls debug logging for method an_array. sub an_array { # Begin method debug logging. print STDERR "DEBUG:\tan_array\t(", join(",\t", @_), ")\n" if ( $FooBar::debug || $FooBar::an_array_debug ); # Check capability object for get on an_array. $_[0]->__ma_capability_check(undef, 'an_array', 'get', @_); my $self = shift; my $__x = $self->{'an_array'} ||= [ ]; @_ ? @{$__x}[@_] : wantarray ? @{$__x} : scalar @{$__x} ; } $FooBar::__ma_init_an_array_debug = 0; # Controls debug logging for method __ma_init_an_array. sub __ma_init_an_array { # Begin method debug logging. print STDERR "DEBUG:\t__ma_init_an_array\t(", join(",\t", @_), ")\n" if ( $FooBar::debug || $FooBar::__ma_init_an_array_debug ); # Initialize attribute. $_[0]->{'an_array'} = $_[1]; } $FooBar::set_an_array_debug = 0; # Controls debug logging for method set_an_array. sub set_an_array { # Begin method debug logging. print STDERR "DEBUG:\tset_an_array\t(", join(",\t", @_), ")\n" if ( $FooBar::debug || $FooBar::set_an_array_debug ); # Check capability object for set on an_array. $_[0]->__ma_capability_check(undef, 'an_array', 'set', @_); # Notify transaction of change. MetaAttr::Meta::Stored::Transaction->current->attribute_changed($_[0], 'an_array', $_[0]->{'an_array'}) if $_[0]->{'an_array'} ne $_[1]; my $self = shift; my $__x = $self->{'an_array'} ||= [ ]; do { $__x->[$_[0]] = $_[1]; shift; shift; } while ( @_ ); } $FooBar::a_hash_debug = 0; # Controls debug logging for method a_hash. sub a_hash { # Begin method debug logging. print STDERR "DEBUG:\ta_hash\t(", join(",\t", @_), ")\n" if ( $FooBar::debug || $FooBar::a_hash_debug ); # Check capability object for get on a_hash. $_[0]->__ma_capability_check(undef, 'a_hash', 'get', @_); my $self = shift; my $__x = $self->{'a_hash'} ||= { }; @_ ? @{$__x}{@_} : wantarray ? %{$__x} : scalar %{$__x} ; } $FooBar::__ma_init_a_hash_debug = 0; # Controls debug logging for method __ma_init_a_hash. sub __ma_init_a_hash { # Begin method debug logging. print STDERR "DEBUG:\t__ma_init_a_hash\t(", join(",\t", @_), ")\n" if ( $FooBar::debug || $FooBar::__ma_init_a_hash_debug ); # Initialize attribute. $_[0]->{'a_hash'} = $_[1]; } $FooBar::set_a_hash_debug = 0; # Controls debug logging for method set_a_hash. sub set_a_hash { # Begin method debug logging. print STDERR "DEBUG:\tset_a_hash\t(", join(",\t", @_), ")\n" if ( $FooBar::debug || $FooBar::set_a_hash_debug ); # Check capability object for set on a_hash. $_[0]->__ma_capability_check(undef, 'a_hash', 'set', @_); # Notify transaction of change. MetaAttr::Meta::Stored::Transaction->current->attribute_changed($_[0], 'a_hash', $_[0]->{'a_hash'}) if $_[0]->{'a_hash'} ne $_[1]; my $self = shift; my $__x = $self->{'a_hash'} ||= { }; do { $__x->{$_[0]} = $_[1]; shift; shift; } while ( @_ ); } $FooBar::a_sub_debug = 0; # Controls debug logging for method a_sub. sub a_sub { # Begin method debug logging. print STDERR "DEBUG:\ta_sub\t(", join(",\t", @_), ")\n" if ( $FooBar::debug || $FooBar::a_sub_debug ); # Check capability object for get on a_sub. $_[0]->__ma_capability_check(undef, 'a_sub', 'get', @_); my $self = shift; my $__x = $self->{'a_sub'} ||= die "SUB REF NOT DEFINED" ; $__x->(@_); } $FooBar::__ma_init_a_sub_debug = 0; # Controls debug logging for method __ma_init_a_sub. sub __ma_init_a_sub { # Begin method debug logging. print STDERR "DEBUG:\t__ma_init_a_sub\t(", join(",\t", @_), ")\n" if ( $FooBar::debug || $FooBar::__ma_init_a_sub_debug ); # Initialize attribute. $_[0]->{'a_sub'} = $_[1]; } $FooBar::set_a_sub_debug = 0; # Controls debug logging for method set_a_sub. sub set_a_sub { # Begin method debug logging. print STDERR "DEBUG:\tset_a_sub\t(", join(",\t", @_), ")\n" if ( $FooBar::debug || $FooBar::set_a_sub_debug ); # Check capability object for set on a_sub. $_[0]->__ma_capability_check(undef, 'a_sub', 'set', @_); my $self = shift; my $__x = $self->{'a_sub'} ||= die "SUB REF NOT DEFINED" ; die "not sub ref" if ( ! ref($_[0]) eq 'CODE' ); $__x = $_[0] ; } $FooBar::parents_debug = 0; # Controls debug logging for method parents. sub parents { # Begin method debug logging. print STDERR "DEBUG:\tparents\t(", join(",\t", @_), ")\n" if ( $FooBar::debug || $FooBar::parents_debug ); # Check capability object for get on parents. $_[0]->__ma_capability_check(undef, 'parents', 'get', @_); my $self = shift; my $__x = $self->{'parents'} ||= [ ]; @_ ? @{$__x}[@_] : wantarray ? @{$__x} : scalar @{$__x} ; } $FooBar::__ma_init_parents_debug = 0; # Controls debug logging for method __ma_init_parents. sub __ma_init_parents { # Begin method debug logging. print STDERR "DEBUG:\t__ma_init_parents\t(", join(",\t", @_), ")\n" if ( $FooBar::debug || $FooBar::__ma_init_parents_debug ); # Initialize attribute. $_[0]->{'parents'} = $_[1]; } $FooBar::set_parents_debug = 0; # Controls debug logging for method set_parents. sub set_parents { # Begin method debug logging. print STDERR "DEBUG:\tset_parents\t(", join(",\t", @_), ")\n" if ( $FooBar::debug || $FooBar::set_parents_debug ); # Check capability object for set on parents. $_[0]->__ma_capability_check(undef, 'parents', 'set', @_); # Notify transaction of change. MetaAttr::Meta::Stored::Transaction->current->attribute_changed($_[0], 'parents', $_[0]->{'parents'}) if $_[0]->{'parents'} ne $_[1]; my $self = shift; my $__x = $self->{'parents'} ||= [ ]; do { $__x->[$_[0]] = $_[1]; shift; shift; } while ( @_ ); } $FooBar::children_debug = 0; # Controls debug logging for method children. sub children { # Begin method debug logging. print STDERR "DEBUG:\tchildren\t(", join(",\t", @_), ")\n" if ( $FooBar::debug || $FooBar::children_debug ); # Check capability object for get on children. $_[0]->__ma_capability_check(undef, 'children', 'get', @_); my $self = shift; my $__x = $self->{'children'} ||= { }; @_ ? @{$__x}{@_} : wantarray ? %{$__x} : scalar %{$__x} ; } $FooBar::__ma_init_children_debug = 0; # Controls debug logging for method __ma_init_children. sub __ma_init_children { # Begin method debug logging. print STDERR "DEBUG:\t__ma_init_children\t(", join(",\t", @_), ")\n" if ( $FooBar::debug || $FooBar::__ma_init_children_debug ); # Initialize attribute. $_[0]->{'children'} = $_[1]; } $FooBar::set_children_debug = 0; # Controls debug logging for method set_children. sub set_children { # Begin method debug logging. print STDERR "DEBUG:\tset_children\t(", join(",\t", @_), ")\n" if ( $FooBar::debug || $FooBar::set_children_debug ); # Check capability object for set on children. $_[0]->__ma_capability_check(undef, 'children', 'set', @_); # Notify transaction of change. MetaAttr::Meta::Stored::Transaction->current->attribute_changed($_[0], 'children', $_[0]->{'children'}) if $_[0]->{'children'} ne $_[1]; my $self = shift; my $__x = $self->{'children'} ||= { }; do { $__x->{$_[0]} = $_[1]; shift; shift; } while ( @_ ); } $FooBar::shoot_missle_debug = 0; # Controls debug logging for method shoot_missle. sub shoot_missle { # Check capability object for send on shoot_missle. $_[0]->__ma_capability_check(undef, 'shoot_missle', 'send', @_); # Begin method debug logging. print STDERR "DEBUG:\tshoot_missle\t(", join(",\t", @_), ")\n" if ( $FooBar::debug || $FooBar::shoot_missle_debug ); print "BOOM"; } sub __ma_capability { # Returns the capability object for this object. # ... } sub __ma_capability_check { # Check capability for this object. my ($self, $cntx, $attr, $action) = @_; print STDERR join("\t", 'CAPABILITY', @_), "\n"; # ... 1; # OK } 1; metaattr-0.1/src/metaattr/test/FooBar_ma_meta.pm0100644000175200017560000023041607436563245022254 0ustar stephensstephens#DO NOT EDIT: Created by MetaAttr::Class $FooBar::__metaclass = bless( { "%attributes" => { "parents" => bless( { "initializer_method" => bless( { "\@metas" => [ bless( { "class" => {}, "method" => bless( { "\@metas" => [ bless( { "method" => {} }, 'MetaAttr::Meta::Capability' ), {} ], "class" => {}, "body" => " print \"BOOM\"; ", "name" => "shoot_missle" }, 'MetaAttr::Method' ) }, 'MetaAttr::Meta::Debug' ) ], "attribute" => {}, "body" => " \n # Initialize attribute.\n \$_[0]->{'parents'} = \$_[1];", "initializer_meta" => bless( { "attribute" => {}, "setter_method" => bless( { "\@metas" => [ {}, bless( { "capability_method" => bless( { "class" => {}, "body" => "\n\t# Check capability for this object.\n\tmy (\$self, \$cntx, \$attr, \$action) = \@_;\n\tprint STDERR join(\"\\t\", 'CAPABILITY', \@_), \"\\n\";\n\t# ...\n\t1; # OK\n ", "capability_meta" => {}, "name" => "__ma_capability_check" }, 'MetaAttr::Method' ), "class" => {}, "method" => bless( { "\@metas" => [ {}, {} ], "attribute" => bless( { "initializer_method" => bless( { "\@metas" => [ {} ], "attribute" => {}, "body" => " \n # Initialize attribute.\n \$_[0]->{'children'} = \$_[1];", "initializer_meta" => bless( { "attribute" => {}, "setter_method" => {}, "initializer_method" => {}, "getter_method" => bless( { "\@metas" => [ {}, {} ], "attribute" => {}, "body" => "\n\t my \$self = shift;\n\t my \$__x = \$self->{'children'} ||= { };\n\t \@_ ? \@{\$__x}{\@_} : wantarray ? %{\$__x} : scalar %{\$__x} ;\n\t", "getter_meta" => {}, "type_meta" => bless( { "attribute" => {}, "setter_method" => {}, "getter_method" => {}, "type" => "hash" }, 'MetaAttr::Meta::Type' ), "name" => "children" }, 'MetaAttr::Method' ) }, 'MetaAttr::Meta::Setter' ), "name" => "__ma_init_children" }, 'MetaAttr::Method' ), "%methods" => { "set_children" => {}, "children" => {}, "__ma_init_children" => {} }, "stored_meta" => bless( { "attribute" => {}, "class" => "FooBar", "type" => undef }, 'MetaAttr::Meta::Stored' ), "name" => "children", "\@metas" => [ {}, {}, {} ], "setter_method" => {}, "class" => {}, "getter_method" => {}, "\@methods" => [ {}, {}, {} ], "type_meta" => {} }, 'MetaAttr::Attribute' ), "setter_meta" => {}, "body" => "\n\t my \$self = shift;\n\t my \$__x = \$self->{'children'} ||= { };\n\t do { \$__x->{\$_[0]} = \$_[1]; shift; shift; } while ( \@_ );\n\t", "type_meta" => {}, "name" => "set_children" }, 'MetaAttr::Method' ) }, 'MetaAttr::Meta::Capability' ) ], "attribute" => {}, "setter_meta" => {}, "body" => "\n\t my \$self = shift;\n\t my \$__x = \$self->{'parents'} ||= [ ];\n\t do { \$__x->[\$_[0]] = \$_[1]; shift; shift; } while ( \@_ );\n\t", "type_meta" => bless( { "attribute" => {}, "setter_method" => {}, "getter_method" => bless( { "\@metas" => [ {}, {} ], "attribute" => {}, "body" => "\n\t my \$self = shift;\n\t my \$__x = \$self->{'parents'} ||= [ ];\n\t \@_ ? \@{\$__x}[\@_] : wantarray ? \@{\$__x} : scalar \@{\$__x} ;\n\t", "getter_meta" => {}, "type_meta" => {}, "name" => "parents" }, 'MetaAttr::Method' ), "type" => "array" }, 'MetaAttr::Meta::Type' ), "name" => "set_parents" }, 'MetaAttr::Method' ), "initializer_method" => {}, "getter_method" => {} }, 'MetaAttr::Meta::Setter' ), "name" => "__ma_init_parents" }, 'MetaAttr::Method' ), "%methods" => { "parents" => {}, "set_parents" => {}, "__ma_init_parents" => {} }, "stored_meta" => bless( { "attribute" => {}, "class" => "FooBar", "type" => undef }, 'MetaAttr::Meta::Stored' ), "name" => "parents", "\@metas" => [ {}, {}, {} ], "setter_method" => {}, "class" => {}, "getter_method" => {}, "\@methods" => [ {}, {}, {} ], "type_meta" => {} }, 'MetaAttr::Attribute' ), "bar" => bless( { "initializer_method" => bless( { "\@metas" => [ {} ], "attribute" => {}, "body" => " \n # Initialize attribute.\n \$_[0]->{'bar'} = \$_[1];", "initializer_meta" => bless( { "attribute" => {}, "setter_method" => bless( { "\@metas" => [ bless( { "attribute" => {}, "setter_method" => {}, "setonce_attribute" => bless( { "class" => {}, "name" => "__bar_set" }, 'MetaAttr::Attribute' ), "method" => {} }, 'MetaAttr::Meta::Setonce' ), {}, {} ], "attribute" => {}, "setter_meta" => {}, "body" => " \n # Set value for attribute.\n \$_[0]->{'bar'} = \$_[1]; ", "name" => "set_bar" }, 'MetaAttr::Method' ), "initializer_method" => {}, "getter_method" => bless( { "\@metas" => [ {}, {} ], "attribute" => {}, "body" => " \n # Get value from attribute.\n \$_[0]->{'bar'};", "getter_meta" => {}, "name" => "bar" }, 'MetaAttr::Method' ) }, 'MetaAttr::Meta::Setter' ), "name" => "__ma_init_bar" }, 'MetaAttr::Method' ), "%methods" => { "__ma_init_bar" => {}, "bar" => {}, "set_bar" => {} }, "stored_meta" => bless( { "attribute" => {}, "type" => "string" }, 'MetaAttr::Meta::Stored' ), "name" => "bar", "\@metas" => [ {}, {}, {} ], "setter_method" => {}, "class" => {}, "getter_method" => {}, "\@methods" => [ {}, {}, {} ] }, 'MetaAttr::Attribute' ), "a_hash" => bless( { "initializer_method" => bless( { "\@metas" => [ {} ], "attribute" => {}, "body" => " \n # Initialize attribute.\n \$_[0]->{'a_hash'} = \$_[1];", "initializer_meta" => bless( { "attribute" => {}, "setter_method" => bless( { "\@metas" => [ {}, {} ], "attribute" => {}, "setter_meta" => {}, "body" => "\n\t my \$self = shift;\n\t my \$__x = \$self->{'a_hash'} ||= { };\n\t do { \$__x->{\$_[0]} = \$_[1]; shift; shift; } while ( \@_ );\n\t", "type_meta" => bless( { "attribute" => {}, "setter_method" => {}, "getter_method" => bless( { "\@metas" => [ {}, {} ], "attribute" => {}, "body" => "\n\t my \$self = shift;\n\t my \$__x = \$self->{'a_hash'} ||= { };\n\t \@_ ? \@{\$__x}{\@_} : wantarray ? %{\$__x} : scalar %{\$__x} ;\n\t", "getter_meta" => {}, "type_meta" => {}, "name" => "a_hash" }, 'MetaAttr::Method' ), "type" => "hash" }, 'MetaAttr::Meta::Type' ), "name" => "set_a_hash" }, 'MetaAttr::Method' ), "initializer_method" => {}, "getter_method" => {} }, 'MetaAttr::Meta::Setter' ), "name" => "__ma_init_a_hash" }, 'MetaAttr::Method' ), "%methods" => { "a_hash" => {}, "set_a_hash" => {}, "__ma_init_a_hash" => {} }, "stored_meta" => bless( { "attribute" => {} }, 'MetaAttr::Meta::Stored' ), "name" => "a_hash", "\@metas" => [ {}, {}, {} ], "setter_method" => {}, "class" => {}, "getter_method" => {}, "\@methods" => [ {}, {}, {} ], "type_meta" => {} }, 'MetaAttr::Attribute' ), "a_sub" => bless( { "initializer_method" => bless( { "\@metas" => [ {} ], "attribute" => {}, "body" => " \n # Initialize attribute.\n \$_[0]->{'a_sub'} = \$_[1];", "initializer_meta" => bless( { "attribute" => {}, "setter_method" => bless( { "\@metas" => [ {}, {} ], "attribute" => {}, "setter_meta" => {}, "body" => "\n\t my \$self = shift;\n\t my \$__x = \$self->{'a_sub'} ||= die \"SUB REF NOT DEFINED\" ;\n\t die \"not sub ref\" if ( ! ref(\$_[0]) eq 'CODE' ); \$__x = \$_[0] ;\n\t", "type_meta" => bless( { "attribute" => {}, "setter_method" => {}, "getter_method" => bless( { "\@metas" => [ {}, {} ], "attribute" => {}, "body" => "\n\t my \$self = shift;\n\t my \$__x = \$self->{'a_sub'} ||= die \"SUB REF NOT DEFINED\" ;\n\t \$__x->(\@_);\n\t", "getter_meta" => {}, "type_meta" => {}, "name" => "a_sub" }, 'MetaAttr::Method' ), "type" => "code" }, 'MetaAttr::Meta::Type' ), "name" => "set_a_sub" }, 'MetaAttr::Method' ), "initializer_method" => {}, "getter_method" => {} }, 'MetaAttr::Meta::Setter' ), "name" => "__ma_init_a_sub" }, 'MetaAttr::Method' ), "%methods" => { "__ma_init_a_sub" => {}, "set_a_sub" => {}, "a_sub" => {} }, "name" => "a_sub", "\@metas" => [ {}, {} ], "setter_method" => {}, "class" => {}, "getter_method" => {}, "\@methods" => [ {}, {}, {} ], "type_meta" => {} }, 'MetaAttr::Attribute' ), "foo" => bless( { "initializer_method" => bless( { "\@metas" => [ {} ], "attribute" => {}, "body" => " \n # Initialize attribute.\n \$_[0]->{'foo'} = \$_[1];", "initializer_meta" => bless( { "attribute" => {}, "initializer_method" => {}, "getter_method" => bless( { "\@metas" => [ {}, {} ], "attribute" => {}, "body" => " \n # Get value from attribute.\n \$_[0]->{'foo'};", "getter_meta" => {}, "name" => "foo" }, 'MetaAttr::Method' ) }, 'MetaAttr::Meta::Getter' ), "name" => "__ma_init_foo" }, 'MetaAttr::Method' ), "%methods" => { "__ma_init_foo" => {}, "foo" => {} }, "stored_meta" => bless( { "attribute" => {} }, 'MetaAttr::Meta::Stored' ), "name" => "foo", "\@metas" => [ {}, {} ], "class" => {}, "getter_method" => {}, "\@methods" => [ {}, {} ] }, 'MetaAttr::Attribute' ), "children" => {}, "baz" => bless( { "initializer_method" => bless( { "\@metas" => [ {} ], "attribute" => {}, "body" => " \n # Initialize attribute.\n \$_[0]->{'baz'} = \$_[1];", "initializer_meta" => bless( { "attribute" => {}, "setter_method" => bless( { "\@metas" => [ {}, {} ], "attribute" => {}, "setter_meta" => {}, "body" => " \n # Set value for attribute.\n \$_[0]->{'baz'} = \$_[1]; ", "name" => "set_baz" }, 'MetaAttr::Method' ), "initializer_method" => {}, "getter_method" => bless( { "\@metas" => [ {}, {} ], "attribute" => {}, "body" => " \n # Get value from attribute.\n \$_[0]->{'baz'};", "getter_meta" => {}, "name" => "baz" }, 'MetaAttr::Method' ) }, 'MetaAttr::Meta::Setter' ), "name" => "__ma_init_baz" }, 'MetaAttr::Method' ), "%methods" => { "__ma_valid_baz" => bless( { "\@metas" => [ {} ], "attribute" => {}, "valid_meta" => bless( { "attribute" => {}, "expr" => " /^[0-9]+\$/ ", "validate_method" => bless( { "\@metas" => [ {} ], "attribute" => {}, "body" => "\n # Check if \$_ a valid value for baz?\n use Carp;\n confess(q{FooBar::baz invalid}) if ( ! \$MetaAttr::Meta::Valid::disabled && ! \$_[0]->__ma_valid_baz(\@_) );\n ", "validate_meta" => {}, "name" => "__ma_validate_baz" }, 'MetaAttr::Method' ), "valid_method" => {} }, 'MetaAttr::Meta::Valid' ), "body" => "\n # Is \$_ a valid value for baz?\n my (\$self) = shift;\n shift eq \$self || die 'Bad call to valid method'; # Redundant MetaAttr::Meta::Valid=HASH(0x825fa5c).\n local \$_ = \$_[0];\n /^[0-9]+\$/ ;\n ", "name" => "__ma_valid_baz" }, 'MetaAttr::Method' ), "__ma_init_baz" => {}, "__ma_validate_baz" => {}, "baz" => {}, "set_baz" => {} }, "stored_meta" => bless( { "attribute" => {}, "type" => "int" }, 'MetaAttr::Meta::Stored' ), "name" => "baz", "\@metas" => [ {}, {}, {} ], "setter_method" => {}, "class" => {}, "validate_method" => {}, "valid_method" => {}, "getter_method" => {}, "\@methods" => [ {}, {}, {}, {}, {} ] }, 'MetaAttr::Attribute' ), "x" => bless( { "initializer_method" => bless( { "\@metas" => [ {} ], "attribute" => {}, "body" => " \n # Initialize attribute.\n \$_[0]->{'x'} = \$_[1];", "initializer_meta" => bless( { "attribute" => {}, "setter_method" => bless( { "\@metas" => [ {}, {} ], "attribute" => {}, "setter_meta" => {}, "body" => " \n # Set value for attribute.\n \$_[0]->{'x'} = \$_[1]; ", "name" => "set_x" }, 'MetaAttr::Method' ), "initializer_method" => {}, "getter_method" => bless( { "\@metas" => [ {}, {} ], "attribute" => {}, "body" => " \n # Get value from attribute.\n \$_[0]->{'x'};", "getter_meta" => {}, "name" => "x" }, 'MetaAttr::Method' ) }, 'MetaAttr::Meta::Setter' ), "name" => "__ma_init_x" }, 'MetaAttr::Method' ), "%methods" => { "__ma_validate_x" => bless( { "\@metas" => [ {} ], "attribute" => {}, "body" => "\n # Check if \$_ a valid value for x?\n use Carp;\n confess(q{FooBar::x invalid}) if ( ! \$MetaAttr::Meta::Valid::disabled && ! \$_[0]->__ma_valid_x(\@_) );\n ", "validate_meta" => bless( { "attribute" => {}, "expr" => " ref(\$_) eq 'ARRAY'; ", "validate_method" => {}, "valid_method" => bless( { "\@metas" => [ {} ], "attribute" => {}, "valid_meta" => {}, "body" => "\n # Is \$_ a valid value for x?\n my (\$self) = shift;\n shift eq \$self || die 'Bad call to valid method'; # Redundant MetaAttr::Meta::Valid=HASH(0x8263fc0).\n local \$_ = \$_[0];\n ref(\$_) eq 'ARRAY'; ;\n ", "name" => "__ma_valid_x" }, 'MetaAttr::Method' ) }, 'MetaAttr::Meta::Valid' ), "name" => "__ma_validate_x" }, 'MetaAttr::Method' ), "x" => {}, "__ma_valid_x" => {}, "set_x" => {}, "__ma_init_x" => {} }, "name" => "x", "\@metas" => [ {}, {} ], "setter_method" => {}, "class" => {}, "validate_method" => {}, "valid_method" => {}, "getter_method" => {}, "\@methods" => [ {}, {}, {}, {}, {} ] }, 'MetaAttr::Attribute' ), "__bar_set" => {}, "an_array" => bless( { "initializer_method" => bless( { "\@metas" => [ {} ], "attribute" => {}, "body" => " \n # Initialize attribute.\n \$_[0]->{'an_array'} = \$_[1];", "initializer_meta" => bless( { "attribute" => {}, "setter_method" => bless( { "\@metas" => [ {}, {} ], "attribute" => {}, "setter_meta" => {}, "body" => "\n\t my \$self = shift;\n\t my \$__x = \$self->{'an_array'} ||= [ ];\n\t do { \$__x->[\$_[0]] = \$_[1]; shift; shift; } while ( \@_ );\n\t", "type_meta" => bless( { "attribute" => {}, "setter_method" => {}, "getter_method" => bless( { "\@metas" => [ {}, {} ], "attribute" => {}, "body" => "\n\t my \$self = shift;\n\t my \$__x = \$self->{'an_array'} ||= [ ];\n\t \@_ ? \@{\$__x}[\@_] : wantarray ? \@{\$__x} : scalar \@{\$__x} ;\n\t", "getter_meta" => {}, "type_meta" => {}, "name" => "an_array" }, 'MetaAttr::Method' ), "type" => "array" }, 'MetaAttr::Meta::Type' ), "name" => "set_an_array" }, 'MetaAttr::Method' ), "initializer_method" => {}, "getter_method" => {} }, 'MetaAttr::Meta::Setter' ), "name" => "__ma_init_an_array" }, 'MetaAttr::Method' ), "%methods" => { "__ma_init_an_array" => {}, "set_an_array" => {}, "an_array" => {} }, "stored_meta" => bless( { "attribute" => {} }, 'MetaAttr::Meta::Stored' ), "name" => "an_array", "\@metas" => [ {}, {}, {} ], "setter_method" => {}, "class" => {}, "getter_method" => {}, "\@methods" => [ {}, {}, {} ], "type_meta" => {} }, 'MetaAttr::Attribute' ) }, "%methods" => { "__ma_capability" => bless( { "class" => {}, "body" => "\n\t# Returns the capability object for this object.\n\t# ...\n ", "capability_meta" => {}, "name" => "__ma_capability" }, 'MetaAttr::Method' ), "__ma_capability_check" => {}, "shoot_missle" => {} }, "name" => "FooBar", "\@metas" => [ bless( { "class" => {} }, 'MetaAttr::Meta::Blessed_hash' ), bless( { "class" => {}, "use" => [ "Carp" ] }, 'MetaAttr::Meta::Use' ), {}, {} ], "memory_model" => {}, "\@attributes" => [ {}, {}, {}, {}, {}, {}, {}, {}, {}, {} ], "\@methods" => [ {}, {}, {} ] }, 'MetaAttr::Class' ); $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"\@metas"}[0]{"class"} = $FooBar::__metaclass; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"\@metas"}[0]{"method"}{"\@metas"}[0]{"method"} = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"\@metas"}[0]{"method"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"\@metas"}[0]{"method"}{"\@metas"}[1] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"\@metas"}[0]; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"\@metas"}[0]{"method"}{"class"} = $FooBar::__metaclass; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"parents"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"parents"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[0] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"\@metas"}[0]; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"capability_method"}{"class"} = $FooBar::__metaclass; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"capability_method"}{"capability_meta"} = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"class"} = $FooBar::__metaclass; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"\@metas"}[0] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"\@metas"}[0]; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"\@metas"}[1] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}{"initializer_method"}{"\@metas"}[0] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"\@metas"}[0]; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}{"initializer_method"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}{"initializer_method"}{"initializer_meta"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}{"initializer_method"}{"initializer_meta"}{"setter_method"} = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}{"initializer_method"}{"initializer_meta"}{"initializer_method"} = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}{"initializer_method"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}{"initializer_method"}{"initializer_meta"}{"getter_method"}{"\@metas"}[0] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"\@metas"}[0]; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}{"initializer_method"}{"initializer_meta"}{"getter_method"}{"\@metas"}[1] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}{"initializer_method"}{"initializer_meta"}{"getter_method"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}{"initializer_method"}{"initializer_meta"}{"getter_method"}{"getter_meta"} = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}{"initializer_method"}{"initializer_meta"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}{"initializer_method"}{"initializer_meta"}{"getter_method"}{"type_meta"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}{"initializer_method"}{"initializer_meta"}{"getter_method"}{"type_meta"}{"setter_method"} = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}{"initializer_method"}{"initializer_meta"}{"getter_method"}{"type_meta"}{"getter_method"} = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}{"initializer_method"}{"initializer_meta"}{"getter_method"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}{"%methods"}{"set_children"} = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}{"%methods"}{"children"} = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}{"initializer_method"}{"initializer_meta"}{"getter_method"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}{"%methods"}{"__ma_init_children"} = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}{"initializer_method"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}{"stored_meta"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}{"\@metas"}[0] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}{"initializer_method"}{"initializer_meta"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}{"\@metas"}[1] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}{"initializer_method"}{"initializer_meta"}{"getter_method"}{"type_meta"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}{"\@metas"}[2] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}{"stored_meta"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}{"setter_method"} = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}{"class"} = $FooBar::__metaclass; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}{"getter_method"} = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}{"initializer_method"}{"initializer_meta"}{"getter_method"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}{"\@methods"}[0] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}{"initializer_method"}{"initializer_meta"}{"getter_method"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}{"\@methods"}[1] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}{"initializer_method"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}{"\@methods"}[2] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}{"type_meta"} = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}{"initializer_method"}{"initializer_meta"}{"getter_method"}{"type_meta"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"setter_meta"} = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}{"initializer_method"}{"initializer_meta"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"type_meta"} = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}{"initializer_method"}{"initializer_meta"}{"getter_method"}{"type_meta"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"parents"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"setter_meta"} = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"parents"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}{"setter_method"} = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}{"getter_method"}{"\@metas"}[0] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"\@metas"}[0]; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}{"getter_method"}{"\@metas"}[1] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}{"getter_method"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"parents"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}{"getter_method"}{"getter_meta"} = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}{"getter_method"}{"type_meta"} = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"initializer_method"} = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"getter_method"} = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}{"getter_method"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"%methods"}{"parents"} = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}{"getter_method"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"%methods"}{"set_parents"} = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"%methods"}{"__ma_init_parents"} = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"stored_meta"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"parents"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"\@metas"}[0] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"\@metas"}[1] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"\@metas"}[2] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"stored_meta"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"setter_method"} = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"class"} = $FooBar::__metaclass; $FooBar::__metaclass->{"%attributes"}{"parents"}{"getter_method"} = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}{"getter_method"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"\@methods"}[0] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}{"getter_method"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"\@methods"}[1] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"\@methods"}[2] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}; $FooBar::__metaclass->{"%attributes"}{"parents"}{"type_meta"} = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}; $FooBar::__metaclass->{"%attributes"}{"bar"}{"initializer_method"}{"\@metas"}[0] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"\@metas"}[0]; $FooBar::__metaclass->{"%attributes"}{"bar"}{"initializer_method"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"bar"}; $FooBar::__metaclass->{"%attributes"}{"bar"}{"initializer_method"}{"initializer_meta"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"bar"}; $FooBar::__metaclass->{"%attributes"}{"bar"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[0]{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"bar"}; $FooBar::__metaclass->{"%attributes"}{"bar"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[0]{"setter_method"} = $FooBar::__metaclass->{"%attributes"}{"bar"}{"initializer_method"}{"initializer_meta"}; $FooBar::__metaclass->{"%attributes"}{"bar"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[0]{"setonce_attribute"}{"class"} = $FooBar::__metaclass; $FooBar::__metaclass->{"%attributes"}{"bar"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[0]{"method"} = $FooBar::__metaclass->{"%attributes"}{"bar"}{"initializer_method"}{"initializer_meta"}{"setter_method"}; $FooBar::__metaclass->{"%attributes"}{"bar"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"\@metas"}[0]; $FooBar::__metaclass->{"%attributes"}{"bar"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[2] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]; $FooBar::__metaclass->{"%attributes"}{"bar"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"bar"}; $FooBar::__metaclass->{"%attributes"}{"bar"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"setter_meta"} = $FooBar::__metaclass->{"%attributes"}{"bar"}{"initializer_method"}{"initializer_meta"}; $FooBar::__metaclass->{"%attributes"}{"bar"}{"initializer_method"}{"initializer_meta"}{"initializer_method"} = $FooBar::__metaclass->{"%attributes"}{"bar"}{"initializer_method"}; $FooBar::__metaclass->{"%attributes"}{"bar"}{"initializer_method"}{"initializer_meta"}{"getter_method"}{"\@metas"}[0] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"\@metas"}[0]; $FooBar::__metaclass->{"%attributes"}{"bar"}{"initializer_method"}{"initializer_meta"}{"getter_method"}{"\@metas"}[1] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]; $FooBar::__metaclass->{"%attributes"}{"bar"}{"initializer_method"}{"initializer_meta"}{"getter_method"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"bar"}; $FooBar::__metaclass->{"%attributes"}{"bar"}{"initializer_method"}{"initializer_meta"}{"getter_method"}{"getter_meta"} = $FooBar::__metaclass->{"%attributes"}{"bar"}{"initializer_method"}{"initializer_meta"}; $FooBar::__metaclass->{"%attributes"}{"bar"}{"%methods"}{"__ma_init_bar"} = $FooBar::__metaclass->{"%attributes"}{"bar"}{"initializer_method"}; $FooBar::__metaclass->{"%attributes"}{"bar"}{"%methods"}{"bar"} = $FooBar::__metaclass->{"%attributes"}{"bar"}{"initializer_method"}{"initializer_meta"}{"getter_method"}; $FooBar::__metaclass->{"%attributes"}{"bar"}{"%methods"}{"set_bar"} = $FooBar::__metaclass->{"%attributes"}{"bar"}{"initializer_method"}{"initializer_meta"}{"setter_method"}; $FooBar::__metaclass->{"%attributes"}{"bar"}{"stored_meta"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"bar"}; $FooBar::__metaclass->{"%attributes"}{"bar"}{"\@metas"}[0] = $FooBar::__metaclass->{"%attributes"}{"bar"}{"initializer_method"}{"initializer_meta"}; $FooBar::__metaclass->{"%attributes"}{"bar"}{"\@metas"}[1] = $FooBar::__metaclass->{"%attributes"}{"bar"}{"stored_meta"}; $FooBar::__metaclass->{"%attributes"}{"bar"}{"\@metas"}[2] = $FooBar::__metaclass->{"%attributes"}{"bar"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[0]; $FooBar::__metaclass->{"%attributes"}{"bar"}{"setter_method"} = $FooBar::__metaclass->{"%attributes"}{"bar"}{"initializer_method"}{"initializer_meta"}{"setter_method"}; $FooBar::__metaclass->{"%attributes"}{"bar"}{"class"} = $FooBar::__metaclass; $FooBar::__metaclass->{"%attributes"}{"bar"}{"getter_method"} = $FooBar::__metaclass->{"%attributes"}{"bar"}{"initializer_method"}{"initializer_meta"}{"getter_method"}; $FooBar::__metaclass->{"%attributes"}{"bar"}{"\@methods"}[0] = $FooBar::__metaclass->{"%attributes"}{"bar"}{"initializer_method"}{"initializer_meta"}{"getter_method"}; $FooBar::__metaclass->{"%attributes"}{"bar"}{"\@methods"}[1] = $FooBar::__metaclass->{"%attributes"}{"bar"}{"initializer_method"}; $FooBar::__metaclass->{"%attributes"}{"bar"}{"\@methods"}[2] = $FooBar::__metaclass->{"%attributes"}{"bar"}{"initializer_method"}{"initializer_meta"}{"setter_method"}; $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"initializer_method"}{"\@metas"}[0] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"\@metas"}[0]; $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"initializer_method"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"a_hash"}; $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"initializer_method"}{"initializer_meta"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"a_hash"}; $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[0] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"\@metas"}[0]; $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]; $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"a_hash"}; $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"setter_meta"} = $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"initializer_method"}{"initializer_meta"}; $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"a_hash"}; $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}{"setter_method"} = $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"initializer_method"}{"initializer_meta"}{"setter_method"}; $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}{"getter_method"}{"\@metas"}[0] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"\@metas"}[0]; $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}{"getter_method"}{"\@metas"}[1] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]; $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}{"getter_method"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"a_hash"}; $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}{"getter_method"}{"getter_meta"} = $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"initializer_method"}{"initializer_meta"}; $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}{"getter_method"}{"type_meta"} = $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}; $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"initializer_method"}{"initializer_meta"}{"initializer_method"} = $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"initializer_method"}; $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"initializer_method"}{"initializer_meta"}{"getter_method"} = $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}{"getter_method"}; $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"%methods"}{"a_hash"} = $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}{"getter_method"}; $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"%methods"}{"set_a_hash"} = $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"initializer_method"}{"initializer_meta"}{"setter_method"}; $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"%methods"}{"__ma_init_a_hash"} = $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"initializer_method"}; $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"stored_meta"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"a_hash"}; $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"\@metas"}[0] = $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"initializer_method"}{"initializer_meta"}; $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"\@metas"}[1] = $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}; $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"\@metas"}[2] = $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"stored_meta"}; $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"setter_method"} = $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"initializer_method"}{"initializer_meta"}{"setter_method"}; $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"class"} = $FooBar::__metaclass; $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"getter_method"} = $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}{"getter_method"}; $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"\@methods"}[0] = $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}{"getter_method"}; $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"\@methods"}[1] = $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"initializer_method"}; $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"\@methods"}[2] = $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"initializer_method"}{"initializer_meta"}{"setter_method"}; $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"type_meta"} = $FooBar::__metaclass->{"%attributes"}{"a_hash"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}; $FooBar::__metaclass->{"%attributes"}{"a_sub"}{"initializer_method"}{"\@metas"}[0] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"\@metas"}[0]; $FooBar::__metaclass->{"%attributes"}{"a_sub"}{"initializer_method"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"a_sub"}; $FooBar::__metaclass->{"%attributes"}{"a_sub"}{"initializer_method"}{"initializer_meta"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"a_sub"}; $FooBar::__metaclass->{"%attributes"}{"a_sub"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[0] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"\@metas"}[0]; $FooBar::__metaclass->{"%attributes"}{"a_sub"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]; $FooBar::__metaclass->{"%attributes"}{"a_sub"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"a_sub"}; $FooBar::__metaclass->{"%attributes"}{"a_sub"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"setter_meta"} = $FooBar::__metaclass->{"%attributes"}{"a_sub"}{"initializer_method"}{"initializer_meta"}; $FooBar::__metaclass->{"%attributes"}{"a_sub"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"a_sub"}; $FooBar::__metaclass->{"%attributes"}{"a_sub"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}{"setter_method"} = $FooBar::__metaclass->{"%attributes"}{"a_sub"}{"initializer_method"}{"initializer_meta"}{"setter_method"}; $FooBar::__metaclass->{"%attributes"}{"a_sub"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}{"getter_method"}{"\@metas"}[0] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"\@metas"}[0]; $FooBar::__metaclass->{"%attributes"}{"a_sub"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}{"getter_method"}{"\@metas"}[1] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]; $FooBar::__metaclass->{"%attributes"}{"a_sub"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}{"getter_method"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"a_sub"}; $FooBar::__metaclass->{"%attributes"}{"a_sub"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}{"getter_method"}{"getter_meta"} = $FooBar::__metaclass->{"%attributes"}{"a_sub"}{"initializer_method"}{"initializer_meta"}; $FooBar::__metaclass->{"%attributes"}{"a_sub"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}{"getter_method"}{"type_meta"} = $FooBar::__metaclass->{"%attributes"}{"a_sub"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}; $FooBar::__metaclass->{"%attributes"}{"a_sub"}{"initializer_method"}{"initializer_meta"}{"initializer_method"} = $FooBar::__metaclass->{"%attributes"}{"a_sub"}{"initializer_method"}; $FooBar::__metaclass->{"%attributes"}{"a_sub"}{"initializer_method"}{"initializer_meta"}{"getter_method"} = $FooBar::__metaclass->{"%attributes"}{"a_sub"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}{"getter_method"}; $FooBar::__metaclass->{"%attributes"}{"a_sub"}{"%methods"}{"__ma_init_a_sub"} = $FooBar::__metaclass->{"%attributes"}{"a_sub"}{"initializer_method"}; $FooBar::__metaclass->{"%attributes"}{"a_sub"}{"%methods"}{"set_a_sub"} = $FooBar::__metaclass->{"%attributes"}{"a_sub"}{"initializer_method"}{"initializer_meta"}{"setter_method"}; $FooBar::__metaclass->{"%attributes"}{"a_sub"}{"%methods"}{"a_sub"} = $FooBar::__metaclass->{"%attributes"}{"a_sub"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}{"getter_method"}; $FooBar::__metaclass->{"%attributes"}{"a_sub"}{"\@metas"}[0] = $FooBar::__metaclass->{"%attributes"}{"a_sub"}{"initializer_method"}{"initializer_meta"}; $FooBar::__metaclass->{"%attributes"}{"a_sub"}{"\@metas"}[1] = $FooBar::__metaclass->{"%attributes"}{"a_sub"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}; $FooBar::__metaclass->{"%attributes"}{"a_sub"}{"setter_method"} = $FooBar::__metaclass->{"%attributes"}{"a_sub"}{"initializer_method"}{"initializer_meta"}{"setter_method"}; $FooBar::__metaclass->{"%attributes"}{"a_sub"}{"class"} = $FooBar::__metaclass; $FooBar::__metaclass->{"%attributes"}{"a_sub"}{"getter_method"} = $FooBar::__metaclass->{"%attributes"}{"a_sub"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}{"getter_method"}; $FooBar::__metaclass->{"%attributes"}{"a_sub"}{"\@methods"}[0] = $FooBar::__metaclass->{"%attributes"}{"a_sub"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}{"getter_method"}; $FooBar::__metaclass->{"%attributes"}{"a_sub"}{"\@methods"}[1] = $FooBar::__metaclass->{"%attributes"}{"a_sub"}{"initializer_method"}; $FooBar::__metaclass->{"%attributes"}{"a_sub"}{"\@methods"}[2] = $FooBar::__metaclass->{"%attributes"}{"a_sub"}{"initializer_method"}{"initializer_meta"}{"setter_method"}; $FooBar::__metaclass->{"%attributes"}{"a_sub"}{"type_meta"} = $FooBar::__metaclass->{"%attributes"}{"a_sub"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}; $FooBar::__metaclass->{"%attributes"}{"foo"}{"initializer_method"}{"\@metas"}[0] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"\@metas"}[0]; $FooBar::__metaclass->{"%attributes"}{"foo"}{"initializer_method"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"foo"}; $FooBar::__metaclass->{"%attributes"}{"foo"}{"initializer_method"}{"initializer_meta"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"foo"}; $FooBar::__metaclass->{"%attributes"}{"foo"}{"initializer_method"}{"initializer_meta"}{"initializer_method"} = $FooBar::__metaclass->{"%attributes"}{"foo"}{"initializer_method"}; $FooBar::__metaclass->{"%attributes"}{"foo"}{"initializer_method"}{"initializer_meta"}{"getter_method"}{"\@metas"}[0] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"\@metas"}[0]; $FooBar::__metaclass->{"%attributes"}{"foo"}{"initializer_method"}{"initializer_meta"}{"getter_method"}{"\@metas"}[1] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]; $FooBar::__metaclass->{"%attributes"}{"foo"}{"initializer_method"}{"initializer_meta"}{"getter_method"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"foo"}; $FooBar::__metaclass->{"%attributes"}{"foo"}{"initializer_method"}{"initializer_meta"}{"getter_method"}{"getter_meta"} = $FooBar::__metaclass->{"%attributes"}{"foo"}{"initializer_method"}{"initializer_meta"}; $FooBar::__metaclass->{"%attributes"}{"foo"}{"%methods"}{"__ma_init_foo"} = $FooBar::__metaclass->{"%attributes"}{"foo"}{"initializer_method"}; $FooBar::__metaclass->{"%attributes"}{"foo"}{"%methods"}{"foo"} = $FooBar::__metaclass->{"%attributes"}{"foo"}{"initializer_method"}{"initializer_meta"}{"getter_method"}; $FooBar::__metaclass->{"%attributes"}{"foo"}{"stored_meta"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"foo"}; $FooBar::__metaclass->{"%attributes"}{"foo"}{"\@metas"}[0] = $FooBar::__metaclass->{"%attributes"}{"foo"}{"initializer_method"}{"initializer_meta"}; $FooBar::__metaclass->{"%attributes"}{"foo"}{"\@metas"}[1] = $FooBar::__metaclass->{"%attributes"}{"foo"}{"stored_meta"}; $FooBar::__metaclass->{"%attributes"}{"foo"}{"class"} = $FooBar::__metaclass; $FooBar::__metaclass->{"%attributes"}{"foo"}{"getter_method"} = $FooBar::__metaclass->{"%attributes"}{"foo"}{"initializer_method"}{"initializer_meta"}{"getter_method"}; $FooBar::__metaclass->{"%attributes"}{"foo"}{"\@methods"}[0] = $FooBar::__metaclass->{"%attributes"}{"foo"}{"initializer_method"}{"initializer_meta"}{"getter_method"}; $FooBar::__metaclass->{"%attributes"}{"foo"}{"\@methods"}[1] = $FooBar::__metaclass->{"%attributes"}{"foo"}{"initializer_method"}; $FooBar::__metaclass->{"%attributes"}{"children"} = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}; $FooBar::__metaclass->{"%attributes"}{"baz"}{"initializer_method"}{"\@metas"}[0] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"\@metas"}[0]; $FooBar::__metaclass->{"%attributes"}{"baz"}{"initializer_method"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"baz"}; $FooBar::__metaclass->{"%attributes"}{"baz"}{"initializer_method"}{"initializer_meta"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"baz"}; $FooBar::__metaclass->{"%attributes"}{"baz"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[0] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"\@metas"}[0]; $FooBar::__metaclass->{"%attributes"}{"baz"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]; $FooBar::__metaclass->{"%attributes"}{"baz"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"baz"}; $FooBar::__metaclass->{"%attributes"}{"baz"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"setter_meta"} = $FooBar::__metaclass->{"%attributes"}{"baz"}{"initializer_method"}{"initializer_meta"}; $FooBar::__metaclass->{"%attributes"}{"baz"}{"initializer_method"}{"initializer_meta"}{"initializer_method"} = $FooBar::__metaclass->{"%attributes"}{"baz"}{"initializer_method"}; $FooBar::__metaclass->{"%attributes"}{"baz"}{"initializer_method"}{"initializer_meta"}{"getter_method"}{"\@metas"}[0] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"\@metas"}[0]; $FooBar::__metaclass->{"%attributes"}{"baz"}{"initializer_method"}{"initializer_meta"}{"getter_method"}{"\@metas"}[1] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]; $FooBar::__metaclass->{"%attributes"}{"baz"}{"initializer_method"}{"initializer_meta"}{"getter_method"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"baz"}; $FooBar::__metaclass->{"%attributes"}{"baz"}{"initializer_method"}{"initializer_meta"}{"getter_method"}{"getter_meta"} = $FooBar::__metaclass->{"%attributes"}{"baz"}{"initializer_method"}{"initializer_meta"}; $FooBar::__metaclass->{"%attributes"}{"baz"}{"%methods"}{"__ma_valid_baz"}{"\@metas"}[0] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"\@metas"}[0]; $FooBar::__metaclass->{"%attributes"}{"baz"}{"%methods"}{"__ma_valid_baz"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"baz"}; $FooBar::__metaclass->{"%attributes"}{"baz"}{"%methods"}{"__ma_valid_baz"}{"valid_meta"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"baz"}; $FooBar::__metaclass->{"%attributes"}{"baz"}{"%methods"}{"__ma_valid_baz"}{"valid_meta"}{"validate_method"}{"\@metas"}[0] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"\@metas"}[0]; $FooBar::__metaclass->{"%attributes"}{"baz"}{"%methods"}{"__ma_valid_baz"}{"valid_meta"}{"validate_method"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"baz"}; $FooBar::__metaclass->{"%attributes"}{"baz"}{"%methods"}{"__ma_valid_baz"}{"valid_meta"}{"validate_method"}{"validate_meta"} = $FooBar::__metaclass->{"%attributes"}{"baz"}{"%methods"}{"__ma_valid_baz"}{"valid_meta"}; $FooBar::__metaclass->{"%attributes"}{"baz"}{"%methods"}{"__ma_valid_baz"}{"valid_meta"}{"valid_method"} = $FooBar::__metaclass->{"%attributes"}{"baz"}{"%methods"}{"__ma_valid_baz"}; $FooBar::__metaclass->{"%attributes"}{"baz"}{"%methods"}{"__ma_init_baz"} = $FooBar::__metaclass->{"%attributes"}{"baz"}{"initializer_method"}; $FooBar::__metaclass->{"%attributes"}{"baz"}{"%methods"}{"__ma_validate_baz"} = $FooBar::__metaclass->{"%attributes"}{"baz"}{"%methods"}{"__ma_valid_baz"}{"valid_meta"}{"validate_method"}; $FooBar::__metaclass->{"%attributes"}{"baz"}{"%methods"}{"baz"} = $FooBar::__metaclass->{"%attributes"}{"baz"}{"initializer_method"}{"initializer_meta"}{"getter_method"}; $FooBar::__metaclass->{"%attributes"}{"baz"}{"%methods"}{"set_baz"} = $FooBar::__metaclass->{"%attributes"}{"baz"}{"initializer_method"}{"initializer_meta"}{"setter_method"}; $FooBar::__metaclass->{"%attributes"}{"baz"}{"stored_meta"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"baz"}; $FooBar::__metaclass->{"%attributes"}{"baz"}{"\@metas"}[0] = $FooBar::__metaclass->{"%attributes"}{"baz"}{"initializer_method"}{"initializer_meta"}; $FooBar::__metaclass->{"%attributes"}{"baz"}{"\@metas"}[1] = $FooBar::__metaclass->{"%attributes"}{"baz"}{"%methods"}{"__ma_valid_baz"}{"valid_meta"}; $FooBar::__metaclass->{"%attributes"}{"baz"}{"\@metas"}[2] = $FooBar::__metaclass->{"%attributes"}{"baz"}{"stored_meta"}; $FooBar::__metaclass->{"%attributes"}{"baz"}{"setter_method"} = $FooBar::__metaclass->{"%attributes"}{"baz"}{"initializer_method"}{"initializer_meta"}{"setter_method"}; $FooBar::__metaclass->{"%attributes"}{"baz"}{"class"} = $FooBar::__metaclass; $FooBar::__metaclass->{"%attributes"}{"baz"}{"validate_method"} = $FooBar::__metaclass->{"%attributes"}{"baz"}{"%methods"}{"__ma_valid_baz"}{"valid_meta"}{"validate_method"}; $FooBar::__metaclass->{"%attributes"}{"baz"}{"valid_method"} = $FooBar::__metaclass->{"%attributes"}{"baz"}{"%methods"}{"__ma_valid_baz"}; $FooBar::__metaclass->{"%attributes"}{"baz"}{"getter_method"} = $FooBar::__metaclass->{"%attributes"}{"baz"}{"initializer_method"}{"initializer_meta"}{"getter_method"}; $FooBar::__metaclass->{"%attributes"}{"baz"}{"\@methods"}[0] = $FooBar::__metaclass->{"%attributes"}{"baz"}{"initializer_method"}{"initializer_meta"}{"getter_method"}; $FooBar::__metaclass->{"%attributes"}{"baz"}{"\@methods"}[1] = $FooBar::__metaclass->{"%attributes"}{"baz"}{"initializer_method"}; $FooBar::__metaclass->{"%attributes"}{"baz"}{"\@methods"}[2] = $FooBar::__metaclass->{"%attributes"}{"baz"}{"initializer_method"}{"initializer_meta"}{"setter_method"}; $FooBar::__metaclass->{"%attributes"}{"baz"}{"\@methods"}[3] = $FooBar::__metaclass->{"%attributes"}{"baz"}{"%methods"}{"__ma_valid_baz"}; $FooBar::__metaclass->{"%attributes"}{"baz"}{"\@methods"}[4] = $FooBar::__metaclass->{"%attributes"}{"baz"}{"%methods"}{"__ma_valid_baz"}{"valid_meta"}{"validate_method"}; $FooBar::__metaclass->{"%attributes"}{"x"}{"initializer_method"}{"\@metas"}[0] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"\@metas"}[0]; $FooBar::__metaclass->{"%attributes"}{"x"}{"initializer_method"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"x"}; $FooBar::__metaclass->{"%attributes"}{"x"}{"initializer_method"}{"initializer_meta"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"x"}; $FooBar::__metaclass->{"%attributes"}{"x"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[0] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"\@metas"}[0]; $FooBar::__metaclass->{"%attributes"}{"x"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]; $FooBar::__metaclass->{"%attributes"}{"x"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"x"}; $FooBar::__metaclass->{"%attributes"}{"x"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"setter_meta"} = $FooBar::__metaclass->{"%attributes"}{"x"}{"initializer_method"}{"initializer_meta"}; $FooBar::__metaclass->{"%attributes"}{"x"}{"initializer_method"}{"initializer_meta"}{"initializer_method"} = $FooBar::__metaclass->{"%attributes"}{"x"}{"initializer_method"}; $FooBar::__metaclass->{"%attributes"}{"x"}{"initializer_method"}{"initializer_meta"}{"getter_method"}{"\@metas"}[0] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"\@metas"}[0]; $FooBar::__metaclass->{"%attributes"}{"x"}{"initializer_method"}{"initializer_meta"}{"getter_method"}{"\@metas"}[1] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]; $FooBar::__metaclass->{"%attributes"}{"x"}{"initializer_method"}{"initializer_meta"}{"getter_method"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"x"}; $FooBar::__metaclass->{"%attributes"}{"x"}{"initializer_method"}{"initializer_meta"}{"getter_method"}{"getter_meta"} = $FooBar::__metaclass->{"%attributes"}{"x"}{"initializer_method"}{"initializer_meta"}; $FooBar::__metaclass->{"%attributes"}{"x"}{"%methods"}{"__ma_validate_x"}{"\@metas"}[0] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"\@metas"}[0]; $FooBar::__metaclass->{"%attributes"}{"x"}{"%methods"}{"__ma_validate_x"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"x"}; $FooBar::__metaclass->{"%attributes"}{"x"}{"%methods"}{"__ma_validate_x"}{"validate_meta"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"x"}; $FooBar::__metaclass->{"%attributes"}{"x"}{"%methods"}{"__ma_validate_x"}{"validate_meta"}{"validate_method"} = $FooBar::__metaclass->{"%attributes"}{"x"}{"%methods"}{"__ma_validate_x"}; $FooBar::__metaclass->{"%attributes"}{"x"}{"%methods"}{"__ma_validate_x"}{"validate_meta"}{"valid_method"}{"\@metas"}[0] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"\@metas"}[0]; $FooBar::__metaclass->{"%attributes"}{"x"}{"%methods"}{"__ma_validate_x"}{"validate_meta"}{"valid_method"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"x"}; $FooBar::__metaclass->{"%attributes"}{"x"}{"%methods"}{"__ma_validate_x"}{"validate_meta"}{"valid_method"}{"valid_meta"} = $FooBar::__metaclass->{"%attributes"}{"x"}{"%methods"}{"__ma_validate_x"}{"validate_meta"}; $FooBar::__metaclass->{"%attributes"}{"x"}{"%methods"}{"x"} = $FooBar::__metaclass->{"%attributes"}{"x"}{"initializer_method"}{"initializer_meta"}{"getter_method"}; $FooBar::__metaclass->{"%attributes"}{"x"}{"%methods"}{"__ma_valid_x"} = $FooBar::__metaclass->{"%attributes"}{"x"}{"%methods"}{"__ma_validate_x"}{"validate_meta"}{"valid_method"}; $FooBar::__metaclass->{"%attributes"}{"x"}{"%methods"}{"set_x"} = $FooBar::__metaclass->{"%attributes"}{"x"}{"initializer_method"}{"initializer_meta"}{"setter_method"}; $FooBar::__metaclass->{"%attributes"}{"x"}{"%methods"}{"__ma_init_x"} = $FooBar::__metaclass->{"%attributes"}{"x"}{"initializer_method"}; $FooBar::__metaclass->{"%attributes"}{"x"}{"\@metas"}[0] = $FooBar::__metaclass->{"%attributes"}{"x"}{"initializer_method"}{"initializer_meta"}; $FooBar::__metaclass->{"%attributes"}{"x"}{"\@metas"}[1] = $FooBar::__metaclass->{"%attributes"}{"x"}{"%methods"}{"__ma_validate_x"}{"validate_meta"}; $FooBar::__metaclass->{"%attributes"}{"x"}{"setter_method"} = $FooBar::__metaclass->{"%attributes"}{"x"}{"initializer_method"}{"initializer_meta"}{"setter_method"}; $FooBar::__metaclass->{"%attributes"}{"x"}{"class"} = $FooBar::__metaclass; $FooBar::__metaclass->{"%attributes"}{"x"}{"validate_method"} = $FooBar::__metaclass->{"%attributes"}{"x"}{"%methods"}{"__ma_validate_x"}; $FooBar::__metaclass->{"%attributes"}{"x"}{"valid_method"} = $FooBar::__metaclass->{"%attributes"}{"x"}{"%methods"}{"__ma_validate_x"}{"validate_meta"}{"valid_method"}; $FooBar::__metaclass->{"%attributes"}{"x"}{"getter_method"} = $FooBar::__metaclass->{"%attributes"}{"x"}{"initializer_method"}{"initializer_meta"}{"getter_method"}; $FooBar::__metaclass->{"%attributes"}{"x"}{"\@methods"}[0] = $FooBar::__metaclass->{"%attributes"}{"x"}{"initializer_method"}{"initializer_meta"}{"getter_method"}; $FooBar::__metaclass->{"%attributes"}{"x"}{"\@methods"}[1] = $FooBar::__metaclass->{"%attributes"}{"x"}{"initializer_method"}; $FooBar::__metaclass->{"%attributes"}{"x"}{"\@methods"}[2] = $FooBar::__metaclass->{"%attributes"}{"x"}{"initializer_method"}{"initializer_meta"}{"setter_method"}; $FooBar::__metaclass->{"%attributes"}{"x"}{"\@methods"}[3] = $FooBar::__metaclass->{"%attributes"}{"x"}{"%methods"}{"__ma_validate_x"}{"validate_meta"}{"valid_method"}; $FooBar::__metaclass->{"%attributes"}{"x"}{"\@methods"}[4] = $FooBar::__metaclass->{"%attributes"}{"x"}{"%methods"}{"__ma_validate_x"}; $FooBar::__metaclass->{"%attributes"}{"__bar_set"} = $FooBar::__metaclass->{"%attributes"}{"bar"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[0]{"setonce_attribute"}; $FooBar::__metaclass->{"%attributes"}{"an_array"}{"initializer_method"}{"\@metas"}[0] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"\@metas"}[0]; $FooBar::__metaclass->{"%attributes"}{"an_array"}{"initializer_method"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"an_array"}; $FooBar::__metaclass->{"%attributes"}{"an_array"}{"initializer_method"}{"initializer_meta"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"an_array"}; $FooBar::__metaclass->{"%attributes"}{"an_array"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[0] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"\@metas"}[0]; $FooBar::__metaclass->{"%attributes"}{"an_array"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]; $FooBar::__metaclass->{"%attributes"}{"an_array"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"an_array"}; $FooBar::__metaclass->{"%attributes"}{"an_array"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"setter_meta"} = $FooBar::__metaclass->{"%attributes"}{"an_array"}{"initializer_method"}{"initializer_meta"}; $FooBar::__metaclass->{"%attributes"}{"an_array"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"an_array"}; $FooBar::__metaclass->{"%attributes"}{"an_array"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}{"setter_method"} = $FooBar::__metaclass->{"%attributes"}{"an_array"}{"initializer_method"}{"initializer_meta"}{"setter_method"}; $FooBar::__metaclass->{"%attributes"}{"an_array"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}{"getter_method"}{"\@metas"}[0] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"\@metas"}[0]; $FooBar::__metaclass->{"%attributes"}{"an_array"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}{"getter_method"}{"\@metas"}[1] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]; $FooBar::__metaclass->{"%attributes"}{"an_array"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}{"getter_method"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"an_array"}; $FooBar::__metaclass->{"%attributes"}{"an_array"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}{"getter_method"}{"getter_meta"} = $FooBar::__metaclass->{"%attributes"}{"an_array"}{"initializer_method"}{"initializer_meta"}; $FooBar::__metaclass->{"%attributes"}{"an_array"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}{"getter_method"}{"type_meta"} = $FooBar::__metaclass->{"%attributes"}{"an_array"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}; $FooBar::__metaclass->{"%attributes"}{"an_array"}{"initializer_method"}{"initializer_meta"}{"initializer_method"} = $FooBar::__metaclass->{"%attributes"}{"an_array"}{"initializer_method"}; $FooBar::__metaclass->{"%attributes"}{"an_array"}{"initializer_method"}{"initializer_meta"}{"getter_method"} = $FooBar::__metaclass->{"%attributes"}{"an_array"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}{"getter_method"}; $FooBar::__metaclass->{"%attributes"}{"an_array"}{"%methods"}{"__ma_init_an_array"} = $FooBar::__metaclass->{"%attributes"}{"an_array"}{"initializer_method"}; $FooBar::__metaclass->{"%attributes"}{"an_array"}{"%methods"}{"set_an_array"} = $FooBar::__metaclass->{"%attributes"}{"an_array"}{"initializer_method"}{"initializer_meta"}{"setter_method"}; $FooBar::__metaclass->{"%attributes"}{"an_array"}{"%methods"}{"an_array"} = $FooBar::__metaclass->{"%attributes"}{"an_array"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}{"getter_method"}; $FooBar::__metaclass->{"%attributes"}{"an_array"}{"stored_meta"}{"attribute"} = $FooBar::__metaclass->{"%attributes"}{"an_array"}; $FooBar::__metaclass->{"%attributes"}{"an_array"}{"\@metas"}[0] = $FooBar::__metaclass->{"%attributes"}{"an_array"}{"initializer_method"}{"initializer_meta"}; $FooBar::__metaclass->{"%attributes"}{"an_array"}{"\@metas"}[1] = $FooBar::__metaclass->{"%attributes"}{"an_array"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}; $FooBar::__metaclass->{"%attributes"}{"an_array"}{"\@metas"}[2] = $FooBar::__metaclass->{"%attributes"}{"an_array"}{"stored_meta"}; $FooBar::__metaclass->{"%attributes"}{"an_array"}{"setter_method"} = $FooBar::__metaclass->{"%attributes"}{"an_array"}{"initializer_method"}{"initializer_meta"}{"setter_method"}; $FooBar::__metaclass->{"%attributes"}{"an_array"}{"class"} = $FooBar::__metaclass; $FooBar::__metaclass->{"%attributes"}{"an_array"}{"getter_method"} = $FooBar::__metaclass->{"%attributes"}{"an_array"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}{"getter_method"}; $FooBar::__metaclass->{"%attributes"}{"an_array"}{"\@methods"}[0] = $FooBar::__metaclass->{"%attributes"}{"an_array"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}{"getter_method"}; $FooBar::__metaclass->{"%attributes"}{"an_array"}{"\@methods"}[1] = $FooBar::__metaclass->{"%attributes"}{"an_array"}{"initializer_method"}; $FooBar::__metaclass->{"%attributes"}{"an_array"}{"\@methods"}[2] = $FooBar::__metaclass->{"%attributes"}{"an_array"}{"initializer_method"}{"initializer_meta"}{"setter_method"}; $FooBar::__metaclass->{"%attributes"}{"an_array"}{"type_meta"} = $FooBar::__metaclass->{"%attributes"}{"an_array"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"type_meta"}; $FooBar::__metaclass->{"%methods"}{"__ma_capability"}{"class"} = $FooBar::__metaclass; $FooBar::__metaclass->{"%methods"}{"__ma_capability"}{"capability_meta"} = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]; $FooBar::__metaclass->{"%methods"}{"__ma_capability_check"} = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"capability_method"}; $FooBar::__metaclass->{"%methods"}{"shoot_missle"} = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"\@metas"}[0]{"method"}; $FooBar::__metaclass->{"\@metas"}[0]{"class"} = $FooBar::__metaclass; $FooBar::__metaclass->{"\@metas"}[1]{"class"} = $FooBar::__metaclass; $FooBar::__metaclass->{"\@metas"}[2] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"\@metas"}[0]; $FooBar::__metaclass->{"\@metas"}[3] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]; $FooBar::__metaclass->{"memory_model"} = $FooBar::__metaclass->{"\@metas"}[0]; $FooBar::__metaclass->{"\@attributes"}[0] = $FooBar::__metaclass->{"%attributes"}{"foo"}; $FooBar::__metaclass->{"\@attributes"}[1] = $FooBar::__metaclass->{"%attributes"}{"bar"}; $FooBar::__metaclass->{"\@attributes"}[2] = $FooBar::__metaclass->{"%attributes"}{"baz"}; $FooBar::__metaclass->{"\@attributes"}[3] = $FooBar::__metaclass->{"%attributes"}{"x"}; $FooBar::__metaclass->{"\@attributes"}[4] = $FooBar::__metaclass->{"%attributes"}{"an_array"}; $FooBar::__metaclass->{"\@attributes"}[5] = $FooBar::__metaclass->{"%attributes"}{"a_hash"}; $FooBar::__metaclass->{"\@attributes"}[6] = $FooBar::__metaclass->{"%attributes"}{"a_sub"}; $FooBar::__metaclass->{"\@attributes"}[7] = $FooBar::__metaclass->{"%attributes"}{"parents"}; $FooBar::__metaclass->{"\@attributes"}[8] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"method"}{"attribute"}; $FooBar::__metaclass->{"\@attributes"}[9] = $FooBar::__metaclass->{"%attributes"}{"bar"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[0]{"setonce_attribute"}; $FooBar::__metaclass->{"\@methods"}[0] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"\@metas"}[0]{"method"}; $FooBar::__metaclass->{"\@methods"}[1] = $FooBar::__metaclass->{"%methods"}{"__ma_capability"}; $FooBar::__metaclass->{"\@methods"}[2] = $FooBar::__metaclass->{"%attributes"}{"parents"}{"initializer_method"}{"initializer_meta"}{"setter_method"}{"\@metas"}[1]{"capability_method"}; 1; #DO NOT EDIT: Created by MetaAttr::Class metaattr-0.1/src/metaattr/test/FooBar.pm0100644000175200017560000000275307436563070020566 0ustar stephensstephens package FooBar; use strict; use MetaAttr::Class; ############################################# # Define a class FooBar. MetaAttr::Class->define ( # Memory model 'blessed_hash', # Superclasses #'superclass', [ 'FooBaz' ], 'use', [ 'Carp' ], # debug meta-attribute. 'debug', # Default capablilty descriptions. 'capability', #[ ]1 # use tied hash interface to attributes. #tiedhash, # Attributes 'attribute', [ 'foo', 'getter', 'stored', ], 'attribute', [ 'bar', 'setter', 'stored', [ 'string' ], 'setonce', ], 'attribute', [ 'baz', 'setter', 'valid', [ q{ /^[0-9]+$/ } ], 'stored', [ 'type' => 'int' ], ], 'attribute', [ 'x', 'setter', #ARRAY, 'valid', [ q{ ref($_) eq 'ARRAY'; } ], #'stored', [ 'type' => 'array' ], ], 'attribute', [ 'an_array', 'setter', 'type', [ 'array' ], 'stored', ], 'attribute', [ 'a_hash', 'setter', 'type', [ 'hash' ], 'stored', ], 'attribute', [ 'a_sub', 'setter', 'type', [ 'code' ], ], 'attribute', [ 'parents', 'setter', 'type', [ 'array' ], 'stored', [ undef, 'class' => 'FooBar' ], ], 'attribute', [ 'children', 'setter', 'type', [ 'hash' ], 'stored', [ undef, 'class' => 'FooBar' ], ], 'method', [ 'shoot_missle', q{ print "BOOM"; }, 'capability', #doc, [ 'aksjdfl;kajsdflkjasdlfkjasldfkjasdf' ], #ui_desc, [ 'Shoot the missle.' ] ], ); 1; metaattr-0.1/src/metaattr/test/testmo2.pl0100744000175200017560000000531107346300507020776 0ustar stephensstephens#!/usr/bin/perl BEGIN { push(@INC, '../lib/perl', '/home/stephens/w2gi/locator/prototype/lib/perl', '/home/stephens/w2gi/locator/prototype/test/tangram/Tangram-1.18', ); $metaattr::class::load_force_gen = 1; } use metaattr::class; use FooBar; use metaattr::class; ############################################# # Use Tangram, if available. my $tangram = 1; BEGIN { if ( $tangram ) { eval q{ use Tangram::Ref; use Tangram::Schema; use Tangram::Deploy; }; $tangram = ! $@; warn $@ if ( $@ ); } } #package FooBar; #use kakdjfd; ############################################# # Create Tangram SQL DB schema from metaclasses. if ( $tangram ) { sub load { eval("use $_[0];"); die $@ if ( $@ ); } eval q{ use metaattr::meta::stored; use Tangram::Ref; use Tangram::Schema; use Tangram::Deploy; use Tangram::Hash; use Tangram::Array; use Tangram::FlatHash; use Tangram::FlatArray; my @cls = qw( FooBar #W2GI::Capability::Map #W2GI::Capability::Tuple #W2GI::Capability::Wild ); @cls = grep(!/^#/, @cls); map(load($_), @cls); @cls = map($_->metaclass, @cls); # Create a schema generator struct. my $schema = metaattr::meta::stored->tangram_schema(\@cls); # Ask Tangram to create a schema. $schema = Tangram::Schema->new(%{$schema}); # Ask Tangram to create an SQL schema. print "#########################################################\n"; print "# Tangram SQL schema\n"; print "#\n"; $schema->deploy(); print "#########################################################\n\n"; }; die ( $@ ) if ( $@ ); } ############################################# eval q{ use FooBar; $FooBar::debug = 1; my $x = new FooBar('foo' => 4); #$DB::single = 1; $x->set_bar(55); print $x->bar(), "\n"; print $x->foo(), "\n"; ############################### # As a hash ref. #print $x->{'foo'}, "\n"; #$x->{'bar'} = $22; #print $x->{'bar'}, "\n"; ############################### # typed attributes. # $x->set_an_array(2, 'foo'); print "x->an_array() = ", join(',', $x->an_array), "\n"; print "scalar x->an_array() = ", join(',', scalar $x->an_array), "\n"; print "x->an_array(2) = ", $x->an_array(2), "\n"; $x->set_a_hash('bar', 3); print "x->a_hash() = ", join(',', $x->a_hash), "\n"; print "scalar x->a_hash() = ", join(',', scalar $x->a_hash), "\n"; print "x->a_hash('bar') = ", join(',', $x->a_hash('bar')), "\n"; ############################### # valid trigger. $x->set_baz(232); $x->set_baz('xyz'); # error }; die $@ if ( $@ ); ############################################# 1; metaattr-0.1/src/metaattr/test/FooBar_impl.pm0100764000175200017560000000015207346300507021573 0ustar stephensstephens#!/usr/bin/perl # $Id: FooBar_impl.pm,v 1.1 2001/07/13 06:40:46 stephens Exp $ package FooBar; 1; metaattr-0.1/src/metaattr/PKG0100744000175200017560000000041107402126032016415 0ustar stephensstephensNAME=metaattr RCSID="$Id: PKG,v 1.1 2001/07/13 06:46:04 stephens Exp $" VERSION=0.1 DESC="A meta-attribute programming environment for perl. Generates class defiition from meta-class schemas." CATEGORY="Development Tools" REQUIRES_PKGS="" REQUIRES_OTHERS="perl" metaattr-0.1/src/GUM_BUILD_ROOT0100664000175200017560000000064107653661705016416 0ustar stephensstephens# $Id: GUM_BUILD_ROOT,v 1.4 2001/08/06 11:02:09 stephens Exp $ # Build options DEBUG=YES #OPTIMIZE=NO # output root is ../gumo GUM_GENERATED_ROOT:=$(shell cd $(GUM_BUILD_ROOT)/../gumo && /bin/pwd)# # Quick install. GUM_GENERATED_LIB_DIR=$(INSTALL_DIR_LIB)# # Pick up /iimp stuff PATH:=/iimp/app/prod/bin:$(PATH) INCLUDE_DIRS_GLOBAL:=$(GUM_BUILD_ROOT) /iimp/app/prod/include# LIB_DIRS_GLOBAL:=/iimp/app/prod/lib# metaattr-0.1/README0100664000175200017560000000141707653661705014354 0ustar stephensstephensmetaattr 0.1 README ============================================================================== Copyright (c) 1997-2003 Kurt A. Stephens and Ion, Inc., All Rights Reserved. http://www.ionink.com/stephens Kurt A. Stephens and Ion, Inc. MAKE NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. Kurt A. Stephens and Ion, Inc. SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. $Id: COPYRIGHT,v 1.5 2003/02/15 10:12:18 stephens Exp $ ============================================================================== metaattr-0.1/COPYRIGHT0100664000175200017560000000113207653661705014761 0ustar stephensstephensCopyright (c) 1997-2003 Kurt A. Stephens and Ion, Inc., All Rights Reserved. http://www.ionink.com/stephens Kurt A. Stephens and Ion, Inc. MAKE NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. Kurt A. Stephens and Ion, Inc. SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. $Id: COPYRIGHT,v 1.5 2003/02/15 10:12:18 stephens Exp $ metaattr-0.1/CHANGES0100664000175200017560000000014507653661705014464 0ustar stephensstephensmetaattr 0.1 CHANGES ============================================================================== metaattr-0.1/TOC0100664000175200017560000001165207653661705014046 0ustar stephensstephensmetaattr 0.1 Table of Contents ============================================================================== metaattr-0.1: total 28 drwxrwxr-x 3 stephens stephens 4096 Apr 30 01:48 . drwxrwxr-x 3 stephens stephens 4096 Apr 30 01:48 .. -rw-rw-r-- 1 stephens stephens 101 Apr 30 01:48 CHANGES -rw-rw-r-- 1 stephens stephens 602 Apr 30 01:48 COPYRIGHT -rw-rw-r-- 1 stephens stephens 783 Apr 30 01:48 README drwxrwxr-x 3 stephens stephens 4096 Apr 30 01:48 src -rw-rw-r-- 1 stephens stephens 110 Apr 30 01:48 TOC metaattr-0.1/src: total 16 drwxrwxr-x 3 stephens stephens 4096 Apr 30 01:48 . drwxrwxr-x 3 stephens stephens 4096 Apr 30 01:48 .. -rw-rw-r-- 1 stephens stephens 417 Apr 30 01:48 GUM_BUILD_ROOT drwxrwsr-x 5 stephens stephens 4096 Dec 1 2001 metaattr metaattr-0.1/src/metaattr: total 20 drwxrwsr-x 5 stephens stephens 4096 Dec 1 2001 . drwxrwxr-x 3 stephens stephens 4096 Apr 30 01:48 .. drwxrwsr-x 5 stephens stephens 4096 Dec 22 2001 lib -rwxr--r-- 1 stephens stephens 265 Dec 1 2001 PKG drwxrwsr-x 3 stephens stephens 4096 Feb 25 2002 test metaattr-0.1/src/metaattr/lib: total 16 drwxrwsr-x 5 stephens stephens 4096 Dec 22 2001 . drwxrwsr-x 5 stephens stephens 4096 Dec 1 2001 .. drwxrwsr-x 4 stephens stephens 4096 Feb 25 2002 perl drwxr-sr-x 2 stephens stephens 4096 Dec 22 2001 xml metaattr-0.1/src/metaattr/lib/perl: total 16 drwxrwsr-x 4 stephens stephens 4096 Feb 25 2002 . drwxrwsr-x 5 stephens stephens 4096 Dec 22 2001 .. drwxrwsr-x 4 stephens stephens 4096 Apr 22 2002 MetaAttr -rwxr--r-- 1 stephens stephens 175 Feb 25 2002 MetaAttr.pm metaattr-0.1/src/metaattr/lib/perl/MetaAttr: total 48 drwxrwsr-x 4 stephens stephens 4096 Apr 22 2002 . drwxrwsr-x 4 stephens stephens 4096 Feb 25 2002 .. -rwxr--r-- 1 stephens stephens 2524 Apr 1 2002 Attribute.pm -rw-r--r-- 1 stephens stephens 7108 Apr 22 2002 Base.pm -rw-r--r-- 1 stephens stephens 9507 Apr 22 2002 Class.pm drwxrwsr-x 4 stephens stephens 4096 Apr 22 2002 Meta -rwxr--r-- 1 stephens stephens 1480 Feb 25 2002 Method.pm -rw-r--r-- 1 stephens stephens 1806 Apr 12 2002 Relation.pm -rw-r--r-- 1 stephens stephens 814 Apr 12 2002 System.pm metaattr-0.1/src/metaattr/lib/perl/MetaAttr/Meta: total 100 drwxrwsr-x 4 stephens stephens 4096 Apr 22 2002 . drwxrwsr-x 4 stephens stephens 4096 Apr 22 2002 .. -rw-r--r-- 1 stephens stephens 517 Feb 26 2002 Base.pm -rwxr--r-- 1 stephens stephens 1960 Feb 25 2002 Blessed_arrayindex.pm -rwxr--r-- 1 stephens stephens 528 Feb 25 2002 Blessed_hash.pm -rwxr--r-- 1 stephens stephens 2825 Feb 25 2002 Capability.pm -rwxr--r-- 1 stephens stephens 1137 Apr 1 2002 Category.pm -rwxr--r-- 1 stephens stephens 1684 Feb 25 2002 Debug.pm -rw-r--r-- 1 stephens stephens 1366 Mar 21 2002 Default.pm -rwxr--r-- 1 stephens stephens 1031 Mar 21 2002 Desc.pm -rw-r--r-- 1 stephens stephens 2684 Feb 26 2002 Getter.pm -rwxr--r-- 1 stephens stephens 3196 Mar 21 2002 Memory_model.pm -rwxr--r-- 1 stephens stephens 1345 Mar 21 2002 Setonce.pm -rw-r--r-- 1 stephens stephens 1637 Feb 26 2002 Setter.pm -rw-r--r-- 1 stephens stephens 835 Apr 22 2002 Storage.pm drwxrwsr-x 3 stephens stephens 4096 Apr 22 2002 Stored -rw-r--r-- 1 stephens stephens 5617 Apr 22 2002 Stored.pm -rwxr--r-- 1 stephens stephens 1879 Mar 28 2002 Superclass.pm -rwxr--r-- 1 stephens stephens 963 Mar 21 2002 Tiedhash.pm -rw-r--r-- 1 stephens stephens 2877 Mar 28 2002 Type.pm -rw-r--r-- 1 stephens stephens 974 Feb 25 2002 Ui.pm -rwxr--r-- 1 stephens stephens 621 Feb 25 2002 Use.pm -rw-r--r-- 1 stephens stephens 2671 Feb 26 2002 Valid.pm -rw-r--r-- 1 stephens stephens 1528 Feb 26 2002 Validset.pm metaattr-0.1/src/metaattr/lib/perl/MetaAttr/Meta/Stored: total 12 drwxrwsr-x 3 stephens stephens 4096 Apr 22 2002 . drwxrwsr-x 4 stephens stephens 4096 Apr 22 2002 .. -rw-r--r-- 1 stephens stephens 399 Apr 22 2002 Transaction.pm metaattr-0.1/src/metaattr/lib/xml: total 12 drwxr-sr-x 2 stephens stephens 4096 Dec 22 2001 . drwxrwsr-x 5 stephens stephens 4096 Dec 22 2001 .. -rw-r--r-- 1 stephens stephens 521 Dec 22 2001 example.xma metaattr-0.1/src/metaattr/test: total 120 drwxrwsr-x 3 stephens stephens 4096 Feb 25 2002 . drwxrwsr-x 5 stephens stephens 4096 Dec 1 2001 .. -rwxrw-r-- 1 stephens stephens 106 Sep 7 2001 FooBar_impl.pm -rw-r--r-- 1 stephens stephens 16235 Feb 25 2002 FooBar_ma_gen.pm -rw-r--r-- 1 stephens stephens 78094 Feb 25 2002 FooBar_ma_meta.pm -rw-r--r-- 1 stephens stephens 1515 Feb 25 2002 FooBar.pm -rwxr--r-- 1 stephens stephens 2761 Sep 7 2001 testmo2.pl