--- a/src/JavaClassReader.st Wed Oct 19 18:05:11 2011 +0000
+++ b/src/JavaClassReader.st Wed Oct 19 18:30:57 2011 +0000
@@ -497,15 +497,14 @@
"/
msb := true.
magic := inStream nextUnsignedLongMSB: true.
- magic = (self class magic_MSB)
- ifFalse:
- [ magic = (self class magic_LSB)
- ifFalse:
- [ InvalidClassFormatSignal raiseErrorString: 'not a java class file'.
- ^ nil ].
- msb := false.
- Verbose ifTrue: [ Transcript showCR: 'file is lsb' ]. ]
- ifTrue: [ Verbose ifTrue: [ Transcript showCR: 'file is msb' ]. ].
+ magic = (self class magic_MSB) ifFalse: [
+ magic = (self class magic_LSB) ifFalse: [
+ InvalidClassFormatSignal raiseErrorString: 'not a java class file'.
+ ^ nil
+ ].
+ msb := false.
+ Verbose ifTrue: [ Transcript showCR: 'file is lsb' ].
+ ] ifTrue: [ Verbose ifTrue: [ Transcript showCR: 'file is msb' ]. ].
"/
"/ get version
@@ -515,19 +514,20 @@
majorVsn := inStream nextUnsignedShortMSB: msb.
((self class fileMajorVersions includes: majorVsn) not
or: [ (self class fileMinorVersions includes: minorVsn) not ])
- ifTrue:
- [ Transcript
+ ifTrue: [
+ Transcript
show: 'warning this file has version ';
show: majorVsn;
show: '.';
- showCR: minorVsn. ].
- Verbose
- ifTrue:
- [ Transcript
- show: 'version = ';
- show: (majorVsn printString);
- show: '.';
- showCR: (minorVsn printString). ].
+ showCR: minorVsn.
+ ].
+ Verbose ifTrue: [
+ Transcript
+ show: 'version = ';
+ show: (majorVsn printString);
+ show: '.';
+ showCR: (minorVsn printString).
+ ].
"/
"/ get constant pool
@@ -542,31 +542,31 @@
access_flags := inStream nextUnsignedShortMSB: msb.
this_class_index := inStream nextUnsignedShortMSB: msb.
super_class_index := inStream nextUnsignedShortMSB: msb.
- super_class_index == 0
- ifTrue: [ super_class := nil ]
- ifFalse:
- [ super_class := constants at: super_class_index.
- superClassName := super_class fullName.
-
- "/ special for ST-classes
-
- (superClassName startsWith: 'smalltalk.')
- ifTrue:
- [ "/ a Smalltalk class
- superClassName := superClassName copyFrom: 11.
- existingSuperClass := Smalltalk at: superClassName asSymbol.
- existingSuperClass notNil
- ifTrue: [ super_class := existingSuperClass ]
- ifFalse:
- [ "/ self halt - must load superclass ...
- ] ]
- ifFalse:
- [ "/ a JAVA class
- super_class := Java classNamed: superClassName.
- super_class ifNil:
- [ super_class := self loadSuperclassIdentifiedBy: (constants at: super_class_index)
- ignoring: classesbeingLoaded ].
- super_class ifNil: [ self halt: 'Cannot find super class?!!' ]. ]. ].
+ super_class_index == 0 ifTrue: [ super_class := nil ] ifFalse: [
+ super_class := constants at: super_class_index.
+ superClassName := super_class fullName.
+
+ "/ special for ST-classes
+
+ (superClassName startsWith: 'smalltalk.') ifTrue: [
+ "/ a Smalltalk class
+ superClassName := superClassName copyFrom: 11.
+ existingSuperClass := Smalltalk at: superClassName asSymbol.
+ existingSuperClass notNil ifTrue: [ super_class := existingSuperClass ] ifFalse: [
+ "/ self halt - must load superclass ...
+ ]
+ ] ifFalse: [
+ "/ a JAVA class
+ super_class := Java classNamed: superClassName.
+ super_class
+ ifNil: [
+ super_class := self
+ loadSuperclassIdentifiedBy: (constants at: super_class_index)
+ ignoring: classesbeingLoaded
+ ].
+ super_class ifNil: [ self halt: 'Cannot find super class?!!' ].
+ ].
+ ].
"/
"/ get interfaces
@@ -592,37 +592,33 @@
"/ care for smalltalk classes ...
- (thisClassName startsWith: 'smalltalk.')
- ifTrue:
- [ thisClassName := thisClassName copyFrom: 11.
- existing_class := Smalltalk at: thisClassName asSymbol.
- existing_class notNil
- ifTrue:
- [ self halt: ('overloading existing class: ' , thisClassName).
- thisClassName := (thisClassName , '_new') asSymbol. ].
- thisMetaClass := Metaclass new.
- thisMetaClass setSuperclass: super_class class.
- thisMetaClass instSize: (super_class class instSize + nStatic).
- classBeingLoaded := thisMetaClass new.
- classBeingLoaded setSuperclass: super_class.
- classBeingLoaded setName: thisClassName asSymbol. ]
- ifFalse:
- [ "/ a java class
- classBeingLoaded := JavaClass fullName: thisClassName numStatic: nStatic.
-
- fields := fields select: [:f | f isStatic not ].
-
- JavaClass setInstanceVariableStringFromFields: staticFields
- in: classBeingLoaded class.
-
- classBeingLoaded setStaticFields: staticFields.
- classBeingLoaded initializeStaticFields.
- classBeingLoaded setAccessFlags: access_flags.
- classBeingLoaded setSuperclass: super_class.
- classBeingLoaded setConstantPool: constants.
- classBeingLoaded setFields: fields.
- classBeingLoaded setInterfaces: interfaces.
- ].
+ (thisClassName startsWith: 'smalltalk.') ifTrue: [
+ thisClassName := thisClassName copyFrom: 11.
+ existing_class := Smalltalk at: thisClassName asSymbol.
+ existing_class notNil ifTrue: [
+ self halt: ('overloading existing class: ' , thisClassName).
+ thisClassName := (thisClassName , '_new') asSymbol.
+ ].
+ thisMetaClass := Metaclass new.
+ thisMetaClass setSuperclass: super_class class.
+ thisMetaClass instSize: (super_class class instSize + nStatic).
+ classBeingLoaded := thisMetaClass new.
+ classBeingLoaded setSuperclass: super_class.
+ classBeingLoaded setName: thisClassName asSymbol.
+ ] ifFalse: [
+ "/ a java class
+ classBeingLoaded := JavaClass fullName: thisClassName numStatic: nStatic.
+ fields := fields select: [:f | f isStatic not ].
+ JavaClass setInstanceVariableStringFromFields: staticFields
+ in: classBeingLoaded class.
+ classBeingLoaded setStaticFields: staticFields.
+ classBeingLoaded initializeStaticFields.
+ classBeingLoaded setAccessFlags: access_flags.
+ classBeingLoaded setSuperclass: super_class.
+ classBeingLoaded setConstantPool: constants.
+ classBeingLoaded setFields: fields.
+ classBeingLoaded setInterfaces: interfaces.
+ ].
"/
"/ get methods
@@ -630,12 +626,15 @@
self readMethodsFor: classBeingLoaded.
self readAttributesFor: classBeingLoaded.
+
"/ classBeingLoaded constantPool
"/ do: [:each | self updateOwnerInCPItem: each ].
+
classBeingLoaded fields do: [:each | self updateOwnerInField: each ].
classBeingLoaded staticFields do: [:each | self updateOwnerInField: each ].
-
-
+ Java javaRegistry addClass: classBeingLoaded definedBy:classBeingLoaded classLoader.
+ classBeingLoaded classInit.
+ classesbeingLoaded remove: classBeingLoaded name.
^ classBeingLoaded.
"
@@ -646,7 +645,6 @@
JavaClassReader verbose:true.
JavaClassReader loadFile:'/phys/ibm3/hotjava/classes/java/lang/ArithmeticException.class'
JavaClassReader loadFile:'/phys/ibm3/java/lib/java/lang/ArithmeticException.class'"
-
"Created: / 15-04-1996 / 15:02:47 / cg"
"Modified: / 12-11-1998 / 21:14:45 / cg"
"Modified: / 15-10-2010 / 17:37:38 / Jan Kurs <kurs.jan@post.cz>"