3 # This must be its own dist later
7 use if $] < '5.010', 'MRO::Compat';
13 my ($inv, @comp) = @_;
14 my $class = ref($inv) || $inv;
15 my $new_class = join('::', $class, $comp++);
16 require Class::C3::Componentised;
17 my @comp_classes = map +(/^\+(.+)$/ ? "${class}::$1" : $_), @comp;
18 Class::C3::Componentised->ensure_class_loaded($_) for @comp_classes;
19 Class::C3::Componentised->inject_base(
23 mro::set_mro($new_class, 'c3');
24 return $new_class unless ref($inv);
25 return bless($inv, $new_class);
29 my ($inv, @roles) = @_;
30 my $class = ref($inv) || $inv;
32 my $new_class = Role::Tiny->create_class_with_roles($class,
33 map +(/^\+(.+)$/ ? "${class}::$1" : $_), @roles
35 return $new_class unless ref($inv);
36 return bless($inv, $new_class);