src/JavaClassReader.st
branchjk_new_structure
changeset 1792 c8c3a2c3a03f
parent 1728 0d275432230d
child 1795 11b68a35cfe5
--- a/src/JavaClassReader.st	Fri Nov 02 18:01:46 2012 +0000
+++ b/src/JavaClassReader.st	Fri Nov 02 20:42:28 2012 +0000
@@ -544,15 +544,21 @@
         ] ifFalse: [
             "/ a JAVA class
             super_class := Java classNamed: superClassName.
-            super_class 
-                ifNil: [
-                    super_class := self 
+            super_class isNil ifTrue: [
+                super_class := self 
                                 loadSuperclassIdentifiedBy: (constants at: super_class_index)
                                 ignoring: classesbeingLoaded
-                ].
-            super_class ifNil: [ self halt: 'Cannot find super class?!!' ].
+            ].
+            super_class isNil ifTrue: [ 
+                self halt: 'Cannot find super class?!!' 
+            ].
         ].
     ].
+
+    "/ If superclass is finalized, mark class so as well.
+    (super_class notNil and:[super_class hasFinalize]) ifTrue:[
+        access_flags := access_flags bitOr: ACX_HASFINALIZE
+    ].
     
     "/
     "/ get interfaces
@@ -600,10 +606,6 @@
             JavaClass setInstanceVariableStringFromFields: staticFields
                 in: classBeingLoaded class.
             classBeingLoaded setStaticFields: staticFields.
-            "/JV@2011-12-03: Don't initialize fields now, java.lang.String may not be present.
-            "/               Static fields are now initialized in #classInit (which is called
-            "/               during GETSTATIC/PUTSTATIC field resolving
-            "/classBeingLoaded initializeStaticFields.
             classBeingLoaded setAccessFlags: access_flags.
             classBeingLoaded setSuperclass: super_class.
             classBeingLoaded setConstantPool: constants.
@@ -643,7 +645,7 @@
     "Modified: / 15-10-2010 / 17:37:38 / Jan Kurs <kurs.jan@post.cz>"
     "Modified: / 28-01-2011 / 15:09:48 / Marcel Hlopko <hlopik@gmail.com>"
     "Modified: / 18-05-2011 / 15:30:29 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
-    "Modified: / 06-09-2012 / 11:37:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 02-11-2012 / 19:38:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 readStream:aStream ignoring:classesBeingLoaded
@@ -2209,6 +2211,12 @@
             m setAccessFlags:newAccessFlags.
         ].
         aClass addMethod:m name:name signature:descriptor.
+
+        ( m selector == #'finalize()V' ) ifTrue:[
+            ( aClass name ~~ #'java/lang/Object' ) ifFalse:[
+                aClass setAccessFlags: (aClass accessFlags bitOr:ACX_HASFINALIZE)
+            ]
+        ].
     ] ifFalse:[
         m := Method new.
         self readAttributesFor:m.
@@ -2226,7 +2234,7 @@
     "Created: / 15-04-1996 / 16:48:49 / cg"
     "Modified: / 25-09-1999 / 23:16:25 / cg"
     "Modified: / 28-10-2011 / 16:56:48 / m"
-    "Modified: / 29-03-2012 / 09:18:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 02-11-2012 / 20:11:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 readMethodsFor:aJavaClass