diff -r 6537437f04a7 -r 62fa0da29e54 src/JavaClass.st --- 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 " + "Modified: / 02-11-2012 / 21:49:16 / Jan Vrany " ! setFullName:aString @@ -2077,6 +2085,12 @@ "Created: / 02-03-2011 / 23:01:14 / Marcel Hlopko " ! +hasFinalize + ^ (accessFlags bitAnd:ACX_HASFINALIZE) ~~ 0 + + "Created: / 02-11-2012 / 18:50:26 / Jan Vrany " +! + hasInterface:aJavaInterface "return true, if I respond to all methods as required by the argument, an aJavaInterface"