--- a/Java.st Fri Jun 28 21:39:41 1996 +0000
+++ b/Java.st Fri Jun 28 21:39:53 1996 +0000
@@ -1,6 +1,6 @@
Object subclass:#Java
instanceVariableNames:''
- classVariableNames:'Classes UnresolvedClassRefs SourceDirectories'
+ classVariableNames:'Classes UnresolvedClassRefs SourceDirectories JavaString'
poolDictionaries:''
category:'Java-Support'
!
@@ -8,22 +8,12 @@
!Java class methodsFor:'accessing'!
-allClasses
- ^ Classes
-
- "
- Java allClasses do:[:cls |
- cls methodDictionary keysAndValuesDo:[:sel :mthd |
- ('*updateClient*' match:sel) ifTrue:[
- self halt
- ]
- ]
- ]
- "
+classNamed:aString
+ ^ self at:aString
!
-classNamed:aString
- ^ self at:aString
+javaString
+ ^ JavaString
!
sourceDirectories
@@ -77,6 +67,10 @@
!Java class methodsFor:'enumerating'!
+allClasses
+ ^ Classes
+!
+
allClassesDo:aBlock
Classes notNil ifTrue:[
Classes do:aBlock
@@ -104,7 +98,7 @@
nm := aJavaName.
(nm includes:$.) ifTrue:[
- nm := (nm copy replaceAll:$. by:$/).
+ nm := (nm asString copy replaceAll:$. by:$/).
sym := nm asSymbolIfInterned.
sym notNil ifTrue:[
cls := Classes at:sym ifAbsent:nil.
@@ -136,14 +130,21 @@
!
at:aJavaName put:aJavaClass
+ |nameSymbol|
+
Classes isNil ifTrue:[
Classes := IdentityDictionary new.
].
- (Classes includesKey:(aJavaName asSymbol)) ifTrue:[
+
+ nameSymbol := aJavaName asSymbol.
+ (Classes includesKey:nameSymbol) ifTrue:[
self halt:'class ' , aJavaName , ' is already loaded'.
].
- Classes at:(aJavaName asSymbol) put:aJavaClass.
+ Classes at:nameSymbol put:aJavaClass.
+ nameSymbol == #'java/lang/String' ifTrue:[
+ JavaString := aJavaClass
+ ].
"/ UnresolvedClassRefs notNil ifTrue:[
"/ UnresolvedClassRefs do:[:toResolve |
@@ -157,9 +158,11 @@
!
flushClasses
- Classes := UnresolvedClassRefs := nil.
+ Classes := UnresolvedClassRefs := JavaString := nil.
JavaInterpreter terminateAllThreads.
JavaInterpreter releaseAllMonitors.
+ JavaInterpreter releaseAllWindows.
+ JavaUnresolvedConstant flushPatchLists.
"
Java flushClasses
@@ -178,14 +181,37 @@
"
!
+nextUnresolved
+ |unresolved|
+
+ UnresolvedClassRefs isNil ifTrue:[
+ ^ nil
+ ].
+ unresolved := UnresolvedClassRefs removeFirst.
+ UnresolvedClassRefs isEmpty ifTrue:[
+ UnresolvedClassRefs := nil
+ ].
+ ^ unresolved
+
+
+
+!
+
rememberUnresolved:anUnresolvedClassRef
-"/ UnresolvedClassRefs isNil ifTrue:[
-"/ UnresolvedClassRefs := OrderedCollection new.
-"/ ].
-"/ UnresolvedClassRefs add:anUnresolvedClassRef
+ ('JAVA: remember unresolved class: ' , anUnresolvedClassRef fullName) infoPrintCR.
+
+ UnresolvedClassRefs isNil ifTrue:[
+ UnresolvedClassRefs := Set new.
+ ].
+ UnresolvedClassRefs add:anUnresolvedClassRef
"Created: 18.4.1996 / 00:05:31 / cg"
"Modified: 18.4.1996 / 00:05:41 / cg"
+!
+
+unresolvedClassRefFor:aClassName
+ UnresolvedClassRefs isNil ifTrue:[^ nil].
+ ^ UnresolvedClassRefs at:aClassName ifAbsent:nil.
! !
!Java class methodsFor:'source management'!
@@ -294,6 +320,6 @@
!Java class methodsFor:'documentation'!
version
- ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/Java.st,v 1.13 1996/06/27 15:56:36 cg Exp $'
+ ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/Java.st,v 1.14 1996/06/28 21:36:24 cg Exp $'
! !
Java initialize!
--- a/JavaClass.st Fri Jun 28 21:39:41 1996 +0000
+++ b/JavaClass.st Fri Jun 28 21:39:53 1996 +0000
@@ -1,6 +1,6 @@
ClassDescription subclass:#JavaClass
instanceVariableNames:'fullName accessFlags constantPool sourceFile binaryFilePath
- fields initialized initValues staticFields'
+ fields initialized initValues staticFields hasUnresolvedConstants'
classVariableNames:'InitialValuePerType'
poolDictionaries:''
category:'Java-Classes'
@@ -30,9 +30,9 @@
!JavaClass class methodsFor:'instance creation'!
fullName:aString
- ^ self new setFullName:aString
+ self shouldNotImplement.
+ ^ self new flags:0; setFullName:aString
- "Created: 15.4.1996 / 15:52:55 / cg"
!
fullName:aString numStatic:nStatic
@@ -143,6 +143,10 @@
^ fullName
!
+javaClass
+ ^ self
+!
+
name
^ name "/ fullName
!
@@ -191,7 +195,7 @@
m := self compiledMethodAt:#'<clinit>()V'.
m notNil ifTrue:[
- 'calling clinit() of ' print. self fullName printNL.
+"/ 'calling clinit() of ' print. self fullName printNL.
[
self invokeJavaMethod:m sender:thisContext.
] valueOnUnwindDo:[
@@ -214,6 +218,8 @@
!
initializeStaticFields
+ staticFields isNil ifTrue:[^ self].
+
staticFields do:[:f |
|val type|
@@ -477,6 +483,7 @@
setConstantPool:anArray
constantPool := anArray.
+ hasUnresolvedConstants := true
"Created: 15.4.1996 / 16:42:52 / cg"
!
@@ -598,56 +605,10 @@
isPublic
^ (accessFlags bitAnd:16r0001) ~~ 0
-! !
-
-!JavaClass methodsFor:'resolving class refs'!
-
-resolveClassRefsIgnoring:classesBeingLoaded
- |newClass const newConst clsName cls|
-
- (superclass isMemberOf:JavaUnresolvedClassConstant) ifTrue:[
- newClass := superclass resolve.
- newClass isNil ifTrue:[
- newClass := JavaClassReader
- loadClassLazy:(superclass fullName)
- ignoring:classesBeingLoaded.
- ].
- newClass notNil ifTrue:[
- superclass := newClass
- ]
- ].
+!
- 1 to:constantPool size do:[:index |
- const := constantPool at:index.
-
- (const isMemberOf:JavaUnresolvedClassConstant) ifTrue:[
- "/ try to resolve
- newConst := const resolve.
- newConst isNil ifTrue:[
- cls := const resolveClass.
- cls isNil ifTrue:[
- clsName := const className.
- (classesBeingLoaded includes:clsName) ifFalse:[
- newConst := JavaClassReader
- loadClassLazy:clsName
- ignoring:classesBeingLoaded.
- ]
- ]
- ].
- newConst notNil ifTrue:[
- constantPool at:index put:newConst
- ]
- ]
- ].
-
- (superclass notNil and:[(superclass isMemberOf:JavaUnresolvedClassConstant) not]) ifTrue:[
- superclass resolveClassRefsIgnoring:classesBeingLoaded.
- instSize := superclass instSize + (instvars asCollectionOfWords size)
- ] ifFalse:[
- instSize := instvars asCollectionOfWords size
- ].
-"/Transcript show:'resolved '; show: self displayString;
-"/ show: ' instSize='; showCr: instSize.
+isUnresolved
+ ^ false
! !
!JavaClass methodsFor:'smalltalk interface'!
@@ -701,6 +662,6 @@
!JavaClass class methodsFor:'documentation'!
version
- ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaClass.st,v 1.32 1996/06/27 16:30:57 cg Exp $'
+ ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaClass.st,v 1.33 1996/06/28 21:35:48 cg Exp $'
! !
JavaClass initialize!
--- a/JavaClassPointerRef.st Fri Jun 28 21:39:41 1996 +0000
+++ b/JavaClassPointerRef.st Fri Jun 28 21:39:53 1996 +0000
@@ -1,4 +1,4 @@
-JavaRef subclass:#JavaClassPointerRef
+JavaClassRef subclass:#JavaClassPointerRef
instanceVariableNames:''
classVariableNames:''
poolDictionaries:''
@@ -9,7 +9,10 @@
!JavaClassPointerRef methodsFor:'accessing'!
javaClass
- self halt.
+ class isUnresolved ifTrue:[
+ self halt.
+ ].
+ ^ class
"Created: 25.6.1996 / 09:36:09 / cg"
! !
@@ -17,5 +20,5 @@
!JavaClassPointerRef class methodsFor:'documentation'!
version
- ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaClassPointerRef.st,v 1.1 1996/06/25 08:16:11 cg Exp $'
+ ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaClassPointerRef.st,v 1.2 1996/06/28 21:39:25 cg Exp $'
! !
--- a/JavaFieldref.st Fri Jun 28 21:39:41 1996 +0000
+++ b/JavaFieldref.st Fri Jun 28 21:39:53 1996 +0000
@@ -35,13 +35,15 @@
offset notNil ifTrue:[^ offset].
- (class isMemberOf:JavaUnresolvedClassConstant) ifTrue:[
- cls := class resolve.
- cls notNil ifTrue:[
- class := cls
- ].
- ].
- (class isMemberOf:JavaUnresolvedClassConstant) ifTrue:[
+"/ class := class resolveClass.
+
+"/ (class isMemberOf:JavaUnresolvedClassConstant) ifTrue:[
+"/ cls := class resolve.
+"/ cls notNil ifTrue:[
+"/ class := cls
+"/ ].
+"/ ].
+ class isUnresolved ifTrue:[
self halt:'unresolved class'.
].
@@ -58,15 +60,19 @@
offset notNil ifTrue:[^ offset].
- (class isMemberOf:JavaUnresolvedClassConstant) ifTrue:[
- cls := class resolve.
- cls notNil ifTrue:[
- class := cls
- ]
+ cls := class javaClass.
+ cls ~~ class ifTrue:[
+ class := cls.
].
- (class isMemberOf:JavaUnresolvedClassConstant) ifTrue:[
- self halt:'unresolved class'.
- ].
+"/ (class isMemberOf:JavaUnresolvedClassConstant) ifTrue:[
+"/ cls := class resolve.
+"/ cls notNil ifTrue:[
+"/ class := cls
+"/ ]
+"/ ].
+"/ (class isMemberOf:JavaUnresolvedClassConstant) ifTrue:[
+"/ self halt:'unresolved class'.
+"/ ].
nm := nameandType name asSymbol.
sig := nameandType signature.
@@ -80,18 +86,19 @@
type notNil ifTrue:[^ type].
- (class isMemberOf:JavaUnresolvedClassConstant) ifTrue:[
- cls := class resolve.
- cls notNil ifTrue:[
- class := cls
- ]
- ].
- (class isMemberOf:JavaUnresolvedClassConstant) ifTrue:[
+"/ class := class resolveClass.
+
+"/ (class isMemberOf:JavaUnresolvedClassConstant) ifTrue:[
+"/ cls := class resolve.
+"/ cls notNil ifTrue:[
+"/ class := cls
+"/ ]
+"/ ].
+ class isUnresolved ifTrue:[
self halt:'unresolved class'.
].
sig := nameandType signature.
-
type := JavaMethod typeFromSignature:sig.
^ type.
! !
@@ -99,5 +106,5 @@
!JavaFieldref class methodsFor:'documentation'!
version
- ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaFieldref.st,v 1.11 1996/06/27 18:38:11 cg Exp $'
+ ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaFieldref.st,v 1.12 1996/06/28 21:37:51 cg Exp $'
! !
--- a/JavaInterfaceMethodref.st Fri Jun 28 21:39:41 1996 +0000
+++ b/JavaInterfaceMethodref.st Fri Jun 28 21:39:53 1996 +0000
@@ -6,8 +6,8 @@
!
-!JavaInterfaceMethodref class methodsFor:'documentation'!
+!JavaInterfaceMethodref class methodsFor:'documentation'!
version
- ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaInterfaceMethodref.st,v 1.2 1996/05/03 21:14:13 cg Exp $'
+ ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaInterfaceMethodref.st,v 1.3 1996/06/28 21:38:10 cg Exp $'
! !
--- a/JavaMethod.st Fri Jun 28 21:39:41 1996 +0000
+++ b/JavaMethod.st Fri Jun 28 21:39:53 1996 +0000
@@ -315,6 +315,13 @@
"Modified: 16.4.1996 / 12:49:06 / cg"
!
+hasLineNumberInformation
+ ^ lineNumberTable notNil
+
+ "Created: 16.4.1996 / 12:34:04 / cg"
+ "Modified: 16.4.1996 / 12:49:06 / cg"
+!
+
javaByteCode
^ javaByteCode
@@ -329,6 +336,13 @@
"Created: 16.4.1996 / 14:55:44 / cg"
!
+lineNumber
+ ^ lineNumberTable at:2
+
+ "Created: 16.4.1996 / 12:34:04 / cg"
+ "Modified: 16.4.1996 / 12:49:06 / cg"
+!
+
lineNumberTable
^ lineNumberTable
@@ -426,8 +440,43 @@
"Created: 16.4.1996 / 15:28:15 / cg"
!
-setLineNumberTable:anArray
- lineNumberTable := anArray.
+setLineNumberTable:anArrayOfPCtoLineAssociations
+ "since this uses up lots of memory, compress it"
+
+ |allBytes allWords idx|
+
+ allBytes := allWords := true.
+
+ anArrayOfPCtoLineAssociations do:[:assoc |
+ assoc key > 255 ifTrue:[
+ allBytes := false.
+ assoc key > 16rFFFF ifTrue:[
+ allWords := false.
+ ].
+ ].
+ assoc value > 255 ifTrue:[
+ allBytes := false.
+ assoc value > 16rFFFF ifTrue:[
+ allWords := false
+ ].
+ ].
+ ].
+ allBytes ifTrue:[
+ lineNumberTable := ByteArray new:(anArrayOfPCtoLineAssociations size * 2).
+ ] ifFalse:[
+ allWords ifTrue:[
+ lineNumberTable := WordArray new:(anArrayOfPCtoLineAssociations size * 2).
+ ] ifFalse:[
+ lineNumberTable := Array new:(anArrayOfPCtoLineAssociations size * 2).
+ ]
+ ].
+
+ idx := 1.
+ anArrayOfPCtoLineAssociations do:[:assoc |
+ lineNumberTable at:idx put:assoc key.
+ lineNumberTable at:idx+1 put:assoc value.
+ idx := idx + 2.
+ ].
"Created: 16.4.1996 / 12:34:04 / cg"
"Modified: 16.4.1996 / 12:49:06 / cg"
@@ -570,15 +619,15 @@
lineNumberTable notNil ifTrue:[
classSource := javaClass source.
classSource notNil ifTrue:[
- lineNumberTable do:[:assoc |
- assoc key >= pc ifTrue:[
- assoc key == pc ifTrue:[^ assoc value].
- last isNil ifTrue:[^ assoc value].
- ^ last value.
+ lineNumberTable pairWiseDo:[:lPc :lNr |
+ lPc >= pc ifTrue:[
+ lPc == pc ifTrue:[^ lNr].
+ last isNil ifTrue:[^ lNr].
+ ^ last.
].
- last := assoc.
+ last := lNr.
].
- ^ lineNumberTable first value
+ ^ lineNumberTable at:2
].
].
@@ -611,6 +660,6 @@
!JavaMethod class methodsFor:'documentation'!
version
- ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaMethod.st,v 1.20 1996/06/27 16:30:06 cg Exp $'
+ ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaMethod.st,v 1.21 1996/06/28 21:36:09 cg Exp $'
! !
JavaMethod initialize!
--- a/JavaMethodref.st Fri Jun 28 21:39:41 1996 +0000
+++ b/JavaMethodref.st Fri Jun 28 21:39:53 1996 +0000
@@ -13,6 +13,7 @@
!
selector
+self halt.
sel isNil ifTrue:[
sel := (nameandType name , nameandType signature) asSymbol.
].
@@ -37,15 +38,20 @@
method notNil ifTrue:[^ method].
- (class isMemberOf:JavaUnresolvedClassConstant) ifTrue:[
- cls := class resolve.
- cls notNil ifTrue:[
- class := cls
- ]
+ cls := class javaClass.
+ cls ~~ class ifTrue:[
+ class := cls.
].
- (class isMemberOf:JavaUnresolvedClassConstant) ifTrue:[
- self halt:'unresolved class'.
- ].
+
+"/ (class isMemberOf:JavaUnresolvedClassConstant) ifTrue:[
+"/ cls := class resolve.
+"/ cls notNil ifTrue:[
+"/ class := cls
+"/ ]
+"/ ].
+"/ (class isMemberOf:JavaUnresolvedClassConstant) ifTrue:[
+"/ self halt:'unresolved class'.
+"/ ].
sel isNil ifTrue:[
nm := nameandType name asSymbol.
@@ -67,12 +73,19 @@
cls == Array ifTrue:[
cls := Java classNamed:'java.lang.Object'.
+ ] ifFalse:[
+ cls isBehavior ifTrue:[
+ cls isMeta ifTrue:[
+ cls := cls soleInstance.
+ ].
+ (cls isKindOf:JavaClass) ifFalse:[
+ self halt
+ ]
+ ].
+"/ cls := cls javaClass.
].
- (cls isMemberOf:JavaUnresolvedClassConstant) ifTrue:[
- cls := cls resolve
- ].
- (cls isMemberOf:JavaUnresolvedClassConstant) ifTrue:[
+ cls isUnresolved ifTrue:[
self halt:'unresolved class'.
].
@@ -95,5 +108,5 @@
!JavaMethodref class methodsFor:'documentation'!
version
- ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaMethodref.st,v 1.11 1996/06/27 18:38:57 cg Exp $'
+ ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaMethodref.st,v 1.12 1996/06/28 21:37:26 cg Exp $'
! !
--- a/JavaNameandType.st Fri Jun 28 21:39:41 1996 +0000
+++ b/JavaNameandType.st Fri Jun 28 21:39:53 1996 +0000
@@ -1,12 +1,12 @@
Object subclass:#JavaNameandType
instanceVariableNames:'name signature'
- classVariableNames:''
+ classVariableNames:'KnownNamesAndTypes'
poolDictionaries:''
category:'Java-Reader-Support'
!
-!JavaNameandType class methodsFor:'instance creation'!
+!JavaNameandType class methodsFor:'instance creation'!
name:aString signature:signature
^ self new name:aString signature:signature
@@ -23,8 +23,8 @@
!
name:aString signature:aSignature
- name := aString.
- signature := aSignature
+ name := aString asSymbol.
+ signature := aSignature asSymbol
"Created: 15.4.1996 / 16:16:47 / cg"
!
@@ -38,13 +38,21 @@
!JavaNameandType methodsFor:'printing & storing'!
displayString
- ^ self class name , '(name:' , name , ' signature: ' , signature displayString , ')'
+ ^ self class name , '(name:' , name displayString, ' signature:' , signature displayString , ')'
"Created: 15.4.1996 / 16:32:40 / cg"
! !
-!JavaNameandType class methodsFor:'documentation'!
+!JavaNameandType methodsFor:'queries'!
+
+isUnresolved
+ ^ false
+
+
+! !
+
+!JavaNameandType class methodsFor:'documentation'!
version
- ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaNameandType.st,v 1.3 1996/04/30 23:24:04 cg Exp $'
+ ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaNameandType.st,v 1.4 1996/06/28 21:37:11 cg Exp $'
! !
--- a/JavaRef.st Fri Jun 28 21:39:41 1996 +0000
+++ b/JavaRef.st Fri Jun 28 21:39:53 1996 +0000
@@ -38,8 +38,16 @@
"Created: 15.4.1996 / 16:18:54 / cg"
! !
+!JavaRef methodsFor:'queries'!
+
+isUnresolved
+ ^ false
+
+
+! !
+
!JavaRef class methodsFor:'documentation'!
version
- ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaRef.st,v 1.6 1996/06/27 18:38:27 cg Exp $'
+ ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaRef.st,v 1.7 1996/06/28 21:38:38 cg Exp $'
! !
--- a/JavaUnresolvedClassConstant.st Fri Jun 28 21:39:41 1996 +0000
+++ b/JavaUnresolvedClassConstant.st Fri Jun 28 21:39:53 1996 +0000
@@ -1,5 +1,5 @@
JavaUnresolvedConstant subclass:#JavaUnresolvedClassConstant
- instanceVariableNames:'fullName pool poolIndex'
+ instanceVariableNames:'nameIndex fullName'
classVariableNames:''
poolDictionaries:''
category:'Java-Reader-Support'
@@ -9,11 +9,18 @@
!JavaUnresolvedClassConstant class methodsFor:'instance creation'!
fullName:nm
- ^ self new fullName:nm
+ |ref|
+
+ ref := Java unresolvedClassRefFor:nm.
+ ref notNil ifTrue:[^ ref].
+
+ ref := self new fullName:nm.
+ Java rememberUnresolved:ref.
+ ^ ref
!
-nameIndex:index pool:aConstantPool slotIndex:slotIndex
- ^ self new index:index pool:aConstantPool slotIndex:slotIndex
+pool:aPool poolIndex:slotIndex nameIndex:index
+ ^ self new pool:aPool poolIndex:slotIndex nameIndex:index
! !
!JavaUnresolvedClassConstant methodsFor:'accessing'!
@@ -36,17 +43,35 @@
fullName
^ fullName
-!
+! !
+
+!JavaUnresolvedClassConstant ignoredMethodsFor:'accessing'!
fullName:nm
fullName := nm
+! !
+
+!JavaUnresolvedClassConstant methodsFor:'accessing'!
+
+javaClass
+ |cls|
+
+ fullName isNil ifTrue:[
+ self halt.
+ ].
+ cls := Java at:fullName.
+ cls notNil ifTrue:[^ cls].
+
+(' *** late loading: ' , fullName) infoPrintCR.
+ ^ JavaClassReader loadClass:fullName.
+
!
-index:index pool:aConstantPool slotIndex:slotIndex
- super index:index.
- pool := aConstantPool.
- poolIndex := slotIndex.
+pool:aPool poolIndex:slotIndex nameIndex:name_index
+ constantPool := aPool.
+ constantPoolIndex := slotIndex.
+ nameIndex := name_index.
! !
@@ -61,30 +86,102 @@
!JavaUnresolvedClassConstant methodsFor:'resolving'!
-resolve
- |cls|
+preResolve
+ |clsName cls nm s ref|
+
+ fullName isNil ifTrue:[
+ "/ first, resolve my name ...
+
+ clsName := constantPool at:nameIndex.
+ "/ DEBUGGING
+ clsName isString ifFalse:[
+ self halt:'oops - no class name string in const pool'.
+ ].
+
+ fullName := clsName
+ ].
+
+ "/ try to resolve the class
+
+ "/ 'resolve: ' print. fullName printCR.
cls := Java classNamed:fullName.
cls notNil ifTrue:[
- pool notNil ifTrue:[
- pool at:poolIndex put:cls
+ "/ good - the class is already loaded.
+
+ constantPool at:constantPoolIndex put:cls.
+ ^ cls
+ ].
+
+ (fullName startsWith:$[) ifTrue:[
+ "/ a ref for newarray or new
+
+ nm := JavaMethod retvalSpecFromStream:(ReadStream on:fullName).
+ [nm endsWith:'[]'] whileTrue:[
+ nm := nm copyWithoutLast:2
+ ].
+
+ cls := Java classNamed:nm.
+ cls notNil ifTrue:[
+ ref := JavaClassPointerRef class:cls nameandType:fullName.
+ constantPool at:constantPoolIndex put:ref.
+ ^ ref
].
] ifFalse:[
- Java rememberUnresolved:self.
+ nm := self className.
].
- ^ cls
+
+ self rememberForResolveWith:nm.
+ ^ self
+
+ "Created: 15.4.1996 / 15:51:42 / cg"
+ "Modified: 15.4.1996 / 16:26:05 / cg"
+! !
+
+!JavaUnresolvedClassConstant ignoredMethodsFor:'resolving'!
+
+resolve
+ |cls nm|
+
+ cls := Java at:fullName.
+ cls isNil ifTrue:[
+ nm := self className.
+ cls := Java at:nm.
+ ].
+ cls notNil ifTrue:[
+ constantPool notNil ifTrue:[
+ constantPool at:constantPoolIndex put:cls
+ ].
+ ^ cls
+ ].
+
+ Java rememberUnresolved:self.
+ ^ nil
"Created: 15.4.1996 / 15:51:42 / cg"
"Modified: 15.4.1996 / 16:26:05 / cg"
!
resolveClass
- |cls|
+ |cls nm|
- cls := Java classNamed:self className.
+ nm := self className.
+ cls := Java at:nm.
cls isNil ifTrue:[
- Java rememberUnresolved:self.
+ cls := JavaClassReader loadClass:nm.
+ cls isNil ifTrue:[
+ ('JAVA: unresolved class remains: ' , nm) errorPrintCR.
+ ^ nil.
+ ].
+"/ Java rememberUnresolved:self.
].
+
+ cls notNil ifTrue:[
+ constantPool notNil ifTrue:[
+ constantPool at:constantPoolIndex put:cls
+ ].
+ ].
+
^ cls
"Created: 15.4.1996 / 15:51:42 / cg"
@@ -92,9 +189,23 @@
!
resolveFrom:aConstantTable
- |cls nm s ref|
+ |clsName cls nm s ref|
+
+self halt.
+ fullName isNil ifTrue:[
+ "/ first, resolve my name ...
- fullName := self class resolve:(aConstantTable at:index) from:aConstantTable.
+ clsName := aConstantTable at:constantPoolIndex.
+ clsName isString ifTrue:[
+ fullName := clsName
+ ] ifFalse:[
+self halt:'oops - no class name string in const pool'.
+ fullName := self class resolve:clsName from:aConstantTable.
+ ].
+ ].
+
+ "/ try to resolve the class
+
"/ 'resolve: ' print. fullName printCR.
cls := Java classNamed:fullName.
@@ -117,6 +228,7 @@
Java rememberUnresolved:self.
^ self
+
"/ ^ JavaClass fullName:fullName
"Created: 15.4.1996 / 15:51:42 / cg"
@@ -126,5 +238,5 @@
!JavaUnresolvedClassConstant class methodsFor:'documentation'!
version
- ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaUnresolvedClassConstant.st,v 1.13 1996/06/27 14:25:01 cg Exp $'
+ ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaUnresolvedClassConstant.st,v 1.14 1996/06/28 21:39:12 cg Exp $'
! !
--- a/JavaUnresolvedConstant.st Fri Jun 28 21:39:41 1996 +0000
+++ b/JavaUnresolvedConstant.st Fri Jun 28 21:39:53 1996 +0000
@@ -1,6 +1,6 @@
Object subclass:#JavaUnresolvedConstant
- instanceVariableNames:'index'
- classVariableNames:''
+ instanceVariableNames:'nextUnresolved prevUnresolved constantPool constantPoolIndex'
+ classVariableNames:'PatchLists'
poolDictionaries:''
category:'Java-Reader-Support'
!
@@ -8,14 +8,41 @@
!JavaUnresolvedConstant class methodsFor:'instance creation'!
-index:index
- ^ self new index:index
+pool:aPool poolIndex:index
+ ^ self new
+ pool:aPool poolIndex:index
! !
+!JavaUnresolvedConstant class methodsFor:'queries'!
+
+countUnresolved
+ |u cnt|
+
+ cnt := 0.
+ PatchLists do:[:patchList |
+ u := patchList.
+ [u notNil] whileTrue:[
+ cnt := cnt + 1.
+ u := u nextUnresolved
+ ]
+ ].
+ ^ cnt
+
+ "
+ self countUnresolved
+ "
+! !
+
!JavaUnresolvedConstant class methodsFor:'resolving'!
+flushPatchLists
+ PatchLists := nil
+! !
+
+!JavaUnresolvedConstant class ignoredMethodsFor:'resolving'!
+
resolve:aPossiblyUnresolvedConstant from:aConstantTable
(aPossiblyUnresolvedConstant isKindOf:JavaUnresolvedConstant) ifTrue:[
^ aPossiblyUnresolvedConstant resolveFrom:aConstantTable
@@ -24,24 +51,125 @@
! !
+!JavaUnresolvedConstant class methodsFor:'resolving'!
+
+resolveFor:aJavaClass
+ "a JAVA class has been loaded - resolve what can be"
+
+ |patchList unresolved nameSymbol|
+
+"/ 'resolving: ' print. aJavaClass fullName printCR.
+
+ PatchLists isNil ifTrue:[^ self].
+
+ nameSymbol := aJavaClass fullName asSymbol.
+ patchList := PatchLists at:nameSymbol ifAbsent:nil.
+ patchList notNil ifTrue:[
+ PatchLists removeKey:nameSymbol.
+
+ [patchList notNil] whileTrue:[
+ unresolved := patchList.
+ patchList := unresolved nextUnresolved.
+
+ unresolved prevUnresolved:nil.
+ unresolved nextUnresolved:nil.
+ unresolved preResolve.
+ ]
+ ].
+
+!
+
+unresolvedClassNames
+ "return a collection of unresolved class names"
+
+ PatchLists isNil ifTrue:[^ #()].
+ ^ PatchLists keys
+
+ "
+ self unresolvedClassNames
+ "
+! !
+
!JavaUnresolvedConstant methodsFor:'accessing'!
-index:i
- index := i
+constantPool
+ ^ constantPool
+
+ "Created: 15.4.1996 / 15:59:45 / cg"
+!
+
+constantPoolIndex
+ ^ constantPoolIndex
"Created: 15.4.1996 / 15:59:45 / cg"
+!
+
+nextUnresolved
+ ^ nextUnresolved
+!
+
+nextUnresolved:anUnresolvedConstant
+ nextUnresolved := anUnresolvedConstant
+!
+
+pool:aPool poolIndex:i
+ constantPool := aPool.
+ constantPoolIndex := i
+
+ "Created: 15.4.1996 / 15:59:45 / cg"
+!
+
+prevUnresolved:anUnresolvedConstant
+ prevUnresolved := anUnresolvedConstant
! !
!JavaUnresolvedConstant methodsFor:'printing & storing'!
displayString
- ^ 'Unresolved( idx= ' , index printString , ')'
+ ^ (self class name) , '( idx= ' , constantPoolIndex printString , ')'
+
+
+! !
+
+!JavaUnresolvedConstant methodsFor:'queries'!
+
+isUnresolved
+ ^ true
+! !
+
+!JavaUnresolvedConstant methodsFor:'resolving'!
+
+preResolve
+ self subclassResponsibility.
+ ^ self
+
+
+!
+rememberForResolveWith:aFullClassName
+ |patchList nameSymbol|
+
+ prevUnresolved notNil ifTrue:[^ self].
+
+ PatchLists isNil ifTrue:[
+ PatchLists := IdentityDictionary new.
+ ].
+
+ nameSymbol := aFullClassName asSymbol.
+ patchList := PatchLists at:nameSymbol ifAbsent:nil.
+ patchList isNil ifTrue:[
+"/ ('first patch for: ' , aFullClassName) printCR.
+ ] ifFalse:[
+ patchList prevUnresolved:self.
+ nextUnresolved := patchList.
+ ].
+ PatchLists at:nameSymbol put:self.
+ prevUnresolved := #startOfList.
! !
!JavaUnresolvedConstant class methodsFor:'documentation'!
version
- ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaUnresolvedConstant.st,v 1.2 1996/06/27 14:25:11 cg Exp $'
+ ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaUnresolvedConstant.st,v 1.3 1996/06/28 21:38:26 cg Exp $'
! !
--- a/JavaUnresolvedFieldrefConstant.st Fri Jun 28 21:39:41 1996 +0000
+++ b/JavaUnresolvedFieldrefConstant.st Fri Jun 28 21:39:53 1996 +0000
@@ -1,17 +1,69 @@
JavaUnresolvedRefConstant subclass:#JavaUnresolvedFieldrefConstant
- instanceVariableNames:''
+ instanceVariableNames:'classIndex'
classVariableNames:''
poolDictionaries:''
category:'Java-Reader-Support'
!
+!JavaUnresolvedFieldrefConstant class methodsFor:'instance creation'!
+
+pool:aPool poolIndex:idx classIndex:cIdx nameandTypeIndex:nmIdx
+ ^ self new
+ pool:aPool poolIndex:idx classIndex:cIdx nameandTypeIndex:nmIdx
+
+
+! !
+
+!JavaUnresolvedFieldrefConstant methodsFor:'accessing'!
+
+pool:aPool poolIndex:slotIndex classIndex:cIdx nameandTypeIndex:nmIdx
+ constantPool := aPool.
+ constantPoolIndex := slotIndex.
+ classIndex := cIdx.
+ nameandTypeIndex := nmIdx
+
+
+
+! !
+
!JavaUnresolvedFieldrefConstant methodsFor:'resolving'!
+preResolve
+ |className class nameAndType ref|
+
+ class := (constantPool at:classIndex).
+ class isUnresolved ifTrue:[
+ class := class preResolve.
+ ].
+ class isUnresolved ifFalse:[
+ nameAndType := (constantPool at:nameandTypeIndex).
+ nameAndType isUnresolved ifTrue:[
+ nameAndType := nameAndType preResolve.
+ ].
+ nameAndType isUnresolved ifFalse:[
+ "/ good - class is there
+
+ ref := JavaFieldref class:class nameandType:nameAndType.
+ constantPool at:constantPoolIndex put:ref.
+ ^ ref
+ ]
+ ].
+
+ self rememberForResolveWith:(class fullName).
+ ^ self
+
+ "Created: 15.4.1996 / 16:05:50 / cg"
+ "Modified: 15.4.1996 / 16:26:44 / cg"
+! !
+
+!JavaUnresolvedFieldrefConstant ignoredMethodsFor:'resolving'!
+
resolveFrom:aConstantTable
|class nameAndType|
- class := self class resolve:(aConstantTable at:index) from:aConstantTable.
+self halt.
+ class := self class resolve:(aConstantTable at:constantPoolIndex) from:aConstantTable.
nameAndType := self class resolve:(aConstantTable at:nameandTypeIndex) from:aConstantTable.
^ JavaFieldref
@@ -22,8 +74,8 @@
"Modified: 15.4.1996 / 16:26:44 / cg"
! !
-!JavaUnresolvedFieldrefConstant class methodsFor:'documentation'!
+!JavaUnresolvedFieldrefConstant class methodsFor:'documentation'!
version
- ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaUnresolvedFieldrefConstant.st,v 1.4 1996/05/03 11:28:42 cg Exp $'
+ ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaUnresolvedFieldrefConstant.st,v 1.5 1996/06/28 21:39:53 cg Exp $'
! !
--- a/JavaUnresolvedInterfaceMethodrefConstant.st Fri Jun 28 21:39:41 1996 +0000
+++ b/JavaUnresolvedInterfaceMethodrefConstant.st Fri Jun 28 21:39:53 1996 +0000
@@ -1,4 +1,4 @@
-JavaUnresolvedRefConstant subclass:#JavaUnresolvedInterfaceMethodrefConstant
+JavaUnresolvedMethodrefConstant subclass:#JavaUnresolvedInterfaceMethodrefConstant
instanceVariableNames:''
classVariableNames:''
poolDictionaries:''
@@ -6,23 +6,8 @@
!
-!JavaUnresolvedInterfaceMethodrefConstant methodsFor:'resolving'!
-
-resolveFrom:aConstantTable
- |class nameAndType|
-
- class := self class resolve:(aConstantTable at:index) from:aConstantTable.
- nameAndType := self class resolve:(aConstantTable at:nameandTypeIndex) from:aConstantTable.
- ^ JavaInterfaceMethodref
- class:class
- nameandType:nameAndType
-
- "Modified: 15.4.1996 / 16:26:59 / cg"
- "Created: 17.4.1996 / 22:47:26 / cg"
-! !
-
-!JavaUnresolvedInterfaceMethodrefConstant class methodsFor:'documentation'!
+!JavaUnresolvedInterfaceMethodrefConstant class methodsFor:'documentation'!
version
- ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaUnresolvedInterfaceMethodrefConstant.st,v 1.1 1996/04/17 20:57:56 cg Exp $'
+ ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaUnresolvedInterfaceMethodrefConstant.st,v 1.2 1996/06/28 21:39:18 cg Exp $'
! !
--- a/JavaUnresolvedMethodrefConstant.st Fri Jun 28 21:39:41 1996 +0000
+++ b/JavaUnresolvedMethodrefConstant.st Fri Jun 28 21:39:53 1996 +0000
@@ -1,28 +1,60 @@
JavaUnresolvedRefConstant subclass:#JavaUnresolvedMethodrefConstant
- instanceVariableNames:''
+ instanceVariableNames:'classIndex'
classVariableNames:''
poolDictionaries:''
category:'Java-Reader-Support'
!
+!JavaUnresolvedMethodrefConstant class methodsFor:'instance creation'!
+
+pool:aPool poolIndex:idx classIndex:cIdx nameandTypeIndex:nmIdx
+ ^ self new
+ pool:aPool poolIndex:idx classIndex:cIdx nameandTypeIndex:nmIdx
+! !
+
+!JavaUnresolvedMethodrefConstant methodsFor:'accessing'!
+
+pool:aPool poolIndex:idx classIndex:cIdx nameandTypeIndex:nmIdx
+ constantPool := aPool.
+ constantPoolIndex := idx.
+ classIndex := cIdx.
+ nameandTypeIndex := nmIdx
+
+! !
+
!JavaUnresolvedMethodrefConstant methodsFor:'resolving'!
-resolveFrom:aConstantTable
- |class nameAndType|
+preResolve
+ |nameAndType class ref|
+
+ "/ first, resolve the nameAndType & signature ...
- class := self class resolve:(aConstantTable at:index) from:aConstantTable.
- nameAndType := self class resolve:(aConstantTable at:nameandTypeIndex) from:aConstantTable.
- ^ JavaMethodref
- class:class
- nameandType:nameAndType
+ class := (constantPool at:classIndex).
+ class isUnresolved ifTrue:[
+ class := class preResolve.
+ ].
+ class isUnresolved ifFalse:[
+ nameAndType := (constantPool at:nameandTypeIndex).
+ nameAndType isUnresolved ifTrue:[
+ nameAndType := nameAndType preResolve.
+ ].
+ nameAndType isUnresolved ifFalse:[
+ "/ ok, got them
- "Created: 15.4.1996 / 16:12:41 / cg"
- "Modified: 15.4.1996 / 16:26:59 / cg"
+ ref := JavaMethodref class:class nameandType:nameAndType.
+ constantPool at:constantPoolIndex put:ref.
+ ^ ref
+ ]
+ ].
+
+ self rememberForResolveWith:(class fullName).
+ ^ self
+
! !
-!JavaUnresolvedMethodrefConstant class methodsFor:'documentation'!
+!JavaUnresolvedMethodrefConstant class methodsFor:'documentation'!
version
- ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaUnresolvedMethodrefConstant.st,v 1.3 1996/04/17 20:57:28 cg Exp $'
+ ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaUnresolvedMethodrefConstant.st,v 1.4 1996/06/28 21:39:46 cg Exp $'
! !
--- a/JavaUnresolvedNameandTypeConstant.st Fri Jun 28 21:39:41 1996 +0000
+++ b/JavaUnresolvedNameandTypeConstant.st Fri Jun 28 21:39:53 1996 +0000
@@ -1,22 +1,24 @@
JavaUnresolvedConstant subclass:#JavaUnresolvedNameandTypeConstant
- instanceVariableNames:'signatureIndex'
+ instanceVariableNames:'nameIndex signatureIndex'
classVariableNames:''
poolDictionaries:''
category:'Java-Reader-Support'
!
-!JavaUnresolvedNameandTypeConstant class methodsFor:'instance creation'!
+!JavaUnresolvedNameandTypeConstant class methodsFor:'instance creation'!
-nameIndex:name_index signatureIndex:signature_index
- ^ (super index:name_index) signatureIndex:signature_index
-
- "Created: 15.4.1996 / 16:15:16 / cg"
+pool:aPool poolIndex:slotIndex nameIndex:name_index signatureIndex:signature_index
+ ^ self new
+ pool:aPool poolIndex:slotIndex nameIndex:name_index signatureIndex:signature_index
! !
!JavaUnresolvedNameandTypeConstant methodsFor:'accessing'!
-signatureIndex:signature_index
+pool:aPool poolIndex:slotIndex nameIndex:name_index signatureIndex:signature_index
+ constantPool := aPool.
+ constantPoolIndex := slotIndex.
+ nameIndex := name_index.
signatureIndex := signature_index
"Created: 15.4.1996 / 16:14:39 / cg"
@@ -24,10 +26,36 @@
!JavaUnresolvedNameandTypeConstant methodsFor:'resolving'!
+preResolve
+ |name signature ref|
+
+ name := (constantPool at:nameIndex).
+ name isString ifFalse:[
+ name := name preResolve.
+ ].
+ signature := (constantPool at:signatureIndex).
+ signature isString ifFalse:[
+ signature := signature preResolve.
+ ].
+ (name isString and:[signature isString]) ifTrue:[
+ ref := JavaNameandType name:name signature:signature.
+ constantPool at:constantPoolIndex put:ref.
+ ^ ref
+ ].
+
+ self halt:'should be resolvable'.
+ ^ self
+
+ "Created: 15.4.1996 / 16:15:53 / cg"
+ "Modified: 15.4.1996 / 16:27:33 / cg"
+! !
+
+!JavaUnresolvedNameandTypeConstant ignoredMethodsFor:'resolving'!
+
resolveFrom:aConstantTable
|name signature|
-
- name := self class resolve:(aConstantTable at:index) from:aConstantTable.
+self halt.
+ name := self class resolve:(aConstantTable at:nameIndex) from:aConstantTable.
signature := self class resolve:(aConstantTable at:signatureIndex) from:aConstantTable.
^ JavaNameandType
name:name
@@ -37,8 +65,8 @@
"Modified: 15.4.1996 / 16:27:33 / cg"
! !
-!JavaUnresolvedNameandTypeConstant class methodsFor:'documentation'!
+!JavaUnresolvedNameandTypeConstant class methodsFor:'documentation'!
version
- ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaUnresolvedNameandTypeConstant.st,v 1.1 1996/04/15 15:02:07 cg Exp $'
+ ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaUnresolvedNameandTypeConstant.st,v 1.2 1996/06/28 21:38:44 cg Exp $'
! !
--- a/JavaUnresolvedRefConstant.st Fri Jun 28 21:39:41 1996 +0000
+++ b/JavaUnresolvedRefConstant.st Fri Jun 28 21:39:53 1996 +0000
@@ -6,14 +6,6 @@
!
-!JavaUnresolvedRefConstant class methodsFor:'instance creation'!
-
-classIndex:class_index nameandTypeIndex:name_and_type_index
- ^ (super index:class_index) nameandTypeIndex:name_and_type_index
-
- "Created: 15.4.1996 / 16:11:49 / cg"
-! !
-
!JavaUnresolvedRefConstant methodsFor:'accessing'!
nameandTypeIndex:name_and_type_index
@@ -31,8 +23,8 @@
"Modified: 15.4.1996 / 16:28:11 / cg"
! !
-!JavaUnresolvedRefConstant class methodsFor:'documentation'!
+!JavaUnresolvedRefConstant class methodsFor:'documentation'!
version
- ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaUnresolvedRefConstant.st,v 1.1 1996/04/15 15:03:27 cg Exp $'
+ ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaUnresolvedRefConstant.st,v 1.2 1996/06/28 21:38:17 cg Exp $'
! !
--- a/JavaUnresolvedStringConstant.st Fri Jun 28 21:39:41 1996 +0000
+++ b/JavaUnresolvedStringConstant.st Fri Jun 28 21:39:53 1996 +0000
@@ -1,79 +1,55 @@
JavaUnresolvedConstant subclass:#JavaUnresolvedStringConstant
- instanceVariableNames:''
- classVariableNames:'PatchStack'
+ instanceVariableNames:'stringIndex'
+ classVariableNames:''
poolDictionaries:''
category:'Java-Reader-Support'
!
-!JavaUnresolvedStringConstant class methodsFor:'instance creation'!
+!JavaUnresolvedStringConstant class methodsFor:'instance creation'!
-stringIndex:index
- ^ self index:index
+pool:aPool poolIndex:index stringIndex:stringIndex
+ ^ self new
+ pool:aPool poolIndex:index stringIndex:stringIndex
+
+
! !
-!JavaUnresolvedStringConstant class methodsFor:'resolving'!
-
-patchupStringConstants
- "sent after java/lang/String has been loaded.
- patch all previously unresolved string constants
- to become JavaStrings now ..."
-
- |jString|
-
- jString := Java classNamed:'java/lang/String'.
- jString notNil ifTrue:[
- PatchStack notNil ifTrue:[
- PatchStack do:[:entry |
- |table index string s|
+!JavaUnresolvedStringConstant methodsFor:'accessing'!
- table := entry at:1.
- index := entry at:2.
- string := entry at:3.
-
- s := jString basicNew.
- s instVarNamed:'value' put: string.
- s instVarNamed:'offset' put: 0.
- s instVarNamed:'count' put: string size.
+pool:aPool poolIndex:i stringIndex:string_index
+ constantPool := aPool.
+ constantPoolIndex := i.
+ stringIndex := string_index.
- table at:index put:s.
- ]
- ].
- PatchStack := nil
- ]
-
- "
- JavaUnresolvedStringConstant patchupStringConstants
- "
! !
!JavaUnresolvedStringConstant methodsFor:'resolving'!
-resolveFrom:aConstantTable
- |string|
+preResolve
+ |jString chars|
+
+ Java javaString notNil ifTrue:[
+ chars := (constantPool at:stringIndex).
+ chars isString ifFalse:[
+ self halt:'should not happen'
+ ].
+ jString := JavaObject javaStringFrom:chars.
- "/
- "/ I would like to return a JAVA-String here
- "/ however, we can only do this, after 'java/lang/String'
- "/ is loaded ... (hen & egg problem)
- "/
- "/ therefore, remember things until the class is loaded, and
- "/ patch string constants later
- "/
- string := self class resolve:(aConstantTable at:index) from:aConstantTable.
- PatchStack isNil ifTrue:[
- PatchStack := OrderedCollection new.
+"/constantPool owner == (Java at:'java/awt/Container') ifTrue:[
+"/self halt
+"/].
+
+ constantPool at:constantPoolIndex put:jString.
+ ^ jString.
].
- PatchStack addLast:(Array with:aConstantTable with:index with:string).
- ^ string
-
- "Created: 15.4.1996 / 15:51:42 / cg"
- "Modified: 15.4.1996 / 16:28:45 / cg"
+ self rememberForResolveWith:'java/lang/String'.
+ ^ self
! !
-!JavaUnresolvedStringConstant class methodsFor:'documentation'!
+!JavaUnresolvedStringConstant class methodsFor:'documentation'!
version
- ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaUnresolvedStringConstant.st,v 1.2 1996/05/02 20:46:36 cg Exp $'
+ ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaUnresolvedStringConstant.st,v 1.3 1996/06/28 21:36:50 cg Exp $'
! !