src/JavaClassReader.st
branchjk_new_structure
changeset 1028 d30cabc12354
parent 1026 5badd1d31864
child 1030 9f87a1830611
--- 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>"