--- a/JavaFieldRef2.st Fri Sep 06 00:16:38 2013 +0100
+++ b/JavaFieldRef2.st Tue Sep 10 00:11:17 2013 +0200
@@ -97,28 +97,42 @@
findResolvedStaticValue
-self findResolvedValue.
+ self findResolvedValue.
"Created: / 28-04-2011 / 22:05:10 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
"Modified: / 03-12-2011 / 12:16:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 08-12-2011 / 13:37:05 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+ "Modified (format): / 09-09-2013 / 23:39:33 / Marcel Hlopko <marcel.hlopko@fit.cvut.cz>"
!
findResolvedValue: doClassInit
+ |class|
valueCache := JavaResolver uniqueInstance
- resolveFieldIndentifiedByRef: self.
+ resolveFieldIndentifiedByRef: self.
valueCache isStatic ifTrue: [ classCache := valueCache javaClass ] ifFalse: [
classCache := (constantPool at: classRefIndex) resolve: doClassInit.
- ].
+ ].
classCache isNil ifTrue: [ self breakPoint: #mh ].
self resolveOffset.
nameAndTypeCache := (constantPool at: nameAndTypeIndex) resolve.
self resolveType.
nameAndTypeCache isNil ifTrue: [ self breakPoint: #mh ].
+ class := self classRef resolve: false.
+ class canCacheReferences ifTrue: [ ^ valueCache] ifFalse: [
+ "references to class cannot be cached, returning resolved value
+ and invalidating the reference so it has to be resolved again
+ next time"
+ |resolvedValue|
+ resolvedValue := valueCache.
+ self invalidate.
+ ^ resolvedValue.
+ ]
+
"Modified: / 07-12-2011 / 21:52:23 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
"Created: / 09-02-2012 / 23:09:18 / mh <hlopik@gmail.com>"
"Modified: / 16-10-2012 / 10:46:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 10-09-2013 / 00:06:44 / Marcel Hlopko <marcel.hlopko@fit.cvut.cz>"
!
findStaticOffset