Advertisement
Guest User

Untitled

a guest
Sep 19th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.37 KB | None | 0 0
  1. {
  2. Name: "methods",
  3. Fn: func(receiver Object) builtinMethodBody {
  4. return func(t *thread, args []Object, blockFrame *callFrame) Object {
  5. methods := []interface{}{}
  6. set := map[string]struct{}{}
  7. targets := []*RClass{}
  8. if receiver.SingletonClass() != nil {
  9. targets = append(targets, receiver.SingletonClass())
  10. }
  11. targets = append(targets, receiver.Class())
  12. for _, klass := range targets {
  13. for klass != nil {
  14. env := klass.Methods
  15. for env != nil {
  16. for key := range env.store {
  17. set[key] = struct{}{}
  18. }
  19. env = env.outer
  20. }
  21. if klass.superClass == klass {
  22. break
  23. }
  24.  
  25. klass = klass.superClass
  26. }
  27. }
  28. for k := range set {
  29. methods = append(methods, k)
  30. }
  31. return t.vm.initObjectFromGoType(methods)
  32. }
  33. },
  34. },
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement