AutoloadMetaclass.st
author sr
Wed, 24 Mar 2010 12:21:23 +0100
changeset 12804 079b692e0776
parent 12272 6d68662ed857
child 12836 16dfb973e06c
permissions -rw-r--r--
added: #generateClassLines:forClasses:includeAdditionalClasses: changed: #generateClassLines:forClasses: #generate_definitionClassLine_libInit_dot_cc oops - generated code in libInit.cc was wrong iff there were additionalClasses defined (unix, win32 etc.) as in libbasic
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5271
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
     1
"
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
     2
 COPYRIGHT (c) 1999 by eXept Software AG
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
     3
              All Rights Reserved
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
     4
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
     5
 This software is furnished under a license and may be used
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
     6
 only in accordance with the terms of that license and with the
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
     8
 be provided or otherwise made available to, or used by, any
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
     9
 other person.  No title to or ownership of the software is
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
    10
 hereby transferred.
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
    11
"
12272
6d68662ed857 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 12267
diff changeset
    12
'From Smalltalk/X, Version:5.4.6 on 14-10-2009 at 12:55:43'                     !
6d68662ed857 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 12267
diff changeset
    13
11112
e451ac8809b3 +isLoaded
Claus Gittinger <cg@exept.de>
parents: 5271
diff changeset
    14
"{ Package: 'stx:libbasic' }"
5271
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
    15
4509
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    16
Metaclass subclass:#AutoloadMetaclass
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    17
	instanceVariableNames:''
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    18
	classVariableNames:''
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    19
	poolDictionaries:''
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    20
	category:'Kernel-Classes'
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    21
!
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    22
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    23
!AutoloadMetaclass class methodsFor:'documentation'!
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    24
5271
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
    25
copyright
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
    26
"
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
    27
 COPYRIGHT (c) 1999 by eXept Software AG
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
    28
              All Rights Reserved
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
    29
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
    30
 This software is furnished under a license and may be used
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
    31
 only in accordance with the terms of that license and with the
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
    32
 inclusion of the above copyright notice.   This software may not
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
    33
 be provided or otherwise made available to, or used by, any
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
    34
 other person.  No title to or ownership of the software is
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
    35
 hereby transferred.
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
    36
"
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
    37
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
    38
!
63e66f4da9fe copyrights
Claus Gittinger <cg@exept.de>
parents: 4577
diff changeset
    39
4509
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    40
documentation
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    41
"
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    42
    AutoloadMetaclass catches unhandled class methods, files in 
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    43
    the corresponding code when first used and resends the catched
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    44
    message to the now existing class.
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    45
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    46
    Autoload installs AutoloadMetaclass as its metaclass in #initialize. 
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    47
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    48
    [author:]
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    49
        Stefan Vogel
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    50
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    51
    [see also:]
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    52
        Autoload
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    53
"
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    54
! !
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    55
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    56
!AutoloadMetaclass methodsFor:'message catching'!
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    57
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    58
doesNotUnderstand:aMessage
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    59
    "caught a message; load the class and retry the message"
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    60
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    61
    |newClass|
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    62
12261
7ecada6b94dc Catch messages used for subclass creation
Stefan Vogel <sv@exept.de>
parents: 11112
diff changeset
    63
    (myClass isNil or:[myClass == Autoload]) ifTrue:[
7ecada6b94dc Catch messages used for subclass creation
Stefan Vogel <sv@exept.de>
parents: 11112
diff changeset
    64
        "take care: subclassing Autoload must still be possible"
12272
6d68662ed857 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 12267
diff changeset
    65
        ^ self perform:aMessage selector inClass:Metaclass withArguments:aMessage arguments.
12261
7ecada6b94dc Catch messages used for subclass creation
Stefan Vogel <sv@exept.de>
parents: 11112
diff changeset
    66
    ] ifFalse:[
4509
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    67
        newClass := myClass autoload.
12267
f883e02f13aa changed: #doesNotUnderstand:
Stefan Vogel <sv@exept.de>
parents: 12261
diff changeset
    68
        (newClass notNil and:[newClass isLoaded]) ifTrue:[
12261
7ecada6b94dc Catch messages used for subclass creation
Stefan Vogel <sv@exept.de>
parents: 11112
diff changeset
    69
            ^ aMessage sendTo:newClass class
12267
f883e02f13aa changed: #doesNotUnderstand:
Stefan Vogel <sv@exept.de>
parents: 12261
diff changeset
    70
        ] ifFalse:[
f883e02f13aa changed: #doesNotUnderstand:
Stefan Vogel <sv@exept.de>
parents: 12261
diff changeset
    71
            Transcript showCR:'Autoload [warning]: failed to autoload ',self name.
f883e02f13aa changed: #doesNotUnderstand:
Stefan Vogel <sv@exept.de>
parents: 12261
diff changeset
    72
        ].
4509
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    73
    ].
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    74
    ^ super doesNotUnderstand:aMessage
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    75
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    76
    "
12261
7ecada6b94dc Catch messages used for subclass creation
Stefan Vogel <sv@exept.de>
parents: 11112
diff changeset
    77
     Wrapper unload.
7ecada6b94dc Catch messages used for subclass creation
Stefan Vogel <sv@exept.de>
parents: 11112
diff changeset
    78
     Wrapper class xxx
4509
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    79
12261
7ecada6b94dc Catch messages used for subclass creation
Stefan Vogel <sv@exept.de>
parents: 11112
diff changeset
    80
     Wrapper unload.
7ecada6b94dc Catch messages used for subclass creation
Stefan Vogel <sv@exept.de>
parents: 11112
diff changeset
    81
     Wrapper
7ecada6b94dc Catch messages used for subclass creation
Stefan Vogel <sv@exept.de>
parents: 11112
diff changeset
    82
        subclass:#TTTT 
7ecada6b94dc Catch messages used for subclass creation
Stefan Vogel <sv@exept.de>
parents: 11112
diff changeset
    83
        instanceVariableNames:'' 
7ecada6b94dc Catch messages used for subclass creation
Stefan Vogel <sv@exept.de>
parents: 11112
diff changeset
    84
        classVariableNames:''
7ecada6b94dc Catch messages used for subclass creation
Stefan Vogel <sv@exept.de>
parents: 11112
diff changeset
    85
        poolDictionaries:'' 
7ecada6b94dc Catch messages used for subclass creation
Stefan Vogel <sv@exept.de>
parents: 11112
diff changeset
    86
        category:'AAAA-Test'
4509
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    87
    "
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    88
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
    89
    "Modified: / 3.8.1999 / 13:57:05 / stefan"
12261
7ecada6b94dc Catch messages used for subclass creation
Stefan Vogel <sv@exept.de>
parents: 11112
diff changeset
    90
!
7ecada6b94dc Catch messages used for subclass creation
Stefan Vogel <sv@exept.de>
parents: 11112
diff changeset
    91
7ecada6b94dc Catch messages used for subclass creation
Stefan Vogel <sv@exept.de>
parents: 11112
diff changeset
    92
new
7ecada6b94dc Catch messages used for subclass creation
Stefan Vogel <sv@exept.de>
parents: 11112
diff changeset
    93
    "catch  - load the class and send it to the real one"
7ecada6b94dc Catch messages used for subclass creation
Stefan Vogel <sv@exept.de>
parents: 11112
diff changeset
    94
7ecada6b94dc Catch messages used for subclass creation
Stefan Vogel <sv@exept.de>
parents: 11112
diff changeset
    95
    ^ self doesNotUnderstand:(Message selector:#new)
7ecada6b94dc Catch messages used for subclass creation
Stefan Vogel <sv@exept.de>
parents: 11112
diff changeset
    96
!
7ecada6b94dc Catch messages used for subclass creation
Stefan Vogel <sv@exept.de>
parents: 11112
diff changeset
    97
7ecada6b94dc Catch messages used for subclass creation
Stefan Vogel <sv@exept.de>
parents: 11112
diff changeset
    98
newClassBuilder
7ecada6b94dc Catch messages used for subclass creation
Stefan Vogel <sv@exept.de>
parents: 11112
diff changeset
    99
    "catch  - load the class and send it to the real one"
7ecada6b94dc Catch messages used for subclass creation
Stefan Vogel <sv@exept.de>
parents: 11112
diff changeset
   100
7ecada6b94dc Catch messages used for subclass creation
Stefan Vogel <sv@exept.de>
parents: 11112
diff changeset
   101
    ^ self doesNotUnderstand:(Message selector:#newClassBuilder)
4509
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   102
! !
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   103
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   104
!AutoloadMetaclass class methodsFor:'documentation'!
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   105
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   106
version
12272
6d68662ed857 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 12267
diff changeset
   107
    ^ '$Header: /cvs/stx/stx/libbasic/AutoloadMetaclass.st,v 1.7 2009-10-14 11:36:30 stefan Exp $'
12261
7ecada6b94dc Catch messages used for subclass creation
Stefan Vogel <sv@exept.de>
parents: 11112
diff changeset
   108
!
7ecada6b94dc Catch messages used for subclass creation
Stefan Vogel <sv@exept.de>
parents: 11112
diff changeset
   109
7ecada6b94dc Catch messages used for subclass creation
Stefan Vogel <sv@exept.de>
parents: 11112
diff changeset
   110
version_CVS
12272
6d68662ed857 *** empty log message ***
Stefan Vogel <sv@exept.de>
parents: 12267
diff changeset
   111
    ^ '$Header: /cvs/stx/stx/libbasic/AutoloadMetaclass.st,v 1.7 2009-10-14 11:36:30 stefan Exp $'
4509
a9cb45aa42b7 initial checkin
Stefan Vogel <sv@exept.de>
parents:
diff changeset
   112
! !