diff 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
line wrap: on
line diff
--- a/modules/object.tp	Fri Jul 18 19:31:07 2014 -0700
+++ b/modules/object.tp	Fri Jul 18 20:45:50 2014 -0700
@@ -48,7 +48,7 @@
 			while: {slot < 16} do: {
 				if: (methHash get: slot) {
 					i <- 0
-					while: { ((methHash get: slot) get: i) != 0xFFFFFFFF } do: {
+					while: { ((methHash get: slot) get: i)!= 0xFFFFFFFF } do: {
 						methodId <- make_object: (addr_of: obj_int32_meta) NULL 0
 						methodId num!: ((methHash get: slot) get: i)
 						mcall: append 2 arr methodId
@@ -98,6 +98,20 @@
 			}
 		}
 
+		propertiesOf <- :obj {
+			messages <- understoodBy: obj
+			setters <- dict hash
+			potentials <- #[]
+			foreach: messages :idx message {
+				if: (message endsWith?: "!") {
+					setters set: (message from: 0 withLength: (message length) - 1) true
+				} else: {
+					potentials append: message
+				}
+			}
+			potentials filter: :el { setters contains?: el }
+		}
+
 		sendMessage:to <- :message :obj {
 			d <- getMethodDict:
 			d ifget: message :messageId{