--- 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!