Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {
- Name: "methods",
- Fn: func(receiver Object) builtinMethodBody {
- return func(t *thread, args []Object, blockFrame *callFrame) Object {
- methods := []interface{}{}
- set := map[string]struct{}{}
- targets := []*RClass{}
- if receiver.SingletonClass() != nil {
- targets = append(targets, receiver.SingletonClass())
- }
- targets = append(targets, receiver.Class())
- for _, klass := range targets {
- for klass != nil {
- env := klass.Methods
- for env != nil {
- for key := range env.store {
- set[key] = struct{}{}
- }
- env = env.outer
- }
- if klass.superClass == klass {
- break
- }
- klass = klass.superClass
- }
- }
- for k := range set {
- methods = append(methods, k)
- }
- return t.vm.initObjectFromGoType(methods)
- }
- },
- },
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement