Autoload.st
author Claus Gittinger <cg@exept.de>
Wed, 24 Apr 1996 19:55:17 +0200
changeset 1278 7ef5a312d87e
parent 1277 7acd342fb251
child 1292 89497fff7f87
permissions -rw-r--r--
commentary
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     1
"
5
67342904af11 *** empty log message ***
claus
parents: 3
diff changeset
     2
 COPYRIGHT (c) 1991 by Claus Gittinger
154
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
     3
	      All Rights Reserved
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     4
a27a279701f8 Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
a27a279701f8 Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
a27a279701f8 Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
a27a279701f8 Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
a27a279701f8 Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
a27a279701f8 Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
a27a279701f8 Initial revision
claus
parents:
diff changeset
    11
"
a27a279701f8 Initial revision
claus
parents:
diff changeset
    12
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
    13
nil subclass:#Autoload
938
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
    14
	instanceVariableNames:''
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
    15
	classVariableNames:'LazyLoading AutoloadFailedSignal LoadedClasses'
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
    16
	poolDictionaries:''
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
    17
	category:'Kernel-Classes'
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    18
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    19
68
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
    20
!Autoload class methodsFor:'documentation'!
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
    21
88
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    22
copyright
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    23
"
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    24
 COPYRIGHT (c) 1991 by Claus Gittinger
154
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
    25
	      All Rights Reserved
88
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    26
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    27
 This software is furnished under a license and may be used
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    28
 only in accordance with the terms of that license and with the
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    29
 inclusion of the above copyright notice.   This software may not
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    30
 be provided or otherwise made available to, or used by, any
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    31
 other person.  No title to or ownership of the software is
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    32
 hereby transferred.
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    33
"
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    34
!
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    35
68
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
    36
documentation
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
    37
"
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
    38
    In memory limited systems (as my 8Mb 386 is) all seldom-used classes are made
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
    39
    subclasses of this class. Autoload catches all messages and
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
    40
    files-In the corresponding code when first used. Then the cought message
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
    41
    is resent to the (now existing) class.
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
    42
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
    43
    Late addition: above comment is no longer true - I have made now almost
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
    44
    all Demos & Goodies be autoloaded ... even for big systems.
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
    45
1278
7ef5a312d87e commentary
Claus Gittinger <cg@exept.de>
parents: 1277
diff changeset
    46
    [class variables:]
92
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
    47
        
1278
7ef5a312d87e commentary
Claus Gittinger <cg@exept.de>
parents: 1277
diff changeset
    48
        LazyLoading             <Boolean>       if true, the loaded classes 
7ef5a312d87e commentary
Claus Gittinger <cg@exept.de>
parents: 1277
diff changeset
    49
                                                methods will NOT be compiled at 
7ef5a312d87e commentary
Claus Gittinger <cg@exept.de>
parents: 1277
diff changeset
    50
                                                autoload time, but instead when 
7ef5a312d87e commentary
Claus Gittinger <cg@exept.de>
parents: 1277
diff changeset
    51
                                                first called. This allows for a 
7ef5a312d87e commentary
Claus Gittinger <cg@exept.de>
parents: 1277
diff changeset
    52
                                                faster load. However, expect short 
7ef5a312d87e commentary
Claus Gittinger <cg@exept.de>
parents: 1277
diff changeset
    53
                                                pauses later when the methods are
7ef5a312d87e commentary
Claus Gittinger <cg@exept.de>
parents: 1277
diff changeset
    54
                                                first executed.
126
c00c6e25c98c raise a signal on failure
claus
parents: 92
diff changeset
    55
                                     
1278
7ef5a312d87e commentary
Claus Gittinger <cg@exept.de>
parents: 1277
diff changeset
    56
        AutoloadFailedSignal    <Signal>        signal raised if an autoloaded 
7ef5a312d87e commentary
Claus Gittinger <cg@exept.de>
parents: 1277
diff changeset
    57
                                                classes source is not available.
922
0e8e0d920d0d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 921
diff changeset
    58
1278
7ef5a312d87e commentary
Claus Gittinger <cg@exept.de>
parents: 1277
diff changeset
    59
        LoadedClasses           <Collection>    set of classes that heve been
7ef5a312d87e commentary
Claus Gittinger <cg@exept.de>
parents: 1277
diff changeset
    60
                                                autoloaded (for later unload)
68
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
    61
"
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
    62
! !
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
    63
126
c00c6e25c98c raise a signal on failure
claus
parents: 92
diff changeset
    64
!Autoload class methodsFor:'initialization'!
c00c6e25c98c raise a signal on failure
claus
parents: 92
diff changeset
    65
c00c6e25c98c raise a signal on failure
claus
parents: 92
diff changeset
    66
initialize
c00c6e25c98c raise a signal on failure
claus
parents: 92
diff changeset
    67
    AutoloadFailedSignal isNil ifTrue:[
624
f09ad5cf21d4 cannot access Objects classVars directly in nil-subclass
Claus Gittinger <cg@exept.de>
parents: 620
diff changeset
    68
	AutoloadFailedSignal := Object errorSignal newSignalMayProceed:true.
154
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
    69
	AutoloadFailedSignal nameClass:self message:#autoloadFailedSignal.
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
    70
	AutoloadFailedSignal notifierString:'autoload failed '.
197
    71
    72
	self setSuperclass:nil.
    73
	ObjectMemory flushCaches.
126
c00c6e25c98c raise a signal on failure
claus
parents: 92
diff changeset
    74
    ]
c00c6e25c98c raise a signal on failure
claus
parents: 92
diff changeset
    75
! !
c00c6e25c98c raise a signal on failure
claus
parents: 92
diff changeset
    76
345
claus
parents: 328
diff changeset
    77
!Autoload class methodsFor:'Signal constants'!
126
c00c6e25c98c raise a signal on failure
claus
parents: 92
diff changeset
    78
c00c6e25c98c raise a signal on failure
claus
parents: 92
diff changeset
    79
autoloadFailedSignal
c00c6e25c98c raise a signal on failure
claus
parents: 92
diff changeset
    80
    "return the signal raised when an autoload fails"
c00c6e25c98c raise a signal on failure
claus
parents: 92
diff changeset
    81
c00c6e25c98c raise a signal on failure
claus
parents: 92
diff changeset
    82
    ^ AutoloadFailedSignal
c00c6e25c98c raise a signal on failure
claus
parents: 92
diff changeset
    83
! !
c00c6e25c98c raise a signal on failure
claus
parents: 92
diff changeset
    84
359
claus
parents: 356
diff changeset
    85
!Autoload class methodsFor:'adding/removing autoloaded classes'!
claus
parents: 356
diff changeset
    86
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
    87
addClass:aClassName
1277
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
    88
    "given a name, install a corresponding autoload class stub for it"
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
    89
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
    90
    self addClass:aClassName inCategory:'autoloaded-Classes'
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
    91
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
    92
    "
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
    93
     Autoload addClass:'Clock'
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
    94
    "
1277
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
    95
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
    96
    "Modified: 24.4.1996 / 19:54:16 / cg"
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
    97
!
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
    98
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
    99
addClass:aClassName inCategory:aCategory
1277
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   100
    "given a name, install a corresponding autoload class stub for it"
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   101
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   102
    |nameSymbol|
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   103
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   104
    nameSymbol := aClassName asSymbol.
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   105
    (Smalltalk at:nameSymbol) isNil ifTrue:[
1277
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   106
        Autoload subclass:nameSymbol
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   107
             instanceVariableNames:''
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   108
             classVariableNames:''
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   109
             poolDictionaries:''
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   110
             category:aCategory.
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   111
    ]
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   112
    "
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   113
     Autoload addClass:'Clock' inCategory:'autoloaded-Demos'
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   114
    "
1277
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   115
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   116
    "Modified: 24.4.1996 / 19:54:20 / cg"
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   117
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   118
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   119
removeClass:aClass
1277
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   120
    "remove a class from the list of loaded classes"
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   121
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   122
    LoadedClasses remove:aClass ifAbsent:[]
1277
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   123
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   124
    "Modified: 24.4.1996 / 19:54:35 / cg"
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   125
! !
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   126
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   127
!Autoload class methodsFor:'fileout'!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   128
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   129
fileOutDefinitionOn:aStream
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   130
    "print an expression to define myself on aStream.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   131
     Since autoloaded classes dont know their real definition, simply
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   132
     output some comment string making things clear in the browser."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   133
709
c31cbd5e5323 more info for autoloaded classes (for browsers definition text)
Claus Gittinger <cg@exept.de>
parents: 661
diff changeset
   134
    |myName fileName nm mgr classFileName packageDir|
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   135
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   136
    (self == Autoload) ifTrue:[^ super fileOutDefinitionOn:aStream].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   137
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   138
    myName := self name.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   139
    aStream nextPutAll:'"' ; nextPutAll:'Notice from Autoload:'; cr; cr;
739
63566c9b691a oops - after autoloading, the metaClasses soleInstance still pointed to the
Claus Gittinger <cg@exept.de>
parents: 729
diff changeset
   140
	    spaces:4; nextPutAll:myName , ' is not yet loaded.'; cr; cr.
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   141
    aStream nextPutAll:'to load, execute: '.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   142
    aStream cr; cr; spaces:4; nextPutAll:myName  , ' autoload'; cr.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   143
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   144
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   145
     the following is simply informative ...
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   146
     actually, its a hack & kludge - there ought to be a method for this
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   147
     in Smalltalk 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   148
     (knowing the details of loading here is no good coding style)
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   149
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   150
    fileName := Smalltalk fileNameForClass:myName.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   151
    (ObjectFileLoader notNil and:[Smalltalk loadBinaries]) ifTrue:[
739
63566c9b691a oops - after autoloading, the metaClasses soleInstance still pointed to the
Claus Gittinger <cg@exept.de>
parents: 729
diff changeset
   152
	(nm := Smalltalk libraryFileNameOfClass:myName) notNil ifTrue:[
63566c9b691a oops - after autoloading, the metaClasses soleInstance still pointed to the
Claus Gittinger <cg@exept.de>
parents: 729
diff changeset
   153
	    nm := nm , ' (a classLibrary, possibly including more classes)'
63566c9b691a oops - after autoloading, the metaClasses soleInstance still pointed to the
Claus Gittinger <cg@exept.de>
parents: 729
diff changeset
   154
	] ifFalse:[
63566c9b691a oops - after autoloading, the metaClasses soleInstance still pointed to the
Claus Gittinger <cg@exept.de>
parents: 729
diff changeset
   155
	    nm := Smalltalk getBinaryFileName:(fileName , '.so').
63566c9b691a oops - after autoloading, the metaClasses soleInstance still pointed to the
Claus Gittinger <cg@exept.de>
parents: 729
diff changeset
   156
	    nm isNil ifTrue:[
63566c9b691a oops - after autoloading, the metaClasses soleInstance still pointed to the
Claus Gittinger <cg@exept.de>
parents: 729
diff changeset
   157
		nm := Smalltalk getBinaryFileName:(fileName , '.o')
63566c9b691a oops - after autoloading, the metaClasses soleInstance still pointed to the
Claus Gittinger <cg@exept.de>
parents: 729
diff changeset
   158
	    ].
63566c9b691a oops - after autoloading, the metaClasses soleInstance still pointed to the
Claus Gittinger <cg@exept.de>
parents: 729
diff changeset
   159
	    nm notNil ifTrue:[
63566c9b691a oops - after autoloading, the metaClasses soleInstance still pointed to the
Claus Gittinger <cg@exept.de>
parents: 729
diff changeset
   160
		nm := nm , ' (a classBinary)'
63566c9b691a oops - after autoloading, the metaClasses soleInstance still pointed to the
Claus Gittinger <cg@exept.de>
parents: 729
diff changeset
   161
	    ]
63566c9b691a oops - after autoloading, the metaClasses soleInstance still pointed to the
Claus Gittinger <cg@exept.de>
parents: 729
diff changeset
   162
	].
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   163
    ].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   164
    nm isNil ifTrue:[
739
63566c9b691a oops - after autoloading, the metaClasses soleInstance still pointed to the
Claus Gittinger <cg@exept.de>
parents: 729
diff changeset
   165
	nm := Smalltalk getFileInFileName:(fileName , '.st').
63566c9b691a oops - after autoloading, the metaClasses soleInstance still pointed to the
Claus Gittinger <cg@exept.de>
parents: 729
diff changeset
   166
	nm isNil ifTrue:[
63566c9b691a oops - after autoloading, the metaClasses soleInstance still pointed to the
Claus Gittinger <cg@exept.de>
parents: 729
diff changeset
   167
	    nm := Smalltalk getSourceFileName:(fileName , '.st').
63566c9b691a oops - after autoloading, the metaClasses soleInstance still pointed to the
Claus Gittinger <cg@exept.de>
parents: 729
diff changeset
   168
	].
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   169
    ].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   170
    nm notNil ifTrue:[
739
63566c9b691a oops - after autoloading, the metaClasses soleInstance still pointed to the
Claus Gittinger <cg@exept.de>
parents: 729
diff changeset
   171
	aStream cr; nextPutAll:'When accessed, ' , myName , ' will automatically be loaded'; cr.
63566c9b691a oops - after autoloading, the metaClasses soleInstance still pointed to the
Claus Gittinger <cg@exept.de>
parents: 729
diff changeset
   172
	aStream nextPutAll:'from: '; cr; spaces:4; nextPutAll:nm.
63566c9b691a oops - after autoloading, the metaClasses soleInstance still pointed to the
Claus Gittinger <cg@exept.de>
parents: 729
diff changeset
   173
	nm asFilename isSymbolicLink ifTrue:[
63566c9b691a oops - after autoloading, the metaClasses soleInstance still pointed to the
Claus Gittinger <cg@exept.de>
parents: 729
diff changeset
   174
	    aStream cr; cr.
63566c9b691a oops - after autoloading, the metaClasses soleInstance still pointed to the
Claus Gittinger <cg@exept.de>
parents: 729
diff changeset
   175
	    aStream nextPutAll:'which is a link to: '; cr; spaces:4; 
63566c9b691a oops - after autoloading, the metaClasses soleInstance still pointed to the
Claus Gittinger <cg@exept.de>
parents: 729
diff changeset
   176
		    nextPutAll:(nm asFilename linkInfo at:#path).
63566c9b691a oops - after autoloading, the metaClasses soleInstance still pointed to the
Claus Gittinger <cg@exept.de>
parents: 729
diff changeset
   177
	]
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   178
    ] ifFalse:[
739
63566c9b691a oops - after autoloading, the metaClasses soleInstance still pointed to the
Claus Gittinger <cg@exept.de>
parents: 729
diff changeset
   179
	aStream cr; nextPutAll:'There is currently no file to load ' , myName , ' from.'; cr; cr.
709
c31cbd5e5323 more info for autoloaded classes (for browsers definition text)
Claus Gittinger <cg@exept.de>
parents: 661
diff changeset
   180
739
63566c9b691a oops - after autoloading, the metaClasses soleInstance still pointed to the
Claus Gittinger <cg@exept.de>
parents: 729
diff changeset
   181
	(mgr := Smalltalk at:#SourceCodeManager) notNil ifTrue:[
63566c9b691a oops - after autoloading, the metaClasses soleInstance still pointed to the
Claus Gittinger <cg@exept.de>
parents: 729
diff changeset
   182
	    classFileName := Smalltalk fileNameForClass:myName.
63566c9b691a oops - after autoloading, the metaClasses soleInstance still pointed to the
Claus Gittinger <cg@exept.de>
parents: 729
diff changeset
   183
	    packageDir := Smalltalk sourceDirectoryNameOfClass:myName.
63566c9b691a oops - after autoloading, the metaClasses soleInstance still pointed to the
Claus Gittinger <cg@exept.de>
parents: 729
diff changeset
   184
	].
63566c9b691a oops - after autoloading, the metaClasses soleInstance still pointed to the
Claus Gittinger <cg@exept.de>
parents: 729
diff changeset
   185
	(classFileName notNil and:[packageDir notNil]) ifTrue:[
63566c9b691a oops - after autoloading, the metaClasses soleInstance still pointed to the
Claus Gittinger <cg@exept.de>
parents: 729
diff changeset
   186
	    aStream nextPutAll:'When accessed, I''ll ask the sourceCodeManager to load the code 
709
c31cbd5e5323 more info for autoloaded classes (for browsers definition text)
Claus Gittinger <cg@exept.de>
parents: 661
diff changeset
   187
from "' , classFileName , '.st" in the "' , packageDir , '" package.'.
739
63566c9b691a oops - after autoloading, the metaClasses soleInstance still pointed to the
Claus Gittinger <cg@exept.de>
parents: 729
diff changeset
   188
	] ifFalse:[
63566c9b691a oops - after autoloading, the metaClasses soleInstance still pointed to the
Claus Gittinger <cg@exept.de>
parents: 729
diff changeset
   189
	    aStream nextPutAll:'When accessed, an error will be reported.'.
63566c9b691a oops - after autoloading, the metaClasses soleInstance still pointed to the
Claus Gittinger <cg@exept.de>
parents: 729
diff changeset
   190
	]
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   191
    ].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   192
    aStream cr; nextPutAll:'"'.
709
c31cbd5e5323 more info for autoloaded classes (for browsers definition text)
Claus Gittinger <cg@exept.de>
parents: 661
diff changeset
   193
c31cbd5e5323 more info for autoloaded classes (for browsers definition text)
Claus Gittinger <cg@exept.de>
parents: 661
diff changeset
   194
    "Created: 8.12.1995 / 00:31:53 / cg"
727
475d224376d3 careful with empty source info in descriptive message
Claus Gittinger <cg@exept.de>
parents: 709
diff changeset
   195
    "Modified: 9.12.1995 / 22:31:02 / cg"
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   196
! !
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   197
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   198
!Autoload class methodsFor:'lazy compilation'!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   199
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   200
compileLazy
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   201
    "return the lazy loading flag - if on, fileIn is much faster,
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   202
     but pauses are to be expected later, since methods are compiled
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   203
     when first executed."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   204
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   205
    ^ LazyLoading
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   206
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   207
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   208
compileLazy:aBoolean
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   209
    "turn on/off lazy loading - if on, fileIn is much faster,
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   210
     but pauses are to be expected later, since methods are compiled
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   211
     when first executed.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   212
     If you like it, add a line to your startup file."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   213
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   214
    LazyLoading := aBoolean
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   215
! !
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   216
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   217
!Autoload class methodsFor:'loading'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   218
a27a279701f8 Initial revision
claus
parents:
diff changeset
   219
autoload
a27a279701f8 Initial revision
claus
parents:
diff changeset
   220
    "use this to force loading
a27a279701f8 Initial revision
claus
parents:
diff changeset
   221
     - it is defined a noop in all non-autoloading clases"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   222
938
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   223
    |mySelf myName newClass oldMeta project|
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   224
a27a279701f8 Initial revision
claus
parents:
diff changeset
   225
    mySelf := self.
164
9bad8fe706e9 *** empty log message ***
claus
parents: 154
diff changeset
   226
    myName := self name asSymbol.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   227
a27a279701f8 Initial revision
claus
parents:
diff changeset
   228
    "remove myself - to avoid recompilation"
164
9bad8fe706e9 *** empty log message ***
claus
parents: 154
diff changeset
   229
    Smalltalk at:myName put:nil.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   230
2
claus
parents: 1
diff changeset
   231
    "load it"
68
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
   232
    Transcript showCr:('autoloading ', myName , ' ...'); endEntry.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   233
860
b3ffea40999a use new becomeSameAs: to migrate to new class.
Claus Gittinger <cg@exept.de>
parents: 789
diff changeset
   234
    [
938
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   235
        "/
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   236
        "/ in order to not get a package of private (or whatever),
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   237
        "/ temporarily set the currentProject to nil.
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   238
        "/ we will later set the classes package to something useful
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   239
        "/
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   240
        Project notNil ifTrue:[
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   241
            project := Project current.
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   242
            Project setProject:nil.
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   243
        ].
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   244
        Smalltalk fileInClass:myName initialize:false lazy:LazyLoading.
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   245
        project notNil ifTrue:[
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   246
            Project setProject:project.
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   247
        ].
860
b3ffea40999a use new becomeSameAs: to migrate to new class.
Claus Gittinger <cg@exept.de>
parents: 789
diff changeset
   248
    ] valueOnUnwindDo:[
938
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   249
        project notNil ifTrue:[
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   250
            Project setProject:project.
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   251
        ].
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   252
        Smalltalk at:myName put:mySelf.
860
b3ffea40999a use new becomeSameAs: to migrate to new class.
Claus Gittinger <cg@exept.de>
parents: 789
diff changeset
   253
    ].
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   254
a27a279701f8 Initial revision
claus
parents:
diff changeset
   255
    "did it work ?"
164
9bad8fe706e9 *** empty log message ***
claus
parents: 154
diff changeset
   256
    newClass := Smalltalk at:myName.
9bad8fe706e9 *** empty log message ***
claus
parents: 154
diff changeset
   257
    Smalltalk at:myName put:mySelf.   "will be undone by become:"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   258
138
c9f46b635f98 *** empty log message ***
claus
parents: 126
diff changeset
   259
    "no - report the error"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   260
    newClass isNil ifTrue:[
938
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   261
        "
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   262
         this signal is raised, if an autoloaded class
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   263
         cannot be loaded. Usually, this happends when
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   264
         some sourcefile is missing, not readable or if 
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   265
         an entry is missing in the abbreviation file.
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   266
         Check for a readable file named <myName>.st 
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   267
         in the 'source' directory and (if its a long fileName) 
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   268
         for a corresponding entry in the abbreviation file
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   269
         'include/abbrev.stc'.
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   270
         Finally, your searchpath could be set wrong -
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   271
         both 'source' and 'include' directories must be found in
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   272
         one of the directories named in systemPath.
154
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
   273
938
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   274
         In the debugger, press 'abort' to continue execution.
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   275
        " 
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   276
        AutoloadFailedSignal
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   277
            raiseRequestWith:self
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   278
            errorString:('autoload of ' , myName , ' failed').
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   279
        ^ nil
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   280
    ].
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   281
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   282
    "/
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   283
    "/ autoloaded classes get their package from the revision (if present)
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   284
    "/ this only happens with autoloaded sourceFiles which have no package
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   285
    "/ info encoded. (binary classes have it)
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   286
    "/
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   287
    newClass package isNil ifTrue:[
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   288
        newClass setPackageFromRevision.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   289
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   290
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   291
    LoadedClasses isNil ifTrue:[
938
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   292
        LoadedClasses := IdentitySet new.
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   293
    ].
921
4db7603f9506 rename myself (just in case) & flush caches after loading
Claus Gittinger <cg@exept.de>
parents: 886
diff changeset
   294
    LoadedClasses add:newClass.
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   295
154
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
   296
    "wow - it worked. now the big trick ..."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   297
921
4db7603f9506 rename myself (just in case) & flush caches after loading
Claus Gittinger <cg@exept.de>
parents: 886
diff changeset
   298
"/    newClass class setSoleInstance:self.   "/ will be undone by become ...
4db7603f9506 rename myself (just in case) & flush caches after loading
Claus Gittinger <cg@exept.de>
parents: 886
diff changeset
   299
    oldMeta := self class.
4db7603f9506 rename myself (just in case) & flush caches after loading
Claus Gittinger <cg@exept.de>
parents: 886
diff changeset
   300
4db7603f9506 rename myself (just in case) & flush caches after loading
Claus Gittinger <cg@exept.de>
parents: 886
diff changeset
   301
self setName:(self name , ' (auto)').
4db7603f9506 rename myself (just in case) & flush caches after loading
Claus Gittinger <cg@exept.de>
parents: 886
diff changeset
   302
self class setName:(self class name , ' (auto)').
4db7603f9506 rename myself (just in case) & flush caches after loading
Claus Gittinger <cg@exept.de>
parents: 886
diff changeset
   303
860
b3ffea40999a use new becomeSameAs: to migrate to new class.
Claus Gittinger <cg@exept.de>
parents: 789
diff changeset
   304
    self becomeSameAs:newClass.
921
4db7603f9506 rename myself (just in case) & flush caches after loading
Claus Gittinger <cg@exept.de>
parents: 886
diff changeset
   305
    oldMeta becomeSameAs:newClass class.
4db7603f9506 rename myself (just in case) & flush caches after loading
Claus Gittinger <cg@exept.de>
parents: 886
diff changeset
   306
4db7603f9506 rename myself (just in case) & flush caches after loading
Claus Gittinger <cg@exept.de>
parents: 886
diff changeset
   307
    ObjectMemory flushCaches.
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   308
    LoadedClasses rehash.
921
4db7603f9506 rename myself (just in case) & flush caches after loading
Claus Gittinger <cg@exept.de>
parents: 886
diff changeset
   309
1148
9f69b4df970b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 938
diff changeset
   310
    (newClass class implements:#initialize) ifTrue:[
9f69b4df970b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 938
diff changeset
   311
        newClass initialize.
9f69b4df970b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 938
diff changeset
   312
    ].
886
62c66d49077d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 860
diff changeset
   313
    newClass postAutoload.
62c66d49077d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 860
diff changeset
   314
    ^ newClass
938
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   315
1148
9f69b4df970b checkin from browser
Claus Gittinger <cg@exept.de>
parents: 938
diff changeset
   316
    "Modified: 10.4.1996 / 08:52:47 / cg"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   317
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   318
a27a279701f8 Initial revision
claus
parents:
diff changeset
   319
!Autoload class methodsFor:'message catching'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   320
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   321
basicNew
1277
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   322
    "catch basicNew - load the class and send it to the real one"
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   323
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   324
    ^ self doesNotUnderstand:(Message selector:#basicNew)
1277
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   325
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   326
    "Modified: 24.4.1996 / 19:53:10 / cg"
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   327
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   328
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   329
basicNew:arg
1277
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   330
    "catch basicNew: - load the class and send it to the real one"
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   331
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   332
    ^ self doesNotUnderstand:(Message selector:#basicNew: with:arg)
1277
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   333
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   334
    "Modified: 24.4.1996 / 19:53:16 / cg"
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   335
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   336
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   337
comment
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   338
    "return the classes comment.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   339
     Autoloaded classes have no comment; but I myself have one"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   340
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   341
    (self == Autoload) ifTrue:[^ super comment].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   342
    ^ 'not yet loaded'
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   343
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   344
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   345
doesNotUnderstand:aMessage
1277
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   346
    "cought a message; load the class and retry the message"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   347
a27a279701f8 Initial revision
claus
parents:
diff changeset
   348
    |newClass|
a27a279701f8 Initial revision
claus
parents:
diff changeset
   349
164
9bad8fe706e9 *** empty log message ***
claus
parents: 154
diff changeset
   350
    self ~~ Autoload ifTrue:[
1277
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   351
        newClass := self autoload.
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   352
        newClass notNil ifTrue:[
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   353
            ^ newClass perform:(aMessage selector)
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   354
                 withArguments:(aMessage arguments)
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   355
        ]
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   356
    ].
789
155eca125ef0 return value from doesNotUnderstand (so handler can return a value)
Claus Gittinger <cg@exept.de>
parents: 739
diff changeset
   357
    ^ super doesNotUnderstand:aMessage
1277
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   358
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   359
    "Modified: 24.4.1996 / 19:53:27 / cg"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   360
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   361
a27a279701f8 Initial revision
claus
parents:
diff changeset
   362
new
1277
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   363
    "catch new - load the class and send it to the real one"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   364
a27a279701f8 Initial revision
claus
parents:
diff changeset
   365
    ^ self doesNotUnderstand:(Message selector:#new)
1277
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   366
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   367
    "Modified: 24.4.1996 / 19:53:30 / cg"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   368
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   369
a27a279701f8 Initial revision
claus
parents:
diff changeset
   370
new:arg
1277
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   371
    "catch new: - load the class and send it to the real one"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   372
a27a279701f8 Initial revision
claus
parents:
diff changeset
   373
    ^ self doesNotUnderstand:(Message selector:#new: with:arg)
1277
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   374
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   375
    "Modified: 24.4.1996 / 19:53:32 / cg"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   376
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   377
a27a279701f8 Initial revision
claus
parents:
diff changeset
   378
subclass:a1 instanceVariableNames:a2 classVariableNames:a3 poolDictionaries:a4 category:a5
2
claus
parents: 1
diff changeset
   379
    "catch subclass creation - this forces missing superclasses to be 
claus
parents: 1
diff changeset
   380
     loaded first"
claus
parents: 1
diff changeset
   381
68
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
   382
    |newClass sel args|
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   383
2
claus
parents: 1
diff changeset
   384
    "take care: subclassing Autoload must still be possible"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   385
    (self == Autoload) ifTrue:[
154
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
   386
	^ super 
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
   387
	    subclass:a1 
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
   388
	    instanceVariableNames:a2
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
   389
	    classVariableNames:a3
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
   390
	    poolDictionaries:a4
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
   391
	    category:a5
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   392
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   393
    newClass := self autoload.
68
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
   394
    sel := thisContext selector.
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
   395
    args := thisContext args.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   396
    newClass notNil ifTrue:[
154
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
   397
	^ newClass perform:sel withArguments:args
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   398
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   399
    ^ nil
a27a279701f8 Initial revision
claus
parents:
diff changeset
   400
! !
11
6bf3080856be *** empty log message ***
claus
parents: 5
diff changeset
   401
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   402
!Autoload class methodsFor:'queries'!
356
claus
parents: 345
diff changeset
   403
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   404
isBehavior
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   405
    "return true if the recevier is some kind of class.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   406
     Autoloaded classes are definitely; therefore return true."
164
9bad8fe706e9 *** empty log message ***
claus
parents: 154
diff changeset
   407
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   408
    ^ true
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   409
!
356
claus
parents: 345
diff changeset
   410
729
67a60a088d56 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 727
diff changeset
   411
isBuiltInClass
1266
cef9b3cd49df commentary
Claus Gittinger <cg@exept.de>
parents: 1148
diff changeset
   412
    "return true if this class is known by the run-time-system.
cef9b3cd49df commentary
Claus Gittinger <cg@exept.de>
parents: 1148
diff changeset
   413
     Returns false here."
cef9b3cd49df commentary
Claus Gittinger <cg@exept.de>
parents: 1148
diff changeset
   414
729
67a60a088d56 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 727
diff changeset
   415
    ^ false
67a60a088d56 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 727
diff changeset
   416
67a60a088d56 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 727
diff changeset
   417
    "Created: 10.12.1995 / 00:28:22 / cg"
1266
cef9b3cd49df commentary
Claus Gittinger <cg@exept.de>
parents: 1148
diff changeset
   418
    "Modified: 23.4.1996 / 15:55:36 / cg"
729
67a60a088d56 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 727
diff changeset
   419
!
67a60a088d56 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 727
diff changeset
   420
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   421
isLoaded
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   422
    "return true, if the class has been loaded; redefined in Autoload;
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   423
     see comment there. this allows testing for a class been already loaded."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   424
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   425
    ^ (self == Autoload)
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   426
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   427
922
0e8e0d920d0d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 921
diff changeset
   428
loadedClasses
0e8e0d920d0d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 921
diff changeset
   429
    "return the set of classes that were autoloaded"
0e8e0d920d0d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 921
diff changeset
   430
0e8e0d920d0d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 921
diff changeset
   431
    ^ LoadedClasses
0e8e0d920d0d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 921
diff changeset
   432
!
0e8e0d920d0d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 921
diff changeset
   433
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   434
wasAutoloaded:aClass
922
0e8e0d920d0d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 921
diff changeset
   435
    "return true, if aClass was autoloaded"
0e8e0d920d0d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 921
diff changeset
   436
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   437
    ^ LoadedClasses notNil and:[LoadedClasses includes:aClass]
11
6bf3080856be *** empty log message ***
claus
parents: 5
diff changeset
   438
! !
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   439
661
7e1c7358c980 version method at the end
Claus Gittinger <cg@exept.de>
parents: 624
diff changeset
   440
!Autoload class methodsFor:'documentation'!
7e1c7358c980 version method at the end
Claus Gittinger <cg@exept.de>
parents: 624
diff changeset
   441
7e1c7358c980 version method at the end
Claus Gittinger <cg@exept.de>
parents: 624
diff changeset
   442
version
1278
7ef5a312d87e commentary
Claus Gittinger <cg@exept.de>
parents: 1277
diff changeset
   443
    ^ '$Header: /cvs/stx/stx/libbasic/Autoload.st,v 1.46 1996-04-24 17:55:17 cg Exp $'
661
7e1c7358c980 version method at the end
Claus Gittinger <cg@exept.de>
parents: 624
diff changeset
   444
! !
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   445
Autoload initialize!