checkin from browser
authorcg
Tue, 30 Apr 1996 23:24:49 +0000
changeset 27 4560bb77bb36
parent 26 a08fff66123e
child 28 916f444c5cae
checkin from browser
Java.st
JavaClass.st
JavaClassReader.st
JavaDecompiler.st
JavaField.st
JavaFieldref.st
JavaMethod.st
JavaMethodref.st
JavaNameandType.st
--- a/Java.st	Tue Apr 30 23:23:46 1996 +0000
+++ b/Java.st	Tue Apr 30 23:24:49 1996 +0000
@@ -33,6 +33,7 @@
         
         ]
     ].
+    self changed:#classes
 
     "Created: 17.4.1996 / 23:29:31 / cg"
     "Modified: 18.4.1996 / 00:45:39 / cg"
@@ -61,5 +62,5 @@
 !Java class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/Java.st,v 1.3 1996/04/19 08:35:06 cg Exp $'
+    ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/Java.st,v 1.4 1996/04/30 23:24:33 cg Exp $'
 ! !
--- a/JavaClass.st	Tue Apr 30 23:23:46 1996 +0000
+++ b/JavaClass.st	Tue Apr 30 23:24:49 1996 +0000
@@ -1,5 +1,5 @@
 ClassDescription subclass:#JavaClass
-	instanceVariableNames:'fullName accessFlags constantPool sourceFile'
+	instanceVariableNames:'fullName accessFlags constantPool sourceFile fields'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'Java-Classes'
@@ -42,7 +42,7 @@
 !
 
 name
-    ^ fullName
+    ^ name "/ fullName
 !
 
 package
@@ -69,7 +69,7 @@
 !JavaClass methodsFor:'printing & storing'!
 
 displayString
-    ^ self class name , '(' , name , ')'
+    ^ 'Java-' , name
 
     "Created: 15.4.1996 / 16:02:48 / cg"
 ! !
@@ -81,7 +81,8 @@
         selectorArray := #().
         methodArray := #()
     ].
-    selectorArray := selectorArray copyWith:name.
+"/    selectorArray := selectorArray copyWith:(name , signature) asSymbol. "/ name.
+    selectorArray := selectorArray copyWith:name asSymbol. "/ name.
     methodArray := methodArray copyWith:m
 
     "Created: 15.4.1996 / 16:42:52 / cg"
@@ -99,6 +100,21 @@
     "Created: 15.4.1996 / 16:42:52 / cg"
 !
 
+setFields:f
+    |varNames|
+
+    varNames := ''.
+    f do:[:aField |
+        varNames := varNames , aField name , ' '
+    ].
+    instvars := varNames.
+"/    instSize := superclass instSize + f size.
+
+    fields := f
+
+    "Created: 15.4.1996 / 16:42:52 / cg"
+!
+
 setFullName:aString
     |nameComponents|
 
@@ -113,10 +129,23 @@
     sourceFile := aFilename.
 
     "Created: 15.4.1996 / 16:42:52 / cg"
+!
+
+setSuperclass:aClass
+    aClass isNil ifTrue:[
+        ^ super setSuperclass:JavaObject
+    ].
+    super setSuperclass:aClass
+
+    "Created: 15.4.1996 / 16:42:52 / cg"
 ! !
 
 !JavaClass methodsFor:'queries'!
 
+isClass
+    ^ true
+!
+
 isFinal
     ^ (accessFlags bitAnd:16r0010) ~~ 0
 !
@@ -159,10 +188,16 @@
             ]
         ]
     ].
+
+    (superclass notNil and:[(superclass isMemberOf:JavaUnresolvedClassConstant) not]) ifTrue:[
+        instSize := superclass instSize + (instvars asCollectionOfWords size)
+    ] ifFalse:[
+        instSize := instvars asCollectionOfWords size
+    ].
 ! !
 
 !JavaClass class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaClass.st,v 1.9 1996/04/19 08:35:44 cg Exp $'
+    ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaClass.st,v 1.10 1996/04/30 23:23:50 cg Exp $'
 ! !
--- a/JavaClassReader.st	Tue Apr 30 23:23:46 1996 +0000
+++ b/JavaClassReader.st	Tue Apr 30 23:24:49 1996 +0000
@@ -1,6 +1,6 @@
 Object subclass:#JavaClassReader
 	instanceVariableNames:'inStream msb constants this_class super_class version majorVsn
-		minorVsn constNeeds2Slots constSlot'
+		minorVsn constNeeds2Slots constSlot nFields fields'
 	classVariableNames:'Verbose'
 	poolDictionaries:''
 	category:'Java-Support'
@@ -134,9 +134,12 @@
     'reading ' print. aFilename print. ' ...' printNL.
 
     inStream := aFilename asFilename readStream.
-    inStream isNil ifTrue:[^ nil].
+    inStream isNil ifTrue:['nil' printNL. ^ nil].
     retVal := self readStream:inStream.
     inStream close.
+
+    '... ' print. retVal printNL.
+
     ^ retVal
 
     "Created: 15.4.1996 / 14:58:53 / cg"
@@ -231,6 +234,7 @@
     "/ get fields
     "/
     self readFieldInfofields.
+    this_class setFields:fields.
 
     "/
     "/ get methods
@@ -767,6 +771,8 @@
         self readAttributeFor:field.
     ].
 
+    ^ field
+
     "
      JavaClassReader readFile:'/phys/ibm3/hotjava/classes/browser/AddButton.class'
     "
@@ -776,17 +782,19 @@
 !
 
 readFieldInfofields
-    |fieldsCount interface|
+    |interface|
 
     "/
     "/ get interfaces
     "/
-    fieldsCount := self nextU2.
-    Verbose ifTrue:[Transcript show:'fieldsCount = '; showCr:fieldsCount].
+    nFields := self nextU2.
+    Verbose ifTrue:[Transcript show:'fieldsCount = '; showCr:nFields].
 
-    1 to:fieldsCount do:[:i |
+    fields := Array new:nFields.
+
+    1 to:nFields do:[:i |
         Verbose ifTrue:[Transcript show:'field: '; showCr:i].
-        self readFieldInfofield
+        fields at:i put:(self readFieldInfofield)
     ].
 
     "
@@ -973,6 +981,6 @@
 !JavaClassReader class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaClassReader.st,v 1.8 1996/04/17 22:51:04 cg Exp $'
+    ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaClassReader.st,v 1.9 1996/04/30 23:24:49 cg Exp $'
 ! !
 JavaClassReader initialize!
--- a/JavaDecompiler.st	Tue Apr 30 23:23:46 1996 +0000
+++ b/JavaDecompiler.st	Tue Apr 30 23:24:49 1996 +0000
@@ -222,22 +222,22 @@
 
         (arraylength)                           "/ 190
         (athrough)                              "/ 191
-        (checkcast)                             "/ 192
+        (checkcast constIndexShort)             "/ 192
         (instanceof constIndexShort)            "/ 193
         (monitorenter)                          "/ 194
         (monitorexit)                           "/ 195
         (verifystack)                           "/ 196
         (breakpoint)                            "/ 197
         (multianewarray constIndexShort dimensionsByte)             "/ 198
-        nil                                     "/ 199
+        (ldc1_quick constIndexByte)             "/ 199
 
         nil                                     "/ 200
         nil                                     "/ 201
-        nil                                     "/ 202
+        (getfield_quick unsignedByte unusedByte)"/ 202
         nil                                     "/ 203
         nil                                     "/ 204
         nil                                     "/ 205
-        nil                                     "/ 206
+nil "/        (getstatic_quick constIndexShort)       "/ 206
         nil                                     "/ 207
         nil                                     "/ 208
         nil                                     "/ 209
@@ -301,6 +301,12 @@
     "Modified: 16.4.1996 / 14:56:13 / cg"
 ! !
 
+!JavaDecompiler class methodsFor:'accessing'!
+
+instructionTable
+    ^ DecoderTable
+! !
+
 !JavaDecompiler class methodsFor:'decompiling'!
 
 decompile:aJavaMethod
@@ -314,7 +320,7 @@
 !JavaDecompiler methodsFor:'decompiling'!
 
 decompile:aJavaMethod to:aStream
-    |who endPC insn spec|
+    |who endPC insn spec op|
 
     outStream := aStream.
 
@@ -343,14 +349,21 @@
         insn := code at:pc.
         pc := pc + 1.
         spec := DecoderTable at:(insn + 1).
+        spec isNil ifTrue:[
+            op := '** invalid opcode: ',insn printString, ' **'
+        ] ifFalse:[
+            op := spec at:1
+        ].
         outStream 
             show:((pc - 1) printStringPaddedTo:4); 
             show:' '; 
-            show:(spec at:1); 
+            show:op; 
             show:' '.
 
-        spec from:2 to:spec size do:[:what |
-            self perform:what
+        spec notNil ifTrue:[
+            spec from:2 to:spec size do:[:what |
+                self perform:what
+            ].
         ].
         outStream cr.
     ]
@@ -390,8 +403,8 @@
     outStream
         show:index; 
         show:' ['; 
-        show:(javaMethod constantPool at:index) displayString; 
-        show:']'
+        show:(javaMethod constantPool at:index ifAbsent:['??']) displayString; 
+        show:'] '
 
     "Created: 16.4.1996 / 15:00:04 / cg"
     "Modified: 16.4.1996 / 15:30:55 / cg"
@@ -406,13 +419,17 @@
     outStream
         show:index; 
         show:' ['; 
-        show:(javaMethod constantPool at:index) displayString; 
-        show:']'
+        show:(javaMethod constantPool at:index ifAbsent:'???') displayString; 
+        show:'] '
 
     "Created: 16.4.1996 / 15:00:04 / cg"
     "Modified: 16.4.1996 / 15:30:55 / cg"
 !
 
+dimensionsByte
+    self unsignedByte
+!
+
 localIndexByte
     |hi low index constants|
 
@@ -428,6 +445,72 @@
     "Modified: 16.4.1996 / 15:30:55 / cg"
 !
 
+lookupSwitchBytes
+    |defaultOffset delta nPairs match pc0|
+
+    pc0 := pc-1.  "/ i.e. the pc of the tableSwitch op
+
+    [(pc-1) \\ 4 ~~ 0] whileTrue:[
+        pc := pc + 1
+    ].
+
+    defaultOffset := code signedDoubleWordAt:pc MSB:true.
+    pc := pc + 4.
+    nPairs := code signedDoubleWordAt:pc MSB:true.
+    pc := pc + 4.
+
+    outStream show:'n='; show:nPairs; cr.
+
+    nPairs timesRepeat:[
+        match := code signedDoubleWordAt:pc MSB:true.
+        pc := pc + 4.
+        delta := code signedDoubleWordAt:pc MSB:true.
+        pc := pc + 4.
+        outStream show:'    '; 
+                  show:match;
+                  show:' -> ';
+                  show:delta;
+                  show:' [';
+                  show:(pc0 + delta);
+                  show:']';
+                  cr.
+    ].
+
+    outStream show:'    '; 
+              show:'default';
+              show:' -> ';
+              show:defaultOffset;
+              show:' [';
+              show:(pc0 + defaultOffset);
+              show:']'.
+!
+
+nargsByte
+    |byte constants|
+
+    byte := code byteAt:pc.
+    pc := pc + 1.
+
+    outStream
+        show:byte 
+
+    "Created: 16.4.1996 / 15:00:04 / cg"
+    "Modified: 16.4.1996 / 15:30:55 / cg"
+!
+
+reservedByte
+    |byte constants|
+
+    byte := code byteAt:pc.
+    pc := pc + 1.
+
+    outStream
+        show:byte 
+
+    "Created: 16.4.1996 / 15:00:04 / cg"
+    "Modified: 16.4.1996 / 15:30:55 / cg"
+!
+
 signedBranchShort
     |index constants|
 
@@ -511,11 +594,24 @@
               show:']'.
 
 
+!
+
+unsignedByte
+    |byte constants|
+
+    byte := code byteAt:pc.
+    pc := pc + 1.
+
+    outStream
+        show:byte 
+
+    "Created: 16.4.1996 / 15:00:04 / cg"
+    "Modified: 16.4.1996 / 15:30:55 / cg"
 ! !
 
 !JavaDecompiler class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaDecompiler.st,v 1.6 1996/04/22 10:46:31 stefan Exp $'
+    ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaDecompiler.st,v 1.7 1996/04/30 23:24:29 cg Exp $'
 ! !
 JavaDecompiler initialize!
--- a/JavaField.st	Tue Apr 30 23:23:46 1996 +0000
+++ b/JavaField.st	Tue Apr 30 23:24:49 1996 +0000
@@ -6,6 +6,20 @@
 !
 
 
+!JavaField methodsFor:'accessing'!
+
+name
+    ^ name
+! !
+
+!JavaField methodsFor:'printing & storing'!
+
+displayString
+    ^ self class name , '(name: ' , name displayString , ')'
+
+
+! !
+
 !JavaField methodsFor:'private accessing'!
 
 setAccessFlags:flags
@@ -35,5 +49,5 @@
 !JavaField class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaField.st,v 1.3 1996/04/17 20:57:20 cg Exp $'
+    ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaField.st,v 1.4 1996/04/30 23:24:08 cg Exp $'
 ! !
--- a/JavaFieldref.st	Tue Apr 30 23:23:46 1996 +0000
+++ b/JavaFieldref.st	Tue Apr 30 23:24:49 1996 +0000
@@ -1,13 +1,34 @@
 JavaRef subclass:#JavaFieldref
-	instanceVariableNames:''
+	instanceVariableNames:'offset'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'Java-Reader-Support'
 !
 
 
+!JavaFieldref methodsFor:'resolving'!
+
+offset
+    |nm sig mthd|
+
+    offset notNil ifTrue:[^ offset].
+
+    (class isMemberOf:JavaUnresolvedClassConstant) ifTrue:[
+        class := class resolve
+    ].
+    (class isMemberOf:JavaUnresolvedClassConstant) ifTrue:[
+        self halt.
+    ].
+
+    nm := nameandType name asSymbol.
+    sig := nameandType signature.
+
+    offset := class instVarOffsetOf:nm.
+    ^ offset.
+! !
+
 !JavaFieldref class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaFieldref.st,v 1.4 1996/04/17 20:57:17 cg Exp $'
+    ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaFieldref.st,v 1.5 1996/04/30 23:24:11 cg Exp $'
 ! !
--- a/JavaMethod.st	Tue Apr 30 23:23:46 1996 +0000
+++ b/JavaMethod.st	Tue Apr 30 23:24:49 1996 +0000
@@ -1,6 +1,6 @@
 CompiledCode subclass:#JavaMethod
-	instanceVariableNames:'javaByteCode accessFlags name signature exceptionTable
-		lineNumberTable javaClass'
+	instanceVariableNames:'javaByteCode numArgs returnsVoid accessFlags name signature
+		exceptionTable lineNumberTable javaClass'
 	classVariableNames:'SignatureTypeCodes'
 	poolDictionaries:''
 	category:'Java-Classes'
@@ -36,11 +36,15 @@
 
     spec := ''.
     [s atEnd or:[s peek == $)]] whileFalse:[
-        argSpec := self fieldTypeFromStream:s.
-        spec size ~~ 0 ifTrue:[
-            spec := spec , ' '
-        ].
-        spec := spec , argSpec.
+"/        s peek == Character space ifTrue:[
+"/            s next
+"/        ] ifFalse:[
+            argSpec := self fieldTypeFromStream:s.
+            spec size ~~ 0 ifTrue:[
+                spec := spec , ' '
+            ].
+            spec := spec , argSpec.
+"/        ]
     ].
     ^ spec
 
@@ -79,6 +83,56 @@
     ^ typeSym
 !
 
+numArgsFromSignature:aSignature
+    "given a signature, return the number of args"
+
+    |s argSpec|
+
+    s := aSignature readStream.
+    s next ~~ $( ifTrue:[self halt. ^ name].
+
+    ^ self numArgsFromStream:s.
+
+    "
+     JavaMethod numArgsFromSignature:'(LObject;)V'
+     JavaMethod numArgsFromSignature:'(BB)S'      
+     JavaMethod numArgsFromSignature:'()V'      
+    "
+!
+
+numArgsFromStream:s
+    "parse an argSpec - see java doc"
+
+    |argSpec n|
+
+    n := 0.
+    [s atEnd or:[s peek == $)]] whileFalse:[
+        self fieldTypeFromStream:s.
+        n := n + 1.
+    ].
+    ^ n
+!
+
+returnsVoidFromSignature:aSignature
+    "given a signature, return true if it returns void, false if not"
+
+    |s argSpec retvalSpec|
+
+    s := aSignature readStream.
+    s next ~~ $( ifTrue:[self halt. ^ true].
+
+    self argSpecFromStream:s.
+
+    s next ~~ $) ifTrue:[self halt. ^ true].
+
+    ^ (self retvalSpecFromStream:s) = 'void'
+
+    "
+     JavaMethod returnsVoidFromSignature:'(LObject;)V' 
+     JavaMethod returnsVoidFromSignature:'(BB)S'       
+    "
+!
+
 retvalSpecFromStream:s
     "parse a retvalSpec - see java doc"
 
@@ -108,7 +162,7 @@
 
     "
      JavaMethod specFromSignature:'(LObject;)V' withName:'foo' 
-     JavaMethod specFromSignature:'(B;)S'       withName:'foo'
+     JavaMethod specFromSignature:'(BB)S'       withName:'foo' 
     "
 ! !
 
@@ -128,6 +182,25 @@
     "Created: 16.4.1996 / 14:55:44 / cg"
 !
 
+javaClass
+    ^ javaClass
+
+    "Modified: 16.4.1996 / 12:36:27 / cg"
+    "Created: 16.4.1996 / 14:55:44 / cg"
+!
+
+numArgs
+    ^ numArgs
+!
+
+numberOfMethodArgs:n
+    numArgs := n
+!
+
+returnsVoid
+    ^ returnsVoid
+!
+
 setAccessFlags:flags
     accessFlags := flags.
 
@@ -180,6 +253,14 @@
 
 setSignature:aString
     signature := aString.
+    self numberOfMethodArgs:(self class numArgsFromSignature:aString).
+    returnsVoid := self class returnsVoidFromSignature:aString.
+
+    "Created: 16.4.1996 / 11:34:29 / cg"
+!
+
+signature
+    ^ signature 
 
     "Created: 16.4.1996 / 11:34:29 / cg"
 ! !
@@ -258,6 +339,6 @@
 !JavaMethod class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaMethod.st,v 1.6 1996/04/17 21:59:47 cg Exp $'
+    ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaMethod.st,v 1.7 1996/04/30 23:23:20 cg Exp $'
 ! !
 JavaMethod initialize!
--- a/JavaMethodref.st	Tue Apr 30 23:23:46 1996 +0000
+++ b/JavaMethodref.st	Tue Apr 30 23:24:49 1996 +0000
@@ -1,13 +1,43 @@
 JavaRef subclass:#JavaMethodref
-	instanceVariableNames:''
+	instanceVariableNames:'method'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'Java-Reader-Support'
 !
 
 
+!JavaMethodref methodsFor:'resolving'!
+
+method
+    |nm sig mthd|
+
+    method notNil ifTrue:[^ method].
+
+    (class isMemberOf:JavaUnresolvedClassConstant) ifTrue:[
+        class := class resolve
+    ].
+    (class isMemberOf:JavaUnresolvedClassConstant) ifTrue:[
+        self halt.
+    ].
+
+    nm := nameandType name asSymbol.
+    sig := nameandType signature.
+
+    class selectorArray keysAndValuesDo:[:idx :sel |
+"/ idx print. ' 'print. sel printNL.
+        sel == nm ifTrue:[
+            mthd := class methodArray at:idx.
+            mthd signature = sig ifTrue:[
+                method := mthd.
+                ^ mthd
+            ]
+        ]
+    ].
+    self halt.
+! !
+
 !JavaMethodref class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaMethodref.st,v 1.4 1996/04/17 20:57:59 cg Exp $'
+    ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaMethodref.st,v 1.5 1996/04/30 23:24:15 cg Exp $'
 ! !
--- a/JavaNameandType.st	Tue Apr 30 23:23:46 1996 +0000
+++ b/JavaNameandType.st	Tue Apr 30 23:24:49 1996 +0000
@@ -16,11 +16,23 @@
 
 !JavaNameandType methodsFor:'accessing'!
 
+name
+     ^ name 
+
+    "Created: 15.4.1996 / 16:16:47 / cg"
+!
+
 name:aString signature:aSignature
      name := aString.
      signature := aSignature
 
     "Created: 15.4.1996 / 16:16:47 / cg"
+!
+
+signature
+     ^ signature 
+
+    "Created: 15.4.1996 / 16:16:47 / cg"
 ! !
 
 !JavaNameandType methodsFor:'printing & storing'!
@@ -34,5 +46,5 @@
 !JavaNameandType class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaNameandType.st,v 1.2 1996/04/15 15:38:31 cg Exp $'
+    ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaNameandType.st,v 1.3 1996/04/30 23:24:04 cg Exp $'
 ! !