JavaClassReader.st
changeset 9 bc65152d7610
parent 7 de8ce26e1f2c
child 11 30997f6943a4
--- a/JavaClassReader.st	Tue Apr 16 18:20:22 1996 +0000
+++ b/JavaClassReader.st	Tue Apr 16 18:21:29 1996 +0000
@@ -1,5 +1,6 @@
 Object subclass:#JavaClassReader
-	instanceVariableNames:'inStream msb constants this_class super_class'
+	instanceVariableNames:'inStream msb constants this_class super_class version majorVsn
+		minorVsn'
 	classVariableNames:'Verbose'
 	poolDictionaries:''
 	category:'Java-Support'
@@ -35,9 +36,19 @@
         Smalltalk at:(javaClass fullName asSymbol) put:javaClass.
         Smalltalk changed.
     ].
+    ^ javaClass
 
     "
      JavaClassReader loadFile:'/phys/ibm3/hotjava/classes/browser/AddButton.class'
+
+     '/phys/ibm3/java/lib/java/lang' asFilename
+        directoryContents do:[:nm |
+            (nm endsWith:'.class') ifTrue:[
+                JavaClassReader loadFile:'/phys/ibm3/java/lib/java/lang/' , nm
+            ]
+        ]
+
+     JavaClassReader loadFile:'/phys/ibm3/java/lib/java/lang/AbstractMethodError.class'
     "
 
     "Created: 15.4.1996 / 14:58:53 / cg"
@@ -77,7 +88,7 @@
     "reads a class from inStream and returns it.
      The JavaClass is not installed as global"
 
-    |magic version 
+    |magic 
      access_flags this_class_index super_class_index|
 
     "/
@@ -100,7 +111,13 @@
     "/ get version
     "/
     version := self nextU4.
-    Verbose ifTrue:[Transcript show:'version = '; showCr:version].
+    majorVsn := (version bitShift:-16) bitAnd:16rFFFF.
+    minorVsn := version bitAnd:16rFFFF.
+
+    Verbose ifTrue:[Transcript show:'version = '; 
+                               show:(majorVsn printString); 
+                               show:'.';
+                               showCr:(minorVsn printString)].
 
     "/
     "/ get constant pool
@@ -143,6 +160,10 @@
     "
      JavaClassReader readFile:'/phys/ibm3/hotjava/classes/browser/AddButton.class'
      JavaClassReader readFile:'/phys/ibm3/hotjava/classes/browser/Alignable.class'
+
+     JavaClassReader verbose:true.
+     JavaClassReader readFile:'/phys/ibm3/hotjava/classes/java/lang/ArithmeticException.class'
+     JavaClassReader readFile:'/phys/ibm3/java/lib/java/lang/ArithmeticException.class'
     "
 
     "Created: 15.4.1996 / 15:02:47 / cg"
@@ -246,8 +267,23 @@
 readAttributeFor:something
     |attribute_name_index attribute_name attribute_length attribute_info|
 
+    Verbose ifTrue:[Transcript show:'attrib at pos: '; showCr:inStream position].
+
     attribute_name_index := self nextU2.
+
+    "/
+    "/ UNDOC feature ?
+    "/
+    attribute_name_index > constants size ifTrue:[
+        attribute_name_index == 16rb700 ifTrue:[
+            self halt.
+        ]
+    ].
+
     attribute_name := constants at:attribute_name_index.
+
+    Verbose ifTrue:[Transcript show:'attrib name: '; showCr:attribute_name].
+
     (self readAttribute:attribute_name for:something) ifFalse:[
         attribute_length := self nextU4.
         attribute_info := ByteArray new:(attribute_length).
@@ -556,18 +592,34 @@
 
 readCodeAttributeFor:aJavaMethod
     |attribute_length max_stack max_locals code_length code
-     exception_table_length exception_table|
+     exception_table_length exception_table unknown1 unknown2|
 
     attribute_length := self nextU4.
 
+
+    Verbose ifTrue:[Transcript show:'attribute_length: 0x'; showCr:(attribute_length printStringRadix:16)].
+
     max_stack := self nextU1.
     max_locals := self nextU1.
+
+    majorVsn > 2 ifTrue:[
+        unknown1 := self nextU2.
+        unknown2 := self nextU2.
+    ].
+
     code_length := self nextU2.
+    Verbose ifTrue:[Transcript show:'code_length: '; showCr:(code_length printStringRadix:16)].
+    Verbose ifTrue:[Transcript show:'code at pos: '; showCr:inStream position].
     code := ByteArray new:code_length.
     inStream nextBytes:code_length into:code startingAt:1.
 
+    Verbose ifTrue:[Transcript show:'method code:'; showCr:code.].
+
     exception_table_length := self nextU2.
+    Verbose ifTrue:[Transcript show:'exception_table_length: '; showCr:(exception_table_length printStringRadix:16)].
     exception_table_length ~~ 0 ifTrue:[
+        Verbose ifTrue:[Transcript show:'exceptionTable length:'; showCr:exception_table_length.].
+
         exception_table := Array new:exception_table_length.
         1 to:exception_table_length do:[:i |
             |start_pc end_pc handler_pc catch_type|
@@ -618,6 +670,8 @@
         ].
     ].
 
+    Verbose ifTrue:[Transcript showCr:'method has a lineNumberTable'].
+
     aJavaMethod setLineNumberTable:line_number_table.
     ^ true
 
@@ -631,8 +685,7 @@
 !
 
 readMethod
-    |m access_flags name_index name signature_index signature
-     attributes_counts attribute|
+    |m access_flags name_index name signature_index signature|
 
     "/
     "/ get a method
@@ -643,6 +696,10 @@
 
     name := constants at:name_index.
     signature := constants at:signature_index.
+
+    Verbose ifTrue:[Transcript show:'method name:'; showCr:name.
+                    Transcript show:'signature:'; showCr:signature.].
+
     m := JavaMethod new.
     m setAccessFlags:access_flags.
     m setSignature:signature.
@@ -707,6 +764,6 @@
 !JavaClassReader class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaClassReader.st,v 1.4 1996/04/16 14:44:23 cg Exp $'
+    ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaClassReader.st,v 1.5 1996/04/16 18:21:29 cg Exp $'
 ! !
 JavaClassReader initialize!