--- a/src/JavaClassReader.st Fri Oct 28 18:58:45 2011 +0000
+++ b/src/JavaClassReader.st Fri Oct 28 20:15:40 2011 +0000
@@ -244,10 +244,7 @@
classPath: Java release classPath.
class notNil ifTrue:[ ^ class ].
- class := self
- readClass: className ignoring: classesBeingLoadedOrNil
- classPath: Java classPath.
- class notNil ifTrue:[
+ class isNil ifTrue:[
JavaVM booted ifFalse:[
self breakPoint:#jv info: 'Should not happen!!'.
].
@@ -255,7 +252,14 @@
(scl := java_lang_ClassLoader instVarNamed:#scl) isNil ifTrue:[
scl := java_lang_ClassLoader perform: #'getSystemClassLoader()Ljava/lang/ClassLoader;'
].
- class classLoader: scl.
+ JavaClassReader classLoaderQuerySignal answer: scl do:[
+ class := self
+ readClass: className ignoring: classesBeingLoadedOrNil
+ classPath: Java classPath.
+ ].
+ class notNil ifTrue:[
+ self assert: class classLoader == scl.
+ ].
].
^class
@@ -263,7 +267,7 @@
"Created: / 15-04-1996 / 14:58:53 / cg"
"Modified: / 20-10-1998 / 17:24:54 / cg"
"Modified: / 21-10-2011 / 13:39:14 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
- "Modified: / 23-10-2011 / 22:07:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 28-10-2011 / 21:56:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
readClass: className ignoring: classesBeingLoadedOrNil classPath: classPath
@@ -612,6 +616,7 @@
] ifFalse: [
"/ a java class
classBeingLoaded := JavaClass fullName: thisClassName numStatic: nStatic.
+ classBeingLoaded classLoader: self class classLoaderQuerySignal query.
fields := fields select: [:f | f isStatic not ].
JavaClass setInstanceVariableStringFromFields: staticFields
in: classBeingLoaded class.
@@ -636,7 +641,7 @@
classBeingLoaded fields do: [:each | self updateOwnerInField: each ].
classBeingLoaded staticFields do: [:each | self updateOwnerInField: each ].
- JavaVM classRegistry registerClass: classBeingLoaded.
+ "/JavaVM classRegistry registerClass: classBeingLoaded.
classesbeingLoaded remove: classBeingLoaded name ifAbsent:[].
^ classBeingLoaded.
@@ -654,7 +659,7 @@
"Modified: / 15-10-2010 / 17:37:38 / Jan Kurs <kurs.jan@post.cz>"
"Modified: / 28-01-2011 / 15:09:48 / Marcel Hlopko <hlopik@gmail.com>"
"Modified: / 18-05-2011 / 15:30:29 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
- "Modified: / 23-10-2011 / 15:23:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 28-10-2011 / 21:58:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
readStream:aStream ignoring:classesBeingLoaded
--- a/src/JavaClassRegistry.st Fri Oct 28 18:58:45 2011 +0000
+++ b/src/JavaClassRegistry.st Fri Oct 28 20:15:40 2011 +0000
@@ -139,7 +139,7 @@
classes := classLoadersAndClasses at: classLoader ifAbsent: nil.
classes isNil ifTrue:[
- classLoadersAndClasses at: classLoader put: Dictionary new
+ classes := classLoadersAndClasses at: classLoader put: Dictionary new
].
^classes at: className ifAbsent: [
| class |
@@ -345,9 +345,12 @@
classLoadersAndClasses keysAndValuesDo:[:loader :classes|
(classes includesKey: aJavaClass name) ifTrue:[
- self breakPoint: #jv.
- loader = aJavaClass classLoader ifTrue:[
- self error:'Trying to register class twice!!'
+ loader == aJavaClass classLoader ifTrue:[
+ (classes at: aJavaClass name) ~~ aJavaClass ifTrue:[
+ self error:'Trying to register class twice!!'
+ ].
+ ] ifFalse:[
+ self breakPoint: #jv.
]
]
].
--- a/src/JavaVM.st Fri Oct 28 18:58:45 2011 +0000
+++ b/src/JavaVM.st Fri Oct 28 20:15:40 2011 +0000
@@ -68,7 +68,7 @@
StdinReplacementFileQuerySignal AssertionsEnabled
SimulatedNativeMemory Reflection ZipCache ZipEntryCache
ZipLastModTimesCache ZipInflaters JavaPrivilegedAccessQuery
- ClassRegistry ClassLoaderQuerySignal'
+ ClassRegistry'
poolDictionaries:''
category:'Languages-Java-Support'
!
@@ -1425,15 +1425,15 @@
JavaPrivilegedAccessQuery defaultAnswer:false.
AssertionsEnabled := true.
ClassRegistry := JavaClassRegistry new.
- ClassLoaderQuerySignal := Query new.
"
JavaVM initialize"
+
"Created: / 02-01-1998 / 18:02:34 / cg"
"Modified: / 02-12-1998 / 23:02:22 / cg"
- "Modified: / 25-02-2011 / 08:05:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 01-04-2011 / 12:33:37 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
"Modified: / 09-10-2011 / 20:29:10 / Marcel Hlopko <hlopik@gmail.com>"
+ "Modified: / 28-10-2011 / 22:11:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
initializeAdditionalJavaProtocol
@@ -2104,7 +2104,14 @@
!
classLoaderQuerySignal
-^ ClassLoaderQuerySignal.
+
+ <resource: #obsolete>
+
+ self breakPoint: #jv.
+
+ ^JavaClassReader classLoaderQuerySignal
+
+ "Modified: / 28-10-2011 / 22:11:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
internalErrorSignal
@@ -2259,9 +2266,10 @@
classForName: className
"load class from registry - load using classLoader from query or JavaClassReader if absent"
- ^self classForName: className definedBy: self classLoaderQuerySignal query.
+ ^self classForName: className definedBy: JavaClassReader classLoaderQuerySignal query.
"Modified: / 21-10-2011 / 12:08:38 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+ "Modified: / 28-10-2011 / 22:11:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
classForName: className definedBy: classLoader
@@ -2276,13 +2284,14 @@
ifNotNil: [
| classObject |
classObject := classLoader
- perform: #'loadClass(Ljava/lang/String;)Ljava/lang/Class;'
+ perform: #'loadClassInternal(Ljava/lang/String;)Ljava/lang/Class;'
with: (Java as_String: (className asJavaishClassName)).
self classForJavaClassObject: classObject.
]
].
"Created: / 21-10-2011 / 12:01:16 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+ "Modified: / 28-10-2011 / 21:40:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
classForName: className definedBy: classLoader ifAbsentPut: aBlock
@@ -2308,10 +2317,11 @@
classNamed: className
"Return class with given name loaded by current classloader or nil if class is not yet loaded"
- ^ self classNamed: className definedBy: self classLoaderQuerySignal query.
+ ^ self classNamed: className definedBy: JavaClassReader classLoaderQuerySignal query.
"Modified: / 21-10-2011 / 12:09:13 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
"Modified (comment): / 21-10-2011 / 13:34:46 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+ "Modified: / 28-10-2011 / 22:12:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
classNamed: className definedBy: classLoader
@@ -6599,17 +6609,17 @@
_java_lang_Throwable_fillInStackTrace: nativeContext
<javanative: 'java/lang/Throwable' name: 'fillInStackTrace'>
- | exClass exceptionObject list con |
-
- exClass := Java classNamed: 'java/lang/Throwable'.
+ | java_lang_Throwable exceptionObject list con |
+
+ java_lang_Throwable := Java classNamed: 'java/lang/Throwable'.
exceptionObject := nativeContext receiver.
"/
"/ debugging only
"/
- (exceptionObject isKindOf: (JavaVM classNamed: 'java/lang/Throwable')) ifFalse: [
- self halt
+ (java_lang_Throwable notNil and:[(exceptionObject isKindOf: java_lang_Throwable) not]) ifTrue: [
+ self error:'Thrown object is not a java.lang.Throwable'.
].
con := thisContext sender.
@@ -6640,6 +6650,7 @@
"Created: / 04-01-1998 / 14:27:40 / cg"
"Modified: / 08-05-1998 / 21:29:53 / cg"
"Modified: / 21-10-2011 / 13:41:48 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+ "Modified: / 28-10-2011 / 22:15:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
_java_lang_Throwable_getStackTraceDepth: nativeContext