Autoload.st
author Claus Gittinger <cg@exept.de>
Tue, 09 Jul 2019 20:55:17 +0200
changeset 24417 03b083548da2
parent 23306 7c75f151daae
child 25188 e609f461dd25
permissions -rw-r--r--
#REFACTORING by exept class: Smalltalk class changed: #recursiveInstallAutoloadedClassesFrom:rememberIn:maxLevels:noAutoload:packageTop:showSplashInLevels: Transcript showCR:(... bindWith:...) -> Transcript showCR:... with:...
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
22937
8905c05c3a4b #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21767
diff changeset
     1
"{ Encoding: utf8 }"
8905c05c3a4b #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21767
diff changeset
     2
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     3
"
5
67342904af11 *** empty log message ***
claus
parents: 3
diff changeset
     4
 COPYRIGHT (c) 1991 by Claus Gittinger
154
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
     5
	      All Rights Reserved
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     6
a27a279701f8 Initial revision
claus
parents:
diff changeset
     7
 This software is furnished under a license and may be used
a27a279701f8 Initial revision
claus
parents:
diff changeset
     8
 only in accordance with the terms of that license and with the
a27a279701f8 Initial revision
claus
parents:
diff changeset
     9
 inclusion of the above copyright notice.   This software may not
a27a279701f8 Initial revision
claus
parents:
diff changeset
    10
 be provided or otherwise made available to, or used by, any
a27a279701f8 Initial revision
claus
parents:
diff changeset
    11
 other person.  No title to or ownership of the software is
a27a279701f8 Initial revision
claus
parents:
diff changeset
    12
 hereby transferred.
a27a279701f8 Initial revision
claus
parents:
diff changeset
    13
"
5345
e7c6030aa2b5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 5076
diff changeset
    14
"{ Package: 'stx:libbasic' }"
e7c6030aa2b5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 5076
diff changeset
    15
18275
c6ecb8ecff3e class: Autoload
Claus Gittinger <cg@exept.de>
parents: 17124
diff changeset
    16
"{ NameSpace: Smalltalk }"
c6ecb8ecff3e class: Autoload
Claus Gittinger <cg@exept.de>
parents: 17124
diff changeset
    17
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
    18
nil subclass:#Autoload
938
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
    19
	instanceVariableNames:''
8588
4bf5e572f5d9 Fix recursive autoloading of exception classes.
Stefan Vogel <sv@exept.de>
parents: 8482
diff changeset
    20
	classVariableNames:'LazyLoading AutoloadFailedSignal LoadedClasses InProgressClasses'
938
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
    21
	poolDictionaries:''
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
    22
	category:'Kernel-Classes'
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    23
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    24
1862
e8f44f10f1ab changes for new #infoOf: / #linkInfoOf: return
Claus Gittinger <cg@exept.de>
parents: 1720
diff changeset
    25
!Autoload class methodsFor:'documentation'!
68
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
    26
88
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    27
copyright
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    28
"
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    29
 COPYRIGHT (c) 1991 by Claus Gittinger
154
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
    30
	      All Rights Reserved
88
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    31
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    32
 This software is furnished under a license and may be used
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    33
 only in accordance with the terms of that license and with the
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    34
 inclusion of the above copyright notice.   This software may not
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    35
 be provided or otherwise made available to, or used by, any
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    36
 other person.  No title to or ownership of the software is
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    37
 hereby transferred.
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    38
"
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    39
!
81dacba7a63a *** empty log message ***
claus
parents: 68
diff changeset
    40
68
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
    41
documentation
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
    42
"
17124
9c3c21def1fe class: Autoload
Claus Gittinger <cg@exept.de>
parents: 16026
diff changeset
    43
    Autoload is a stub for an 'as yet unloaded' class.
9c3c21def1fe class: Autoload
Claus Gittinger <cg@exept.de>
parents: 16026
diff changeset
    44
20274
489c6a64846b #OTHER by mawalch
mawalch
parents: 19694
diff changeset
    45
    In memory limited systems (as my original 8Mb 386 system was),
489c6a64846b #OTHER by mawalch
mawalch
parents: 19694
diff changeset
    46
    all seldom-used classes were made subclasses of this class.
489c6a64846b #OTHER by mawalch
mawalch
parents: 19694
diff changeset
    47
    Autoload catches all messages sent to it, and files-in the real class's
17124
9c3c21def1fe class: Autoload
Claus Gittinger <cg@exept.de>
parents: 16026
diff changeset
    48
    code when first used. Then the caught message is resent to the (now existing) class.
2662
51f8054b524e commentary
Claus Gittinger <cg@exept.de>
parents: 2654
diff changeset
    49
17124
9c3c21def1fe class: Autoload
Claus Gittinger <cg@exept.de>
parents: 16026
diff changeset
    50
    A note from later days:
20274
489c6a64846b #OTHER by mawalch
mawalch
parents: 19694
diff changeset
    51
        These days, systems usually have enough memory to allow
17124
9c3c21def1fe class: Autoload
Claus Gittinger <cg@exept.de>
parents: 16026
diff changeset
    52
        having all classes present, so many of the classes which used to be
9c3c21def1fe class: Autoload
Claus Gittinger <cg@exept.de>
parents: 16026
diff changeset
    53
        autoloaded are no longer these days. However, a number of examples or
9c3c21def1fe class: Autoload
Claus Gittinger <cg@exept.de>
parents: 16026
diff changeset
    54
        very seldom used frameworks are still present as autoloaded.
9c3c21def1fe class: Autoload
Claus Gittinger <cg@exept.de>
parents: 16026
diff changeset
    55
        Instead of using autoloaded classes, it is now recommended to bundle
9c3c21def1fe class: Autoload
Claus Gittinger <cg@exept.de>
parents: 16026
diff changeset
    56
        extra classes into packages, which are loaded en-bloque.
9c3c21def1fe class: Autoload
Claus Gittinger <cg@exept.de>
parents: 16026
diff changeset
    57
        Packages can be compiled to a shared class library and thus be loaded
9c3c21def1fe class: Autoload
Claus Gittinger <cg@exept.de>
parents: 16026
diff changeset
    58
        much faster (there is no need to parse and compile source files).
9c3c21def1fe class: Autoload
Claus Gittinger <cg@exept.de>
parents: 16026
diff changeset
    59
9c3c21def1fe class: Autoload
Claus Gittinger <cg@exept.de>
parents: 16026
diff changeset
    60
    Lazy loading:
2662
51f8054b524e commentary
Claus Gittinger <cg@exept.de>
parents: 2654
diff changeset
    61
    Class files are searched along the searchPath (see Smalltalk),
20274
489c6a64846b #OTHER by mawalch
mawalch
parents: 19694
diff changeset
    62
    and any of binary-classFile, byteCode-classFile or sourceFile are loaded,
489c6a64846b #OTHER by mawalch
mawalch
parents: 19694
diff changeset
    63
    whichever is found first.
17124
9c3c21def1fe class: Autoload
Claus Gittinger <cg@exept.de>
parents: 16026
diff changeset
    64
    For binaries to be loaded, these must be found in a package-subdirectory
20274
489c6a64846b #OTHER by mawalch
mawalch
parents: 19694
diff changeset
    65
    along the so called package path.
17124
9c3c21def1fe class: Autoload
Claus Gittinger <cg@exept.de>
parents: 16026
diff changeset
    66
    Sources in a package directory along the source path.
9c3c21def1fe class: Autoload
Claus Gittinger <cg@exept.de>
parents: 16026
diff changeset
    67
    In practice, most Autoloaded classes are found and loaded as source file.
2662
51f8054b524e commentary
Claus Gittinger <cg@exept.de>
parents: 2654
diff changeset
    68
17124
9c3c21def1fe class: Autoload
Claus Gittinger <cg@exept.de>
parents: 16026
diff changeset
    69
    Initial Setup of Auoload Stubs:
9c3c21def1fe class: Autoload
Claus Gittinger <cg@exept.de>
parents: 16026
diff changeset
    70
    At initial startup (i.e. when ST/X is NOT coming up with an image),
9c3c21def1fe class: Autoload
Claus Gittinger <cg@exept.de>
parents: 16026
diff changeset
    71
    the 'patches' startup script recursively walks along all directories
9c3c21def1fe class: Autoload
Claus Gittinger <cg@exept.de>
parents: 16026
diff changeset
    72
    below the TOP directory (that is one above the stx folder),
9c3c21def1fe class: Autoload
Claus Gittinger <cg@exept.de>
parents: 16026
diff changeset
    73
    and installs autoload stubs for all .st class files found, for which no
9c3c21def1fe class: Autoload
Claus Gittinger <cg@exept.de>
parents: 16026
diff changeset
    74
    corresponding class is already present.
9c3c21def1fe class: Autoload
Claus Gittinger <cg@exept.de>
parents: 16026
diff changeset
    75
    As you can imagine, this takes a long time and makes the initial startup quite slow.
21767
070cc7414a41 #DOCUMENTATION by mawalch
mawalch
parents: 21403
diff changeset
    76
    Therefore, this scheme is no longer the recommended one and we (at eXept)
17124
9c3c21def1fe class: Autoload
Claus Gittinger <cg@exept.de>
parents: 16026
diff changeset
    77
    always start ST/X with the '--quick' option, which skips this scan operation.
21767
070cc7414a41 #DOCUMENTATION by mawalch
mawalch
parents: 21403
diff changeset
    78
    Late note:
070cc7414a41 #DOCUMENTATION by mawalch
mawalch
parents: 21403
diff changeset
    79
        --quick is now (7.1.1) the default.
20597
592b6415b9ae #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 20274
diff changeset
    80
        To force an autoload scan, start stx with a --autoload argument.
21767
070cc7414a41 #DOCUMENTATION by mawalch
mawalch
parents: 21403
diff changeset
    81
070cc7414a41 #DOCUMENTATION by mawalch
mawalch
parents: 21403
diff changeset
    82
17124
9c3c21def1fe class: Autoload
Claus Gittinger <cg@exept.de>
parents: 16026
diff changeset
    83
    Advantage of Autoload stubs:
9c3c21def1fe class: Autoload
Claus Gittinger <cg@exept.de>
parents: 16026
diff changeset
    84
    Autoload stubs make it easier for a beginner to ST/X, to see what frameworks and classes
9c3c21def1fe class: Autoload
Claus Gittinger <cg@exept.de>
parents: 16026
diff changeset
    85
    are there, as they appear in the browser with category and class name (although no
9c3c21def1fe class: Autoload
Claus Gittinger <cg@exept.de>
parents: 16026
diff changeset
    86
    more details are initially visible.
68
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
    87
1278
7ef5a312d87e commentary
Claus Gittinger <cg@exept.de>
parents: 1277
diff changeset
    88
    [class variables:]
20274
489c6a64846b #OTHER by mawalch
mawalch
parents: 19694
diff changeset
    89
489c6a64846b #OTHER by mawalch
mawalch
parents: 19694
diff changeset
    90
        LazyLoading             <Boolean>       if true, the loaded classes
489c6a64846b #OTHER by mawalch
mawalch
parents: 19694
diff changeset
    91
                                                methods will NOT be compiled at
489c6a64846b #OTHER by mawalch
mawalch
parents: 19694
diff changeset
    92
                                                autoload time, but instead when
489c6a64846b #OTHER by mawalch
mawalch
parents: 19694
diff changeset
    93
                                                first called. This allows for a
489c6a64846b #OTHER by mawalch
mawalch
parents: 19694
diff changeset
    94
                                                faster load. However, expect short
7280
7afcccb7c856 Fix pidgin spelling: 'does not exists' and 'not exists'
Stefan Vogel <sv@exept.de>
parents: 7178
diff changeset
    95
                                                pauses later when the methods are
7afcccb7c856 Fix pidgin spelling: 'does not exists' and 'not exists'
Stefan Vogel <sv@exept.de>
parents: 7178
diff changeset
    96
                                                first executed.
20274
489c6a64846b #OTHER by mawalch
mawalch
parents: 19694
diff changeset
    97
489c6a64846b #OTHER by mawalch
mawalch
parents: 19694
diff changeset
    98
        AutoloadFailedSignal    <Signal>        signal raised if an autoloaded
7280
7afcccb7c856 Fix pidgin spelling: 'does not exists' and 'not exists'
Stefan Vogel <sv@exept.de>
parents: 7178
diff changeset
    99
                                                classes source is not available.
922
0e8e0d920d0d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 921
diff changeset
   100
7280
7afcccb7c856 Fix pidgin spelling: 'does not exists' and 'not exists'
Stefan Vogel <sv@exept.de>
parents: 7178
diff changeset
   101
        LoadedClasses           <Collection>    set of classes that heve been
7afcccb7c856 Fix pidgin spelling: 'does not exists' and 'not exists'
Stefan Vogel <sv@exept.de>
parents: 7178
diff changeset
   102
                                                autoloaded (for later unload)
1292
89497fff7f87 documentation
Claus Gittinger <cg@exept.de>
parents: 1278
diff changeset
   103
2662
51f8054b524e commentary
Claus Gittinger <cg@exept.de>
parents: 2654
diff changeset
   104
    [see also:]
7280
7afcccb7c856 Fix pidgin spelling: 'does not exists' and 'not exists'
Stefan Vogel <sv@exept.de>
parents: 7178
diff changeset
   105
        Smalltalk
2662
51f8054b524e commentary
Claus Gittinger <cg@exept.de>
parents: 2654
diff changeset
   106
1292
89497fff7f87 documentation
Claus Gittinger <cg@exept.de>
parents: 1278
diff changeset
   107
    [author:]
7280
7afcccb7c856 Fix pidgin spelling: 'does not exists' and 'not exists'
Stefan Vogel <sv@exept.de>
parents: 7178
diff changeset
   108
        Claus Gittinger
68
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
   109
"
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
   110
! !
59faa75185ba *** empty log message ***
claus
parents: 22
diff changeset
   111
1862
e8f44f10f1ab changes for new #infoOf: / #linkInfoOf: return
Claus Gittinger <cg@exept.de>
parents: 1720
diff changeset
   112
!Autoload class methodsFor:'initialization'!
126
c00c6e25c98c raise a signal on failure
claus
parents: 92
diff changeset
   113
c00c6e25c98c raise a signal on failure
claus
parents: 92
diff changeset
   114
initialize
12252
93c323c8a166 changed:
Stefan Vogel <sv@exept.de>
parents: 12074
diff changeset
   115
    "initialize either the Autoload class
21767
070cc7414a41 #DOCUMENTATION by mawalch
mawalch
parents: 21403
diff changeset
   116
     or load an autoloaded class and initialize it."
2223
87381a043e75 commentary
Claus Gittinger <cg@exept.de>
parents: 2112
diff changeset
   117
12252
93c323c8a166 changed:
Stefan Vogel <sv@exept.de>
parents: 12074
diff changeset
   118
    self ~~ Autoload ifTrue:[
93c323c8a166 changed:
Stefan Vogel <sv@exept.de>
parents: 12074
diff changeset
   119
        "subclass: catch initialize - load the class and resend #initialize to the real one"
93c323c8a166 changed:
Stefan Vogel <sv@exept.de>
parents: 12074
diff changeset
   120
        ^ self doesNotUnderstand:(Message selector:#initialize)
93c323c8a166 changed:
Stefan Vogel <sv@exept.de>
parents: 12074
diff changeset
   121
    ].
93c323c8a166 changed:
Stefan Vogel <sv@exept.de>
parents: 12074
diff changeset
   122
93c323c8a166 changed:
Stefan Vogel <sv@exept.de>
parents: 12074
diff changeset
   123
    "initialize myself"
126
c00c6e25c98c raise a signal on failure
claus
parents: 92
diff changeset
   124
    AutoloadFailedSignal isNil ifTrue:[
7092
630807cd320f Convert Object>>errorSignal -> Error
Stefan Vogel <sv@exept.de>
parents: 7019
diff changeset
   125
        LazyLoading := false.
2654
fb9a81692dbf initialize classVar
Claus Gittinger <cg@exept.de>
parents: 2555
diff changeset
   126
12252
93c323c8a166 changed:
Stefan Vogel <sv@exept.de>
parents: 12074
diff changeset
   127
        AutoloadFailedSignal := ProceedableError newSignal
93c323c8a166 changed:
Stefan Vogel <sv@exept.de>
parents: 12074
diff changeset
   128
                                    nameClass:self message:#autoloadFailedSignal;
93c323c8a166 changed:
Stefan Vogel <sv@exept.de>
parents: 12074
diff changeset
   129
                                    notifierString:'autoload failed'.
197
   130
7092
630807cd320f Convert Object>>errorSignal -> Error
Stefan Vogel <sv@exept.de>
parents: 7019
diff changeset
   131
        self class changeClassTo:AutoloadMetaclass.
630807cd320f Convert Object>>errorSignal -> Error
Stefan Vogel <sv@exept.de>
parents: 7019
diff changeset
   132
        ObjectMemory flushCaches.
5005
e31701a84055 also catch #initialize.
Claus Gittinger <cg@exept.de>
parents: 4775
diff changeset
   133
    ].
8316
4023c53e9320 Initialie classvar
Stefan Vogel <sv@exept.de>
parents: 8306
diff changeset
   134
    LoadedClasses isNil ifTrue:[
4023c53e9320 Initialie classvar
Stefan Vogel <sv@exept.de>
parents: 8306
diff changeset
   135
        LoadedClasses := IdentitySet new.
12074
30001ba710e9 changed: #initialize
fm
parents: 11951
diff changeset
   136
    ].
30001ba710e9 changed: #initialize
fm
parents: 11951
diff changeset
   137
    InProgressClasses isNil ifTrue:[
9461
791adb50075f avoid "recursive autoload" error when doing explicit autoload of subclasses
Stefan Vogel <sv@exept.de>
parents: 9428
diff changeset
   138
        InProgressClasses := IdentitySet new.
8316
4023c53e9320 Initialie classvar
Stefan Vogel <sv@exept.de>
parents: 8306
diff changeset
   139
    ].
5005
e31701a84055 also catch #initialize.
Claus Gittinger <cg@exept.de>
parents: 4775
diff changeset
   140
21767
070cc7414a41 #DOCUMENTATION by mawalch
mawalch
parents: 21403
diff changeset
   141
    "Modified: / 20-05-1997 / 19:06:25 / cg"
070cc7414a41 #DOCUMENTATION by mawalch
mawalch
parents: 21403
diff changeset
   142
    "Modified: / 03-08-1999 / 14:23:30 / stefan"
070cc7414a41 #DOCUMENTATION by mawalch
mawalch
parents: 21403
diff changeset
   143
    "Modified (comment): / 22-05-2017 / 18:31:47 / mawalch"
126
c00c6e25c98c raise a signal on failure
claus
parents: 92
diff changeset
   144
! !
c00c6e25c98c raise a signal on failure
claus
parents: 92
diff changeset
   145
1862
e8f44f10f1ab changes for new #infoOf: / #linkInfoOf: return
Claus Gittinger <cg@exept.de>
parents: 1720
diff changeset
   146
!Autoload class methodsFor:'Signal constants'!
126
c00c6e25c98c raise a signal on failure
claus
parents: 92
diff changeset
   147
c00c6e25c98c raise a signal on failure
claus
parents: 92
diff changeset
   148
autoloadFailedSignal
c00c6e25c98c raise a signal on failure
claus
parents: 92
diff changeset
   149
    "return the signal raised when an autoload fails"
c00c6e25c98c raise a signal on failure
claus
parents: 92
diff changeset
   150
c00c6e25c98c raise a signal on failure
claus
parents: 92
diff changeset
   151
    ^ AutoloadFailedSignal
c00c6e25c98c raise a signal on failure
claus
parents: 92
diff changeset
   152
! !
c00c6e25c98c raise a signal on failure
claus
parents: 92
diff changeset
   153
1862
e8f44f10f1ab changes for new #infoOf: / #linkInfoOf: return
Claus Gittinger <cg@exept.de>
parents: 1720
diff changeset
   154
!Autoload class methodsFor:'adding/removing autoloaded classes'!
359
claus
parents: 356
diff changeset
   155
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   156
addClass:aClassName
4052
7b126a2f20ee checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4033
diff changeset
   157
    "given a name, install a corresponding autoload class stub for it.
7b126a2f20ee checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4033
diff changeset
   158
     Return the (autoload-) stubClass or nil, if no new class was created."
1277
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   159
4052
7b126a2f20ee checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4033
diff changeset
   160
    ^ self addClass:aClassName inCategory:'autoloaded-Classes'
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   161
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   162
    "
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   163
     Autoload addClass:'Clock'
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   164
    "
1277
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   165
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   166
    "Modified: 24.4.1996 / 19:54:16 / cg"
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   167
!
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   168
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   169
addClass:aClassName inCategory:aCategory
4052
7b126a2f20ee checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4033
diff changeset
   170
    "given a name, install a corresponding autoload class stub for it.
7b126a2f20ee checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4033
diff changeset
   171
     Return the (autoload-) stubClass or nil, if no new class was created."
1277
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   172
4052
7b126a2f20ee checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4033
diff changeset
   173
    |nameSymbol cls|
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   174
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   175
    nameSymbol := aClassName asSymbol.
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   176
    (Smalltalk at:nameSymbol) isNil ifTrue:[
21216
7063316ccde8 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20597
diff changeset
   177
        cls := self 
7063316ccde8 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20597
diff changeset
   178
                subclass:nameSymbol
7063316ccde8 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20597
diff changeset
   179
                instanceVariableNames:''
7063316ccde8 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20597
diff changeset
   180
                classVariableNames:''
7063316ccde8 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20597
diff changeset
   181
                poolDictionaries:''
7063316ccde8 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20597
diff changeset
   182
                category:aCategory.
4052
7b126a2f20ee checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4033
diff changeset
   183
    ].
7b126a2f20ee checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4033
diff changeset
   184
    ^ cls
7b126a2f20ee checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4033
diff changeset
   185
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   186
    "
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   187
     Autoload addClass:'Clock' inCategory:'autoloaded-Demos'
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   188
    "
1277
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   189
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   190
    "Modified: 24.4.1996 / 19:54:20 / cg"
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
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   193
removeClass:aClass
1277
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   194
    "remove a class from the list of loaded classes"
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   195
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   196
    LoadedClasses remove:aClass ifAbsent:[]
1277
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   197
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   198
    "Modified: 24.4.1996 / 19:54:35 / cg"
620
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
11145
da935faeca94 category change
Claus Gittinger <cg@exept.de>
parents: 11058
diff changeset
   201
!Autoload class methodsFor:'fileOut'!
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   202
5345
e7c6030aa2b5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 5076
diff changeset
   203
basicFileOutDefinitionOn:aStream withNameSpace:forceNameSpace withPackage:withPackage
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   204
    "print an expression to define myself on aStream.
8316
4023c53e9320 Initialie classvar
Stefan Vogel <sv@exept.de>
parents: 8306
diff changeset
   205
     Since autoloaded classes don't know their real definition, simply
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   206
     output some comment string making things clear in the browser."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   207
5820
48390a140bcb Cleanup unused method vars
Stefan Vogel <sv@exept.de>
parents: 5705
diff changeset
   208
    |myName fileName nm package|
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   209
5345
e7c6030aa2b5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 5076
diff changeset
   210
    (self == Autoload) ifTrue:[
7019
6591ea303fbd *** empty log message ***
penk
parents: 6768
diff changeset
   211
        ^ super 
6591ea303fbd *** empty log message ***
penk
parents: 6768
diff changeset
   212
            basicFileOutDefinitionOn:aStream 
6591ea303fbd *** empty log message ***
penk
parents: 6768
diff changeset
   213
            withNameSpace:forceNameSpace
6591ea303fbd *** empty log message ***
penk
parents: 6768
diff changeset
   214
            withPackage:withPackage
5345
e7c6030aa2b5 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 5076
diff changeset
   215
    ].
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   216
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   217
    myName := self name.
11205
e8543aa62c15 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11171
diff changeset
   218
    aStream nextPutAll:'"' ; nextPutLine:'Notice:'; cr;
e8543aa62c15 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11171
diff changeset
   219
            spaces:4; nextPutLine:'The ',myName,' class is not yet loaded.'; cr.
14411
192aa172da63 changed: #basicFileOutDefinitionOn:withNameSpace:withPackage:
Claus Gittinger <cg@exept.de>
parents: 14410
diff changeset
   220
    aStream nextPutLine:'It will automatically load itself when accessed (instantiated).'.
192aa172da63 changed: #basicFileOutDefinitionOn:withNameSpace:withPackage:
Claus Gittinger <cg@exept.de>
parents: 14410
diff changeset
   221
    aStream nextPutLine:'To force loading now, execute: '.
7019
6591ea303fbd *** empty log message ***
penk
parents: 6768
diff changeset
   222
    aStream cr; spaces:4; nextPutLine:myName  , ' autoload'.
14411
192aa172da63 changed: #basicFileOutDefinitionOn:withNameSpace:withPackage:
Claus Gittinger <cg@exept.de>
parents: 14410
diff changeset
   223
    aStream cr; nextPutLine:'or use the browser''s load function (in the classList''s ''Special''-menu)'.
11205
e8543aa62c15 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11171
diff changeset
   224
    aStream nextPutLine:'(a double-click on the class will also load it).'.
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   225
    "
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   226
     the following is simply informative ...
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   227
     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
   228
     in Smalltalk 
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   229
     (knowing the details of loading here is no good coding style)
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   230
    "
10052
93502b0dc620 classFilename handling
Claus Gittinger <cg@exept.de>
parents: 9804
diff changeset
   231
    fileName := (Smalltalk fileNameForClass:myName).
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   232
    (ObjectFileLoader notNil and:[Smalltalk loadBinaries]) ifTrue:[
7019
6591ea303fbd *** empty log message ***
penk
parents: 6768
diff changeset
   233
        (nm := Smalltalk libraryFileNameOfClass:myName) notNil ifTrue:[
6591ea303fbd *** empty log message ***
penk
parents: 6768
diff changeset
   234
            nm := nm , ' (a classLibrary, possibly including more classes)'
6591ea303fbd *** empty log message ***
penk
parents: 6768
diff changeset
   235
        ] ifFalse:[
6591ea303fbd *** empty log message ***
penk
parents: 6768
diff changeset
   236
            nm := Smalltalk getBinaryFileName:(fileName , '.so').
6591ea303fbd *** empty log message ***
penk
parents: 6768
diff changeset
   237
            nm isNil ifTrue:[
6591ea303fbd *** empty log message ***
penk
parents: 6768
diff changeset
   238
                nm := Smalltalk getBinaryFileName:(fileName , '.o')
6591ea303fbd *** empty log message ***
penk
parents: 6768
diff changeset
   239
            ].
6591ea303fbd *** empty log message ***
penk
parents: 6768
diff changeset
   240
            nm notNil ifTrue:[
6591ea303fbd *** empty log message ***
penk
parents: 6768
diff changeset
   241
                nm := nm , ' (a classBinary)'
6591ea303fbd *** empty log message ***
penk
parents: 6768
diff changeset
   242
            ]
6591ea303fbd *** empty log message ***
penk
parents: 6768
diff changeset
   243
        ].
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   244
    ].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   245
    nm isNil ifTrue:[
7019
6591ea303fbd *** empty log message ***
penk
parents: 6768
diff changeset
   246
        package := self package.
6591ea303fbd *** empty log message ***
penk
parents: 6768
diff changeset
   247
        package notNil ifTrue:[
6591ea303fbd *** empty log message ***
penk
parents: 6768
diff changeset
   248
            nm := Smalltalk getSourceFileName:((package copyReplaceAll:$: with:$/) , '/' , fileName , '.st').
6591ea303fbd *** empty log message ***
penk
parents: 6768
diff changeset
   249
        ].
6591ea303fbd *** empty log message ***
penk
parents: 6768
diff changeset
   250
        nm isNil ifTrue:[
6591ea303fbd *** empty log message ***
penk
parents: 6768
diff changeset
   251
            nm := Smalltalk getSourceFileName:(fileName , '.st').
6591ea303fbd *** empty log message ***
penk
parents: 6768
diff changeset
   252
        ].
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   253
    ].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   254
    nm notNil ifTrue:[
7744
eeddeb7883af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7574
diff changeset
   255
        aStream 
eeddeb7883af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7574
diff changeset
   256
            cr; 
eeddeb7883af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7574
diff changeset
   257
            nextPutLine:'When accessed, ' , myName , ' will automatically be loaded';
eeddeb7883af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7574
diff changeset
   258
            nextPutLine:'from: '; spaces:4; nextPutAll:nm.
eeddeb7883af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7574
diff changeset
   259
7019
6591ea303fbd *** empty log message ***
penk
parents: 6768
diff changeset
   260
        nm asFilename isSymbolicLink ifTrue:[
6591ea303fbd *** empty log message ***
penk
parents: 6768
diff changeset
   261
            aStream cr; cr.
7744
eeddeb7883af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7574
diff changeset
   262
            aStream 
eeddeb7883af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7574
diff changeset
   263
                nextPutLine:'which is a link to: '; 
eeddeb7883af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7574
diff changeset
   264
                spaces:4; 
eeddeb7883af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7574
diff changeset
   265
                nextPutAll:(nm asFilename linkInfo path).
7019
6591ea303fbd *** empty log message ***
penk
parents: 6768
diff changeset
   266
        ]
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   267
    ] ifFalse:[
7019
6591ea303fbd *** empty log message ***
penk
parents: 6768
diff changeset
   268
        package := self package.
6591ea303fbd *** empty log message ***
penk
parents: 6768
diff changeset
   269
        (Smalltalk at:#SourceCodeManager) notNil ifTrue:[
6591ea303fbd *** empty log message ***
penk
parents: 6768
diff changeset
   270
            aStream nextPutAll:'
5076
a927e67cf1db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 5046
diff changeset
   271
When accessed, I''ll ask the sourceCodeManager to load the code 
a927e67cf1db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 5046
diff changeset
   272
from ''' , fileName , '.st'' in the ''' , package , ''' package.'.
7019
6591ea303fbd *** empty log message ***
penk
parents: 6768
diff changeset
   273
        ] ifFalse:[
6591ea303fbd *** empty log message ***
penk
parents: 6768
diff changeset
   274
            aStream nextPutAll:'
5076
a927e67cf1db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 5046
diff changeset
   275
When accessed, I''ll search for a file named 
a927e67cf1db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 5046
diff changeset
   276
''' , fileName , '.st'' in the ''' , package , ''' package.
709
c31cbd5e5323 more info for autoloaded classes (for browsers definition text)
Claus Gittinger <cg@exept.de>
parents: 661
diff changeset
   277
5076
a927e67cf1db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 5046
diff changeset
   278
Packages are tried along the packagePath, which is:
a927e67cf1db checkin from browser
Claus Gittinger <cg@exept.de>
parents: 5046
diff changeset
   279
' , ((Smalltalk packagePath asStringCollection collect:[:each| '   ' , each]) asStringWith:Character cr). 
7019
6591ea303fbd *** empty log message ***
penk
parents: 6768
diff changeset
   280
        ]
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   281
    ].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   282
    aStream cr; nextPutAll:'"'.
709
c31cbd5e5323 more info for autoloaded classes (for browsers definition text)
Claus Gittinger <cg@exept.de>
parents: 661
diff changeset
   283
10052
93502b0dc620 classFilename handling
Claus Gittinger <cg@exept.de>
parents: 9804
diff changeset
   284
    "Created: / 05-01-1997 / 14:31:33 / cg"
93502b0dc620 classFilename handling
Claus Gittinger <cg@exept.de>
parents: 9804
diff changeset
   285
    "Modified: / 06-10-2006 / 16:17:18 / cg"
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   286
! !
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   287
1862
e8f44f10f1ab changes for new #infoOf: / #linkInfoOf: return
Claus Gittinger <cg@exept.de>
parents: 1720
diff changeset
   288
!Autoload class methodsFor:'lazy compilation'!
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   289
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   290
compileLazy
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   291
    "return the lazy loading flag - if on, fileIn is much faster,
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   292
     but pauses are to be expected later, since methods are compiled
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   293
     when first executed."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   294
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   295
    ^ LazyLoading
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   296
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   297
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   298
compileLazy:aBoolean
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   299
    "turn on/off lazy loading - if on, fileIn is much faster,
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   300
     but pauses are to be expected later, since methods are compiled
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   301
     when first executed.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   302
     If you like it, add a line to your startup file."
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   303
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   304
    LazyLoading := aBoolean
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   305
! !
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   306
1862
e8f44f10f1ab changes for new #infoOf: / #linkInfoOf: return
Claus Gittinger <cg@exept.de>
parents: 1720
diff changeset
   307
!Autoload class methodsFor:'loading'!
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   308
a27a279701f8 Initial revision
claus
parents:
diff changeset
   309
autoload
a27a279701f8 Initial revision
claus
parents:
diff changeset
   310
    "use this to force loading
9461
791adb50075f avoid "recursive autoload" error when doing explicit autoload of subclasses
Stefan Vogel <sv@exept.de>
parents: 9428
diff changeset
   311
     - it is defined a noop in all non-autoloading classes.
791adb50075f avoid "recursive autoload" error when doing explicit autoload of subclasses
Stefan Vogel <sv@exept.de>
parents: 9428
diff changeset
   312
     Return the loaded class"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   313
9554
58c5e80cf9a4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9520
diff changeset
   314
    |myName myNameSpace newClass project prevMode packageID
15054
1667e3fe9e8b class: Autoload
Claus Gittinger <cg@exept.de>
parents: 14503
diff changeset
   315
     packageDefinitionClass packageExtensionsFile|
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   316
12252
93c323c8a166 changed:
Stefan Vogel <sv@exept.de>
parents: 12074
diff changeset
   317
    self == Autoload ifTrue:[
93c323c8a166 changed:
Stefan Vogel <sv@exept.de>
parents: 12074
diff changeset
   318
        "already loaded"
93c323c8a166 changed:
Stefan Vogel <sv@exept.de>
parents: 12074
diff changeset
   319
        ^ self.
93c323c8a166 changed:
Stefan Vogel <sv@exept.de>
parents: 12074
diff changeset
   320
    ].
93c323c8a166 changed:
Stefan Vogel <sv@exept.de>
parents: 12074
diff changeset
   321
164
9bad8fe706e9 *** empty log message ***
claus
parents: 154
diff changeset
   322
    myName := self name asSymbol.
3027
7d677a5ced41 care for loaded classes namespace (vs. default namespace)
Claus Gittinger <cg@exept.de>
parents: 2691
diff changeset
   323
    myNameSpace := self nameSpace.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   324
9428
a46275bc78e7 use the classes name (instead of the identity)
ca
parents: 9422
diff changeset
   325
    (InProgressClasses includes:myName) ifTrue:[
9461
791adb50075f avoid "recursive autoload" error when doing explicit autoload of subclasses
Stefan Vogel <sv@exept.de>
parents: 9428
diff changeset
   326
        "Class is already being loaded. 
791adb50075f avoid "recursive autoload" error when doing explicit autoload of subclasses
Stefan Vogel <sv@exept.de>
parents: 9428
diff changeset
   327
         In most cases we come here through the path:
791adb50075f avoid "recursive autoload" error when doing explicit autoload of subclasses
Stefan Vogel <sv@exept.de>
parents: 9428
diff changeset
   328
            subclass autoload 
791adb50075f avoid "recursive autoload" error when doing explicit autoload of subclasses
Stefan Vogel <sv@exept.de>
parents: 9428
diff changeset
   329
            -> superclass autoload 
791adb50075f avoid "recursive autoload" error when doing explicit autoload of subclasses
Stefan Vogel <sv@exept.de>
parents: 9428
diff changeset
   330
            -> superclass initialize/postAutoload 
791adb50075f avoid "recursive autoload" error when doing explicit autoload of subclasses
Stefan Vogel <sv@exept.de>
parents: 9428
diff changeset
   331
            -> subclass autoload (hardcoded in initialize method).
791adb50075f avoid "recursive autoload" error when doing explicit autoload of subclasses
Stefan Vogel <sv@exept.de>
parents: 9428
diff changeset
   332
         Simply ignore it here"
791adb50075f avoid "recursive autoload" error when doing explicit autoload of subclasses
Stefan Vogel <sv@exept.de>
parents: 9428
diff changeset
   333
            
791adb50075f avoid "recursive autoload" error when doing explicit autoload of subclasses
Stefan Vogel <sv@exept.de>
parents: 9428
diff changeset
   334
"/        AutoloadFailedSignal
791adb50075f avoid "recursive autoload" error when doing explicit autoload of subclasses
Stefan Vogel <sv@exept.de>
parents: 9428
diff changeset
   335
"/            raiseRequestWith:self
791adb50075f avoid "recursive autoload" error when doing explicit autoload of subclasses
Stefan Vogel <sv@exept.de>
parents: 9428
diff changeset
   336
"/            errorString:('autoload of ' , myName , ' failed (recursive invocation)').
791adb50075f avoid "recursive autoload" error when doing explicit autoload of subclasses
Stefan Vogel <sv@exept.de>
parents: 9428
diff changeset
   337
791adb50075f avoid "recursive autoload" error when doing explicit autoload of subclasses
Stefan Vogel <sv@exept.de>
parents: 9428
diff changeset
   338
        "self is not yet the loaded class - but it will be after the #become:
791adb50075f avoid "recursive autoload" error when doing explicit autoload of subclasses
Stefan Vogel <sv@exept.de>
parents: 9428
diff changeset
   339
         that is done eventually by some sender above."
791adb50075f avoid "recursive autoload" error when doing explicit autoload of subclasses
Stefan Vogel <sv@exept.de>
parents: 9428
diff changeset
   340
        ^ self.
9422
82a0ea18b63b care for recursive autoload
Claus Gittinger <cg@exept.de>
parents: 9373
diff changeset
   341
    ].
82a0ea18b63b care for recursive autoload
Claus Gittinger <cg@exept.de>
parents: 9373
diff changeset
   342
4775
4c96f1d40626 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4576
diff changeset
   343
    "/ recheck - in case my class somehow came into the system
4c96f1d40626 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4576
diff changeset
   344
    "/ (by loading a binary...)
4c96f1d40626 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4576
diff changeset
   345
    (newClass := Smalltalk at:myName) ~~ self ifTrue:[
6075
57f3ae8d2a28 renamed: #allSelectorsAndMethodsDo: into: #instAndClassSelectorsAndMethodsDo:
Claus Gittinger <cg@exept.de>
parents: 5903
diff changeset
   346
        (newClass isBehavior and:[newClass isLoaded]) ifTrue:[
8588
4bf5e572f5d9 Fix recursive autoloading of exception classes.
Stefan Vogel <sv@exept.de>
parents: 8482
diff changeset
   347
            (Object infoPrinting and:[Smalltalk silentLoading ~~ true]) ifTrue:[
4bf5e572f5d9 Fix recursive autoloading of exception classes.
Stefan Vogel <sv@exept.de>
parents: 8482
diff changeset
   348
                Transcript showCR:('Autoload [info]: already loaded: ', myName , '.'); endEntry.
4bf5e572f5d9 Fix recursive autoloading of exception classes.
Stefan Vogel <sv@exept.de>
parents: 8482
diff changeset
   349
            ].
6075
57f3ae8d2a28 renamed: #allSelectorsAndMethodsDo: into: #instAndClassSelectorsAndMethodsDo:
Claus Gittinger <cg@exept.de>
parents: 5903
diff changeset
   350
            self class becomeSameAs:newClass class.
57f3ae8d2a28 renamed: #allSelectorsAndMethodsDo: into: #instAndClassSelectorsAndMethodsDo:
Claus Gittinger <cg@exept.de>
parents: 5903
diff changeset
   351
            self becomeSameAs:newClass.
4775
4c96f1d40626 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4576
diff changeset
   352
6075
57f3ae8d2a28 renamed: #allSelectorsAndMethodsDo: into: #instAndClassSelectorsAndMethodsDo:
Claus Gittinger <cg@exept.de>
parents: 5903
diff changeset
   353
            ObjectMemory flushCaches.
57f3ae8d2a28 renamed: #allSelectorsAndMethodsDo: into: #instAndClassSelectorsAndMethodsDo:
Claus Gittinger <cg@exept.de>
parents: 5903
diff changeset
   354
            ^ newClass
57f3ae8d2a28 renamed: #allSelectorsAndMethodsDo: into: #instAndClassSelectorsAndMethodsDo:
Claus Gittinger <cg@exept.de>
parents: 5903
diff changeset
   355
        ].
4775
4c96f1d40626 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4576
diff changeset
   356
    ].
4c96f1d40626 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4576
diff changeset
   357
1566
b1968c0d02bd checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1564
diff changeset
   358
    (Object infoPrinting and:[Smalltalk silentLoading ~~ true]) ifTrue:[
10128
f3942b8fada3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10123
diff changeset
   359
        "/ thisContext fullPrintAll.
6075
57f3ae8d2a28 renamed: #allSelectorsAndMethodsDo: into: #instAndClassSelectorsAndMethodsDo:
Claus Gittinger <cg@exept.de>
parents: 5903
diff changeset
   360
        Transcript showCR:('autoloading ', myName , ' ...'); endEntry.
1564
f3f9736bd0fa suppress load messages, if infoPrinting is turned off
Claus Gittinger <cg@exept.de>
parents: 1438
diff changeset
   361
    ].
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   362
9554
58c5e80cf9a4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9520
diff changeset
   363
    packageID := self package.
18275
c6ecb8ecff3e class: Autoload
Claus Gittinger <cg@exept.de>
parents: 17124
diff changeset
   364
    packageID == PackageId noProjectID ifTrue:[
c6ecb8ecff3e class: Autoload
Claus Gittinger <cg@exept.de>
parents: 17124
diff changeset
   365
        Transcript showCR:('Autoload [warning]: bad packageID (__NoProject__) in ', myName); endEntry.
c6ecb8ecff3e class: Autoload
Claus Gittinger <cg@exept.de>
parents: 17124
diff changeset
   366
    ] ifFalse:[
c6ecb8ecff3e class: Autoload
Claus Gittinger <cg@exept.de>
parents: 17124
diff changeset
   367
        "if there is a package-definition, make sure it is loaded first"
c6ecb8ecff3e class: Autoload
Claus Gittinger <cg@exept.de>
parents: 17124
diff changeset
   368
        packageDefinitionClass := ProjectDefinition definitionClassForPackage: packageID.
c6ecb8ecff3e class: Autoload
Claus Gittinger <cg@exept.de>
parents: 17124
diff changeset
   369
        (packageDefinitionClass notNil) ifTrue:[
c6ecb8ecff3e class: Autoload
Claus Gittinger <cg@exept.de>
parents: 17124
diff changeset
   370
            (packageDefinitionClass ~~ self) ifTrue:[
c6ecb8ecff3e class: Autoload
Claus Gittinger <cg@exept.de>
parents: 17124
diff changeset
   371
                (packageDefinitionClass isBehavior) ifTrue:[
c6ecb8ecff3e class: Autoload
Claus Gittinger <cg@exept.de>
parents: 17124
diff changeset
   372
                    (packageDefinitionClass isLoaded) ifFalse:[
c6ecb8ecff3e class: Autoload
Claus Gittinger <cg@exept.de>
parents: 17124
diff changeset
   373
                        packageDefinitionClass autoload.
c6ecb8ecff3e class: Autoload
Claus Gittinger <cg@exept.de>
parents: 17124
diff changeset
   374
                    ].
c6ecb8ecff3e class: Autoload
Claus Gittinger <cg@exept.de>
parents: 17124
diff changeset
   375
                    "/ make sure that my package's extensions are also present
c6ecb8ecff3e class: Autoload
Claus Gittinger <cg@exept.de>
parents: 17124
diff changeset
   376
                    (packageDefinitionClass isLoaded) ifTrue:[
c6ecb8ecff3e class: Autoload
Claus Gittinger <cg@exept.de>
parents: 17124
diff changeset
   377
                        packageDefinitionClass loadExtensions    
c6ecb8ecff3e class: Autoload
Claus Gittinger <cg@exept.de>
parents: 17124
diff changeset
   378
                    ]
9554
58c5e80cf9a4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9520
diff changeset
   379
                ].
58c5e80cf9a4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9520
diff changeset
   380
            ].
18275
c6ecb8ecff3e class: Autoload
Claus Gittinger <cg@exept.de>
parents: 17124
diff changeset
   381
        ] ifFalse:[
c6ecb8ecff3e class: Autoload
Claus Gittinger <cg@exept.de>
parents: 17124
diff changeset
   382
            "/ no package definition class - look for extensions anyway
c6ecb8ecff3e class: Autoload
Claus Gittinger <cg@exept.de>
parents: 17124
diff changeset
   383
            packageExtensionsFile := (Smalltalk projectDirectoryForPackage:packageID) asFilename / 'extensions.st'.
c6ecb8ecff3e class: Autoload
Claus Gittinger <cg@exept.de>
parents: 17124
diff changeset
   384
            packageExtensionsFile exists ifTrue:[
c6ecb8ecff3e class: Autoload
Claus Gittinger <cg@exept.de>
parents: 17124
diff changeset
   385
                packageExtensionsFile fileIn.
c6ecb8ecff3e class: Autoload
Claus Gittinger <cg@exept.de>
parents: 17124
diff changeset
   386
            ].
15054
1667e3fe9e8b class: Autoload
Claus Gittinger <cg@exept.de>
parents: 14503
diff changeset
   387
        ].
9554
58c5e80cf9a4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9520
diff changeset
   388
    ].
58c5e80cf9a4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9520
diff changeset
   389
860
b3ffea40999a use new becomeSameAs: to migrate to new class.
Claus Gittinger <cg@exept.de>
parents: 789
diff changeset
   390
    [
9428
a46275bc78e7 use the classes name (instead of the identity)
ca
parents: 9422
diff changeset
   391
        InProgressClasses add:myName.
5902
1d9268e8c717 recursive autoload of exception-subclasses
penk
parents: 5820
diff changeset
   392
6075
57f3ae8d2a28 renamed: #allSelectorsAndMethodsDo: into: #instAndClassSelectorsAndMethodsDo:
Claus Gittinger <cg@exept.de>
parents: 5903
diff changeset
   393
        prevMode := ClassCategoryReader sourceMode.
8588
4bf5e572f5d9 Fix recursive autoloading of exception classes.
Stefan Vogel <sv@exept.de>
parents: 8482
diff changeset
   394
        "/ no- do not do this; it may lead to trouble ...
4bf5e572f5d9 Fix recursive autoloading of exception classes.
Stefan Vogel <sv@exept.de>
parents: 8482
diff changeset
   395
        "/  ClassCategoryReader sourceMode:#reference.
1694
29791fde790e autoload classes keep source reference
Claus Gittinger <cg@exept.de>
parents: 1674
diff changeset
   396
6075
57f3ae8d2a28 renamed: #allSelectorsAndMethodsDo: into: #instAndClassSelectorsAndMethodsDo:
Claus Gittinger <cg@exept.de>
parents: 5903
diff changeset
   397
        "/
57f3ae8d2a28 renamed: #allSelectorsAndMethodsDo: into: #instAndClassSelectorsAndMethodsDo:
Claus Gittinger <cg@exept.de>
parents: 5903
diff changeset
   398
        "/ in order to not get a package of private (or whatever),
57f3ae8d2a28 renamed: #allSelectorsAndMethodsDo: into: #instAndClassSelectorsAndMethodsDo:
Claus Gittinger <cg@exept.de>
parents: 5903
diff changeset
   399
        "/ temporarily set the currentProject to nil.
57f3ae8d2a28 renamed: #allSelectorsAndMethodsDo: into: #instAndClassSelectorsAndMethodsDo:
Claus Gittinger <cg@exept.de>
parents: 5903
diff changeset
   400
        "/ we will later set the classes package to something useful
57f3ae8d2a28 renamed: #allSelectorsAndMethodsDo: into: #instAndClassSelectorsAndMethodsDo:
Claus Gittinger <cg@exept.de>
parents: 5903
diff changeset
   401
        "/
57f3ae8d2a28 renamed: #allSelectorsAndMethodsDo: into: #instAndClassSelectorsAndMethodsDo:
Claus Gittinger <cg@exept.de>
parents: 5903
diff changeset
   402
        Project notNil ifTrue:[
57f3ae8d2a28 renamed: #allSelectorsAndMethodsDo: into: #instAndClassSelectorsAndMethodsDo:
Claus Gittinger <cg@exept.de>
parents: 5903
diff changeset
   403
            project := Project current.
57f3ae8d2a28 renamed: #allSelectorsAndMethodsDo: into: #instAndClassSelectorsAndMethodsDo:
Claus Gittinger <cg@exept.de>
parents: 5903
diff changeset
   404
            Project setProject:nil.
57f3ae8d2a28 renamed: #allSelectorsAndMethodsDo: into: #instAndClassSelectorsAndMethodsDo:
Claus Gittinger <cg@exept.de>
parents: 5903
diff changeset
   405
        ].
2375
7eb1b35edc33 autoload into Smalltalk nameSpace - by default.
Claus Gittinger <cg@exept.de>
parents: 2366
diff changeset
   406
6075
57f3ae8d2a28 renamed: #allSelectorsAndMethodsDo: into: #instAndClassSelectorsAndMethodsDo:
Claus Gittinger <cg@exept.de>
parents: 5903
diff changeset
   407
        Class nameSpaceQuerySignal answer:myNameSpace "Smalltalk" 
57f3ae8d2a28 renamed: #allSelectorsAndMethodsDo: into: #instAndClassSelectorsAndMethodsDo:
Claus Gittinger <cg@exept.de>
parents: 5903
diff changeset
   408
        do:[
9554
58c5e80cf9a4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9520
diff changeset
   409
            Class packageQuerySignal answer:packageID 
6075
57f3ae8d2a28 renamed: #allSelectorsAndMethodsDo: into: #instAndClassSelectorsAndMethodsDo:
Claus Gittinger <cg@exept.de>
parents: 5903
diff changeset
   410
            do:[
6081
fedbf974cfe8 dont ask for variable-name conventions while autoloading
Claus Gittinger <cg@exept.de>
parents: 6075
diff changeset
   411
                Class classConventionViolationConfirmationQuerySignal answer:true
fedbf974cfe8 dont ask for variable-name conventions while autoloading
Claus Gittinger <cg@exept.de>
parents: 6075
diff changeset
   412
                do:[
15054
1667e3fe9e8b class: Autoload
Claus Gittinger <cg@exept.de>
parents: 14503
diff changeset
   413
                    |classFileName|
1667e3fe9e8b class: Autoload
Claus Gittinger <cg@exept.de>
parents: 14503
diff changeset
   414
1667e3fe9e8b class: Autoload
Claus Gittinger <cg@exept.de>
parents: 14503
diff changeset
   415
                    classFileName := self classFilename.    
15056
7ee92e75b2c4 class: Autoload
Claus Gittinger <cg@exept.de>
parents: 15054
diff changeset
   416
                    (classFileName notNil and:[classFileName asFilename isAbsolute]) ifTrue:[
10926
64ffe2fe2340 load of explicitly install-as-autoloaded classes:
Claus Gittinger <cg@exept.de>
parents: 10128
diff changeset
   417
                        "/ if filename is absolute, the autoload-class was created by an
64ffe2fe2340 load of explicitly install-as-autoloaded classes:
Claus Gittinger <cg@exept.de>
parents: 10128
diff changeset
   418
                        "/ explicit install-as-autoloaded via the fileBrowser.
15056
7ee92e75b2c4 class: Autoload
Claus Gittinger <cg@exept.de>
parents: 15054
diff changeset
   419
                        Smalltalk fileIn:classFileName lazy:false silent:nil.
10926
64ffe2fe2340 load of explicitly install-as-autoloaded classes:
Claus Gittinger <cg@exept.de>
parents: 10128
diff changeset
   420
                    ] ifFalse:[
64ffe2fe2340 load of explicitly install-as-autoloaded classes:
Claus Gittinger <cg@exept.de>
parents: 10128
diff changeset
   421
                        (Smalltalk 
64ffe2fe2340 load of explicitly install-as-autoloaded classes:
Claus Gittinger <cg@exept.de>
parents: 10128
diff changeset
   422
                            fileInClass:myName
64ffe2fe2340 load of explicitly install-as-autoloaded classes:
Claus Gittinger <cg@exept.de>
parents: 10128
diff changeset
   423
                            package:packageID
64ffe2fe2340 load of explicitly install-as-autoloaded classes:
Claus Gittinger <cg@exept.de>
parents: 10128
diff changeset
   424
                            initialize:false 
64ffe2fe2340 load of explicitly install-as-autoloaded classes:
Claus Gittinger <cg@exept.de>
parents: 10128
diff changeset
   425
                            lazy:LazyLoading
64ffe2fe2340 load of explicitly install-as-autoloaded classes:
Claus Gittinger <cg@exept.de>
parents: 10128
diff changeset
   426
                            silent:nil)  
64ffe2fe2340 load of explicitly install-as-autoloaded classes:
Claus Gittinger <cg@exept.de>
parents: 10128
diff changeset
   427
                        isNil ifTrue:[
64ffe2fe2340 load of explicitly install-as-autoloaded classes:
Claus Gittinger <cg@exept.de>
parents: 10128
diff changeset
   428
                            "/ temporary: try without stx/package prefix
64ffe2fe2340 load of explicitly install-as-autoloaded classes:
Claus Gittinger <cg@exept.de>
parents: 10128
diff changeset
   429
                            "/ this will vanish as soon as source-directory
64ffe2fe2340 load of explicitly install-as-autoloaded classes:
Claus Gittinger <cg@exept.de>
parents: 10128
diff changeset
   430
                            "/ is always guaranteed to contain an stx-subtree
64ffe2fe2340 load of explicitly install-as-autoloaded classes:
Claus Gittinger <cg@exept.de>
parents: 10128
diff changeset
   431
                            ((packageID startsWith:'stx/') 
12260
60f107e81c10 changed: #initialize
Stefan Vogel <sv@exept.de>
parents: 12252
diff changeset
   432
                             or:[packageID startsWith:'stx:']) ifTrue:[
10926
64ffe2fe2340 load of explicitly install-as-autoloaded classes:
Claus Gittinger <cg@exept.de>
parents: 10128
diff changeset
   433
                                Smalltalk 
64ffe2fe2340 load of explicitly install-as-autoloaded classes:
Claus Gittinger <cg@exept.de>
parents: 10128
diff changeset
   434
                                    fileInClass:myName
64ffe2fe2340 load of explicitly install-as-autoloaded classes:
Claus Gittinger <cg@exept.de>
parents: 10128
diff changeset
   435
                                    package:(packageID copyFrom:5)
64ffe2fe2340 load of explicitly install-as-autoloaded classes:
Claus Gittinger <cg@exept.de>
parents: 10128
diff changeset
   436
                                    initialize:false 
64ffe2fe2340 load of explicitly install-as-autoloaded classes:
Claus Gittinger <cg@exept.de>
parents: 10128
diff changeset
   437
                                    lazy:LazyLoading
64ffe2fe2340 load of explicitly install-as-autoloaded classes:
Claus Gittinger <cg@exept.de>
parents: 10128
diff changeset
   438
                                    silent:nil.
64ffe2fe2340 load of explicitly install-as-autoloaded classes:
Claus Gittinger <cg@exept.de>
parents: 10128
diff changeset
   439
                            ]
6081
fedbf974cfe8 dont ask for variable-name conventions while autoloading
Claus Gittinger <cg@exept.de>
parents: 6075
diff changeset
   440
                        ]
6075
57f3ae8d2a28 renamed: #allSelectorsAndMethodsDo: into: #instAndClassSelectorsAndMethodsDo:
Claus Gittinger <cg@exept.de>
parents: 5903
diff changeset
   441
                    ]
57f3ae8d2a28 renamed: #allSelectorsAndMethodsDo: into: #instAndClassSelectorsAndMethodsDo:
Claus Gittinger <cg@exept.de>
parents: 5903
diff changeset
   442
                ]
57f3ae8d2a28 renamed: #allSelectorsAndMethodsDo: into: #instAndClassSelectorsAndMethodsDo:
Claus Gittinger <cg@exept.de>
parents: 5903
diff changeset
   443
            ]
57f3ae8d2a28 renamed: #allSelectorsAndMethodsDo: into: #instAndClassSelectorsAndMethodsDo:
Claus Gittinger <cg@exept.de>
parents: 5903
diff changeset
   444
        ].
8588
4bf5e572f5d9 Fix recursive autoloading of exception classes.
Stefan Vogel <sv@exept.de>
parents: 8482
diff changeset
   445
    ] ensure:[
4bf5e572f5d9 Fix recursive autoloading of exception classes.
Stefan Vogel <sv@exept.de>
parents: 8482
diff changeset
   446
        "restore previous state"
6075
57f3ae8d2a28 renamed: #allSelectorsAndMethodsDo: into: #instAndClassSelectorsAndMethodsDo:
Claus Gittinger <cg@exept.de>
parents: 5903
diff changeset
   447
        ClassCategoryReader sourceMode:prevMode.
57f3ae8d2a28 renamed: #allSelectorsAndMethodsDo: into: #instAndClassSelectorsAndMethodsDo:
Claus Gittinger <cg@exept.de>
parents: 5903
diff changeset
   448
        project notNil ifTrue:[
57f3ae8d2a28 renamed: #allSelectorsAndMethodsDo: into: #instAndClassSelectorsAndMethodsDo:
Claus Gittinger <cg@exept.de>
parents: 5903
diff changeset
   449
            Project setProject:project.
57f3ae8d2a28 renamed: #allSelectorsAndMethodsDo: into: #instAndClassSelectorsAndMethodsDo:
Claus Gittinger <cg@exept.de>
parents: 5903
diff changeset
   450
        ].
9428
a46275bc78e7 use the classes name (instead of the identity)
ca
parents: 9422
diff changeset
   451
        InProgressClasses remove:myName ifAbsent:[].
860
b3ffea40999a use new becomeSameAs: to migrate to new class.
Claus Gittinger <cg@exept.de>
parents: 789
diff changeset
   452
    ].
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   453
8588
4bf5e572f5d9 Fix recursive autoloading of exception classes.
Stefan Vogel <sv@exept.de>
parents: 8482
diff changeset
   454
    "                     
4bf5e572f5d9 Fix recursive autoloading of exception classes.
Stefan Vogel <sv@exept.de>
parents: 8482
diff changeset
   455
      NOTE: ClassLoader did already perform a #becomeSameAs:
4bf5e572f5d9 Fix recursive autoloading of exception classes.
Stefan Vogel <sv@exept.de>
parents: 8482
diff changeset
   456
            of the loaded class to the new class.
4bf5e572f5d9 Fix recursive autoloading of exception classes.
Stefan Vogel <sv@exept.de>
parents: 8482
diff changeset
   457
4bf5e572f5d9 Fix recursive autoloading of exception classes.
Stefan Vogel <sv@exept.de>
parents: 8482
diff changeset
   458
            So some of the code below is no longer needed.
4bf5e572f5d9 Fix recursive autoloading of exception classes.
Stefan Vogel <sv@exept.de>
parents: 8482
diff changeset
   459
    "
4bf5e572f5d9 Fix recursive autoloading of exception classes.
Stefan Vogel <sv@exept.de>
parents: 8482
diff changeset
   460
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   461
    "did it work ?"
164
9bad8fe706e9 *** empty log message ***
claus
parents: 154
diff changeset
   462
    newClass := Smalltalk at:myName.
8588
4bf5e572f5d9 Fix recursive autoloading of exception classes.
Stefan Vogel <sv@exept.de>
parents: 8482
diff changeset
   463
    newClass ~~ self ifTrue:[
4bf5e572f5d9 Fix recursive autoloading of exception classes.
Stefan Vogel <sv@exept.de>
parents: 8482
diff changeset
   464
        "reinstall the autoload class, this will be undone by #become:"
4bf5e572f5d9 Fix recursive autoloading of exception classes.
Stefan Vogel <sv@exept.de>
parents: 8482
diff changeset
   465
        Smalltalk at:myName put:self.
4bf5e572f5d9 Fix recursive autoloading of exception classes.
Stefan Vogel <sv@exept.de>
parents: 8482
diff changeset
   466
    ].
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   467
138
c9f46b635f98 *** empty log message ***
claus
parents: 126
diff changeset
   468
    "no - report the error"
8431
3e06c959dcff #autoload - raise error if fileIn fails.
Stefan Vogel <sv@exept.de>
parents: 8382
diff changeset
   469
    (newClass isNil or:[newClass isLoaded not]) ifTrue:[
6075
57f3ae8d2a28 renamed: #allSelectorsAndMethodsDo: into: #instAndClassSelectorsAndMethodsDo:
Claus Gittinger <cg@exept.de>
parents: 5903
diff changeset
   470
        "
8588
4bf5e572f5d9 Fix recursive autoloading of exception classes.
Stefan Vogel <sv@exept.de>
parents: 8482
diff changeset
   471
         USER INFORMATION:
4bf5e572f5d9 Fix recursive autoloading of exception classes.
Stefan Vogel <sv@exept.de>
parents: 8482
diff changeset
   472
         this exception has been raised because an autoloaded class
4bf5e572f5d9 Fix recursive autoloading of exception classes.
Stefan Vogel <sv@exept.de>
parents: 8482
diff changeset
   473
         could not be loaded. Usually, this happens when
4bf5e572f5d9 Fix recursive autoloading of exception classes.
Stefan Vogel <sv@exept.de>
parents: 8482
diff changeset
   474
         the classes sourcefile is missing, unreadable or if 
6075
57f3ae8d2a28 renamed: #allSelectorsAndMethodsDo: into: #instAndClassSelectorsAndMethodsDo:
Claus Gittinger <cg@exept.de>
parents: 5903
diff changeset
   475
         an entry is missing in the abbreviation file.
8588
4bf5e572f5d9 Fix recursive autoloading of exception classes.
Stefan Vogel <sv@exept.de>
parents: 8482
diff changeset
   476
6075
57f3ae8d2a28 renamed: #allSelectorsAndMethodsDo: into: #instAndClassSelectorsAndMethodsDo:
Claus Gittinger <cg@exept.de>
parents: 5903
diff changeset
   477
         Check for a readable file named <myName>.st 
21403
8f0baf55adbb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21216
diff changeset
   478
         in the 'source' directory and (if the fileName is not the same as the class name) 
8f0baf55adbb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21216
diff changeset
   479
         for a corresponding entry in the abbreviation file 'abbrev.stc'.
6075
57f3ae8d2a28 renamed: #allSelectorsAndMethodsDo: into: #instAndClassSelectorsAndMethodsDo:
Claus Gittinger <cg@exept.de>
parents: 5903
diff changeset
   480
         Finally, your searchpath could be set wrong -
21403
8f0baf55adbb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21216
diff changeset
   481
         the package might not be found along one of the directories named in systemPath.
154
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
   482
8588
4bf5e572f5d9 Fix recursive autoloading of exception classes.
Stefan Vogel <sv@exept.de>
parents: 8482
diff changeset
   483
         In the debugger, press 'Abort' to continue execution.
6075
57f3ae8d2a28 renamed: #allSelectorsAndMethodsDo: into: #instAndClassSelectorsAndMethodsDo:
Claus Gittinger <cg@exept.de>
parents: 5903
diff changeset
   484
        " 
57f3ae8d2a28 renamed: #allSelectorsAndMethodsDo: into: #instAndClassSelectorsAndMethodsDo:
Claus Gittinger <cg@exept.de>
parents: 5903
diff changeset
   485
        AutoloadFailedSignal
57f3ae8d2a28 renamed: #allSelectorsAndMethodsDo: into: #instAndClassSelectorsAndMethodsDo:
Claus Gittinger <cg@exept.de>
parents: 5903
diff changeset
   486
            raiseRequestWith:self
12791
f05a918e7e57 changed: #autoload
Claus Gittinger <cg@exept.de>
parents: 12702
diff changeset
   487
            errorString:('autoload of %1 failed (%2)' 
f05a918e7e57 changed: #autoload
Claus Gittinger <cg@exept.de>
parents: 12702
diff changeset
   488
                            bindWith:myName 
f05a918e7e57 changed: #autoload
Claus Gittinger <cg@exept.de>
parents: 12702
diff changeset
   489
                            with:(newClass isNil ifTrue:['nil result'] ifFalse:['still unloaded'])).
6075
57f3ae8d2a28 renamed: #allSelectorsAndMethodsDo: into: #instAndClassSelectorsAndMethodsDo:
Claus Gittinger <cg@exept.de>
parents: 5903
diff changeset
   490
        ^ nil
938
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   491
    ].
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   492
9554
58c5e80cf9a4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9520
diff changeset
   493
    newClass setPackage:packageID.
9564
14f5f0b2b206 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9556
diff changeset
   494
    newClass instAndClassSelectorsAndMethodsDo:[:sel :mthd | mthd setPackage:packageID].
5527
2817d7e173de set project of all autoloaded methods
Claus Gittinger <cg@exept.de>
parents: 5475
diff changeset
   495
938
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   496
    "/
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   497
    "/ 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
   498
    "/ 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
   499
    "/ info encoded. (binary classes have it)
2057
35003ed4b817 care for the package ID when autoloading
Claus Gittinger <cg@exept.de>
parents: 2019
diff changeset
   500
    "/ If there is no such information, give it my package (if I have one)
938
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   501
    "/
21403
8f0baf55adbb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21216
diff changeset
   502
    "/    newClass setPackageFromRevision.
8f0baf55adbb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21216
diff changeset
   503
    "/
8f0baf55adbb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21216
diff changeset
   504
    "/    newPackage := newClass package.
8f0baf55adbb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21216
diff changeset
   505
    "/    (newPackage isNil or:[newPackage = 'no package']) ifTrue:[
8f0baf55adbb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21216
diff changeset
   506
    "/        (package notNil and:[package ~= 'no package']) ifTrue:[
8f0baf55adbb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21216
diff changeset
   507
    "/            newClass setPackage:packageID.
8f0baf55adbb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21216
diff changeset
   508
    "/        ].
8f0baf55adbb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21216
diff changeset
   509
    "/    ].
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   510
216
a8abff749575 *** empty log message ***
claus
parents: 213
diff changeset
   511
154
d4236ec280a6 *** empty log message ***
claus
parents: 138
diff changeset
   512
    "wow - it worked. now the big trick ..."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   513
21403
8f0baf55adbb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21216
diff changeset
   514
    "/ don't do this:
8f0baf55adbb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21216
diff changeset
   515
    "/   newClass class setSoleInstance:self.   
8f0baf55adbb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21216
diff changeset
   516
    "/   self setName:(self name , ' (auto)').
8f0baf55adbb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21216
diff changeset
   517
    "/ as it will be undone by become ...
921
4db7603f9506 rename myself (just in case) & flush caches after loading
Claus Gittinger <cg@exept.de>
parents: 886
diff changeset
   518
8588
4bf5e572f5d9 Fix recursive autoloading of exception classes.
Stefan Vogel <sv@exept.de>
parents: 8482
diff changeset
   519
    Smalltalk changed:#aboutToAutoloadClass with:(self -> newClass).
4bf5e572f5d9 Fix recursive autoloading of exception classes.
Stefan Vogel <sv@exept.de>
parents: 8482
diff changeset
   520
    newClass ~~ self ifTrue:[
4bf5e572f5d9 Fix recursive autoloading of exception classes.
Stefan Vogel <sv@exept.de>
parents: 8482
diff changeset
   521
        self dependents do:[:aDependent |
4bf5e572f5d9 Fix recursive autoloading of exception classes.
Stefan Vogel <sv@exept.de>
parents: 8482
diff changeset
   522
            newClass addDependent:aDependent
4bf5e572f5d9 Fix recursive autoloading of exception classes.
Stefan Vogel <sv@exept.de>
parents: 8482
diff changeset
   523
        ].
4bf5e572f5d9 Fix recursive autoloading of exception classes.
Stefan Vogel <sv@exept.de>
parents: 8482
diff changeset
   524
        self class becomeSameAs:newClass class.
4bf5e572f5d9 Fix recursive autoloading of exception classes.
Stefan Vogel <sv@exept.de>
parents: 8482
diff changeset
   525
        self becomeSameAs:newClass.
4bf5e572f5d9 Fix recursive autoloading of exception classes.
Stefan Vogel <sv@exept.de>
parents: 8482
diff changeset
   526
4bf5e572f5d9 Fix recursive autoloading of exception classes.
Stefan Vogel <sv@exept.de>
parents: 8482
diff changeset
   527
        ObjectMemory flushCaches.
12702
557c563c2d33 changed: #autoload
Claus Gittinger <cg@exept.de>
parents: 12270
diff changeset
   528
        Class flushSubclassInfoFor:self.
7178
2217cc44b048 changed #autoload.
james
parents: 7092
diff changeset
   529
    ].
921
4db7603f9506 rename myself (just in case) & flush caches after loading
Claus Gittinger <cg@exept.de>
parents: 886
diff changeset
   530
8588
4bf5e572f5d9 Fix recursive autoloading of exception classes.
Stefan Vogel <sv@exept.de>
parents: 8482
diff changeset
   531
    "the rehash here is pure superstition"
4bf5e572f5d9 Fix recursive autoloading of exception classes.
Stefan Vogel <sv@exept.de>
parents: 8482
diff changeset
   532
    LoadedClasses rehash; add:newClass.
921
4db7603f9506 rename myself (just in case) & flush caches after loading
Claus Gittinger <cg@exept.de>
parents: 886
diff changeset
   533
9520
28f01d573376 *** empty log message ***
ca
parents: 9461
diff changeset
   534
    newClass postAutoload.
3443
d57ea75d3ac5 oops - must send #initialize to all privateClasses.
Claus Gittinger <cg@exept.de>
parents: 3287
diff changeset
   535
    newClass initializeWithAllPrivateClasses.
5705
543d3e8ef7c6 send a change notification when autoloading
Claus Gittinger <cg@exept.de>
parents: 5527
diff changeset
   536
543d3e8ef7c6 send a change notification when autoloading
Claus Gittinger <cg@exept.de>
parents: 5527
diff changeset
   537
    Smalltalk changed:#classDefinition with:newClass.
8588
4bf5e572f5d9 Fix recursive autoloading of exception classes.
Stefan Vogel <sv@exept.de>
parents: 8482
diff changeset
   538
    self changed:#loaded with:newClass.
886
62c66d49077d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 860
diff changeset
   539
    ^ newClass
938
a23bc7f62ed1 set package info when autoloading
Claus Gittinger <cg@exept.de>
parents: 922
diff changeset
   540
10128
f3942b8fada3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10123
diff changeset
   541
    "Modified: / 23-10-2006 / 18:12:21 / cg"
21403
8f0baf55adbb #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21216
diff changeset
   542
    "Modified (comment): / 12-02-2017 / 10:48:13 / cg"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   543
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
   544
1862
e8f44f10f1ab changes for new #infoOf: / #linkInfoOf: return
Claus Gittinger <cg@exept.de>
parents: 1720
diff changeset
   545
!Autoload class methodsFor:'message catching'!
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   546
6251
8dc5a2a6b670 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6081
diff changeset
   547
at:arg
21767
070cc7414a41 #DOCUMENTATION by mawalch
mawalch
parents: 21403
diff changeset
   548
    "catch at: - redefined because it is understood"
6251
8dc5a2a6b670 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6081
diff changeset
   549
8482
6ca4f0d2594d Replace obsolete message sends
Stefan Vogel <sv@exept.de>
parents: 8431
diff changeset
   550
    ^ self doesNotUnderstand:(Message selector:#at: argument:arg)
21767
070cc7414a41 #DOCUMENTATION by mawalch
mawalch
parents: 21403
diff changeset
   551
070cc7414a41 #DOCUMENTATION by mawalch
mawalch
parents: 21403
diff changeset
   552
    "Modified (comment): / 22-05-2017 / 18:31:12 / mawalch"
6251
8dc5a2a6b670 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6081
diff changeset
   553
!
8dc5a2a6b670 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6081
diff changeset
   554
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   555
basicNew
1277
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   556
    "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
   557
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   558
    ^ self doesNotUnderstand:(Message selector:#basicNew)
1277
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   559
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   560
    "Modified: 24.4.1996 / 19:53:10 / cg"
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   561
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   562
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   563
basicNew:arg
1277
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   564
    "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
   565
8482
6ca4f0d2594d Replace obsolete message sends
Stefan Vogel <sv@exept.de>
parents: 8431
diff changeset
   566
    ^ self doesNotUnderstand:(Message selector:#basicNew: argument:arg)
1277
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   567
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   568
    "Modified: 24.4.1996 / 19:53:16 / cg"
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   569
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   570
8185
e09efa26b6f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7744
diff changeset
   571
classResources
8316
4023c53e9320 Initialie classvar
Stefan Vogel <sv@exept.de>
parents: 8306
diff changeset
   572
    "catch classResources - load the class and resend to the real one"
8185
e09efa26b6f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7744
diff changeset
   573
e09efa26b6f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7744
diff changeset
   574
    ^ self doesNotUnderstand:(Message selector:#classResources)
e09efa26b6f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7744
diff changeset
   575
!
e09efa26b6f8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7744
diff changeset
   576
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   577
comment
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   578
    "return the classes comment.
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   579
     Autoloaded classes have no comment; but I myself have one"
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   580
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   581
    (self == Autoload) ifTrue:[^ super comment].
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   582
    ^ 'not yet loaded'
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   583
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   584
6768
4ccf91dfeba2 oops - catch #copy
penk
parents: 6602
diff changeset
   585
copy
4ccf91dfeba2 oops - catch #copy
penk
parents: 6602
diff changeset
   586
    "catch copy - load the class and resend #copy to the real one"
4ccf91dfeba2 oops - catch #copy
penk
parents: 6602
diff changeset
   587
4ccf91dfeba2 oops - catch #copy
penk
parents: 6602
diff changeset
   588
    ^ self doesNotUnderstand:(Message selector:#copy)
4ccf91dfeba2 oops - catch #copy
penk
parents: 6602
diff changeset
   589
!
4ccf91dfeba2 oops - catch #copy
penk
parents: 6602
diff changeset
   590
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   591
doesNotUnderstand:aMessage
2689
ada9b102abcf typo fix
Claus Gittinger <cg@exept.de>
parents: 2666
diff changeset
   592
    "caught a message; load the class and retry the message"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   593
a27a279701f8 Initial revision
claus
parents:
diff changeset
   594
    |newClass|
a27a279701f8 Initial revision
claus
parents:
diff changeset
   595
164
9bad8fe706e9 *** empty log message ***
claus
parents: 154
diff changeset
   596
    self ~~ Autoload ifTrue:[
7178
2217cc44b048 changed #autoload.
james
parents: 7092
diff changeset
   597
        newClass := self autoload.
10095
8b73365de8c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10052
diff changeset
   598
        (newClass notNil and:[newClass isLoaded]) ifTrue:[
7178
2217cc44b048 changed #autoload.
james
parents: 7092
diff changeset
   599
            ^ aMessage sendTo:newClass
2217cc44b048 changed #autoload.
james
parents: 7092
diff changeset
   600
        ]
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   601
    ].
789
155eca125ef0 return value from doesNotUnderstand (so handler can return a value)
Claus Gittinger <cg@exept.de>
parents: 739
diff changeset
   602
    ^ super doesNotUnderstand:aMessage
1277
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   603
10095
8b73365de8c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10052
diff changeset
   604
    "Modified: / 16-10-2006 / 16:52:20 / cg"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   605
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   606
7574
8041a5795bbf catch #error
tm
parents: 7280
diff changeset
   607
error
8041a5795bbf catch #error
tm
parents: 7280
diff changeset
   608
    "catch error - load the class and resend #error to the real one"
8041a5795bbf catch #error
tm
parents: 7280
diff changeset
   609
8041a5795bbf catch #error
tm
parents: 7280
diff changeset
   610
    ^ self doesNotUnderstand:(Message selector:#error)
8041a5795bbf catch #error
tm
parents: 7280
diff changeset
   611
!
8041a5795bbf catch #error
tm
parents: 7280
diff changeset
   612
8709
25088287bbd0 Catch #fromString: (for autoloaded classes from Dolphin)
Stefan Vogel <sv@exept.de>
parents: 8590
diff changeset
   613
fromString:aString
25088287bbd0 Catch #fromString: (for autoloaded classes from Dolphin)
Stefan Vogel <sv@exept.de>
parents: 8590
diff changeset
   614
    "catch  - load the class and send it to the real one"
25088287bbd0 Catch #fromString: (for autoloaded classes from Dolphin)
Stefan Vogel <sv@exept.de>
parents: 8590
diff changeset
   615
25088287bbd0 Catch #fromString: (for autoloaded classes from Dolphin)
Stefan Vogel <sv@exept.de>
parents: 8590
diff changeset
   616
    ^ self doesNotUnderstand:(Message selector:#fromString: argument:aString)
25088287bbd0 Catch #fromString: (for autoloaded classes from Dolphin)
Stefan Vogel <sv@exept.de>
parents: 8590
diff changeset
   617
!
25088287bbd0 Catch #fromString: (for autoloaded classes from Dolphin)
Stefan Vogel <sv@exept.de>
parents: 8590
diff changeset
   618
16026
08d949e6f7af class: Autoload
Claus Gittinger <cg@exept.de>
parents: 15784
diff changeset
   619
handle:handler do:aBlock
19694
974f6b10c7b5 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 18911
diff changeset
   620
    "autoload the class and resend"
974f6b10c7b5 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 18911
diff changeset
   621
974f6b10c7b5 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 18911
diff changeset
   622
    ^ self doesNotUnderstand:(Message selector:#handle:do: argument:handler argument:aBlock)
16026
08d949e6f7af class: Autoload
Claus Gittinger <cg@exept.de>
parents: 15784
diff changeset
   623
!
08d949e6f7af class: Autoload
Claus Gittinger <cg@exept.de>
parents: 15784
diff changeset
   624
14503
286c53d82fa9 class: Autoload
Claus Gittinger <cg@exept.de>
parents: 14502
diff changeset
   625
isAbstract
18911
1a23d9ffc0e9 #UI_ENHANCEMENT
Claus Gittinger <cg@exept.de>
parents: 18354
diff changeset
   626
    ^ false "/ actually: don't know, but do not want to load my class for this query
14503
286c53d82fa9 class: Autoload
Claus Gittinger <cg@exept.de>
parents: 14502
diff changeset
   627
!
286c53d82fa9 class: Autoload
Claus Gittinger <cg@exept.de>
parents: 14502
diff changeset
   628
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   629
new
2663
2ce59f3b8c2b comments
Claus Gittinger <cg@exept.de>
parents: 2662
diff changeset
   630
    "catch new - load the class and resend #new to the real one"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   631
a27a279701f8 Initial revision
claus
parents:
diff changeset
   632
    ^ self doesNotUnderstand:(Message selector:#new)
1277
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   633
2663
2ce59f3b8c2b comments
Claus Gittinger <cg@exept.de>
parents: 2662
diff changeset
   634
    "Modified: 26.5.1997 / 14:59:52 / cg"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   635
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   636
a27a279701f8 Initial revision
claus
parents:
diff changeset
   637
new:arg
21767
070cc7414a41 #DOCUMENTATION by mawalch
mawalch
parents: 21403
diff changeset
   638
    "catch new: - load the class and resend #new: to the real one"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   639
8482
6ca4f0d2594d Replace obsolete message sends
Stefan Vogel <sv@exept.de>
parents: 8431
diff changeset
   640
    ^ self doesNotUnderstand:(Message selector:#new: argument:arg)
1277
7acd342fb251 commentary
Claus Gittinger <cg@exept.de>
parents: 1266
diff changeset
   641
21767
070cc7414a41 #DOCUMENTATION by mawalch
mawalch
parents: 21403
diff changeset
   642
    "Modified: / 26-05-1997 / 14:59:58 / cg"
070cc7414a41 #DOCUMENTATION by mawalch
mawalch
parents: 21403
diff changeset
   643
    "Modified (comment): / 22-05-2017 / 18:32:43 / mawalch"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   644
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   645
9373
e312f2f2901c #classNamed: now loads autoloaded classes if a (possibly) private class of an
Stefan Vogel <sv@exept.de>
parents: 9218
diff changeset
   646
privateClassesAt:aClassNameString
e312f2f2901c #classNamed: now loads autoloaded classes if a (possibly) private class of an
Stefan Vogel <sv@exept.de>
parents: 9218
diff changeset
   647
    "catch  - load the class and send it to the real one"
e312f2f2901c #classNamed: now loads autoloaded classes if a (possibly) private class of an
Stefan Vogel <sv@exept.de>
parents: 9218
diff changeset
   648
e312f2f2901c #classNamed: now loads autoloaded classes if a (possibly) private class of an
Stefan Vogel <sv@exept.de>
parents: 9218
diff changeset
   649
    self == Autoload ifTrue:[
e312f2f2901c #classNamed: now loads autoloaded classes if a (possibly) private class of an
Stefan Vogel <sv@exept.de>
parents: 9218
diff changeset
   650
        ^ super privateClassesAt:aClassNameString.
e312f2f2901c #classNamed: now loads autoloaded classes if a (possibly) private class of an
Stefan Vogel <sv@exept.de>
parents: 9218
diff changeset
   651
    ].
e312f2f2901c #classNamed: now loads autoloaded classes if a (possibly) private class of an
Stefan Vogel <sv@exept.de>
parents: 9218
diff changeset
   652
    ^ self doesNotUnderstand:(Message selector:#privateClassesAt: argument:aClassNameString)
e312f2f2901c #classNamed: now loads autoloaded classes if a (possibly) private class of an
Stefan Vogel <sv@exept.de>
parents: 9218
diff changeset
   653
!
e312f2f2901c #classNamed: now loads autoloaded classes if a (possibly) private class of an
Stefan Vogel <sv@exept.de>
parents: 9218
diff changeset
   654
1438
76fdecf85f9e Catch readFrom: and readFromString: too.
Stefan Vogel <sv@exept.de>
parents: 1437
diff changeset
   655
readFrom:aStream 
76fdecf85f9e Catch readFrom: and readFromString: too.
Stefan Vogel <sv@exept.de>
parents: 1437
diff changeset
   656
    "catch  - load the class and send it to the real one"
76fdecf85f9e Catch readFrom: and readFromString: too.
Stefan Vogel <sv@exept.de>
parents: 1437
diff changeset
   657
8482
6ca4f0d2594d Replace obsolete message sends
Stefan Vogel <sv@exept.de>
parents: 8431
diff changeset
   658
    ^ self doesNotUnderstand:(Message selector:#readFrom: argument:aStream)
1438
76fdecf85f9e Catch readFrom: and readFromString: too.
Stefan Vogel <sv@exept.de>
parents: 1437
diff changeset
   659
76fdecf85f9e Catch readFrom: and readFromString: too.
Stefan Vogel <sv@exept.de>
parents: 1437
diff changeset
   660
    "Created: 22.5.1996 / 23:44:23 / stefan"
76fdecf85f9e Catch readFrom: and readFromString: too.
Stefan Vogel <sv@exept.de>
parents: 1437
diff changeset
   661
!
76fdecf85f9e Catch readFrom: and readFromString: too.
Stefan Vogel <sv@exept.de>
parents: 1437
diff changeset
   662
1437
2a167c1f9f35 Catch readFrom:onError et al.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   663
readFrom:aStream onError:exceptionBlock
2a167c1f9f35 Catch readFrom:onError et al.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   664
    "catch  - load the class and send it to the real one"
2a167c1f9f35 Catch readFrom:onError et al.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   665
19694
974f6b10c7b5 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 18911
diff changeset
   666
    ^ self doesNotUnderstand:(Message selector:#readFrom:onError: argument:aStream argument:exceptionBlock)
1437
2a167c1f9f35 Catch readFrom:onError et al.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   667
2a167c1f9f35 Catch readFrom:onError et al.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   668
    "Created: 22.5.1996 / 23:03:39 / stefan"
2a167c1f9f35 Catch readFrom:onError et al.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   669
!
2a167c1f9f35 Catch readFrom:onError et al.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   670
1438
76fdecf85f9e Catch readFrom: and readFromString: too.
Stefan Vogel <sv@exept.de>
parents: 1437
diff changeset
   671
readFromString:aString
76fdecf85f9e Catch readFrom: and readFromString: too.
Stefan Vogel <sv@exept.de>
parents: 1437
diff changeset
   672
    "catch  - load the class and send it to the real one"
76fdecf85f9e Catch readFrom: and readFromString: too.
Stefan Vogel <sv@exept.de>
parents: 1437
diff changeset
   673
8482
6ca4f0d2594d Replace obsolete message sends
Stefan Vogel <sv@exept.de>
parents: 8431
diff changeset
   674
    ^ self doesNotUnderstand:(Message selector:#readFromString: argument:aString)
1438
76fdecf85f9e Catch readFrom: and readFromString: too.
Stefan Vogel <sv@exept.de>
parents: 1437
diff changeset
   675
76fdecf85f9e Catch readFrom: and readFromString: too.
Stefan Vogel <sv@exept.de>
parents: 1437
diff changeset
   676
    "Created: 22.5.1996 / 23:46:15 / stefan"
76fdecf85f9e Catch readFrom: and readFromString: too.
Stefan Vogel <sv@exept.de>
parents: 1437
diff changeset
   677
!
76fdecf85f9e Catch readFrom: and readFromString: too.
Stefan Vogel <sv@exept.de>
parents: 1437
diff changeset
   678
1437
2a167c1f9f35 Catch readFrom:onError et al.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   679
readFromString:aString onError:exceptionBlock
2a167c1f9f35 Catch readFrom:onError et al.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   680
    "catch  - load the class and send it to the real one"
2a167c1f9f35 Catch readFrom:onError et al.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   681
19694
974f6b10c7b5 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 18911
diff changeset
   682
    ^ self doesNotUnderstand:(Message selector:#readFromString:onError: argument:aString argument:exceptionBlock)
1437
2a167c1f9f35 Catch readFrom:onError et al.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   683
2a167c1f9f35 Catch readFrom:onError et al.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   684
    "Created: 22.5.1996 / 23:04:49 / stefan"
2a167c1f9f35 Catch readFrom:onError et al.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   685
!
2a167c1f9f35 Catch readFrom:onError et al.
Stefan Vogel <sv@exept.de>
parents: 1414
diff changeset
   686
2691
33221e233f79 when asked via #respondsTo:, load & resend
Claus Gittinger <cg@exept.de>
parents: 2689
diff changeset
   687
respondsTo:aSelector
21767
070cc7414a41 #DOCUMENTATION by mawalch
mawalch
parents: 21403
diff changeset
   688
    "catch respondsTo: - load the class and resend #respondsTo: to the real one"
2691
33221e233f79 when asked via #respondsTo:, load & resend
Claus Gittinger <cg@exept.de>
parents: 2689
diff changeset
   689
33221e233f79 when asked via #respondsTo:, load & resend
Claus Gittinger <cg@exept.de>
parents: 2689
diff changeset
   690
    self == Autoload ifTrue:[
7178
2217cc44b048 changed #autoload.
james
parents: 7092
diff changeset
   691
        ^ super respondsTo:aSelector
2691
33221e233f79 when asked via #respondsTo:, load & resend
Claus Gittinger <cg@exept.de>
parents: 2689
diff changeset
   692
    ].
8482
6ca4f0d2594d Replace obsolete message sends
Stefan Vogel <sv@exept.de>
parents: 8431
diff changeset
   693
    ^ self doesNotUnderstand:(Message selector:#respondsTo: argument:aSelector)
2691
33221e233f79 when asked via #respondsTo:, load & resend
Claus Gittinger <cg@exept.de>
parents: 2689
diff changeset
   694
21767
070cc7414a41 #DOCUMENTATION by mawalch
mawalch
parents: 21403
diff changeset
   695
    "Modified: / 26-05-1997 / 14:59:58 / cg"
070cc7414a41 #DOCUMENTATION by mawalch
mawalch
parents: 21403
diff changeset
   696
    "Modified (comment): / 22-05-2017 / 18:33:08 / mawalch"
8306
5b610781e787 *** empty log message ***
werner
parents: 8185
diff changeset
   697
!
5b610781e787 *** empty log message ***
werner
parents: 8185
diff changeset
   698
11058
66c655c1a7cb catch and resend #value
Stefan Vogel <sv@exept.de>
parents: 10928
diff changeset
   699
value
66c655c1a7cb catch and resend #value
Stefan Vogel <sv@exept.de>
parents: 10928
diff changeset
   700
    "catch value - load the class and resend #value to the real one"
66c655c1a7cb catch and resend #value
Stefan Vogel <sv@exept.de>
parents: 10928
diff changeset
   701
66c655c1a7cb catch and resend #value
Stefan Vogel <sv@exept.de>
parents: 10928
diff changeset
   702
    ^ self doesNotUnderstand:(Message selector:#value)
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   703
! !
11
6bf3080856be *** empty log message ***
claus
parents: 5
diff changeset
   704
8316
4023c53e9320 Initialie classvar
Stefan Vogel <sv@exept.de>
parents: 8306
diff changeset
   705
!Autoload class methodsFor:'private'!
4023c53e9320 Initialie classvar
Stefan Vogel <sv@exept.de>
parents: 8306
diff changeset
   706
4023c53e9320 Initialie classvar
Stefan Vogel <sv@exept.de>
parents: 8306
diff changeset
   707
loadAndResendMessage
4023c53e9320 Initialie classvar
Stefan Vogel <sv@exept.de>
parents: 8306
diff changeset
   708
    "common helper to autoload a class and define a subclass of it by sending
4023c53e9320 Initialie classvar
Stefan Vogel <sv@exept.de>
parents: 8306
diff changeset
   709
     the sender-message again.
4023c53e9320 Initialie classvar
Stefan Vogel <sv@exept.de>
parents: 8306
diff changeset
   710
     This is invoked by all #subClass... definition messages."
4023c53e9320 Initialie classvar
Stefan Vogel <sv@exept.de>
parents: 8306
diff changeset
   711
4023c53e9320 Initialie classvar
Stefan Vogel <sv@exept.de>
parents: 8306
diff changeset
   712
    |sel args newClass|
4023c53e9320 Initialie classvar
Stefan Vogel <sv@exept.de>
parents: 8306
diff changeset
   713
4023c53e9320 Initialie classvar
Stefan Vogel <sv@exept.de>
parents: 8306
diff changeset
   714
    sel := thisContext sender selector.
4023c53e9320 Initialie classvar
Stefan Vogel <sv@exept.de>
parents: 8306
diff changeset
   715
    args := thisContext sender args.
4023c53e9320 Initialie classvar
Stefan Vogel <sv@exept.de>
parents: 8306
diff changeset
   716
4023c53e9320 Initialie classvar
Stefan Vogel <sv@exept.de>
parents: 8306
diff changeset
   717
    "take care: subclassing Autoload must still be possible"
4023c53e9320 Initialie classvar
Stefan Vogel <sv@exept.de>
parents: 8306
diff changeset
   718
    (self == Autoload) ifTrue:[
12260
60f107e81c10 changed: #initialize
Stefan Vogel <sv@exept.de>
parents: 12252
diff changeset
   719
        ^ self perform:sel inClass:self class superclass withArguments:args
8316
4023c53e9320 Initialie classvar
Stefan Vogel <sv@exept.de>
parents: 8306
diff changeset
   720
    ].
4023c53e9320 Initialie classvar
Stefan Vogel <sv@exept.de>
parents: 8306
diff changeset
   721
4023c53e9320 Initialie classvar
Stefan Vogel <sv@exept.de>
parents: 8306
diff changeset
   722
    newClass := self autoload.
4023c53e9320 Initialie classvar
Stefan Vogel <sv@exept.de>
parents: 8306
diff changeset
   723
    newClass notNil ifTrue:[
9556
1556db314fec *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9554
diff changeset
   724
        newClass isLoaded ifTrue:[
1556db314fec *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9554
diff changeset
   725
            ^ newClass perform:sel withArguments:args
1556db314fec *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9554
diff changeset
   726
        ].
1556db314fec *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9554
diff changeset
   727
        Transcript showCR:'Autoload [warning]: failed to autoload ',self name.
8316
4023c53e9320 Initialie classvar
Stefan Vogel <sv@exept.de>
parents: 8306
diff changeset
   728
    ].
4023c53e9320 Initialie classvar
Stefan Vogel <sv@exept.de>
parents: 8306
diff changeset
   729
    ^ nil
4023c53e9320 Initialie classvar
Stefan Vogel <sv@exept.de>
parents: 8306
diff changeset
   730
9556
1556db314fec *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9554
diff changeset
   731
    "Created: / 08-02-1997 / 19:42:47 / cg"
1556db314fec *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9554
diff changeset
   732
    "Modified: / 17-08-2006 / 11:12:24 / cg"
8316
4023c53e9320 Initialie classvar
Stefan Vogel <sv@exept.de>
parents: 8306
diff changeset
   733
! !
4023c53e9320 Initialie classvar
Stefan Vogel <sv@exept.de>
parents: 8306
diff changeset
   734
1862
e8f44f10f1ab changes for new #infoOf: / #linkInfoOf: return
Claus Gittinger <cg@exept.de>
parents: 1720
diff changeset
   735
!Autoload class methodsFor:'queries'!
356
claus
parents: 345
diff changeset
   736
23306
7c75f151daae #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22937
diff changeset
   737
accepts:aSignalOrExceptionClass
8588
4bf5e572f5d9 Fix recursive autoloading of exception classes.
Stefan Vogel <sv@exept.de>
parents: 8482
diff changeset
   738
    "redefined to avoid recursive autoload.
4bf5e572f5d9 Fix recursive autoloading of exception classes.
Stefan Vogel <sv@exept.de>
parents: 8482
diff changeset
   739
     (#autoload eventually raises QueryExceptions.
4bf5e572f5d9 Fix recursive autoloading of exception classes.
Stefan Vogel <sv@exept.de>
parents: 8482
diff changeset
   740
      These exception may send #accepts: to exception classes
4bf5e572f5d9 Fix recursive autoloading of exception classes.
Stefan Vogel <sv@exept.de>
parents: 8482
diff changeset
   741
      that are currently being loaded)"
5902
1d9268e8c717 recursive autoload of exception-subclasses
penk
parents: 5820
diff changeset
   742
1d9268e8c717 recursive autoload of exception-subclasses
penk
parents: 5820
diff changeset
   743
    |newClass|
1d9268e8c717 recursive autoload of exception-subclasses
penk
parents: 5820
diff changeset
   744
1d9268e8c717 recursive autoload of exception-subclasses
penk
parents: 5820
diff changeset
   745
    self isBeingLoaded ifFalse:[
7178
2217cc44b048 changed #autoload.
james
parents: 7092
diff changeset
   746
        newClass := self autoload.
2217cc44b048 changed #autoload.
james
parents: 7092
diff changeset
   747
        newClass notNil ifTrue:[
23306
7c75f151daae #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22937
diff changeset
   748
            ^ newClass accepts:aSignalOrExceptionClass
7178
2217cc44b048 changed #autoload.
james
parents: 7092
diff changeset
   749
        ].
5902
1d9268e8c717 recursive autoload of exception-subclasses
penk
parents: 5820
diff changeset
   750
    ].
1d9268e8c717 recursive autoload of exception-subclasses
penk
parents: 5820
diff changeset
   751
    ^ false
23306
7c75f151daae #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22937
diff changeset
   752
7c75f151daae #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22937
diff changeset
   753
    "Modified (format): / 28-08-2018 / 11:15:13 / Claus Gittinger"
5902
1d9268e8c717 recursive autoload of exception-subclasses
penk
parents: 5820
diff changeset
   754
!
1d9268e8c717 recursive autoload of exception-subclasses
penk
parents: 5820
diff changeset
   755
15236
31a3ab65d988 class: Autoload
Stefan Vogel <sv@exept.de>
parents: 15056
diff changeset
   756
handles:anException
31a3ab65d988 class: Autoload
Stefan Vogel <sv@exept.de>
parents: 15056
diff changeset
   757
    "redefined to avoid recursive autoload.
31a3ab65d988 class: Autoload
Stefan Vogel <sv@exept.de>
parents: 15056
diff changeset
   758
     (#autoload eventually raises QueryExceptions.
31a3ab65d988 class: Autoload
Stefan Vogel <sv@exept.de>
parents: 15056
diff changeset
   759
      These exception may send #handles: to exception classes
31a3ab65d988 class: Autoload
Stefan Vogel <sv@exept.de>
parents: 15056
diff changeset
   760
      that are currently being loaded)"
31a3ab65d988 class: Autoload
Stefan Vogel <sv@exept.de>
parents: 15056
diff changeset
   761
31a3ab65d988 class: Autoload
Stefan Vogel <sv@exept.de>
parents: 15056
diff changeset
   762
    |newClass|
31a3ab65d988 class: Autoload
Stefan Vogel <sv@exept.de>
parents: 15056
diff changeset
   763
31a3ab65d988 class: Autoload
Stefan Vogel <sv@exept.de>
parents: 15056
diff changeset
   764
    self isBeingLoaded ifFalse:[
31a3ab65d988 class: Autoload
Stefan Vogel <sv@exept.de>
parents: 15056
diff changeset
   765
        newClass := self autoload.
31a3ab65d988 class: Autoload
Stefan Vogel <sv@exept.de>
parents: 15056
diff changeset
   766
        newClass notNil ifTrue:[
31a3ab65d988 class: Autoload
Stefan Vogel <sv@exept.de>
parents: 15056
diff changeset
   767
            ^ newClass handles:anException
31a3ab65d988 class: Autoload
Stefan Vogel <sv@exept.de>
parents: 15056
diff changeset
   768
        ].
31a3ab65d988 class: Autoload
Stefan Vogel <sv@exept.de>
parents: 15056
diff changeset
   769
    ].
31a3ab65d988 class: Autoload
Stefan Vogel <sv@exept.de>
parents: 15056
diff changeset
   770
    ^ false
31a3ab65d988 class: Autoload
Stefan Vogel <sv@exept.de>
parents: 15056
diff changeset
   771
!
31a3ab65d988 class: Autoload
Stefan Vogel <sv@exept.de>
parents: 15056
diff changeset
   772
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   773
isBehavior
22937
8905c05c3a4b #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21767
diff changeset
   774
    "return true, if the receiver is describing another object's' behavior.
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   775
     Autoloaded classes are definitely; therefore return true."
164
9bad8fe706e9 *** empty log message ***
claus
parents: 154
diff changeset
   776
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   777
    ^ true
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   778
!
356
claus
parents: 345
diff changeset
   779
5902
1d9268e8c717 recursive autoload of exception-subclasses
penk
parents: 5820
diff changeset
   780
isBeingLoaded
8588
4bf5e572f5d9 Fix recursive autoloading of exception classes.
Stefan Vogel <sv@exept.de>
parents: 8482
diff changeset
   781
    "answer true if the class loading is currently in process"
4bf5e572f5d9 Fix recursive autoloading of exception classes.
Stefan Vogel <sv@exept.de>
parents: 8482
diff changeset
   782
9461
791adb50075f avoid "recursive autoload" error when doing explicit autoload of subclasses
Stefan Vogel <sv@exept.de>
parents: 9428
diff changeset
   783
    ^ (self ~~ Autoload) and:[InProgressClasses includes:self name asSymbol]
5902
1d9268e8c717 recursive autoload of exception-subclasses
penk
parents: 5820
diff changeset
   784
1d9268e8c717 recursive autoload of exception-subclasses
penk
parents: 5820
diff changeset
   785
    "Modified: / 16.2.1998 / 11:57:35 / stefan"
1d9268e8c717 recursive autoload of exception-subclasses
penk
parents: 5820
diff changeset
   786
!
1d9268e8c717 recursive autoload of exception-subclasses
penk
parents: 5820
diff changeset
   787
729
67a60a088d56 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 727
diff changeset
   788
isBuiltInClass
1266
cef9b3cd49df commentary
Claus Gittinger <cg@exept.de>
parents: 1148
diff changeset
   789
    "return true if this class is known by the run-time-system.
cef9b3cd49df commentary
Claus Gittinger <cg@exept.de>
parents: 1148
diff changeset
   790
     Returns false here."
cef9b3cd49df commentary
Claus Gittinger <cg@exept.de>
parents: 1148
diff changeset
   791
729
67a60a088d56 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 727
diff changeset
   792
    ^ false
67a60a088d56 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 727
diff changeset
   793
67a60a088d56 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 727
diff changeset
   794
    "Created: 10.12.1995 / 00:28:22 / cg"
1266
cef9b3cd49df commentary
Claus Gittinger <cg@exept.de>
parents: 1148
diff changeset
   795
    "Modified: 23.4.1996 / 15:55:36 / cg"
729
67a60a088d56 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 727
diff changeset
   796
!
67a60a088d56 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 727
diff changeset
   797
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   798
isLoaded
3287
f3761386e4ba Comment
Stefan Vogel <sv@exept.de>
parents: 3267
diff changeset
   799
    "return true, if the class has been loaded.
f3761386e4ba Comment
Stefan Vogel <sv@exept.de>
parents: 3267
diff changeset
   800
     Autoload itself is loaded, subclasses are not.
15563
932f9fc3597c class: Autoload
Claus Gittinger <cg@exept.de>
parents: 15236
diff changeset
   801
     This allows testing whether a class has already been loaded."
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   802
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   803
    ^ (self == Autoload)
3287
f3761386e4ba Comment
Stefan Vogel <sv@exept.de>
parents: 3267
diff changeset
   804
15563
932f9fc3597c class: Autoload
Claus Gittinger <cg@exept.de>
parents: 15236
diff changeset
   805
    "Modified: / 16-02-1998 / 11:57:35 / stefan"
932f9fc3597c class: Autoload
Claus Gittinger <cg@exept.de>
parents: 15236
diff changeset
   806
    "Modified (comment): / 27-07-2013 / 15:35:01 / cg"
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   807
!
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   808
922
0e8e0d920d0d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 921
diff changeset
   809
loadedClasses
0e8e0d920d0d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 921
diff changeset
   810
    "return the set of classes that were autoloaded"
0e8e0d920d0d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 921
diff changeset
   811
8316
4023c53e9320 Initialie classvar
Stefan Vogel <sv@exept.de>
parents: 8306
diff changeset
   812
    ^ LoadedClasses
922
0e8e0d920d0d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 921
diff changeset
   813
!
0e8e0d920d0d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 921
diff changeset
   814
4401
d9667432d35b privateClasses and allPrivateClasses
Claus Gittinger <cg@exept.de>
parents: 4301
diff changeset
   815
privateClassesOrAll:allOfThem
4000
0f00add4298e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3655
diff changeset
   816
    "an autoloaded class has none"
0f00add4298e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3655
diff changeset
   817
0f00add4298e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3655
diff changeset
   818
    ^ #()
0f00add4298e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3655
diff changeset
   819
!
0f00add4298e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3655
diff changeset
   820
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   821
wasAutoloaded:aClass
922
0e8e0d920d0d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 921
diff changeset
   822
    "return true, if aClass was autoloaded"
0e8e0d920d0d *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 921
diff changeset
   823
8316
4023c53e9320 Initialie classvar
Stefan Vogel <sv@exept.de>
parents: 8306
diff changeset
   824
    ^ LoadedClasses includes:aClass
11
6bf3080856be *** empty log message ***
claus
parents: 5
diff changeset
   825
! !
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   826
13288
c525954778c6 added: #withClass:loadedDo:
Claus Gittinger <cg@exept.de>
parents: 12791
diff changeset
   827
!Autoload class methodsFor:'utilities'!
c525954778c6 added: #withClass:loadedDo:
Claus Gittinger <cg@exept.de>
parents: 12791
diff changeset
   828
c525954778c6 added: #withClass:loadedDo:
Claus Gittinger <cg@exept.de>
parents: 12791
diff changeset
   829
withClass:aClass loadedDo:aBlock
c525954778c6 added: #withClass:loadedDo:
Claus Gittinger <cg@exept.de>
parents: 12791
diff changeset
   830
    "ensure that aClass is loaded, while evaluating aBlock for it"
c525954778c6 added: #withClass:loadedDo:
Claus Gittinger <cg@exept.de>
parents: 12791
diff changeset
   831
c525954778c6 added: #withClass:loadedDo:
Claus Gittinger <cg@exept.de>
parents: 12791
diff changeset
   832
    |wasLoaded loadedClass|
c525954778c6 added: #withClass:loadedDo:
Claus Gittinger <cg@exept.de>
parents: 12791
diff changeset
   833
c525954778c6 added: #withClass:loadedDo:
Claus Gittinger <cg@exept.de>
parents: 12791
diff changeset
   834
    wasLoaded := aClass isLoaded.
c525954778c6 added: #withClass:loadedDo:
Claus Gittinger <cg@exept.de>
parents: 12791
diff changeset
   835
    wasLoaded ifTrue:[  
c525954778c6 added: #withClass:loadedDo:
Claus Gittinger <cg@exept.de>
parents: 12791
diff changeset
   836
        ^ aBlock value:aClass
c525954778c6 added: #withClass:loadedDo:
Claus Gittinger <cg@exept.de>
parents: 12791
diff changeset
   837
    ].
c525954778c6 added: #withClass:loadedDo:
Claus Gittinger <cg@exept.de>
parents: 12791
diff changeset
   838
c525954778c6 added: #withClass:loadedDo:
Claus Gittinger <cg@exept.de>
parents: 12791
diff changeset
   839
    ParserFlags 
c525954778c6 added: #withClass:loadedDo:
Claus Gittinger <cg@exept.de>
parents: 12791
diff changeset
   840
        withSTCCompilation:#never 
c525954778c6 added: #withClass:loadedDo:
Claus Gittinger <cg@exept.de>
parents: 12791
diff changeset
   841
        do:[
c525954778c6 added: #withClass:loadedDo:
Claus Gittinger <cg@exept.de>
parents: 12791
diff changeset
   842
            loadedClass := aClass autoload.
c525954778c6 added: #withClass:loadedDo:
Claus Gittinger <cg@exept.de>
parents: 12791
diff changeset
   843
        ].
c525954778c6 added: #withClass:loadedDo:
Claus Gittinger <cg@exept.de>
parents: 12791
diff changeset
   844
c525954778c6 added: #withClass:loadedDo:
Claus Gittinger <cg@exept.de>
parents: 12791
diff changeset
   845
c525954778c6 added: #withClass:loadedDo:
Claus Gittinger <cg@exept.de>
parents: 12791
diff changeset
   846
    ^ [
c525954778c6 added: #withClass:loadedDo:
Claus Gittinger <cg@exept.de>
parents: 12791
diff changeset
   847
        aBlock value:loadedClass
c525954778c6 added: #withClass:loadedDo:
Claus Gittinger <cg@exept.de>
parents: 12791
diff changeset
   848
      ] ensure:[
c525954778c6 added: #withClass:loadedDo:
Claus Gittinger <cg@exept.de>
parents: 12791
diff changeset
   849
        aClass unload
c525954778c6 added: #withClass:loadedDo:
Claus Gittinger <cg@exept.de>
parents: 12791
diff changeset
   850
      ]
c525954778c6 added: #withClass:loadedDo:
Claus Gittinger <cg@exept.de>
parents: 12791
diff changeset
   851
c525954778c6 added: #withClass:loadedDo:
Claus Gittinger <cg@exept.de>
parents: 12791
diff changeset
   852
    "
c525954778c6 added: #withClass:loadedDo:
Claus Gittinger <cg@exept.de>
parents: 12791
diff changeset
   853
     Autoload withClass:Array loadedDo:[:cls | self assert:cls isLoaded]
c525954778c6 added: #withClass:loadedDo:
Claus Gittinger <cg@exept.de>
parents: 12791
diff changeset
   854
     Autoload withClass:Cons loadedDo:[:cls | self assert:cls isLoaded]
c525954778c6 added: #withClass:loadedDo:
Claus Gittinger <cg@exept.de>
parents: 12791
diff changeset
   855
    "
c525954778c6 added: #withClass:loadedDo:
Claus Gittinger <cg@exept.de>
parents: 12791
diff changeset
   856
c525954778c6 added: #withClass:loadedDo:
Claus Gittinger <cg@exept.de>
parents: 12791
diff changeset
   857
    "Created: / 08-02-2011 / 20:01:32 / cg"
c525954778c6 added: #withClass:loadedDo:
Claus Gittinger <cg@exept.de>
parents: 12791
diff changeset
   858
! !
c525954778c6 added: #withClass:loadedDo:
Claus Gittinger <cg@exept.de>
parents: 12791
diff changeset
   859
1862
e8f44f10f1ab changes for new #infoOf: / #linkInfoOf: return
Claus Gittinger <cg@exept.de>
parents: 1720
diff changeset
   860
!Autoload class methodsFor:'documentation'!
661
7e1c7358c980 version method at the end
Claus Gittinger <cg@exept.de>
parents: 624
diff changeset
   861
7e1c7358c980 version method at the end
Claus Gittinger <cg@exept.de>
parents: 624
diff changeset
   862
version
18911
1a23d9ffc0e9 #UI_ENHANCEMENT
Claus Gittinger <cg@exept.de>
parents: 18354
diff changeset
   863
    ^ '$Header$'
12074
30001ba710e9 changed: #initialize
fm
parents: 11951
diff changeset
   864
!
30001ba710e9 changed: #initialize
fm
parents: 11951
diff changeset
   865
30001ba710e9 changed: #initialize
fm
parents: 11951
diff changeset
   866
version_CVS
18911
1a23d9ffc0e9 #UI_ENHANCEMENT
Claus Gittinger <cg@exept.de>
parents: 18354
diff changeset
   867
    ^ '$Header$'
661
7e1c7358c980 version method at the end
Claus Gittinger <cg@exept.de>
parents: 624
diff changeset
   868
! !
6768
4ccf91dfeba2 oops - catch #copy
penk
parents: 6602
diff changeset
   869
15054
1667e3fe9e8b class: Autoload
Claus Gittinger <cg@exept.de>
parents: 14503
diff changeset
   870
620
c7353f86a302 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 528
diff changeset
   871
Autoload initialize!