Skip to content

Commit

Permalink
Remove unnecessary implementation detail
Browse files Browse the repository at this point in the history
&GENERATE-ROLE-FROM-VALUE somehow lived in the SETTING:: but
didn't need to.  Move it to Rakudo::Internals and adapt the
code and the keys tests accordingly.
  • Loading branch information
lizmat committed Mar 15, 2020
1 parent e152aa6 commit b639221
Show file tree
Hide file tree
Showing 8 changed files with 31 additions and 30 deletions.
10 changes: 10 additions & 0 deletions src/core.c/Rakudo/Internals.pm6
Expand Up @@ -27,6 +27,16 @@ my class Rakudo::Internals {
!! nqp::sha1(slurped)
}

method GENERATE-ROLE-FROM-VALUE($val) {
my $role := Metamodel::ParametricRoleHOW.new_type();
my $meth := method () { $val };
$meth.set_name($val.^name);
$role.^add_method($meth.name, $meth);
$role.^set_body_block(
-> |c { nqp::list($role, nqp::hash('$?CLASS', c<$?CLASS>)) });
$role.^compose;
}

# for use in nqp::splice
my $empty := nqp::list;

Expand Down
45 changes: 21 additions & 24 deletions src/core.c/operators.pm6
Expand Up @@ -42,12 +42,12 @@ multi sub infix:<does>(Mu:D \obj, **@roles) is raw {
# XXX Mutability check.
my \real-roles = eager @roles.map: -> \rolish {
rolish.DEFINITE
?? GENERATE-ROLE-FROM-VALUE(rolish)
!! rolish.HOW.archetypes.composable()
?? rolish
!! rolish.HOW.archetypes.composalizable()
?? rolish.HOW.composalize(rolish)
!! X::Mixin::NotComposable.new(:target(obj), :rolish(rolish)).throw
?? Rakudo::Internals.GENERATE-ROLE-FROM-VALUE(rolish)
!! rolish.HOW.archetypes.composable()
?? rolish
!! rolish.HOW.archetypes.composalizable()
?? rolish.HOW.composalize(rolish)
!! X::Mixin::NotComposable.new(:target(obj),:rolish(rolish)).throw
}
obj.^mixin(|real-roles).BUILD_LEAST_DERIVED({});
}
Expand Down Expand Up @@ -89,33 +89,30 @@ multi sub infix:<but>(Mu:U \obj, Mu:U \rolish) {
X::Mixin::NotComposable.new(:target(obj), :rolish(rolish)).throw;
obj.^mixin($role);
}
sub GENERATE-ROLE-FROM-VALUE($val) {
my $role := Metamodel::ParametricRoleHOW.new_type();
my $meth := method () { $val };
$meth.set_name($val.^name);
$role.^add_method($meth.name, $meth);
$role.^set_body_block(
-> |c { nqp::list($role, nqp::hash('$?CLASS', c<$?CLASS>)) });
$role.^compose;
}
multi sub infix:<but>(Mu \obj, Mu:D $val) is raw {
obj.clone.^mixin(GENERATE-ROLE-FROM-VALUE($val));
obj.clone.^mixin(Rakudo::Internals.GENERATE-ROLE-FROM-VALUE($val));
}
multi sub infix:<but>(Mu:D \obj, **@roles) {
my \real-roles := eager @roles.map: -> \rolish {
rolish.DEFINITE ?? GENERATE-ROLE-FROM-VALUE(rolish) !!
rolish.HOW.archetypes.composable() ?? rolish !!
rolish.HOW.archetypes.composalizable() ?? rolish.HOW.composalize(rolish) !!
X::Mixin::NotComposable.new(:target(obj), :rolish(rolish)).throw
rolish.DEFINITE
?? Rakudo::Internals.GENERATE-ROLE-FROM-VALUE(rolish)
!! rolish.HOW.archetypes.composable()
?? rolish
!! rolish.HOW.archetypes.composalizable()
?? rolish.HOW.composalize(rolish)
!! X::Mixin::NotComposable.new(:target(obj),:rolish(rolish)).throw
}
obj.clone.^mixin(|real-roles).BUILD_LEAST_DERIVED({});
}
multi sub infix:<but>(Mu:U \obj, **@roles) {
my \real-roles := eager @roles.map: -> \rolish {
rolish.DEFINITE ?? GENERATE-ROLE-FROM-VALUE(rolish) !!
rolish.HOW.archetypes.composable() ?? rolish !!
rolish.HOW.archetypes.composalizable() ?? rolish.HOW.composalize(rolish) !!
X::Mixin::NotComposable.new(:target(obj), :rolish(rolish)).throw
rolish.DEFINITE
?? Rakudo::Internals.GENERATE-ROLE-FROM-VALUE(rolish)
!! rolish.HOW.archetypes.composable()
?? rolish
!! rolish.HOW.archetypes.composalizable()
?? rolish.HOW.composalize(rolish)
!! X::Mixin::NotComposable.new(:target(obj),:rolish(rolish)).throw
}
obj.^mixin(|real-roles)
}
Expand Down
1 change: 0 additions & 1 deletion t/02-rakudo/03-corekeys-6c.t
Expand Up @@ -29,7 +29,6 @@ my @expected = (
Q{&EVALFILE},
Q{&EXCEPTION},
Q{&GATHER},
Q{&GENERATE-ROLE-FROM-VALUE},
Q{&HOW},
Q{&HYPER},
Q{&HYPERWHATEVER},
Expand Down
1 change: 0 additions & 1 deletion t/02-rakudo/03-corekeys-6d.t
Expand Up @@ -29,7 +29,6 @@ my @expected = (
Q{&EVALFILE},
Q{&EXCEPTION},
Q{&GATHER},
Q{&GENERATE-ROLE-FROM-VALUE},
Q{&HOW},
Q{&HYPER},
Q{&HYPERWHATEVER},
Expand Down
1 change: 0 additions & 1 deletion t/02-rakudo/03-corekeys-6e.t
Expand Up @@ -30,7 +30,6 @@ my @expected = (
Q{&EVALFILE},
Q{&EXCEPTION},
Q{&GATHER},
Q{&GENERATE-ROLE-FROM-VALUE},
Q{&HOW},
Q{&HYPER},
Q{&HYPERWHATEVER},
Expand Down
1 change: 0 additions & 1 deletion t/02-rakudo/03-corekeys.t
Expand Up @@ -31,7 +31,6 @@ my @allowed =
Q{&EVALFILE},
Q{&EXCEPTION},
Q{&GATHER},
Q{&GENERATE-ROLE-FROM-VALUE},
Q{&HOW},
Q{&HYPER},
Q{&HYPERWHATEVER},
Expand Down
1 change: 0 additions & 1 deletion t/02-rakudo/04-settingkeys-6c.t
Expand Up @@ -28,7 +28,6 @@ my %allowed = (
Q{&EVALFILE},
Q{&EXCEPTION},
Q{&GATHER},
Q{&GENERATE-ROLE-FROM-VALUE},
Q{&HOW},
Q{&HYPER},
Q{&HYPERWHATEVER},
Expand Down
1 change: 0 additions & 1 deletion t/02-rakudo/04-settingkeys-6e.t
Expand Up @@ -27,7 +27,6 @@ my %allowed = (
Q{&EVALFILE},
Q{&EXCEPTION},
Q{&GATHER},
Q{&GENERATE-ROLE-FROM-VALUE},
Q{&HOW},
Q{&HYPER},
Q{&HYPERWHATEVER},
Expand Down

0 comments on commit b639221

Please sign in to comment.