--- a/src/JavaClass.st Fri Nov 02 21:30:25 2012 +0000
+++ b/src/JavaClass.st Fri Nov 02 21:55:57 2012 +0000
@@ -1535,22 +1535,28 @@
| newJavaObject
sz "{ Class: SmallInteger }"
- finalizeM |
+ offs "{ Class: SmallInteger }"
+ |
(accessFlags bitAnd: ACX_ABSTRACT_OR_INTERFACE) ~~ 0 ifTrue: [
JavaVM throwInstantiationExceptionFor: self.
^ nil
].
newJavaObject := super basicNew.
- initValues notNil ifTrue: [ sz := self instSize.
- 1 to: sz do: [:i | newJavaObject instVarAt: i put: (initValues at: i) ].
+ offs := JavaObject instSize.
+ offs > 0 ifTrue:[
+ "Assume first is lockword"
+ newJavaObject instVarAt: 1 put: 0.
].
- JavaVM finalizationEnabled ifTrue:[
- finalizeM := self lookupMethodFor: #'finalize()V'.
- finalizeM byteCode = #[177] "See Object#finalize()" ifFalse:[
- newJavaObject registerForFinalization.
- ].
+ initValues notNil ifTrue: [
+ sz := self instSize.
+ offs to: sz do: [:i | newJavaObject instVarAt: i put: (initValues at: i - offs) ].
].
+ self hasFinalize ifTrue:[
+ newJavaObject registerForFinalization
+ ].
+
+
^ newJavaObject
"
@@ -1933,7 +1939,7 @@
!
setFields:f
- |vals|
+ | nignored nvals vals names |
JavaClass setInstanceVariableStringFromFields:f in:self.
@@ -1945,23 +1951,25 @@
field setIndex: superclass instSize + index.
].
- vals := self allInstVarNames
- collect:[:nm |
- self initValueFor:nm
- ].
- vals isEmpty ifTrue:[
- initValues := nil
- ] ifFalse:[
- (vals detect:[:el | el notNil] ifNone:nil) isNil ifTrue:[
- initValues := nil
- ] ifFalse:[
- initValues := vals asArray
- ]
+ "Now, collect initValues. Ignore the lockword, if any"
+ nignored := JavaObject instSize. "/except possible instvars in JavaObject (lockword)
+ nvals := self instSize - nignored.
+ nvals > 0 ifTrue:[
+ vals := Array new: nvals.
+ names := self allInstVarNames.
+ JavaObject instSize + 1 to: names size do:[:i|
+ | val |
+ val := self initValueFor: (names at: i).
+ val notNil ifTrue:[
+ vals at: i - nignored put: val.
+ initValues := vals.
+ ]
+ ].
]
"Created: / 15-04-1996 / 16:42:52 / cg"
"Modified: / 06-11-1998 / 01:53:01 / cg"
- "Modified: / 27-07-2011 / 09:26:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 02-11-2012 / 21:49:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
setFullName:aString
@@ -2077,6 +2085,12 @@
"Created: / 02-03-2011 / 23:01:14 / Marcel Hlopko <hlopik@gmail.com>"
!
+hasFinalize
+ ^ (accessFlags bitAnd:ACX_HASFINALIZE) ~~ 0
+
+ "Created: / 02-11-2012 / 18:50:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
hasInterface:aJavaInterface
"return true, if I respond to all methods as
required by the argument, an aJavaInterface"