Smalltalk.st
branchjv
changeset 17727 3945dfe4659c
parent 17711 39faaaf888b4
child 17728 bbc5fa73dfab
--- a/Smalltalk.st	Thu Aug 13 10:43:43 2009 +0100
+++ b/Smalltalk.st	Sun Aug 16 18:14:23 2009 +0100
@@ -4637,311 +4637,312 @@
 
     wasLazy := Compiler compileLazy:loadLazy.
     beSilent notNil ifTrue:[
-	wasSilent := self silentLoading:beSilent.
+        wasSilent := self silentLoading:beSilent.
     ].
 
     classFileName := Smalltalk fileNameForClass:aClassName.
     (classFileName = aClassName) ifTrue:[
-	"/ no abbrev.stc translation for className
-	(aClassName includes:$:) ifTrue:[
-	    "/ a nameSpace name
-	    alternativeClassFileName := classFileName copyFrom:(classFileName lastIndexOf:$:)+1
-	].
+        "/ no abbrev.stc translation for className
+        (aClassName includes:$:) ifTrue:[
+            "/ a nameSpace name
+            alternativeClassFileName := classFileName copyFrom:(classFileName lastIndexOf:$:)+1
+        ].
     ].
 
     classFileName asFilename isAbsolute ifTrue:[
-	classFileName asFilename suffix notEmptyOrNil ifTrue:[
-	    ok := self fileIn:classFileName lazy:loadLazy silent:beSilent.
-	] ifFalse:[
-	    ok := self fileIn:(classFileName,'.st') lazy:loadLazy silent:beSilent.
-	]
+        classFileName asFilename suffix notEmptyOrNil ifTrue:[
+            ok := self fileIn:classFileName lazy:loadLazy silent:beSilent.
+        ] ifFalse:[
+            ok := self fileInSourceFile:classFileName lazy:loadLazy silent:beSilent.
+        ]
     ] ifFalse:[
-	classFileName := classFileName copyReplaceAll:$: with:$_.
-	[
-	    Class withoutUpdatingChangesDo:[
-		|zarFn zar entry|
-
-		ok := false.
-
-		package notNil ifTrue:[
-		    packageDir := package asString.
-		    packageDir := packageDir copyReplaceAll:$: with:$/.
-		].
-
-		Class packageQuerySignal answer:package do:[
-		    "
-		     then, if dynamic linking is available,
-		    "
-		    (LoadBinaries and:[ObjectFileLoader notNil]) ifTrue:[
-			sharedLibExtension := ObjectFileLoader sharedLibraryExtension.
-			"
-			 first look for a class packages shared binary in binary/xxx.o
-			"
-			libName := self libraryFileNameOfClass:aClassName.
-			libName notNil ifTrue:[
-			    (ok := self fileInClass:aClassName fromObject:(libName, sharedLibExtension))
-			    ifFalse:[
-				sharedLibExtension ~= '.o' ifTrue:[
-				    ok := self fileInClass:aClassName fromObject:(libName, '.o')
-				]
-			    ].
-			].
-			"
-			 then, look for a shared binary in binary/xxx.o
-			"
-			ok ifFalse:[
-			    (ok := self fileInClass:aClassName fromObject:(classFileName, sharedLibExtension))
-			    ifFalse:[
-				sharedLibExtension ~= '.o' ifTrue:[
-				    ok := self fileInClass:aClassName fromObject:(classFileName, '.o')
-				].
-				ok ifFalse:[
-				    alternativeClassFileName notNil ifTrue:[
-					(ok := self fileInClass:aClassName fromObject:(alternativeClassFileName, sharedLibExtension))
-					ifFalse:[
-					    sharedLibExtension ~= '.o' ifTrue:[
-						ok := self fileInClass:aClassName fromObject:(alternativeClassFileName, '.o')
-					    ]
-					]
-				    ].
-				].
-			    ].
-			].
-		    ].
-
-		    "
-		     if that did not work, look for a compiled-bytecode file ...
-		    "
-		    ok ifFalse:[
-			(ok := self fileIn:(classFileName , '.cls') lazy:loadLazy silent:beSilent)
-			ifFalse:[
-			    alternativeClassFileName notNil ifTrue:[
-				ok := self fileIn:(alternativeClassFileName , '.cls') lazy:loadLazy silent:beSilent
-			    ]
-			]
-		    ].
-		    "
-		     if that did not work, and the classes package is known,
-		     look for an st-cls file
-		     in a package subdir of the source-directory ...
-		    "
-		    ok ifFalse:[
-			(packageDir notNil and:[BinaryObjectStorage notNil]) ifTrue:[
-			    packageFile := self getPackageFileName:(packageDir , '/classes/' , classFileName , '.cls').
-			    packageFile isNil ifTrue:[
-				packageFile := (packageDir , '/classes/' , classFileName , '.cls').
-			    ].
-			    (ok := self fileIn:packageFile lazy:loadLazy silent:beSilent)
-			    ifFalse:[
-				alternativeClassFileName notNil ifTrue:[
-				    packageFile := self getPackageFileName:(packageDir , '/classes/' , alternativeClassFileName , '.cls').
-				    packageFile isNil ifTrue:[
-					packageFile := (packageDir , '/classes/' , alternativeClassFileName , '.cls').
-				    ].
-				    ok := self fileIn:packageFile lazy:loadLazy silent:beSilent
-				]
-			    ].
-
-			    zarFn := self getPackageFileName:(packageDir , '/classes.zip').
-			    zarFn notNil ifTrue:[
-				zar := ZipArchive oldFileNamed:zarFn.
-				zar notNil ifTrue:[
-				    entry := zar extract:(classFileName , '.cls').
-				    (entry isNil and:[alternativeClassFileName notNil]) ifTrue:[
-					entry := zar extract:(alternativeClassFileName , '.cls').
-				    ].
-				    entry notNil ifTrue:[
-					bos := BinaryObjectStorage onOld:(entry asByteArray readStream).
-					bos next.
-					bos close.
-					ok := true
-				    ].
-				]
-			    ]
-			]
-		    ].
-
-		    "
-		     if that did not work, look for an st-source file ...
-		    "
-		    ok ifFalse:[
-			filenameToSet := classFileName , '.st'.
-			(ok := self fileIn:filenameToSet lazy:loadLazy silent:beSilent)
-			ifFalse:[
-			    alternativeClassFileName notNil ifTrue:[
-				filenameToSet := alternativeClassFileName , '.st'.
-				ok := self fileIn:filenameToSet lazy:loadLazy silent:beSilent
-			    ].
-			    ok ifFalse:[
-				"
-				 ... and in the standard source-directory
-				"
-				filenameToSet := 'source/' , classFileName , '.st'.
-				(ok := self fileIn:filenameToSet lazy:loadLazy silent:beSilent)
-				ifFalse:[
-				    alternativeClassFileName notNil ifTrue:[
-					filenameToSet := 'source/' , alternativeClassFileName , '.st'.
-					ok := self fileIn:filenameToSet lazy:loadLazy silent:beSilent
-				    ]
-				]
-			    ]
-			].
-			"
-			 if that did not work, and the classes package is known,
-			 look for an st-source file
-			 in a package subdir of the source-directory ...
-			"
-			ok ifFalse:[
-			    packageDir notNil ifTrue:[
-				packageFile := self getPackageFileName:(packageDir , '/source/' , classFileName , '.st').
-				packageFile isNil ifTrue:[
-				    packageFile := (packageDir , '/source/' , classFileName , '.st').
-				].
-				filenameToSet := packageFile.
-				(ok := self fileIn:packageFile lazy:loadLazy silent:beSilent)
-				ifFalse:[
-				    alternativeClassFileName notNil ifTrue:[
-					packageFile := self getPackageFileName:(packageDir , '/source/' , alternativeClassFileName , '.st').
-					packageFile isNil ifTrue:[
-					    packageFile := (packageDir , '/source/' , alternativeClassFileName , '.st').
-					].
-					filenameToSet := packageFile.
-					ok := self fileIn:packageFile lazy:loadLazy silent:beSilent
-				    ].
-				    ok ifFalse:[
-					packageFile := self getPackageFileName:(packageDir , '/' , classFileName , '.st').
-					packageFile isNil ifTrue:[
-					    packageFile := (packageDir , '/' , classFileName , '.st').
-					].
-					filenameToSet := packageFile.
-					(ok := self fileIn:packageFile lazy:loadLazy silent:beSilent)
-					ifFalse:[
-					    alternativeClassFileName notNil ifTrue:[
-						packageFile := self getPackageFileName:(packageDir , '/' , alternativeClassFileName , '.st').
-						packageFile isNil ifTrue:[
-						    packageFile := (packageDir , '/' , alternativeClassFileName , '.st').
-						].
-						filenameToSet := packageFile.
-						ok := self fileIn:packageFile lazy:loadLazy silent:beSilent
-					    ].
-					    ok ifFalse:[
-						"
-						 ... and in the standard source-directory
-						"
-						filenameToSet := 'source/' , packageDir , '/' , classFileName , '.st'.
-						(ok := self fileIn:filenameToSet lazy:loadLazy silent:beSilent)
-						ifFalse:[
-						    alternativeClassFileName notNil ifTrue:[
-							filenameToSet := 'source/' , packageDir , '/' , alternativeClassFileName , '.st'.
-							ok := self fileIn:filenameToSet lazy:loadLazy silent:beSilent
-						    ]
-						]
-					    ]
-					].
-				    ].
-				].
-			    ]
-			].
-			"
-			 if that did not work, and the classes package is known,
-			 look for a zipArchive containing a class entry.
-			"
-			ok ifFalse:[
-			    packageDir notNil ifTrue:[
-				zarFn := self getPackageFileName:(packageDir , '/source.zip').
-				zarFn isNil ifTrue:[
-				    zarFn := packageDir asFilename withSuffix:'zip'.
-				    zarFn := self getSourceFileName:zarFn.
-				].
-				zarFn notNil ifTrue:[
-				    zar := ZipArchive oldFileNamed:zarFn.
-				    zar notNil ifTrue:[
-					entry := zar extract:(classFileName , '.st').
-					(entry isNil and:[alternativeClassFileName notNil]) ifTrue:[
-					    entry := zar extract:(alternativeClassFileName , '.st').
-					].
-					entry notNil ifTrue:[
-					    filenameToSet := zarFn.
-					    ok := self
-						    fileInStream:(entry asString readStream)
-						    lazy:loadLazy
-						    silent:beSilent
-						    logged:false
-						    addPath:nil
-					].
-				    ]
-				]
-			    ]
-			].
-
-			"
-			 if that did not work,
-			 look for a zipArchive containing a class entry.
-			"
-			ok ifFalse:[
-			    zarFn := self getSourceFileName:'source.zip'.
-			    zarFn notNil ifTrue:[
-				zar := ZipArchive oldFileNamed:zarFn.
-				zar notNil ifTrue:[
-				    entry := zar extract:(zarFn := classFileName , '.st').
-				    (entry isNil and:[alternativeClassFileName notNil]) ifTrue:[
-					entry := zar extract:(zarFn := alternativeClassFileName , '.st').
-				    ].
-				    entry notNil ifTrue:[
-					filenameToSet := zarFn.
-					ok := self
-						fileInStream:(entry asString readStream)
-						lazy:loadLazy
-						silent:beSilent
-						logged:false
-						addPath:nil
-				    ].
-				]
-			    ]
-			].
-			ok ifFalse:[
-			    "
-			     if there is a sourceCodeManager, ask it for the classes sourceCode
-			    "
-			    (mgr := Smalltalk at:#SourceCodeManager) notNil ifTrue:[
-				inStream := mgr getMostRecentSourceStreamForClassNamed:aClassName.
-				inStream notNil ifTrue:[
-				    filenameToSet := nil.
-				    ok := self fileInStream:inStream lazy:loadLazy silent:beSilent logged:false addPath:nil.
-				]
-			    ].
-			].
-		    ].
-		]
-	    ].
-	] ensure:[
-	    Compiler compileLazy:wasLazy.
-	    wasSilent notNil ifTrue:[
-		self silentLoading:wasSilent
-	    ]
-	].
+        classFileName := classFileName copyReplaceAll:$: with:$_.
+        [
+            Class withoutUpdatingChangesDo:[
+                |zarFn zar entry|
+
+                ok := false.
+
+                package notNil ifTrue:[
+                    packageDir := package asString.
+                    packageDir := packageDir copyReplaceAll:$: with:$/.
+                ].
+
+                Class packageQuerySignal answer:package do:[
+                    "
+                     then, if dynamic linking is available,
+                    "
+                    (LoadBinaries and:[ObjectFileLoader notNil]) ifTrue:[
+                        sharedLibExtension := ObjectFileLoader sharedLibraryExtension.
+                        "
+                         first look for a class packages shared binary in binary/xxx.o
+                        "
+                        libName := self libraryFileNameOfClass:aClassName.
+                        libName notNil ifTrue:[
+                            (ok := self fileInClass:aClassName fromObject:(libName, sharedLibExtension))
+                            ifFalse:[
+                                sharedLibExtension ~= '.o' ifTrue:[
+                                    ok := self fileInClass:aClassName fromObject:(libName, '.o')
+                                ]
+                            ].
+                        ].
+                        "
+                         then, look for a shared binary in binary/xxx.o
+                        "
+                        ok ifFalse:[
+                            (ok := self fileInClass:aClassName fromObject:(classFileName, sharedLibExtension))
+                            ifFalse:[
+                                sharedLibExtension ~= '.o' ifTrue:[
+                                    ok := self fileInClass:aClassName fromObject:(classFileName, '.o')
+                                ].
+                                ok ifFalse:[
+                                    alternativeClassFileName notNil ifTrue:[
+                                        (ok := self fileInClass:aClassName fromObject:(alternativeClassFileName, sharedLibExtension))
+                                        ifFalse:[
+                                            sharedLibExtension ~= '.o' ifTrue:[
+                                                ok := self fileInClass:aClassName fromObject:(alternativeClassFileName, '.o')
+                                            ]
+                                        ]
+                                    ].
+                                ].
+                            ].
+                        ].
+                    ].
+
+                    "
+                     if that did not work, look for a compiled-bytecode file ...
+                    "
+                    ok ifFalse:[
+                        (ok := self fileIn:(classFileName , '.cls') lazy:loadLazy silent:beSilent)
+                        ifFalse:[
+                            alternativeClassFileName notNil ifTrue:[
+                                ok := self fileIn:(alternativeClassFileName , '.cls') lazy:loadLazy silent:beSilent
+                            ]
+                        ]
+                    ].
+                    "
+                     if that did not work, and the classes package is known,
+                     look for an st-cls file
+                     in a package subdir of the source-directory ...
+                    "
+                    ok ifFalse:[
+                        (packageDir notNil and:[BinaryObjectStorage notNil]) ifTrue:[
+                            packageFile := self getPackageFileName:(packageDir , '/classes/' , classFileName , '.cls').
+                            packageFile isNil ifTrue:[
+                                packageFile := (packageDir , '/classes/' , classFileName , '.cls').
+                            ].
+                            (ok := self fileIn:packageFile lazy:loadLazy silent:beSilent)
+                            ifFalse:[
+                                alternativeClassFileName notNil ifTrue:[
+                                    packageFile := self getPackageFileName:(packageDir , '/classes/' , alternativeClassFileName , '.cls').
+                                    packageFile isNil ifTrue:[
+                                        packageFile := (packageDir , '/classes/' , alternativeClassFileName , '.cls').
+                                    ].
+                                    ok := self fileIn:packageFile lazy:loadLazy silent:beSilent
+                                ]
+                            ].
+
+                            zarFn := self getPackageFileName:(packageDir , '/classes.zip').
+                            zarFn notNil ifTrue:[
+                                zar := ZipArchive oldFileNamed:zarFn.
+                                zar notNil ifTrue:[
+                                    entry := zar extract:(classFileName , '.cls').
+                                    (entry isNil and:[alternativeClassFileName notNil]) ifTrue:[
+                                        entry := zar extract:(alternativeClassFileName , '.cls').
+                                    ].
+                                    entry notNil ifTrue:[
+                                        bos := BinaryObjectStorage onOld:(entry asByteArray readStream).
+                                        bos next.
+                                        bos close.
+                                        ok := true
+                                    ].
+                                ]
+                            ]
+                        ]
+                    ].
+
+                    "
+                     if that did not work, look for an st-source file ...
+                    "
+                    ok ifFalse:[
+                        filenameToSet := classFileName.
+                        (ok := self fileInSourceFile:filenameToSet lazy:loadLazy silent:beSilent)
+                        ifFalse:[
+                            alternativeClassFileName notNil ifTrue:[
+                                filenameToSet := alternativeClassFileName.
+                                ok := self fileInSourceFile:filenameToSet lazy:loadLazy silent:beSilent
+                            ].
+                            ok ifFalse:[
+                                "
+                                 ... and in the standard source-directory
+                                "
+                                filenameToSet := 'source/' , classFileName.
+                                (ok := self fileInSourceFile:filenameToSet lazy:loadLazy silent:beSilent)
+                                ifFalse:[
+                                    alternativeClassFileName notNil ifTrue:[
+                                        filenameToSet := 'source/' , alternativeClassFileName.
+                                        ok := self fileInSourceFile:filenameToSet lazy:loadLazy silent:beSilent
+                                    ]
+                                ]
+                            ]
+                        ].
+                        "
+                         if that did not work, and the classes package is known,
+                         look for an st-source file
+                         in a package subdir of the source-directory ...
+                        "
+                        ok ifFalse:[
+                            packageDir notNil ifTrue:[
+                                packageFile := self getPackageSourceFileName:(packageDir , '/source/' , classFileName).
+                                packageFile isNil ifTrue:[
+                                    packageFile := (packageDir , '/source/' , classFileName).
+                                ].
+                                filenameToSet := packageFile.
+                                (ok := self fileInSourceFile:packageFile lazy:loadLazy silent:beSilent)
+                                ifFalse:[
+                                    alternativeClassFileName notNil ifTrue:[
+                                        packageFile := self getPackageSourceFileName:(packageDir , '/source/' , alternativeClassFileName).
+                                        packageFile isNil ifTrue:[
+                                            packageFile := (packageDir , '/source/' , alternativeClassFileName).
+                                        ].
+                                        filenameToSet := packageFile.
+                                        ok := self fileInSourceFile:packageFile lazy:loadLazy silent:beSilent
+                                    ].
+                                    ok ifFalse:[
+                                        packageFile := self getPackageSourceFileName:(packageDir , '/' , classFileName).
+                                        packageFile isNil ifTrue:[
+                                            packageFile := (packageDir , '/' , classFileName).
+                                        ].
+                                        filenameToSet := packageFile.
+                                        (ok := self fileInSourceFile:packageFile lazy:loadLazy silent:beSilent)
+                                        ifFalse:[
+                                            alternativeClassFileName notNil ifTrue:[
+                                                packageFile := self getPackageFileName:(packageDir , '/' , alternativeClassFileName).
+                                                packageFile isNil ifTrue:[
+                                                    packageFile := (packageDir , '/' , alternativeClassFileName).
+                                                ].
+                                                filenameToSet := packageFile.
+                                                ok := self fileInSourceFile:packageFile lazy:loadLazy silent:beSilent
+                                            ].
+                                            ok ifFalse:[
+                                                "
+                                                 ... and in the standard source-directory
+                                                "
+                                                filenameToSet := 'source/' , packageDir , '/' , classFileName.
+                                                (ok := self fileInSourceFile:filenameToSet lazy:loadLazy silent:beSilent)
+                                                ifFalse:[
+                                                    alternativeClassFileName notNil ifTrue:[
+                                                        filenameToSet := 'source/' , packageDir , '/' , alternativeClassFileName.
+                                                        ok := self fileInSourceFile:filenameToSet lazy:loadLazy silent:beSilent
+                                                    ]
+                                                ]
+                                            ]
+                                        ].
+                                    ].
+                                ].
+                            ]
+                        ].
+                        "
+                         if that did not work, and the classes package is known,
+                         look for a zipArchive containing a class entry.
+                        "
+                        ok ifFalse:[
+                            packageDir notNil ifTrue:[
+                                zarFn := self getPackageFileName:(packageDir , '/source.zip').
+                                zarFn isNil ifTrue:[
+                                    zarFn := packageDir asFilename withSuffix:'zip'.
+                                    zarFn := self getSourceFileName:zarFn.
+                                ].
+                                zarFn notNil ifTrue:[
+                                    zar := ZipArchive oldFileNamed:zarFn.
+                                    zar notNil ifTrue:[
+                                        entry := zar extract:(classFileName , '.st').
+                                        (entry isNil and:[alternativeClassFileName notNil]) ifTrue:[
+                                            entry := zar extract:(alternativeClassFileName , '.st').
+                                        ].
+                                        entry notNil ifTrue:[
+                                            filenameToSet := zarFn.
+                                            ok := self
+                                                    fileInStream:(entry asString readStream)
+                                                    lazy:loadLazy
+                                                    silent:beSilent
+                                                    logged:false
+                                                    addPath:nil
+                                        ].
+                                    ]
+                                ]
+                            ]
+                        ].
+
+                        "
+                         if that did not work,
+                         look for a zipArchive containing a class entry.
+                        "
+                        ok ifFalse:[
+                            zarFn := self getSourceFileName:'source.zip'.
+                            zarFn notNil ifTrue:[
+                                zar := ZipArchive oldFileNamed:zarFn.
+                                zar notNil ifTrue:[
+                                    entry := zar extract:(zarFn := classFileName , '.st').
+                                    (entry isNil and:[alternativeClassFileName notNil]) ifTrue:[
+                                        entry := zar extract:(zarFn := alternativeClassFileName , '.st').
+                                    ].
+                                    entry notNil ifTrue:[
+                                        filenameToSet := zarFn.
+                                        ok := self
+                                                fileInStream:(entry asString readStream)
+                                                lazy:loadLazy
+                                                silent:beSilent
+                                                logged:false
+                                                addPath:nil
+                                    ].
+                                ]
+                            ]
+                        ].
+                        ok ifFalse:[
+                            "
+                             if there is a sourceCodeManager, ask it for the classes sourceCode
+                            "
+                            (mgr := Smalltalk at:#SourceCodeManager) notNil ifTrue:[
+                                inStream := mgr getMostRecentSourceStreamForClassNamed:aClassName.
+                                inStream notNil ifTrue:[
+                                    filenameToSet := nil.
+                                    ok := self fileInStream:inStream lazy:loadLazy silent:beSilent logged:false addPath:nil.
+                                ]
+                            ].
+                        ].
+                    ].
+                ]
+            ].
+        ] ensure:[
+            Compiler compileLazy:wasLazy.
+            wasSilent notNil ifTrue:[
+                self silentLoading:wasSilent
+            ]
+        ].
     ].
 
     ok ifTrue:[
-	newClass := self at:(aClassName asSymbol).
-	newClass notNil ifTrue:[
-	    "set the classes name - but do not change if already set"
-	    filenameToSet notNil ifTrue:[
-		newClass getClassFilename isNil ifTrue:[
-		    newClass setClassFilename:(filenameToSet asFilename baseName)
-		].
-	    ].
-
-	    doInit ifTrue:[
-		newClass initialize
-	    ]
-	]
+        newClass := self at:(aClassName asSymbol).
+        newClass notNil ifTrue:[
+            "set the classes name - but do not change if already set"
+            filenameToSet notNil ifTrue:[
+                newClass getClassFilename isNil ifTrue:[
+                    newClass setClassFilename:(filenameToSet asFilename baseName)
+                ].
+            ].
+
+            doInit ifTrue:[
+                newClass initialize
+            ]
+        ]
     ].
 
     ^ newClass
 
-    "Created: / 9.1.1998 / 14:40:32 / cg"
-    "Modified: / 5.6.1999 / 14:53:01 / cg"
+    "Created: / 09-01-1998 / 14:40:32 / cg"
+    "Modified: / 05-06-1999 / 14:53:01 / cg"
+    "Modified: / 16-08-2009 / 14:52:53 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 fileInClassLibrary:aClassLibraryName
@@ -5015,6 +5016,22 @@
     "Modified: 8.1.1997 / 17:58:56 / cg"
 !
 
+fileInSourceFile:filename lazy:loadLazy silent:beSilent
+
+    "Try all available programming languages"
+
+    ProgrammingLanguage allDo:
+        [:lang| | f |
+        f := (filename endsWith: ('.' , lang sourceFileSuffix))
+                    ifTrue:[filename]
+                    ifFalse:[filename , '.' , lang sourceFileSuffix].
+        (self fileIn:f lazy:loadLazy silent:beSilent) 
+                ifTrue:[^true]].
+    ^false
+
+    "Created: / 16-08-2009 / 14:45:41 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
 fileInStream:streamArg
     ^ self fileInStream:streamArg lazy:nil silent:nil logged:false addPath:nil
 !
@@ -5049,7 +5066,10 @@
     ].
     [
         (Class updateChangeFileQuerySignal , Class updateChangeListQuerySignal) answer:logged do:[
-            inStream fileIn.
+            "JV: Changed to give ProgrammingLanguage to choose
+             proper reader"
+            (ProgrammingLanguage forStream: inStream)
+                fileInStream: inStream
         ]
     ] ensure:[
         morePath notNil ifTrue:[
@@ -5074,7 +5094,8 @@
      Smalltalk fileInStream:('source/TicTacToe.st' asFilename readStream) lazy:true silent:true
     "
 
-    "Modified: 5.11.1996 / 20:03:35 / cg"
+    "Modified: / 05-11-1996 / 20:03:35 / cg"
+    "Modified: / 16-08-2009 / 11:06:05 / Jan Vrany <vranyj1@fel.cvut.cz>"
 !
 
 isClassLibraryLoaded:name
@@ -5522,6 +5543,18 @@
     "
 !
 
+getPackageSourceFileName:filenameWithoutSuffix
+    "search aFileName in some standard places and try all available languages"
+
+    ProgrammingLanguage allDo:
+        [:lang| | file |
+        file := self getPackageFileName: filenameWithoutSuffix , '.' , lang sourceFileSuffix.
+        file ifNotNil:[^file]].
+    ^nil
+
+    "Created: / 16-08-2009 / 14:44:58 / Jan Vrany <vranyj1@fel.cvut.cz>"
+!
+
 getResourceFileName:aFileName
     "search aFileName in some standard places
      (subdirectories named 'resources' in SystemPath);
@@ -7155,5 +7188,5 @@
 !Smalltalk class methodsFor:'documentation'!
 
 version
-    ^ '$Id: Smalltalk.st 10448 2009-06-14 16:10:51Z vranyj1 $'
+    ^ '$Id: Smalltalk.st 10465 2009-08-16 17:14:23Z vranyj1 $'
 ! !