comparison modules/object.tp @ 270:b74956a2196f

Add a propertiesOf method to the object module that returns the names of things that look like getter messages
author Michael Pavone <pavone@retrodev.com>
date Fri, 18 Jul 2014 20:45:50 -0700
parents 123e9468d55e
children ead24192ed45
comparison
equal deleted inserted replaced
269:632667d95d35 270:b74956a2196f
46 methHash <- (obj meta) methods 46 methHash <- (obj meta) methods
47 slot <- 0 47 slot <- 0
48 while: {slot < 16} do: { 48 while: {slot < 16} do: {
49 if: (methHash get: slot) { 49 if: (methHash get: slot) {
50 i <- 0 50 i <- 0
51 while: { ((methHash get: slot) get: i) != 0xFFFFFFFF } do: { 51 while: { ((methHash get: slot) get: i)!= 0xFFFFFFFF } do: {
52 methodId <- make_object: (addr_of: obj_int32_meta) NULL 0 52 methodId <- make_object: (addr_of: obj_int32_meta) NULL 0
53 methodId num!: ((methHash get: slot) get: i) 53 methodId num!: ((methHash get: slot) get: i)
54 mcall: append 2 arr methodId 54 mcall: append 2 arr methodId
55 55
56 i <- i + 1 56 i <- i + 1
96 ids map: :id { 96 ids map: :id {
97 rt methodName: id 97 rt methodName: id
98 } 98 }
99 } 99 }
100 100
101 propertiesOf <- :obj {
102 messages <- understoodBy: obj
103 setters <- dict hash
104 potentials <- #[]
105 foreach: messages :idx message {
106 if: (message endsWith?: "!") {
107 setters set: (message from: 0 withLength: (message length) - 1) true
108 } else: {
109 potentials append: message
110 }
111 }
112 potentials filter: :el { setters contains?: el }
113 }
114
101 sendMessage:to <- :message :obj { 115 sendMessage:to <- :message :obj {
102 d <- getMethodDict: 116 d <- getMethodDict:
103 d ifget: message :messageId{ 117 d ifget: message :messageId{
104 rt sendMessage: messageId to: obj 118 rt sendMessage: messageId to: obj
105 } else: { false } 119 } else: { false }