Guest User

Untitled

a guest
Jan 22nd, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.83 KB | None | 0 0
  1. diff --git a/src/how/NQPClassHOW.pm b/src/how/NQPClassHOW.pm
  2. index 4e9b979..3fdbd25 100644
  3. --- a/src/how/NQPClassHOW.pm
  4. +++ b/src/how/NQPClassHOW.pm
  5. @@ -254,14 +254,18 @@ knowhow NQPClassHOW {
  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(compute_c3_mro($_));
  14. + if +@immediate_parents == 1 {
  15. + @result := compute_c3_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(compute_c3_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. @@ -347,12 +351,14 @@ knowhow NQPClassHOW {
  32. # Walk MRO and add methods to cache, unless another method
  33. # lower in the class hierarchy "shadowed" it.
  34. my %cache;
  35. + my @mro_reversed;
  36. for @!mro {
  37. + @mro_reversed.unshift($_);
  38. + }
  39. + for @mro_reversed {
  40. my %methods := $_.HOW.method_table($_);
  41. for %methods {
  42. - unless %cache{$_.key} {
  43. - %cache{$_.key} := $_.value;
  44. - }
  45. + %cache{$_.key} := $_.value;
  46. }
  47. }
  48. pir::publish_method_cache($obj, %cache);
Add Comment
Please, Sign In to add comment