Autoload.st
author claus
Wed, 15 Feb 1995 12:29:34 +0100
changeset 254 d31147d53ff7
parent 216 a8abff749575
child 302 1f76060d58a4
permissions -rw-r--r--
*** empty log message ***
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
a27a279701f8 Initial revision
claus
parents:
diff changeset
    13
Object subclass:#Autoload
a27a279701f8 Initial revision
claus
parents:
diff changeset
    14
       instanceVariableNames:''
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
    15
       classVariableNames:'LazyLoading AutoloadFailedSignal LoadedClasses'
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    16
       poolDictionaries:''
a27a279701f8 Initial revision
claus
parents:
diff changeset
    17
       category:'Kernel-Classes'
a27a279701f8 Initial revision
claus
parents:
diff changeset
    18
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    19
a27a279701f8 Initial revision
claus
parents:
diff changeset
    20
Autoload comment:'
5
67342904af11 *** empty log message ***
claus
parents: 3
diff changeset
    21
COPYRIGHT (c) 1991 by Claus Gittinger
154
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
    22
	      All Rights Reserved
92
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
    23
254
d31147d53ff7 *** empty log message ***
claus
parents: 216
diff changeset
    24
$Header: /cvs/stx/stx/libbasic/Autoload.st,v 1.17 1995-02-15 11:29:30 claus Exp $
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    25
'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    26
68
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
    27
!Autoload class methodsFor:'documentation'!
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
    28
88
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    29
copyright
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    30
"
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    31
 COPYRIGHT (c) 1991 by Claus Gittinger
154
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
    32
	      All Rights Reserved
88
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    33
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    34
 This software is furnished under a license and may be used
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    35
 only in accordance with the terms of that license and with the
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    36
 inclusion of the above copyright notice.   This software may not
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    37
 be provided or otherwise made available to, or used by, any
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    38
 other person.  No title to or ownership of the software is
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    39
 hereby transferred.
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    40
"
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    41
! 
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    42
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    43
version
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    44
"
254
d31147d53ff7 *** empty log message ***
claus
parents: 216
diff changeset
    45
$Header: /cvs/stx/stx/libbasic/Autoload.st,v 1.17 1995-02-15 11:29:30 claus Exp $
88
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    46
"
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    47
!
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    48
68
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
    49
documentation
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
    50
"
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
    51
    In memory limited systems (as my 8Mb 386 is) all seldom-used classes are made
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
    52
    subclasses of this class. Autoload catches all messages and
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
    53
    files-In the corresponding code when first used. Then the cought message
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
    54
    is resent to the (now existing) class.
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
    55
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
    56
    Late addition: above comment is no longer true - I have made now almost
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
    57
    all Demos & Goodies be autoloaded ... even for big systems.
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
    58
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
    59
    class variables:
92
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
    60
        
154
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
    61
	LazyLoading             <Boolean>       if true, the loaded classes 
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
    62
						methods will NOT be compiled at 
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
    63
						autoload time, but instead when 
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
    64
						first called. This allows for a 
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
    65
						faster load. However, expect short 
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
    66
						pauses later when the methods are
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
    67
						first executed.
126
c00c6e25c98c raise a signal on failure
claus
parents: 92
diff changeset
    68
                                     
154
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
    69
	AutoloadFailedSignal    <Signal>        signal raised if an autoloaded 
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
    70
						classes source is not available.
68
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
    71
"
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
    72
! !
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
    73
126
c00c6e25c98c raise a signal on failure
claus
parents: 92
diff changeset
    74
!Autoload class methodsFor:'initialization'!
c00c6e25c98c raise a signal on failure
claus
parents: 92
diff changeset
    75
c00c6e25c98c raise a signal on failure
claus
parents: 92
diff changeset
    76
initialize
c00c6e25c98c raise a signal on failure
claus
parents: 92
diff changeset
    77
    AutoloadFailedSignal isNil ifTrue:[
154
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
    78
	Object initialize.
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
    79
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
    80
	AutoloadFailedSignal := Object errorSignal newSignalMayProceed:true.
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
    81
	AutoloadFailedSignal nameClass:self message:#autoloadFailedSignal.
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
    82
	AutoloadFailedSignal notifierString:'autoload failed '.
197
    83
    84
	self setSuperclass:nil.
    85
	ObjectMemory flushCaches.
126
c00c6e25c98c raise a signal on failure
claus
parents: 92
diff changeset
    86
    ]
c00c6e25c98c raise a signal on failure
claus
parents: 92
diff changeset
    87
! !
c00c6e25c98c raise a signal on failure
claus
parents: 92
diff changeset
    88
c00c6e25c98c raise a signal on failure
claus
parents: 92
diff changeset
    89
!Autoload class methodsFor:'signal access'!
c00c6e25c98c raise a signal on failure
claus
parents: 92
diff changeset
    90
c00c6e25c98c raise a signal on failure
claus
parents: 92
diff changeset
    91
autoloadFailedSignal
c00c6e25c98c raise a signal on failure
claus
parents: 92
diff changeset
    92
    "return the signal raised when an autoload fails"
c00c6e25c98c raise a signal on failure
claus
parents: 92
diff changeset
    93
c00c6e25c98c raise a signal on failure
claus
parents: 92
diff changeset
    94
    ^ AutoloadFailedSignal
c00c6e25c98c raise a signal on failure
claus
parents: 92
diff changeset
    95
! !
c00c6e25c98c raise a signal on failure
claus
parents: 92
diff changeset
    96
2
claus
parents: 1
diff changeset
    97
!Autoload class methodsFor:'queries'!
claus
parents: 1
diff changeset
    98
claus
parents: 1
diff changeset
    99
isLoaded
claus
parents: 1
diff changeset
   100
    "return true, if the class has been loaded; redefined in Autoload;
claus
parents: 1
diff changeset
   101
     see comment there. this allows testing for a class been already loaded."
claus
parents: 1
diff changeset
   102
164
9bad8fe706e9 *** empty log message ***
claus
parents: 154
diff changeset
   103
    ^ (self == Autoload)
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   104
!
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   105
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   106
wasAutoloaded:aClass
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   107
    ^ LoadedClasses notNil and:[LoadedClasses includes:aClass]
2
claus
parents: 1
diff changeset
   108
! !
claus
parents: 1
diff changeset
   109
68
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
   110
!Autoload class methodsFor:'lazy compilation'!
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
   111
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
   112
compileLazy:aBoolean
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
   113
    "turn on/off lazy loading - if on, fileIn is much faster,
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
   114
     but pauses are to be expected later.
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
   115
     If you like it, add a line to your startup file."
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
   116
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
   117
    LazyLoading := aBoolean
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
   118
! !
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
   119
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   120
!Autoload class methodsFor:'adding autoloaded classes'!
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   121
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   122
addClass:aClassName
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   123
    self addClass:aClassName inCategory:'autoloaded-Classes'
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   124
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   125
    "
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   126
     Autoload addClass:'Clock'
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   127
    "
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   128
!
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   129
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   130
addClass:aClassName inCategory:aCategory
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   131
    |nameSymbol|
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   132
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   133
    nameSymbol := aClassName asSymbol.
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   134
    (Smalltalk at:nameSymbol) isNil ifTrue:[
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   135
	Autoload subclass:nameSymbol
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   136
	     instanceVariableNames:''
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   137
	     classVariableNames:''
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   138
	     poolDictionaries:''
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   139
	     category:aCategory.
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   140
    ]
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   141
    "
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   142
     Autoload addClass:'Clock' inCategory:'autoloaded-Demos'
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   143
    "
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   144
! !
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   145
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   146
!Autoload class methodsFor:'loading'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   147
a27a279701f8 Initial revision
claus
parents:
diff changeset
   148
autoload
a27a279701f8 Initial revision
claus
parents:
diff changeset
   149
    "use this to force loading
a27a279701f8 Initial revision
claus
parents:
diff changeset
   150
     - it is defined a noop in all non-autoloading clases"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   151
254
d31147d53ff7 *** empty log message ***
claus
parents: 216
diff changeset
   152
    |mySelf myName newClass|
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   153
a27a279701f8 Initial revision
claus
parents:
diff changeset
   154
    mySelf := self.
164
9bad8fe706e9 *** empty log message ***
claus
parents: 154
diff changeset
   155
    myName := self name asSymbol.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   156
a27a279701f8 Initial revision
claus
parents:
diff changeset
   157
    "remove myself - to avoid recompilation"
164
9bad8fe706e9 *** empty log message ***
claus
parents: 154
diff changeset
   158
    Smalltalk at:myName put:nil.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   159
2
claus
parents: 1
diff changeset
   160
    "load it"
68
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
   161
    Transcript showCr:('autoloading ', myName , ' ...'); endEntry.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   162
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   163
    Smalltalk fileInClass:myName initialize:false lazy:LazyLoading.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   164
a27a279701f8 Initial revision
claus
parents:
diff changeset
   165
    "did it work ?"
164
9bad8fe706e9 *** empty log message ***
claus
parents: 154
diff changeset
   166
    newClass := Smalltalk at:myName.
9bad8fe706e9 *** empty log message ***
claus
parents: 154
diff changeset
   167
    Smalltalk at:myName put:mySelf.   "will be undone by become:"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   168
138
c9f46b635f98 *** empty log message ***
claus
parents: 126
diff changeset
   169
    "no - report the error"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   170
    newClass isNil ifTrue:[
138
c9f46b635f98 *** empty log message ***
claus
parents: 126
diff changeset
   171
	"
c9f46b635f98 *** empty log message ***
claus
parents: 126
diff changeset
   172
	 this signal is raised, if an autoloaded class
c9f46b635f98 *** empty log message ***
claus
parents: 126
diff changeset
   173
	 cannot be loaded. Usually, this happends when
154
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
   174
	 some sourcefile is missing, not readable or if 
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
   175
	 an entry is missing in the abbreviation file.
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
   176
	 Check for a readable file named <myName>.st 
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
   177
	 in the 'source' directory and (if its a long fileName) 
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
   178
	 for a corresponding entry in the abbreviation file
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
   179
	 'include/abbrev.stc'.
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
   180
	 Finally, your searchpath could be set wrong -
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
   181
	 both 'source' and 'include' directories must be found in
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
   182
	 one of the directories named in systemPath.
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
   183
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
   184
	 In the debugger, press 'abort' to continue execution.
138
c9f46b635f98 *** empty log message ***
claus
parents: 126
diff changeset
   185
	" 
154
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
   186
	AutoloadFailedSignal
126
c00c6e25c98c raise a signal on failure
claus
parents: 92
diff changeset
   187
	    raiseRequestWith:self
154
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
   188
	    errorString:('autoload of ' , myName , ' failed').
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
   189
	^ nil
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   190
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   191
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   192
    LoadedClasses isNil ifTrue:[
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   193
	LoadedClasses := IdentitySet new.
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   194
    ].
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   195
    LoadedClasses add:self.
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   196
154
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
   197
    "wow - it worked. now the big trick ..."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   198
a27a279701f8 Initial revision
claus
parents:
diff changeset
   199
    self become:newClass.
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   200
    LoadedClasses rehash.
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   201
    self initialize.  "/ thats the new class now
154
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
   202
    ^ self  "this is now the new class - see what doesNotUnderstand: does with it"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   203
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   204
a27a279701f8 Initial revision
claus
parents:
diff changeset
   205
!Autoload class methodsFor:'message catching'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   206
a27a279701f8 Initial revision
claus
parents:
diff changeset
   207
doesNotUnderstand:aMessage
a27a279701f8 Initial revision
claus
parents:
diff changeset
   208
    "cought a message; load class and retry"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   209
a27a279701f8 Initial revision
claus
parents:
diff changeset
   210
    |newClass|
a27a279701f8 Initial revision
claus
parents:
diff changeset
   211
164
9bad8fe706e9 *** empty log message ***
claus
parents: 154
diff changeset
   212
    self ~~ Autoload ifTrue:[
9bad8fe706e9 *** empty log message ***
claus
parents: 154
diff changeset
   213
	newClass := self autoload.
9bad8fe706e9 *** empty log message ***
claus
parents: 154
diff changeset
   214
	newClass notNil ifTrue:[
9bad8fe706e9 *** empty log message ***
claus
parents: 154
diff changeset
   215
	    ^ newClass perform:(aMessage selector)
9bad8fe706e9 *** empty log message ***
claus
parents: 154
diff changeset
   216
		 withArguments:(aMessage arguments)
9bad8fe706e9 *** empty log message ***
claus
parents: 154
diff changeset
   217
	]
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   218
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   219
    super doesNotUnderstand:aMessage
a27a279701f8 Initial revision
claus
parents:
diff changeset
   220
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   221
a27a279701f8 Initial revision
claus
parents:
diff changeset
   222
new
a27a279701f8 Initial revision
claus
parents:
diff changeset
   223
    "catch new"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   224
a27a279701f8 Initial revision
claus
parents:
diff changeset
   225
    ^ self doesNotUnderstand:(Message selector:#new)
a27a279701f8 Initial revision
claus
parents:
diff changeset
   226
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   227
a27a279701f8 Initial revision
claus
parents:
diff changeset
   228
basicNew
a27a279701f8 Initial revision
claus
parents:
diff changeset
   229
    "catch basicNew"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   230
213
3b56a17534fd *** empty log message ***
claus
parents: 197
diff changeset
   231
    ^ self doesNotUnderstand:(Message selector:#basicNew)
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   232
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   233
a27a279701f8 Initial revision
claus
parents:
diff changeset
   234
new:arg
a27a279701f8 Initial revision
claus
parents:
diff changeset
   235
    "catch new:"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   236
a27a279701f8 Initial revision
claus
parents:
diff changeset
   237
    ^ self doesNotUnderstand:(Message selector:#new: with:arg)
a27a279701f8 Initial revision
claus
parents:
diff changeset
   238
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   239
a27a279701f8 Initial revision
claus
parents:
diff changeset
   240
basicNew:arg
a27a279701f8 Initial revision
claus
parents:
diff changeset
   241
    "catch basicNew:"
a27a279701f8 Initial revision
claus
parents:
diff changeset
   242
a27a279701f8 Initial revision
claus
parents:
diff changeset
   243
    ^ self doesNotUnderstand:(Message selector:#basicNew: with:arg)
a27a279701f8 Initial revision
claus
parents:
diff changeset
   244
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   245
a27a279701f8 Initial revision
claus
parents:
diff changeset
   246
subclass:a1 instanceVariableNames:a2 classVariableNames:a3 poolDictionaries:a4 category:a5
2
claus
parents: 1
diff changeset
   247
    "catch subclass creation - this forces missing superclasses to be 
claus
parents: 1
diff changeset
   248
     loaded first"
claus
parents: 1
diff changeset
   249
68
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
   250
    |newClass sel args|
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   251
2
claus
parents: 1
diff changeset
   252
    "take care: subclassing Autoload must still be possible"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   253
    (self == Autoload) ifTrue:[
154
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
   254
	^ super 
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
   255
	    subclass:a1 
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
   256
	    instanceVariableNames:a2
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
   257
	    classVariableNames:a3
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
   258
	    poolDictionaries:a4
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
   259
	    category:a5
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   260
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   261
    newClass := self autoload.
68
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
   262
    sel := thisContext selector.
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
   263
    args := thisContext args.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   264
    newClass notNil ifTrue:[
154
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
   265
	^ newClass perform:sel withArguments:args
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   266
    ].
a27a279701f8 Initial revision
claus
parents:
diff changeset
   267
    ^ nil
68
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
   268
!
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
   269
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
   270
comment
164
9bad8fe706e9 *** empty log message ***
claus
parents: 154
diff changeset
   271
    (self == Autoload) ifTrue:[^ super comment].
68
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
   272
    ^ 'not yet loaded'
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   273
! !
11
6bf3080856be *** empty log message ***
claus
parents: 5
diff changeset
   274
6bf3080856be *** empty log message ***
claus
parents: 5
diff changeset
   275
!Autoload class methodsFor:'fileout'!
6bf3080856be *** empty log message ***
claus
parents: 5
diff changeset
   276
6bf3080856be *** empty log message ***
claus
parents: 5
diff changeset
   277
fileOutDefinitionOn:aStream
92
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   278
    "print an expression to define myself on aStream.
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   279
     Since autoloaded classes dont know their real definition, simply
0c73b48551ac *** empty log message ***
claus
parents: 88
diff changeset
   280
     output some comment string making things clear."
11
6bf3080856be *** empty log message ***
claus
parents: 5
diff changeset
   281
164
9bad8fe706e9 *** empty log message ***
claus
parents: 154
diff changeset
   282
    (self == Autoload) ifTrue:[^ super fileOutDefinitionOn:aStream].
9bad8fe706e9 *** empty log message ***
claus
parents: 154
diff changeset
   283
9bad8fe706e9 *** empty log message ***
claus
parents: 154
diff changeset
   284
    aStream nextPutAll:'''' , self name , ' is not yet loaded.'; cr.
9bad8fe706e9 *** empty log message ***
claus
parents: 154
diff changeset
   285
    aStream nextPutAll:' to load, execute: '.
9bad8fe706e9 *** empty log message ***
claus
parents: 154
diff changeset
   286
    aStream cr; cr; spaces:4; nextPutAll:self name , ' autoload'; cr.
9bad8fe706e9 *** empty log message ***
claus
parents: 154
diff changeset
   287
    aStream nextPutAll:''''.
11
6bf3080856be *** empty log message ***
claus
parents: 5
diff changeset
   288
! !