--- 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