LazyMethod.st
author Jan Vrany <jan.vrany@labware.com>
Thu, 27 Oct 2022 14:53:59 +0100
branchjv
changeset 4735 3b11fb3ede98
parent 4713 dc02ba05b388
permissions -rw-r--r--
Allow single underscore as method / block argument and temporaries This commit is a follow up for 38b221e.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4587
07094cd02017 #OTHER by exept
Claus Gittinger <cg@exept.de>
parents: 4403
diff changeset
     1
"{ Encoding: utf8 }"
07094cd02017 #OTHER by exept
Claus Gittinger <cg@exept.de>
parents: 4403
diff changeset
     2
18
343ca93df0e0 Initial revision
claus
parents:
diff changeset
     3
"
343ca93df0e0 Initial revision
claus
parents:
diff changeset
     4
 COPYRIGHT (c) 1994 by Claus Gittinger
45
e8331ba8ad5d *** empty log message ***
claus
parents: 40
diff changeset
     5
	      All Rights Reserved
18
343ca93df0e0 Initial revision
claus
parents:
diff changeset
     6
343ca93df0e0 Initial revision
claus
parents:
diff changeset
     7
 This software is furnished under a license and may be used
343ca93df0e0 Initial revision
claus
parents:
diff changeset
     8
 only in accordance with the terms of that license and with the
343ca93df0e0 Initial revision
claus
parents:
diff changeset
     9
 inclusion of the above copyright notice.   This software may not
343ca93df0e0 Initial revision
claus
parents:
diff changeset
    10
 be provided or otherwise made available to, or used by, any
343ca93df0e0 Initial revision
claus
parents:
diff changeset
    11
 other person.  No title to or ownership of the software is
343ca93df0e0 Initial revision
claus
parents:
diff changeset
    12
 hereby transferred.
343ca93df0e0 Initial revision
claus
parents:
diff changeset
    13
"
1053
ecffa1f6ce6e slightly faster #resources access if there are no resources
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
    14
"{ Package: 'stx:libcomp' }"
ecffa1f6ce6e slightly faster #resources access if there are no resources
Claus Gittinger <cg@exept.de>
parents: 986
diff changeset
    15
4208
083861c0557e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 2275
diff changeset
    16
"{ NameSpace: Smalltalk }"
083861c0557e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 2275
diff changeset
    17
799
e8c7957d5138 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 533
diff changeset
    18
Method variableSubclass:#LazyMethod
249
fb82fccfb779 subclasses of fixed classes are still possible
Claus Gittinger <cg@exept.de>
parents: 190
diff changeset
    19
	instanceVariableNames:''
853
9914057fa471 moved recompilation semaphore from LazyMethod to Method
Claus Gittinger <cg@exept.de>
parents: 852
diff changeset
    20
	classVariableNames:'CompilationFailedSignal'
249
fb82fccfb779 subclasses of fixed classes are still possible
Claus Gittinger <cg@exept.de>
parents: 190
diff changeset
    21
	poolDictionaries:''
fb82fccfb779 subclasses of fixed classes are still possible
Claus Gittinger <cg@exept.de>
parents: 190
diff changeset
    22
	category:'Kernel-Methods'
18
343ca93df0e0 Initial revision
claus
parents:
diff changeset
    23
!
343ca93df0e0 Initial revision
claus
parents:
diff changeset
    24
799
e8c7957d5138 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 533
diff changeset
    25
!LazyMethod class methodsFor:'documentation'!
20
f8dd8ba75205 *** empty log message ***
claus
parents: 18
diff changeset
    26
f8dd8ba75205 *** empty log message ***
claus
parents: 18
diff changeset
    27
copyright
f8dd8ba75205 *** empty log message ***
claus
parents: 18
diff changeset
    28
"
f8dd8ba75205 *** empty log message ***
claus
parents: 18
diff changeset
    29
 COPYRIGHT (c) 1994 by Claus Gittinger
45
e8331ba8ad5d *** empty log message ***
claus
parents: 40
diff changeset
    30
	      All Rights Reserved
20
f8dd8ba75205 *** empty log message ***
claus
parents: 18
diff changeset
    31
f8dd8ba75205 *** empty log message ***
claus
parents: 18
diff changeset
    32
 This software is furnished under a license and may be used
f8dd8ba75205 *** empty log message ***
claus
parents: 18
diff changeset
    33
 only in accordance with the terms of that license and with the
f8dd8ba75205 *** empty log message ***
claus
parents: 18
diff changeset
    34
 inclusion of the above copyright notice.   This software may not
f8dd8ba75205 *** empty log message ***
claus
parents: 18
diff changeset
    35
 be provided or otherwise made available to, or used by, any
f8dd8ba75205 *** empty log message ***
claus
parents: 18
diff changeset
    36
 other person.  No title to or ownership of the software is
f8dd8ba75205 *** empty log message ***
claus
parents: 18
diff changeset
    37
 hereby transferred.
f8dd8ba75205 *** empty log message ***
claus
parents: 18
diff changeset
    38
"
f8dd8ba75205 *** empty log message ***
claus
parents: 18
diff changeset
    39
!
f8dd8ba75205 *** empty log message ***
claus
parents: 18
diff changeset
    40
f8dd8ba75205 *** empty log message ***
claus
parents: 18
diff changeset
    41
documentation
f8dd8ba75205 *** empty log message ***
claus
parents: 18
diff changeset
    42
"
f8dd8ba75205 *** empty log message ***
claus
parents: 18
diff changeset
    43
    Instances of LazyMethod are created when doing a lazy autoload.
45
e8331ba8ad5d *** empty log message ***
claus
parents: 40
diff changeset
    44
    They do not contain any code (neither byte- nor machinecode), but
e8331ba8ad5d *** empty log message ***
claus
parents: 40
diff changeset
    45
    keep their sourcecode only.
e8331ba8ad5d *** empty log message ***
claus
parents: 40
diff changeset
    46
20
f8dd8ba75205 *** empty log message ***
claus
parents: 18
diff changeset
    47
    When executed, these will trigger an error in the VM (noByteCode),
533
Claus Gittinger <cg@exept.de>
parents: 488
diff changeset
    48
    which is caught here to create a real method from the receiver,
45
e8331ba8ad5d *** empty log message ***
claus
parents: 40
diff changeset
    49
    amd re-execute the method.
e8331ba8ad5d *** empty log message ***
claus
parents: 40
diff changeset
    50
e8331ba8ad5d *** empty log message ***
claus
parents: 40
diff changeset
    51
    This allows faster loading of code, which will be later compiled
20
f8dd8ba75205 *** empty log message ***
claus
parents: 18
diff changeset
    52
    when first executed; for classes with a large number of methods, of
f8dd8ba75205 *** empty log message ***
claus
parents: 18
diff changeset
    53
    which only a small subset is actually used, this can also save
45
e8331ba8ad5d *** empty log message ***
claus
parents: 40
diff changeset
    54
    lots of memory (beside making autoloading faster).
262
a958dced185f documentation
Claus Gittinger <cg@exept.de>
parents: 249
diff changeset
    55
a958dced185f documentation
Claus Gittinger <cg@exept.de>
parents: 249
diff changeset
    56
    [author:]
a958dced185f documentation
Claus Gittinger <cg@exept.de>
parents: 249
diff changeset
    57
        Claus Gittinger
a958dced185f documentation
Claus Gittinger <cg@exept.de>
parents: 249
diff changeset
    58
a958dced185f documentation
Claus Gittinger <cg@exept.de>
parents: 249
diff changeset
    59
    [see also:]
a958dced185f documentation
Claus Gittinger <cg@exept.de>
parents: 249
diff changeset
    60
        Autoload
20
f8dd8ba75205 *** empty log message ***
claus
parents: 18
diff changeset
    61
"
f8dd8ba75205 *** empty log message ***
claus
parents: 18
diff changeset
    62
! !
f8dd8ba75205 *** empty log message ***
claus
parents: 18
diff changeset
    63
799
e8c7957d5138 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 533
diff changeset
    64
!LazyMethod class methodsFor:'initialization'!
40
45ecd4441edb compilation is donw in critical region - it was not reentrant
claus
parents: 27
diff changeset
    65
45ecd4441edb compilation is donw in critical region - it was not reentrant
claus
parents: 27
diff changeset
    66
initialize
45
e8331ba8ad5d *** empty log message ***
claus
parents: 40
diff changeset
    67
    CompilationFailedSignal isNil ifTrue:[
1452
957cd8579489 Exception classes initialize themself.
Stefan Vogel <sv@exept.de>
parents: 1450
diff changeset
    68
        CompilationFailedSignal := InvalidCodeError newSignalMayProceed:true.
852
ec002c00033a moved recompilation semaphore from LazyMethod to Method
Claus Gittinger <cg@exept.de>
parents: 799
diff changeset
    69
        CompilationFailedSignal nameClass:self message:#compilationFailedSignal.
ec002c00033a moved recompilation semaphore from LazyMethod to Method
Claus Gittinger <cg@exept.de>
parents: 799
diff changeset
    70
        CompilationFailedSignal notifierString:'compilation of lazy method failed'.
45
e8331ba8ad5d *** empty log message ***
claus
parents: 40
diff changeset
    71
    ]
e8331ba8ad5d *** empty log message ***
claus
parents: 40
diff changeset
    72
! !
e8331ba8ad5d *** empty log message ***
claus
parents: 40
diff changeset
    73
799
e8c7957d5138 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 533
diff changeset
    74
!LazyMethod class methodsFor:'Signal constants'!
45
e8331ba8ad5d *** empty log message ***
claus
parents: 40
diff changeset
    75
e8331ba8ad5d *** empty log message ***
claus
parents: 40
diff changeset
    76
compilationFailedSignal
e8331ba8ad5d *** empty log message ***
claus
parents: 40
diff changeset
    77
    ^ CompilationFailedSignal
40
45ecd4441edb compilation is donw in critical region - it was not reentrant
claus
parents: 27
diff changeset
    78
! !
45ecd4441edb compilation is donw in critical region - it was not reentrant
claus
parents: 27
diff changeset
    79
54
86c5b39c2eca *** empty log message ***
claus
parents: 47
diff changeset
    80
!LazyMethod methodsFor:'compiling'!
18
343ca93df0e0 Initial revision
claus
parents:
diff changeset
    81
54
86c5b39c2eca *** empty log message ***
claus
parents: 47
diff changeset
    82
makeRealMethod
86c5b39c2eca *** empty log message ***
claus
parents: 47
diff changeset
    83
    "make the receiver a real method; i.e. compile the sourcecode and
86c5b39c2eca *** empty log message ***
claus
parents: 47
diff changeset
    84
     fill in the bytecode. This must be done in order to execute the receiver."
18
343ca93df0e0 Initial revision
claus
parents:
diff changeset
    85
54
86c5b39c2eca *** empty log message ***
claus
parents: 47
diff changeset
    86
    |m|
18
343ca93df0e0 Initial revision
claus
parents:
diff changeset
    87
343ca93df0e0 Initial revision
claus
parents:
diff changeset
    88
    "compile the method"
343ca93df0e0 Initial revision
claus
parents:
diff changeset
    89
343ca93df0e0 Initial revision
claus
parents:
diff changeset
    90
    [
852
ec002c00033a moved recompilation semaphore from LazyMethod to Method
Claus Gittinger <cg@exept.de>
parents: 799
diff changeset
    91
        m := self asExecutableMethod.
45
e8331ba8ad5d *** empty log message ***
claus
parents: 40
diff changeset
    92
    ] valueUninterruptably.
e8331ba8ad5d *** empty log message ***
claus
parents: 40
diff changeset
    93
799
e8c7957d5138 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 533
diff changeset
    94
    (m isNil 
e8c7957d5138 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 533
diff changeset
    95
    or:[(byteCode := m byteCode) isNil 
e8c7957d5138 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 533
diff changeset
    96
         and:[m hasCode not]]) ifTrue:[
292
163651658aee Move method's literals form literalArray to indexed instvars.
Stefan Vogel <sv@exept.de>
parents: 262
diff changeset
    97
        "
163651658aee Move method's literals form literalArray to indexed instvars.
Stefan Vogel <sv@exept.de>
parents: 262
diff changeset
    98
         compilation failed
163651658aee Move method's literals form literalArray to indexed instvars.
Stefan Vogel <sv@exept.de>
parents: 262
diff changeset
    99
        "
163651658aee Move method's literals form literalArray to indexed instvars.
Stefan Vogel <sv@exept.de>
parents: 262
diff changeset
   100
        ^ nil
54
86c5b39c2eca *** empty log message ***
claus
parents: 47
diff changeset
   101
    ].
292
163651658aee Move method's literals form literalArray to indexed instvars.
Stefan Vogel <sv@exept.de>
parents: 262
diff changeset
   102
    self literals:m literals.
54
86c5b39c2eca *** empty log message ***
claus
parents: 47
diff changeset
   103
    flags := m flags.
126
Claus Gittinger <cg@exept.de>
parents: 103
diff changeset
   104
    self code:(m code).
54
86c5b39c2eca *** empty log message ***
claus
parents: 47
diff changeset
   105
    self changeClassToThatOf:m.
86c5b39c2eca *** empty log message ***
claus
parents: 47
diff changeset
   106
    ^ self
126
Claus Gittinger <cg@exept.de>
parents: 103
diff changeset
   107
799
e8c7957d5138 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 533
diff changeset
   108
    "Created: / 24.10.1995 / 14:02:50 / cg"
e8c7957d5138 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 533
diff changeset
   109
    "Modified: / 24.6.1996 / 17:23:57 / stefan"
e8c7957d5138 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 533
diff changeset
   110
    "Modified: / 13.11.1998 / 23:20:41 / cg"
54
86c5b39c2eca *** empty log message ***
claus
parents: 47
diff changeset
   111
! !
86c5b39c2eca *** empty log message ***
claus
parents: 47
diff changeset
   112
86c5b39c2eca *** empty log message ***
claus
parents: 47
diff changeset
   113
!LazyMethod methodsFor:'error handling'!
86c5b39c2eca *** empty log message ***
claus
parents: 47
diff changeset
   114
86c5b39c2eca *** empty log message ***
claus
parents: 47
diff changeset
   115
noByteCode 
86c5b39c2eca *** empty log message ***
claus
parents: 47
diff changeset
   116
    "this is triggered by the interpreter when a lazy method is about to 
86c5b39c2eca *** empty log message ***
claus
parents: 47
diff changeset
   117
     be executed (by sending the to-be executed  method this message).
86c5b39c2eca *** empty log message ***
claus
parents: 47
diff changeset
   118
     Hard-compile the method, install its bytecode in the receiver,
86c5b39c2eca *** empty log message ***
claus
parents: 47
diff changeset
   119
     and recall it."
86c5b39c2eca *** empty log message ***
claus
parents: 47
diff changeset
   120
86c5b39c2eca *** empty log message ***
claus
parents: 47
diff changeset
   121
    |sender spec class selector|
86c5b39c2eca *** empty log message ***
claus
parents: 47
diff changeset
   122
4403
4649f9dd9614 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4208
diff changeset
   123
    sender := thisContext sender.
4649f9dd9614 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4208
diff changeset
   124
    selector := sender selector.
4649f9dd9614 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4208
diff changeset
   125
54
86c5b39c2eca *** empty log message ***
claus
parents: 47
diff changeset
   126
    "compile the method"
86c5b39c2eca *** empty log message ***
claus
parents: 47
diff changeset
   127
86c5b39c2eca *** empty log message ***
claus
parents: 47
diff changeset
   128
    self makeRealMethod isNil ifTrue:[
4403
4649f9dd9614 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4208
diff changeset
   129
        "/ compilation failed
986
0398d8de8242 when resending a method after it has been compiled
Claus Gittinger <cg@exept.de>
parents: 892
diff changeset
   130
        class := self containingClass.
0398d8de8242 when resending a method after it has been compiled
Claus Gittinger <cg@exept.de>
parents: 892
diff changeset
   131
        class notNil ifTrue:[
0398d8de8242 when resending a method after it has been compiled
Claus Gittinger <cg@exept.de>
parents: 892
diff changeset
   132
            spec := class name , '>>' , selector
0398d8de8242 when resending a method after it has been compiled
Claus Gittinger <cg@exept.de>
parents: 892
diff changeset
   133
        ] ifFalse:[
0398d8de8242 when resending a method after it has been compiled
Claus Gittinger <cg@exept.de>
parents: 892
diff changeset
   134
            spec := 'unknown>>' , selector
0398d8de8242 when resending a method after it has been compiled
Claus Gittinger <cg@exept.de>
parents: 892
diff changeset
   135
        ].
0398d8de8242 when resending a method after it has been compiled
Claus Gittinger <cg@exept.de>
parents: 892
diff changeset
   136
        "
0398d8de8242 when resending a method after it has been compiled
Claus Gittinger <cg@exept.de>
parents: 892
diff changeset
   137
         this error is triggered, if the compilation of a lazy method
4208
083861c0557e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 2275
diff changeset
   138
         failed - this happens for example, if a lazy method's code has been
986
0398d8de8242 when resending a method after it has been compiled
Claus Gittinger <cg@exept.de>
parents: 892
diff changeset
   139
         changed in a fileBrowser without checking the code for syntactical
0398d8de8242 when resending a method after it has been compiled
Claus Gittinger <cg@exept.de>
parents: 892
diff changeset
   140
         correctnes, or if the instvars of an autoloaded classes superclass 
0398d8de8242 when resending a method after it has been compiled
Claus Gittinger <cg@exept.de>
parents: 892
diff changeset
   141
         have been changed without changing the subclasses code ...
0398d8de8242 when resending a method after it has been compiled
Claus Gittinger <cg@exept.de>
parents: 892
diff changeset
   142
         You should enter the SystemBrowser on this method, and try accepting 
0398d8de8242 when resending a method after it has been compiled
Claus Gittinger <cg@exept.de>
parents: 892
diff changeset
   143
         to see what the problem is.
4208
083861c0557e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 2275
diff changeset
   144
         The method's class is found in the local 'class',
986
0398d8de8242 when resending a method after it has been compiled
Claus Gittinger <cg@exept.de>
parents: 892
diff changeset
   145
         the selector is found in the local 'selector'.
45
e8331ba8ad5d *** empty log message ***
claus
parents: 40
diff changeset
   146
986
0398d8de8242 when resending a method after it has been compiled
Claus Gittinger <cg@exept.de>
parents: 892
diff changeset
   147
         As a general rule: never edit autoloaded classes from anything
0398d8de8242 when resending a method after it has been compiled
Claus Gittinger <cg@exept.de>
parents: 892
diff changeset
   148
         except the browser - to check that they work and are compilable.
0398d8de8242 when resending a method after it has been compiled
Claus Gittinger <cg@exept.de>
parents: 892
diff changeset
   149
        "
4403
4649f9dd9614 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4208
diff changeset
   150
        ^ CompilationFailedSignal 
4649f9dd9614 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4208
diff changeset
   151
                raiseRequestWith:self
4649f9dd9614 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4208
diff changeset
   152
                errorString:('compilation of lazy method ' , spec , ' failed')
40
45ecd4441edb compilation is donw in critical region - it was not reentrant
claus
parents: 27
diff changeset
   153
    ].
45
e8331ba8ad5d *** empty log message ***
claus
parents: 40
diff changeset
   154
e8331ba8ad5d *** empty log message ***
claus
parents: 40
diff changeset
   155
    "
e8331ba8ad5d *** empty log message ***
claus
parents: 40
diff changeset
   156
     Now, the receiver method has mutated into a real (non-lazy) one.
e8331ba8ad5d *** empty log message ***
claus
parents: 40
diff changeset
   157
     Get the original message receiver and args, and execute the method.
e8331ba8ad5d *** empty log message ***
claus
parents: 40
diff changeset
   158
e8331ba8ad5d *** empty log message ***
claus
parents: 40
diff changeset
   159
     ThisContext sender is the context of the original send (the failed one)
e8331ba8ad5d *** empty log message ***
claus
parents: 40
diff changeset
   160
    "
e8331ba8ad5d *** empty log message ***
claus
parents: 40
diff changeset
   161
    ObjectMemory flushCaches.
e8331ba8ad5d *** empty log message ***
claus
parents: 40
diff changeset
   162
4403
4649f9dd9614 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4208
diff changeset
   163
    ^ self 
4649f9dd9614 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4208
diff changeset
   164
        valueWithReceiver:(sender receiver)
4649f9dd9614 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4208
diff changeset
   165
        arguments:(sender args)
4649f9dd9614 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4208
diff changeset
   166
        selector:selector
4649f9dd9614 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4208
diff changeset
   167
        search:(sender searchClass)
4649f9dd9614 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4208
diff changeset
   168
        sender:nil
4208
083861c0557e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 2275
diff changeset
   169
083861c0557e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 2275
diff changeset
   170
    "Modified (comment): / 21-11-2017 / 13:02:50 / cg"
4403
4649f9dd9614 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4208
diff changeset
   171
    "Modified (format): / 03-04-2019 / 22:39:44 / Claus Gittinger"
18
343ca93df0e0 Initial revision
claus
parents:
diff changeset
   172
! !
142
c5fd93e97594 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 135
diff changeset
   173
c5fd93e97594 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 135
diff changeset
   174
!LazyMethod methodsFor:'queries'!
c5fd93e97594 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 135
diff changeset
   175
c5fd93e97594 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 135
diff changeset
   176
isLazyMethod
4713
dc02ba05b388 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 4587
diff changeset
   177
    "return true, if this is a lazy method"
dc02ba05b388 #DOCUMENTATION by exept
Claus Gittinger <cg@exept.de>
parents: 4587
diff changeset
   178
142
c5fd93e97594 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 135
diff changeset
   179
    ^ true
891
5baa1ea32167 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 853
diff changeset
   180
!
5baa1ea32167 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 853
diff changeset
   181
1072
99bd12c0fe76 always return an array from #literals
Claus Gittinger <cg@exept.de>
parents: 1053
diff changeset
   182
literals
99bd12c0fe76 always return an array from #literals
Claus Gittinger <cg@exept.de>
parents: 1053
diff changeset
   183
    "cannot ask a lazyMethod for literals ..."
99bd12c0fe76 always return an array from #literals
Claus Gittinger <cg@exept.de>
parents: 1053
diff changeset
   184
99bd12c0fe76 always return an array from #literals
Claus Gittinger <cg@exept.de>
parents: 1053
diff changeset
   185
    |m|
99bd12c0fe76 always return an array from #literals
Claus Gittinger <cg@exept.de>
parents: 1053
diff changeset
   186
99bd12c0fe76 always return an array from #literals
Claus Gittinger <cg@exept.de>
parents: 1053
diff changeset
   187
    (m := self asExecutableMethod) notNil ifTrue:[^ m literals].
99bd12c0fe76 always return an array from #literals
Claus Gittinger <cg@exept.de>
parents: 1053
diff changeset
   188
    ^ #()
99bd12c0fe76 always return an array from #literals
Claus Gittinger <cg@exept.de>
parents: 1053
diff changeset
   189
!
99bd12c0fe76 always return an array from #literals
Claus Gittinger <cg@exept.de>
parents: 1053
diff changeset
   190
2275
726c29682fd8 added: #literalsDetect:ifNone:
Claus Gittinger <cg@exept.de>
parents: 1452
diff changeset
   191
literalsDetect:aBlock ifNone:exceptionalValue
726c29682fd8 added: #literalsDetect:ifNone:
Claus Gittinger <cg@exept.de>
parents: 1452
diff changeset
   192
    "cannot ask a lazyMethod for literals ..."
726c29682fd8 added: #literalsDetect:ifNone:
Claus Gittinger <cg@exept.de>
parents: 1452
diff changeset
   193
726c29682fd8 added: #literalsDetect:ifNone:
Claus Gittinger <cg@exept.de>
parents: 1452
diff changeset
   194
    |m|
726c29682fd8 added: #literalsDetect:ifNone:
Claus Gittinger <cg@exept.de>
parents: 1452
diff changeset
   195
726c29682fd8 added: #literalsDetect:ifNone:
Claus Gittinger <cg@exept.de>
parents: 1452
diff changeset
   196
    (m := self asExecutableMethod) notNil ifTrue:[^ m literalsDetect:aBlock ifNone:exceptionalValue].
726c29682fd8 added: #literalsDetect:ifNone:
Claus Gittinger <cg@exept.de>
parents: 1452
diff changeset
   197
    ^ exceptionalValue value
726c29682fd8 added: #literalsDetect:ifNone:
Claus Gittinger <cg@exept.de>
parents: 1452
diff changeset
   198
!
726c29682fd8 added: #literalsDetect:ifNone:
Claus Gittinger <cg@exept.de>
parents: 1452
diff changeset
   199
1083
c66b7d5dcc92 added #messagesSentToSelf, toSuper and sent
Claus Gittinger <cg@exept.de>
parents: 1072
diff changeset
   200
messagesSent
4587
07094cd02017 #OTHER by exept
Claus Gittinger <cg@exept.de>
parents: 4403
diff changeset
   201
    "cannot ask a lazyMethod for messagesSent...
07094cd02017 #OTHER by exept
Claus Gittinger <cg@exept.de>
parents: 4403
diff changeset
   202
     Try to autoload, then ask that method."
1083
c66b7d5dcc92 added #messagesSentToSelf, toSuper and sent
Claus Gittinger <cg@exept.de>
parents: 1072
diff changeset
   203
c66b7d5dcc92 added #messagesSentToSelf, toSuper and sent
Claus Gittinger <cg@exept.de>
parents: 1072
diff changeset
   204
    |m|
c66b7d5dcc92 added #messagesSentToSelf, toSuper and sent
Claus Gittinger <cg@exept.de>
parents: 1072
diff changeset
   205
c66b7d5dcc92 added #messagesSentToSelf, toSuper and sent
Claus Gittinger <cg@exept.de>
parents: 1072
diff changeset
   206
    (m := self asExecutableMethod) notNil ifTrue:[^ m messagesSent].
c66b7d5dcc92 added #messagesSentToSelf, toSuper and sent
Claus Gittinger <cg@exept.de>
parents: 1072
diff changeset
   207
    ^ #()
c66b7d5dcc92 added #messagesSentToSelf, toSuper and sent
Claus Gittinger <cg@exept.de>
parents: 1072
diff changeset
   208
!
c66b7d5dcc92 added #messagesSentToSelf, toSuper and sent
Claus Gittinger <cg@exept.de>
parents: 1072
diff changeset
   209
c66b7d5dcc92 added #messagesSentToSelf, toSuper and sent
Claus Gittinger <cg@exept.de>
parents: 1072
diff changeset
   210
messagesSentToSelf
c66b7d5dcc92 added #messagesSentToSelf, toSuper and sent
Claus Gittinger <cg@exept.de>
parents: 1072
diff changeset
   211
    "cannot ask a lazyMethod for messagesSentToSelf ..."
c66b7d5dcc92 added #messagesSentToSelf, toSuper and sent
Claus Gittinger <cg@exept.de>
parents: 1072
diff changeset
   212
c66b7d5dcc92 added #messagesSentToSelf, toSuper and sent
Claus Gittinger <cg@exept.de>
parents: 1072
diff changeset
   213
    |m|
c66b7d5dcc92 added #messagesSentToSelf, toSuper and sent
Claus Gittinger <cg@exept.de>
parents: 1072
diff changeset
   214
c66b7d5dcc92 added #messagesSentToSelf, toSuper and sent
Claus Gittinger <cg@exept.de>
parents: 1072
diff changeset
   215
    (m := self asExecutableMethod) notNil ifTrue:[^ m messagesSentToSelf].
c66b7d5dcc92 added #messagesSentToSelf, toSuper and sent
Claus Gittinger <cg@exept.de>
parents: 1072
diff changeset
   216
    ^ #()
c66b7d5dcc92 added #messagesSentToSelf, toSuper and sent
Claus Gittinger <cg@exept.de>
parents: 1072
diff changeset
   217
!
c66b7d5dcc92 added #messagesSentToSelf, toSuper and sent
Claus Gittinger <cg@exept.de>
parents: 1072
diff changeset
   218
c66b7d5dcc92 added #messagesSentToSelf, toSuper and sent
Claus Gittinger <cg@exept.de>
parents: 1072
diff changeset
   219
messagesSentToSuper
c66b7d5dcc92 added #messagesSentToSelf, toSuper and sent
Claus Gittinger <cg@exept.de>
parents: 1072
diff changeset
   220
    "cannot ask a lazyMethod for messagesSentToSuper ..."
c66b7d5dcc92 added #messagesSentToSelf, toSuper and sent
Claus Gittinger <cg@exept.de>
parents: 1072
diff changeset
   221
c66b7d5dcc92 added #messagesSentToSelf, toSuper and sent
Claus Gittinger <cg@exept.de>
parents: 1072
diff changeset
   222
    |m|
c66b7d5dcc92 added #messagesSentToSelf, toSuper and sent
Claus Gittinger <cg@exept.de>
parents: 1072
diff changeset
   223
c66b7d5dcc92 added #messagesSentToSelf, toSuper and sent
Claus Gittinger <cg@exept.de>
parents: 1072
diff changeset
   224
    (m := self asExecutableMethod) notNil ifTrue:[^ m messagesSentToSuper].
c66b7d5dcc92 added #messagesSentToSelf, toSuper and sent
Claus Gittinger <cg@exept.de>
parents: 1072
diff changeset
   225
    ^ #()
c66b7d5dcc92 added #messagesSentToSelf, toSuper and sent
Claus Gittinger <cg@exept.de>
parents: 1072
diff changeset
   226
!
c66b7d5dcc92 added #messagesSentToSelf, toSuper and sent
Claus Gittinger <cg@exept.de>
parents: 1072
diff changeset
   227
891
5baa1ea32167 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 853
diff changeset
   228
resources
5baa1ea32167 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 853
diff changeset
   229
    "cannot ask a lazyMethod for resources ..."
5baa1ea32167 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 853
diff changeset
   230
892
84525a811427 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 891
diff changeset
   231
    |m|
84525a811427 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 891
diff changeset
   232
1115
ca9303f55111 better resource parsing (without compiling)
Claus Gittinger <cg@exept.de>
parents: 1083
diff changeset
   233
    ^ self parseResources.
ca9303f55111 better resource parsing (without compiling)
Claus Gittinger <cg@exept.de>
parents: 1083
diff changeset
   234
"/    (self source includesString:'resource') ifFalse:[^ nil].
ca9303f55111 better resource parsing (without compiling)
Claus Gittinger <cg@exept.de>
parents: 1083
diff changeset
   235
"/
ca9303f55111 better resource parsing (without compiling)
Claus Gittinger <cg@exept.de>
parents: 1083
diff changeset
   236
"/    (m := self asExecutableMethod) notNil ifTrue:[^ m resources].
ca9303f55111 better resource parsing (without compiling)
Claus Gittinger <cg@exept.de>
parents: 1083
diff changeset
   237
"/    ^ nil
142
c5fd93e97594 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 135
diff changeset
   238
! !
c5fd93e97594 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 135
diff changeset
   239
799
e8c7957d5138 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 533
diff changeset
   240
!LazyMethod class methodsFor:'documentation'!
249
fb82fccfb779 subclasses of fixed classes are still possible
Claus Gittinger <cg@exept.de>
parents: 190
diff changeset
   241
fb82fccfb779 subclasses of fixed classes are still possible
Claus Gittinger <cg@exept.de>
parents: 190
diff changeset
   242
version
4208
083861c0557e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 2275
diff changeset
   243
    ^ '$Header$'
2275
726c29682fd8 added: #literalsDetect:ifNone:
Claus Gittinger <cg@exept.de>
parents: 1452
diff changeset
   244
!
726c29682fd8 added: #literalsDetect:ifNone:
Claus Gittinger <cg@exept.de>
parents: 1452
diff changeset
   245
726c29682fd8 added: #literalsDetect:ifNone:
Claus Gittinger <cg@exept.de>
parents: 1452
diff changeset
   246
version_CVS
4208
083861c0557e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 2275
diff changeset
   247
    ^ '$Header$'
249
fb82fccfb779 subclasses of fixed classes are still possible
Claus Gittinger <cg@exept.de>
parents: 190
diff changeset
   248
! !
1450
8c466a8a125a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1115
diff changeset
   249
4208
083861c0557e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 2275
diff changeset
   250
142
c5fd93e97594 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 135
diff changeset
   251
LazyMethod initialize!