Fix in JavaMethodAnalyzer>>readGlobals. development
authorJan Vrany <jan.vrany@fit.cvut.cz>
Mon, 09 Sep 2013 13:16:00 +0100
branchdevelopment
changeset 2719 0d749922f255
parent 2718 b3fe904a2fc7
child 2720 d55ab9c66bb3
Fix in JavaMethodAnalyzer>>readGlobals. Fetches used globals from NEW, ANEWARRAY, MULTIANEWARRAY, GETSTATIC, PUTSTATIC insns. With that fix, 'spawn buffer on references' works.
JavaMethodAnalyzer.st
--- a/JavaMethodAnalyzer.st	Mon Sep 09 10:33:09 2013 +0100
+++ b/JavaMethodAnalyzer.st	Mon Sep 09 13:16:00 2013 +0100
@@ -22,7 +22,7 @@
 
 JavaByteCodeProcessorAdapter subclass:#JavaMethodAnalyzer
 	instanceVariableNames:'fieldsAccessed fieldsRead fieldsWritten staticsAccessed
-		staticsRead staticsWritten methodsInvoked'
+		staticsRead staticsWritten methodsInvoked refdClasses'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'Languages-Java-Support-Decompiling'
@@ -88,6 +88,15 @@
 
 !JavaMethodAnalyzer methodsFor:'instructions'!
 
+anewarray
+    | classRef |
+
+    classRef := constantPool at: self fetchIndex2.
+    refdClasses add: classRef.
+
+    "Created: / 09-09-2013 / 12:21:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 getfield
     | fieldRef |
 
@@ -105,8 +114,10 @@
     fieldRef := constantPool at: self fetchIndex2.     
     staticsRead add: fieldRef.
     staticsAccessed  add: fieldRef.
+    refdClasses add: fieldRef classRef.
 
     "Created: / 05-09-2013 / 16:19:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 09-09-2013 / 12:16:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 invinterface
@@ -135,6 +146,25 @@
     "Created: / 30-08-2013 / 17:05:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+multianewarray
+    | classRef |
+
+    classRef := constantPool at: self fetchIndex2.
+    self fetchIndex. "/ dimensions
+    refdClasses add: classRef.
+
+    "Created: / 09-09-2013 / 12:21:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+new
+    | classRef |
+
+    classRef := constantPool at: self fetchIndex2.
+    refdClasses add: classRef.
+
+    "Created: / 09-09-2013 / 12:18:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 putfield
     | fieldRef |
 
@@ -146,14 +176,15 @@
     "Modified: / 30-08-2013 / 17:02:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
-puystatic
+putstatic
     | fieldRef |
 
     fieldRef := constantPool at: self fetchIndex2.     
     staticsWritten add: fieldRef.
     staticsAccessed  add: fieldRef.
+    refdClasses add: fieldRef classRef.
 
-    "Created: / 05-09-2013 / 16:19:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Created: / 09-09-2013 / 12:16:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !JavaMethodAnalyzer methodsFor:'processing loop'!
@@ -168,6 +199,7 @@
     staticsWritten  := Set new.
 
     methodsInvoked := Set new.
+    refdClasses := Set new.
 
     "/ Abstract, native or other funny method
     aMethod byteCode isNil ifTrue:[ ^ self ].
@@ -175,7 +207,7 @@
     ^ super process: aMethod receiver: aReceiver arguments: args.
 
     "Created: / 30-08-2013 / 13:23:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 05-09-2013 / 16:18:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 09-09-2013 / 12:15:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !JavaMethodAnalyzer methodsFor:'queries'!
@@ -252,10 +284,16 @@
 !
 
 readGlobals
-    ^#()
+    | names |
+
+    names := refdClasses collect:[:ref | ref name ].
+"/    (names includes: 'sun/misc/Unsafe') ifTrue:[
+"/        self halt.
+"/    ].
+    ^ names
 
     "Created: / 05-09-2013 / 15:27:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 08-09-2013 / 23:00:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 09-09-2013 / 12:33:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 readInstVars
@@ -307,3 +345,10 @@
     "Created: / 31-08-2013 / 23:22:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!JavaMethodAnalyzer class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+