# Pastebin rdy0pAZX use Tuple; use ValueMap; unit class ValueClass::Attribute is Attribute; method compose(|) { die "Attributes { $.name } can't be rw on a value-class ({ ValueClass.^name })" if $.rw; nextsame } # method container_initializer(|c) { # # say $.auto_viv_container; # # # use nqp; # # my $build = nqp::getattr(self<>, Attribute, '$!build_closure'); # # say $build; # # say $build.(self.package, 1) if $build ~~ Callable; # # # say $.^attributes.grep(*.name eq '$!build_closure').head.get_value: self; # # say "build => ", self.build.(self.package, 13) if self.build ~~ Callable; # # # # $.set_build: Any; # # if $.name.starts-with: '@' { # return -> { Tuple.new } # } elsif $.name.starts-with: '%' { # return -> { ValueMap.new } # } # nextsame # } method auto_viv_container(|c) { use nqp; my $build = nqp::getattr(self<>, Attribute, '$!build_closure'); my \value = $build ~~ Callable ?? $build.($.package, 1) !! Empty; if $.name.starts-with: '@' { return Tuple.new: value } elsif $.name.starts-with: '%' { return ValueMap.new: value } nextsame }