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