Guest User

Untitled

a guest
Jan 22nd, 2018
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.07 KB | None | 0 0
  1. diff --git a/src/Perl6/Metamodel/C3MRO.pm b/src/Perl6/Metamodel/C3MRO.pm
  2. index 6889829..781ae77 100644
  3. --- a/src/Perl6/Metamodel/C3MRO.pm
  4. +++ b/src/Perl6/Metamodel/C3MRO.pm
  5. @@ -9,14 +9,18 @@ role Perl6::Metamodel::C3MRO {
  6. # Provided we have immediate parents...
  7. my @result;
  8. if +@immediate_parents {
  9. - # Build merge list of lineraizations of all our parents, add
  10. - # immediate parents and merge.
  11. - my @merge_list;
  12. - for @immediate_parents {
  13. - @merge_list.push(self.compute_mro($_));
  14. + if +@immediate_parents == 1 {
  15. + @result := self.mro(@immediate_parents[0]);
  16. + } else {
  17. + # Build merge list of lineraizations of all our parents, add
  18. + # immediate parents and merge.
  19. + my @merge_list;
  20. + for @immediate_parents {
  21. + @merge_list.push(self.mro($_));
  22. + }
  23. + @merge_list.push(@immediate_parents);
  24. + @result := c3_merge(@merge_list);
  25. }
  26. - @merge_list.push(@immediate_parents);
  27. - @result := c3_merge(@merge_list);
  28. }
  29.  
  30. # Put this class on the start of the list, and we're done.
  31. diff --git a/src/Perl6/Metamodel/MROBasedMethodDispatch.pm b/src/Perl6/Metamodel/MROBasedMethodDispatch.pm
  32. index ad330eb..50d021a 100644
  33. --- a/src/Perl6/Metamodel/MROBasedMethodDispatch.pm
  34. +++ b/src/Perl6/Metamodel/MROBasedMethodDispatch.pm
  35. @@ -22,12 +22,14 @@ role Perl6::Metamodel::MROBasedMethodDispatch {
  36. # Walk MRO and add methods to cache, unless another method
  37. # lower in the class hierarchy "shadowed" it.
  38. my %cache;
  39. + my @mro_reversed;
  40. for self.mro($obj) {
  41. + @mro_reversed.unshift($_);
  42. + }
  43. + for @mro_reversed {
  44. my %methods := $_.HOW.method_table($_);
  45. for %methods {
  46. - unless %cache{$_.key} {
  47. - %cache{$_.key} := $_.value;
  48. - }
  49. + %cache{$_.key} := $_.value;
  50. }
  51. }
Add Comment
Please, Sign In to add comment