src/JavaFieldRef2.st
branchjk_new_structure
changeset 1234 6ddf1122f94b
parent 1233 6f0735496901
child 1239 9e302ab52dc2
--- a/src/JavaFieldRef2.st	Wed Dec 07 12:39:12 2011 +0000
+++ b/src/JavaFieldRef2.st	Wed Dec 07 13:38:08 2011 +0000
@@ -86,6 +86,15 @@
 
 !JavaFieldRef2 methodsFor:'private - resolving'!
 
+findInstOffset
+    "fieldRef must be resolved before calling me"
+    self assert: classCache notNil.
+    self assert: valueCache notNil.
+    ^ classCache instVarOffsetOf: self name.
+
+    "Created: / 07-12-2011 / 13:44:59 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+!
+
 findResolvedStaticValue
     valueCache := JavaResolver uniqueInstance 
                 resolveStaticFieldIndentifiedByRef: self.
@@ -116,15 +125,28 @@
     "Modified: / 07-12-2011 / 13:30:49 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
 !
 
+findStaticOffset
+    "fieldRef must be resolved before calling me"
+    self assert: classCache notNil.
+    self assert: valueCache notNil.
+    ^ classCache class instVarOffsetOf: self name.
+
+    "Created: / 07-12-2011 / 13:45:15 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+!
+
 resolveOffset
     "fieldRef must be resolved before calling me"
     
-    | currentClass |
-    currentClass := classCache.
-    self assert: (currentClass instVarNames includes: self name).
-    offset := currentClass instVarOffsetOf: self name.
+self assert: valueCache notNil.
+    self assert: classCache isJavaClass.
+    
+    valueCache isStatic ifTrue: [ offset := self findStaticOffset. ] ifFalse: [
+        offset := self findInstOffset.
+        offset isNil ifTrue: [ offset := self findStaticOffset. ]
+    ].
+    self assert: offset notNil.
 
-    "Modified: / 07-12-2011 / 13:35:51 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+    "Modified: / 07-12-2011 / 14:33:51 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
 !
 
 resolveStaticOffset