- SmallSense::SmalltalkInferencer
authorJan Vrany <jan.vrany@fit.cvut.cz>
Sat, 26 Oct 2013 18:04:50 +0100
changeset 142 211f95ac0835
parent 141 3007e7238f1b
child 143 038fdc3940f3
- SmallSense::SmalltalkInferencer class: SmallSense::SmalltalkInferencer
SmallSense__SmalltalkInferencer.st
--- a/SmallSense__SmalltalkInferencer.st	Sat Oct 26 17:53:10 2013 +0100
+++ b/SmallSense__SmalltalkInferencer.st	Sat Oct 26 18:04:50 2013 +0100
@@ -285,6 +285,42 @@
     self process: tree in: cls info: (Manager instance infoForClass: cls)
 
     "Created: / 26-11-2011 / 13:48:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+process: tree in: cls info: clsInfo
+
+     | i c |
+
+    class := cls.
+    classInfo := clsInfo.
+
+    "Fill types with cached data..."
+
+    c := class.
+    i := classInfo.
+    [ c notNil and:[i notNil] ] whileTrue:[
+        c instVarNames do:[:nm|
+            types at: nm put: (i infoForInstvar: nm)
+        ].
+        c := c superclass.
+        i := i superclassInfo.
+    ].
+
+    self visit:tree.
+
+
+    "Now, infer variable types based on collected sends"
+    sends keysAndValuesDo:[:varName :sentSelectors|
+        | classes |
+
+        classes := self rootsUnderstanding: sentSelectors.
+        (types includesKey: varName) ifTrue:[
+            (types at: varName) addClasses: classes.
+        ].
+    ].
+
+    "Created: / 27-11-2011 / 16:22:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified (format): / 26-10-2013 / 13:58:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !SmalltalkInferencer::Phase1 methodsFor:'visiting'!