checkin from browser
authorcg
Mon, 06 May 1996 14:21:57 +0000
changeset 52 1dc41619b6f8
parent 51 d5a1e2873469
child 53 e10c1dd4ea3b
checkin from browser
JavaClass.st
JavaClassReader.st
JavaContext.st
JavaDecompiler.st
JavaField.st
JavaMethodref.st
JavaObject.st
JavaUnresolvedClassConstant.st
--- a/JavaClass.st	Mon May 06 10:08:19 1996 +0000
+++ b/JavaClass.st	Mon May 06 14:21:57 1996 +0000
@@ -1,11 +1,32 @@
 ClassDescription subclass:#JavaClass
-	instanceVariableNames:'fullName accessFlags constantPool sourceFile fields initialized'
-	classVariableNames:''
+	instanceVariableNames:'fullName accessFlags constantPool sourceFile fields initialized
+		initValues'
+	classVariableNames:'InitialValuePerType'
 	poolDictionaries:''
 	category:'Java-Classes'
 !
 
 
+!JavaClass class methodsFor:'initialization'!
+
+initialize
+    InitialValuePerType := IdentityDictionary new.
+    InitialValuePerType at:$B put:0.
+    InitialValuePerType at:$C put:0.
+    InitialValuePerType at:$D put:0.0.
+    InitialValuePerType at:$F put:0.0 asShortFloat.
+    InitialValuePerType at:$I put:0.
+    InitialValuePerType at:$J put:0.
+    InitialValuePerType at:$S put:0.
+    InitialValuePerType at:$Z put:0.
+    InitialValuePerType at:$L put:nil.
+    InitialValuePerType at:$[ put:nil.
+
+    "
+     JavaClass initialize
+    "
+! !
+
 !JavaClass class methodsFor:'instance creation'!
 
 fullName:aString
@@ -49,6 +70,34 @@
     "Created: 15.4.1996 / 15:52:55 / cg"
 ! !
 
+!JavaClass class methodsFor:'signature parsing'!
+
+initialValueFromSignature:aSignature
+    "given a signature, return an initializer value"
+
+    |s|
+
+    s := aSignature readStream.
+    ^ self initialValueFromStream:s.
+
+    "
+     JavaClass initialValueFromSignature:'LObject;'    
+     JavaClass initialValueFromSignature:'B'        
+     JavaClass initialValueFromSignature:'I'        
+    "
+
+
+!
+
+initialValueFromStream:s
+    "parse a fieldTypeSpec - see java doc"
+
+    |typeChar|
+
+    typeChar := s next.
+    ^ InitialValuePerType at:typeChar ifAbsent:nil.
+! !
+
 !JavaClass class methodsFor:'special'!
 
 setInstanceVariableStringFromFields:f in:aClass
@@ -143,7 +192,39 @@
 
 !JavaClass methodsFor:'java instance creation'!
 
-basicNew
+initValueFor:instVarName
+    |idx field|
+
+    idx := fields findFirst:[:field | field name = instVarName].
+    idx == 0 ifTrue:[
+        superclass ~~ JavaObject ifTrue:[
+            ^ superclass initValueFor:instVarName
+        ].
+        self halt
+    ] ifFalse:[
+        field := fields at:idx.
+        ^ field initialValue
+    ].
+!
+
+new
+    "create a new instance, and call its JAVA init function"
+
+    |newJavaObject|
+
+    newJavaObject := self newCleared.
+    newJavaObject invoke:#'<init>'.
+    ^ newJavaObject
+
+    "
+     (Java classNamed:'java.lang.String') basicNew inspect
+     (Java classNamed:'java.lang.String') new inspect
+    "
+
+
+!
+
+newCleared
     "create a new cleared JAVA instance"
 
     |newJavaObject|
@@ -163,30 +244,17 @@
     "/ initialize fields soon ...
     "/ ... we will see.
     "/
-    newJavaObject initializeToZero.     "/ mhmh
+    fields isNil ifTrue:[
+        newJavaObject initializeToZero.     "/ mhmh
+    ] ifFalse:[
+        newJavaObject initializeFields:initValues
+    ].
     ^ newJavaObject
 
     "
      (Java classNamed:'java.lang.String') basicNew inspect
      (Java classNamed:'java.lang.String') new inspect
     "
-!
-
-new
-    "create a new instance, and call its JAVA init function"
-
-    |newJavaObject|
-
-    newJavaObject := self basicNew.
-    newJavaObject invoke:#'<init>'.
-    ^ newJavaObject
-
-    "
-     (Java classNamed:'java.lang.String') basicNew inspect
-     (Java classNamed:'java.lang.String') new inspect
-    "
-
-
 ! !
 
 !JavaClass methodsFor:'message sending'!
@@ -318,9 +386,15 @@
 !
 
 setFields:f
-    JavaClass setInstanceVariableStringFromFields:f in:self.
+    fields := f.
+    initValues := self allInstVarNames collect:[:nm |
+        self initValueFor:nm
+    ].
+"/    JavaClass setInstanceVariableStringFromFields:f in:self.
 
     "Created: 15.4.1996 / 16:42:52 / cg"
+
+
 !
 
 setFullName:aString
@@ -373,6 +447,10 @@
 
 !
 
+hasInterface:aJavaClass
+    self halt.
+!
+
 isClass
     ^ true
 !
@@ -482,5 +560,6 @@
 !JavaClass class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaClass.st,v 1.17 1996/05/03 18:55:54 cg Exp $'
+    ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaClass.st,v 1.18 1996/05/06 14:20:39 cg Exp $'
 ! !
+JavaClass initialize!
--- a/JavaClassReader.st	Mon May 06 10:08:19 1996 +0000
+++ b/JavaClassReader.st	Mon May 06 14:21:57 1996 +0000
@@ -79,6 +79,12 @@
 
     |rslt clsName|
 
+    (aClassName endsWith:';') ifTrue:[
+        ('oops - loading of ' , aClassName , ' attempted') printNL.
+self halt.
+        ^ nil
+    ].
+
     clsName := aClassName.
     (clsName includes:$.) ifTrue:[
         clsName := clsName copy replaceAll:$. by:$/
@@ -332,6 +338,7 @@
     this_class setConstantPool:constants.
 
     JavaClass setInstanceVariableStringFromFields:fields in:this_class.
+    this_class setFields:fields.
 
     "/
     "/ get methods
@@ -537,6 +544,8 @@
         constSlot := constSlot + 1.
     ].
 
+    constSlot := -1.
+
     1 to:constantPoolCount-1 do:[:i |
         |const|
 
@@ -576,12 +585,17 @@
 !
 
 readConstant_Class
-    |name_index|
+    |name_index name|
 
     name_index := self nextU2.
 
     Verbose ifTrue:[Transcript show:'class; index= '; showCr:name_index].
 
+    name := constants at:name_index.
+    name notNil ifTrue:[
+        self halt
+    ].
+
     ^ JavaUnresolvedClassConstant 
         nameIndex:name_index
         pool:constants
@@ -1137,6 +1151,6 @@
 !JavaClassReader class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaClassReader.st,v 1.16 1996/05/06 10:06:15 cg Exp $'
+    ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaClassReader.st,v 1.17 1996/05/06 14:21:28 cg Exp $'
 ! !
 JavaClassReader initialize!
--- a/JavaContext.st	Mon May 06 10:08:19 1996 +0000
+++ b/JavaContext.st	Mon May 06 14:21:57 1996 +0000
@@ -125,12 +125,40 @@
 !JavaContext methodsFor:'printing & storing'!
 
 printString
-    |mS recCls|
+    |clsName nm mS recCls rec recClsName rnm|
+
+    clsName := class name.
+    (Smalltalk includes:(clsName asSymbol)) ifTrue:[
+        nm := 'JAVA-' , clsName
+    ] ifFalse:[
+        (class fullName startsWith:'java/lang/') ifTrue:[
+            nm := clsName
+        ] ifFalse:[
+            nm := class fullName
+        ].
+    ].
+    mS := nm , '::' , method signatureName.
+
+    rec := self receiver.
+    recCls := rec class.
 
-    mS := 'JAVA-' , class name , '::' , method signatureName.
+    (rec isKindOf:JavaObject) ifFalse:[
+        rnm := '[' , recCls name , ']'
+    ] ifTrue:[
+        recClsName := recCls name.
+        (Smalltalk includes:(recClsName asSymbol)) ifTrue:[
+            rnm := 'JAVA-' , recClsName
+        ] ifFalse:[
+            (recCls fullName startsWith:'java/lang/') ifTrue:[
+                rnm := recClsName
+            ] ifFalse:[
+                rnm := recCls fullName
+            ].
+        ].
+    ].
 
-    (recCls := self receiver class) ~~ class ifTrue:[
-        ^ recCls name , '>>' , mS
+    (rnm ~= nm) ifTrue:[
+        ^ rnm , '>>' , mS
     ].
 
     ^ mS
@@ -142,5 +170,5 @@
 !JavaContext class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaContext.st,v 1.4 1996/05/03 18:54:53 cg Exp $'
+    ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaContext.st,v 1.5 1996/05/06 14:21:38 cg Exp $'
 ! !
--- a/JavaDecompiler.st	Mon May 06 10:08:19 1996 +0000
+++ b/JavaDecompiler.st	Mon May 06 14:21:57 1996 +0000
@@ -161,7 +161,8 @@
         nil                                     "/ 133
 "/        (i2d)                                   "/ 134    *** DOC is wrong
         (i2f)                                   "/ 134
-        nil                                     "/ 135      *** DOC is wrong
+"/        nil                                     "/ 135    *** DOC is wrong
+        (i2d)                                   "/ 135
         (l2i)                                   "/ 136    
         (l2f)                                   "/ 137
         (l2d)                                   "/ 138
@@ -617,6 +618,6 @@
 !JavaDecompiler class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaDecompiler.st,v 1.13 1996/05/03 21:13:42 cg Exp $'
+    ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaDecompiler.st,v 1.14 1996/05/06 14:21:57 cg Exp $'
 ! !
 JavaDecompiler initialize!
--- a/JavaField.st	Mon May 06 10:08:19 1996 +0000
+++ b/JavaField.st	Mon May 06 14:21:57 1996 +0000
@@ -48,6 +48,12 @@
 
 !JavaField methodsFor:'queries'!
 
+initialValue
+    ^ JavaClass initialValueFromSignature:signature
+
+
+!
+
 isFinal
     ^ (accessFlags bitAnd:16r0010) ~~ 0
 
@@ -84,5 +90,5 @@
 !JavaField class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaField.st,v 1.5 1996/05/02 20:45:09 cg Exp $'
+    ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaField.st,v 1.6 1996/05/06 14:21:16 cg Exp $'
 ! !
--- a/JavaMethodref.st	Mon May 06 10:08:19 1996 +0000
+++ b/JavaMethodref.st	Mon May 06 14:21:57 1996 +0000
@@ -74,7 +74,7 @@
     cls := aClass.
 
     (cls isMemberOf:JavaUnresolvedClassConstant) ifTrue:[
-        class := class resolve
+        cls := cls resolve
     ].
     (cls isMemberOf:JavaUnresolvedClassConstant) ifTrue:[
         self halt.
@@ -107,5 +107,5 @@
 !JavaMethodref class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaMethodref.st,v 1.7 1996/05/03 11:28:51 cg Exp $'
+    ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaMethodref.st,v 1.8 1996/05/06 14:21:11 cg Exp $'
 ! !
--- a/JavaObject.st	Mon May 06 10:08:19 1996 +0000
+++ b/JavaObject.st	Mon May 06 14:21:57 1996 +0000
@@ -78,8 +78,20 @@
 
 !JavaObject methodsFor:'initialization'!
 
+initializeFields:initialValues
+    |sz|
+
+    sz := self class instSize.
+    1 to:sz do:[:i |
+        self instVarAt:i put:(initialValues at:i)
+    ]
+!
+
 initializeToZero
-    1 to:self class instSize do:[:i |
+    |sz|
+
+    sz := self class instSize.
+    1 to:sz do:[:i |
         self instVarAt:i put:0
     ]
 ! !
@@ -302,5 +314,5 @@
 !JavaObject class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaObject.st,v 1.10 1996/05/06 09:02:40 cg Exp $'
+    ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaObject.st,v 1.11 1996/05/06 14:20:35 cg Exp $'
 ! !
--- a/JavaUnresolvedClassConstant.st	Mon May 06 10:08:19 1996 +0000
+++ b/JavaUnresolvedClassConstant.st	Mon May 06 14:21:57 1996 +0000
@@ -29,6 +29,9 @@
 !JavaUnresolvedClassConstant methodsFor:'printing & storing'!
 
 displayString
+    fullName isNil ifTrue:[
+        ^ 'Unresolved(** nil **)'
+    ].
     ^ 'Unresolved(' , (fullName copy replaceAll:$/ by:$.) , ')'
 ! !
 
@@ -38,10 +41,12 @@
     |cls|
 
     cls := Java classNamed:fullName.
-    cls isNil ifTrue:[^ self].
-
-    pool notNil ifTrue:[
-        pool at:poolIndex put:cls
+    cls notNil ifTrue:[
+        pool notNil ifTrue:[
+            pool at:poolIndex put:cls
+        ].
+    ] ifFalse:[
+        Java rememberUnresolved:self.
     ].
     ^ cls
 
@@ -50,7 +55,7 @@
 !
 
 resolveFrom:aConstantTable
-    |cls|
+    |cls nm s|
 
 
     fullName := self class resolve:(aConstantTable at:index) from:aConstantTable.
@@ -58,6 +63,18 @@
     cls notNil ifTrue:[
         ^ cls
     ].
+
+    (fullName startsWith:'[') ifTrue:[
+        "/ a ref for newarray or new
+        s := fullName readStream.
+        s next.
+        fullName := JavaMethod retvalSpecFromStream:s.
+        cls := Java classNamed:fullName.
+        cls notNil ifTrue:[
+            ^ cls
+        ].
+    ].
+
     Java rememberUnresolved:self.
     ^ self
 "/    ^ JavaClass fullName:fullName
@@ -69,5 +86,5 @@
 !JavaUnresolvedClassConstant class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaUnresolvedClassConstant.st,v 1.8 1996/05/06 10:07:09 cg Exp $'
+    ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaUnresolvedClassConstant.st,v 1.9 1996/05/06 14:21:04 cg Exp $'
 ! !