Mercurial > repos > tabletprog
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 } |