Method.st
author Jan Vrany <jan.vrany@labware.com>
Wed, 22 Mar 2023 13:57:18 +0000
branchjv
changeset 25445 1623217d2268
parent 25415 4ea1fe7c363f
child 25448 b7636b68bce5
permissions -rwxr-xr-x
Cherry-picked OrderedCollection.st from 0b286fd51da7: * d4c86d7c0bfc: #TUNING by stefan, Stefan Vogel <sv@exept.de> * 692b6497a669: #DOCUMENTATION by stefan, Stefan Vogel <sv@exept.de> * d47bb2912953: #DOCUMENTATION by stefan, Stefan Vogel <sv@exept.de> * abb4316c6bff: #FEATURE by cg, Claus Gittinger <cg@exept.de> * 3a8fce0e8d11: #TUNING by stefan, Stefan Vogel <sv@exept.de> * 03d29bf8c5bb: #REFACTORING by stefan, Stefan Vogel <sv@exept.de> * cccc6c4abcfc: #REFACTORING by stefan, Stefan Vogel <sv@exept.de> * 35d957c7a840: #FEATURE by cg, Claus Gittinger <cg@exept.de> * 6b11890f5f2c: #OTHER by cg, Claus Gittinger <cg@exept.de> * abb6108fb06b: #FEATURE by cg, Claus Gittinger <cg@exept.de> * 2c4768bb2e89: #FEATURE by cg, Claus Gittinger <cg@exept.de> * 4029e964d0f1: #FEATURE by cg, Claus Gittinger <cg@exept.de> * ddcab3a9c2df: #OTHER by cg, Claus Gittinger <cg@exept.de> * 2213eb56e0c7: #REFACTORING by exept, Claus Gittinger <cg@exept.de> * 09ca874a6160: #REFACTORING by exept, Claus Gittinger <cg@exept.de> * 30b332af1f33: #BUGFIX by stefan, Stefan Vogel <sv@exept.de> * 779764ba117b: #REFACTORING by cg, Claus Gittinger <cg@exept.de> * b3d232a613c9: #BUGFIX by stefan, Stefan Vogel <sv@exept.de> * c417f7edaec1: #BUGFIX by stefan, Stefan Vogel <sv@exept.de> * 904b6538f379: #FEATURE by exept, Claus Gittinger <cg@exept.de> * c5887f03e01f: #REFACTORING by stefan, Stefan Vogel <sv@exept.de> * 8912d03aff48: #BUGFIX by exept, Claus Gittinger <cg@exept.de> * de5cd1dab4c3: #DOCUMENTATION by exept, Claus Gittinger <cg@exept.de> * 9bbd26603378: #OTHER by exept, Claus Gittinger <cg@exept.de> * c2c9dc110f42: #FEATURE by stefan, Stefan Vogel <sv@exept.de> * 81d123c6703d: #DOCUMENTATION by stefan, Stefan Vogel <sv@exept.de> * 8aadbb21458a: #BUGFIX by stefan, Stefan Vogel <sv@exept.de> * f210dbb8b2f6: #TUNING by stefan, Stefan Vogel <sv@exept.de> * c2c774fc53c0: #FEATURE by exept, Claus Gittinger <cg@exept.de> * b6f462670875: #DOCUMENTATION by exept, Claus Gittinger <cg@exept.de> * 27ae4021d5d6: #FEATURE by stefan, Stefan Vogel <sv@exept.de> * 10d9e9d85594: #TUNING by exept, Claus Gittinger <cg@exept.de> * 2653d855dcc7: #DOCUMENTATION by exept, Claus Gittinger <cg@exept.de> * 6ea1698a1a34: #FEATURE by stefan, Stefan Vogel <sv@exept.de> * 28762315e664: #OTHER by exept, Claus Gittinger <cg@exept.de> * 7142ea786f3e: #TUNING by stefan, Stefan Vogel <sv@exept.de> * 7875acb42b53: #BUGFIX by stefan, Stefan Vogel <sv@exept.de> * 163a0eebc97e: #BUGFIX by Maren, matilk
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
     1
"{ Encoding: utf8 }"
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
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) 1989 by Claus Gittinger
23107
40173e082cbc Copyright updates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22909
diff changeset
     5
 COPYRIGHT (c) 2009-2010 Jan Vrany
40173e082cbc Copyright updates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22909
diff changeset
     6
 COPYRIGHT (c) 2016 Jan Vrany
40173e082cbc Copyright updates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22909
diff changeset
     7
 COPYRIGHT (c) 2017 Claus Gittinger
25398
b0d020199bd0 Refactor class- and method- source stream access
Jan Vrany <jan.vrany@labware.com>
parents: 23107
diff changeset
     8
 COPYRIGHT (c) 2020 LabWare
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
     9
	      All Rights Reserved
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    10
a27a279701f8 Initial revision
claus
parents:
diff changeset
    11
 This software is furnished under a license and may be used
a27a279701f8 Initial revision
claus
parents:
diff changeset
    12
 only in accordance with the terms of that license and with the
a27a279701f8 Initial revision
claus
parents:
diff changeset
    13
 inclusion of the above copyright notice.   This software may not
a27a279701f8 Initial revision
claus
parents:
diff changeset
    14
 be provided or otherwise made available to, or used by, any
a27a279701f8 Initial revision
claus
parents:
diff changeset
    15
 other person.  No title to or ownership of the software is
a27a279701f8 Initial revision
claus
parents:
diff changeset
    16
 hereby transferred.
a27a279701f8 Initial revision
claus
parents:
diff changeset
    17
"
5385
7637332d7b38 care for nil package
Claus Gittinger <cg@exept.de>
parents: 5339
diff changeset
    18
"{ Package: 'stx:libbasic' }"
7637332d7b38 care for nil package
Claus Gittinger <cg@exept.de>
parents: 5339
diff changeset
    19
17278
7813956ffab4 class: Method
Claus Gittinger <cg@exept.de>
parents: 17254
diff changeset
    20
"{ NameSpace: Smalltalk }"
7813956ffab4 class: Method
Claus Gittinger <cg@exept.de>
parents: 17254
diff changeset
    21
3934
a8c6075f9988 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3845
diff changeset
    22
CompiledCode variableSubclass:#Method
16261
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
    23
	instanceVariableNames:'source sourcePosition category package mclass lookupObject
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
    24
		annotations'
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
    25
	classVariableNames:'PrivateMethodSignal LastFileReference LastSourceFileName
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
    26
		LastWhoClass LastFileLock LastMethodSources LastMethodSourcesLock
17254
053fe5d7fec8 class: Method
Claus Gittinger <cg@exept.de>
parents: 17250
diff changeset
    27
		CompilationLock Overrides LastParseTreeCache'
16261
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
    28
	poolDictionaries:''
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
    29
	category:'Kernel-Methods'
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    30
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    31
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
    32
Object subclass:#MethodWhoInfo
16261
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
    33
	instanceVariableNames:'myClass mySelector'
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
    34
	classVariableNames:''
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
    35
	poolDictionaries:''
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
    36
	privateIn:Method
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
    37
!
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
    38
13570
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
    39
Object subclass:#ParseTreeCacheEntry
16261
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
    40
	instanceVariableNames:'parserClass method parser'
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
    41
	classVariableNames:''
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
    42
	poolDictionaries:''
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
    43
	privateIn:Method
13570
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
    44
!
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
    45
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
    46
Object subclass:#ParserCacheEntry
19716
34387335cbba #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 19699
diff changeset
    47
	instanceVariableNames:'method parser'
16261
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
    48
	classVariableNames:''
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
    49
	poolDictionaries:''
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
    50
	privateIn:Method
13570
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
    51
!
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
    52
1775
6892b91ddc0b F_CALLED flag is no longer present
Claus Gittinger <cg@exept.de>
parents: 1692
diff changeset
    53
!Method class methodsFor:'documentation'!
42
e33491f6f260 *** empty log message ***
claus
parents: 39
diff changeset
    54
88
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    55
copyright
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    56
"
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    57
 COPYRIGHT (c) 1989 by Claus Gittinger
23107
40173e082cbc Copyright updates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22909
diff changeset
    58
 COPYRIGHT (c) 2009-2010 Jan Vrany
40173e082cbc Copyright updates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22909
diff changeset
    59
 COPYRIGHT (c) 2016 Jan Vrany
40173e082cbc Copyright updates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22909
diff changeset
    60
 COPYRIGHT (c) 2017 Claus Gittinger
25398
b0d020199bd0 Refactor class- and method- source stream access
Jan Vrany <jan.vrany@labware.com>
parents: 23107
diff changeset
    61
 COPYRIGHT (c) 2020 LabWare
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
    62
	      All Rights Reserved
88
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    63
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    64
 This software is furnished under a license and may be used
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    65
 only in accordance with the terms of that license and with the
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    66
 inclusion of the above copyright notice.   This software may not
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    67
 be provided or otherwise made available to, or used by, any
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    68
 other person.  No title to or ownership of the software is
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    69
 hereby transferred.
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    70
"
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    71
!
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    72
42
e33491f6f260 *** empty log message ***
claus
parents: 39
diff changeset
    73
documentation
e33491f6f260 *** empty log message ***
claus
parents: 39
diff changeset
    74
"
68
59faa75185ba *** empty log message ***
claus
parents: 56
diff changeset
    75
    this class defines protocol for executable methods;
59faa75185ba *** empty log message ***
claus
parents: 56
diff changeset
    76
    both compiled and interpreted methods are represented by this class.
59faa75185ba *** empty log message ***
claus
parents: 56
diff changeset
    77
    Compiled methods have a non-nil code field, while interpreted methods have
59faa75185ba *** empty log message ***
claus
parents: 56
diff changeset
    78
    a nil code field and non-nil byteCode field.
88
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    79
    If there are both non-nil code and bytecode fields, the VM will execute
18417
ae2934928225 class: Method
Claus Gittinger <cg@exept.de>
parents: 18411
diff changeset
    80
    the machine-code of a method. If both are nil when executed, a #noByteCode
ae2934928225 class: Method
Claus Gittinger <cg@exept.de>
parents: 18411
diff changeset
    81
    message is sent (by the VM) to the method, where a signal is raised.
ae2934928225 class: Method
Claus Gittinger <cg@exept.de>
parents: 18411
diff changeset
    82
    (or, a user defined interpreter can be invoked on the smalltalk level)
ae2934928225 class: Method
Claus Gittinger <cg@exept.de>
parents: 18411
diff changeset
    83
ae2934928225 class: Method
Claus Gittinger <cg@exept.de>
parents: 18411
diff changeset
    84
    The method's sourcecode is represented by source and sourcePosition:
227
23b1c4de3402 package & cleanup
claus
parents: 216
diff changeset
    85
    - if sourcePosition is a Number, the source-field is the fileName and
23b1c4de3402 package & cleanup
claus
parents: 216
diff changeset
    86
      sourcePosition is the character offset of the source-chunk in this source file.
18417
ae2934928225 class: Method
Claus Gittinger <cg@exept.de>
parents: 18411
diff changeset
    87
    - If sourcePosition is nil, the source fields holds the source string.
227
23b1c4de3402 package & cleanup
claus
parents: 216
diff changeset
    88
    (an old version used ExternalString instances here, but that lead to
18417
ae2934928225 class: Method
Claus Gittinger <cg@exept.de>
parents: 18411
diff changeset
    89
     10000's of additional little objects ...)
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    90
68
59faa75185ba *** empty log message ***
claus
parents: 56
diff changeset
    91
    The flags field defines things like the number of method-locals,
227
23b1c4de3402 package & cleanup
claus
parents: 216
diff changeset
    92
    method arguments and stack requirements (for interpreted methods).
68
59faa75185ba *** empty log message ***
claus
parents: 56
diff changeset
    93
    Do not depend on any value in the flags field - it may change without
59faa75185ba *** empty log message ***
claus
parents: 56
diff changeset
    94
    notice.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    95
438
claus
parents: 423
diff changeset
    96
    Notice, that in ST/X, method can be subclassed; executable code is
5277
d457937a69e5 comments & code-cleanup in #who
Claus Gittinger <cg@exept.de>
parents: 5241
diff changeset
    97
    identified not by being an instance of Block or Method, but instead by
438
claus
parents: 423
diff changeset
    98
    having the executable flag bit set in the class. The VM can execute anything
claus
parents: 423
diff changeset
    99
    which is identified as executable (assuming that the first instance variable
claus
parents: 423
diff changeset
   100
    is the machine-code address) - this allows for easy future extension.
claus
parents: 423
diff changeset
   101
19732
171048f57a34 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19716
diff changeset
   102
    Literals:
171048f57a34 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19716
diff changeset
   103
        Notice that stc compiled methods do not list all of their used literals.
171048f57a34 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19716
diff changeset
   104
        In fact, stc-code uses a kind of class-constant-table,
171048f57a34 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19716
diff changeset
   105
        and only message-send symbols are found in the literal array.
171048f57a34 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19716
diff changeset
   106
        Thus, in order to find constants (literals) used by a method,
171048f57a34 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19716
diff changeset
   107
        you have to parse its source.
20208
79b24601b7d6 #OTHER by mawalch
mawalch
parents: 20035
diff changeset
   108
1293
02fb05148c98 documentation
Claus Gittinger <cg@exept.de>
parents: 1264
diff changeset
   109
    [Instance variables:]
93
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
   110
19732
171048f57a34 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19716
diff changeset
   111
        source          <String>        the source itself (if sourcePosition isNil)
171048f57a34 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19716
diff changeset
   112
                                        or the fileName where the source is found
171048f57a34 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19716
diff changeset
   113
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   114
        sourcePosition  <Integer>       the position of the method's chunk in the file
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   115
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   116
        category        <Symbol>        the method's category
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   117
        package         <Symbol>        the package, in which the method was defined
19732
171048f57a34 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19716
diff changeset
   118
        mclass          <Class>         the class in which I am defined
171048f57a34 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19716
diff changeset
   119
        indexed slots                   literals
227
23b1c4de3402 package & cleanup
claus
parents: 216
diff changeset
   120
1293
02fb05148c98 documentation
Claus Gittinger <cg@exept.de>
parents: 1264
diff changeset
   121
    [Class variables:]
227
23b1c4de3402 package & cleanup
claus
parents: 216
diff changeset
   122
19732
171048f57a34 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19716
diff changeset
   123
        PrivateMethodSignal             raised on privacy violation (see docu)
171048f57a34 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19716
diff changeset
   124
171048f57a34 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19716
diff changeset
   125
        LastFileReference               weak reference to the last sourceFile
171048f57a34 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19716
diff changeset
   126
        LastSourceFileName              to speedup source access via NFS
93
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
   127
20804
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
   128
    WARNING: layout known by compiler and runtime system - don't change
1293
02fb05148c98 documentation
Claus Gittinger <cg@exept.de>
parents: 1264
diff changeset
   129
02fb05148c98 documentation
Claus Gittinger <cg@exept.de>
parents: 1264
diff changeset
   130
    [author:]
19732
171048f57a34 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19716
diff changeset
   131
        Claus Gittinger
42
e33491f6f260 *** empty log message ***
claus
parents: 39
diff changeset
   132
"
176
48061f8659aa more queries
claus
parents: 159
diff changeset
   133
!
48061f8659aa more queries
claus
parents: 159
diff changeset
   134
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
   135
dynamicMethods
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
   136
"
5277
d457937a69e5 comments & code-cleanup in #who
Claus Gittinger <cg@exept.de>
parents: 5241
diff changeset
   137
    On systems which support dynamic loading of stc-compiled machine code (SYS5.4, Linux),
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
   138
    methods may now be compiled to machine code from within the browser,
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
   139
    and the resulting machine code object be loaded in.
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
   140
    The ObjectFileLoader keeps (weak) handles to the resulting methods and
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
   141
    invalidates the corresponding method objects, if the underlying methods
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
   142
    object code is unloaded.
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
   143
    Invalid methods will trap into the debugger when executed;
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
   144
    also, the browser marks them as '(* not executable *)' in its method list.
5277
d457937a69e5 comments & code-cleanup in #who
Claus Gittinger <cg@exept.de>
parents: 5241
diff changeset
   145
d457937a69e5 comments & code-cleanup in #who
Claus Gittinger <cg@exept.de>
parents: 5241
diff changeset
   146
    Notice: this has nothing to do with JIT compilation, which is always possible.
d457937a69e5 comments & code-cleanup in #who
Claus Gittinger <cg@exept.de>
parents: 5241
diff changeset
   147
    JIT-compilation is done from bytecodes to a machineCode cache.
d457937a69e5 comments & code-cleanup in #who
Claus Gittinger <cg@exept.de>
parents: 5241
diff changeset
   148
    In contrast, dynamic loading of stc-compiled code goes via intermediate C-code
d457937a69e5 comments & code-cleanup in #who
Claus Gittinger <cg@exept.de>
parents: 5241
diff changeset
   149
    which is compiled by the machines native C-compiler.
d457937a69e5 comments & code-cleanup in #who
Claus Gittinger <cg@exept.de>
parents: 5241
diff changeset
   150
    As opposed to JITted code, this allows for embedded primitive C-code.
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
   151
"
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
   152
!
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
   153
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
   154
privacy
176
48061f8659aa more queries
claus
parents: 159
diff changeset
   155
"
48061f8659aa more queries
claus
parents: 159
diff changeset
   156
    ST/X includes an EXPERIMENTAL implementation of method privacy.
48061f8659aa more queries
claus
parents: 159
diff changeset
   157
    Individual methods may be set to private or protected via the
5277
d457937a69e5 comments & code-cleanup in #who
Claus Gittinger <cg@exept.de>
parents: 5241
diff changeset
   158
    privacy:#private and privacy:#protected messages. Also, categories may be
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 192
diff changeset
   159
    filedIn as a whole as private using #privateMethodsFor: or as
40ca7cc6fb9c *** empty log message ***
claus
parents: 192
diff changeset
   160
    protected using #protectedMethodsFor: instead of the well known #methodsFor:.
40ca7cc6fb9c *** empty log message ***
claus
parents: 192
diff changeset
   161
176
48061f8659aa more queries
claus
parents: 159
diff changeset
   162
    The additional #publicMethodsFor: is for documentation purposes, and
227
23b1c4de3402 package & cleanup
claus
parents: 216
diff changeset
   163
    is equivalent to #methodsFor: (also to support fileIn of ENVY methods).
176
48061f8659aa more queries
claus
parents: 159
diff changeset
   164
8518
7dc3f9909640 Interchanged the meaning of method privacy -
Stefan Vogel <sv@exept.de>
parents: 8465
diff changeset
   165
    Protected methods may be executed only when called via a self-send
5277
d457937a69e5 comments & code-cleanup in #who
Claus Gittinger <cg@exept.de>
parents: 5241
diff changeset
   166
    from the superclass-methods and self or super-sends from methods in the
d457937a69e5 comments & code-cleanup in #who
Claus Gittinger <cg@exept.de>
parents: 5241
diff changeset
   167
    class itself or subclasses.
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
   168
    Private methods may not be called from subclasses-methods,
5277
d457937a69e5 comments & code-cleanup in #who
Claus Gittinger <cg@exept.de>
parents: 5241
diff changeset
   169
    i.e. they may only be called via self sends from within the current class.
8518
7dc3f9909640 Interchanged the meaning of method privacy -
Stefan Vogel <sv@exept.de>
parents: 8465
diff changeset
   170
    (i.e. protected methods are less private than private ones)
176
48061f8659aa more queries
claus
parents: 159
diff changeset
   171
48061f8659aa more queries
claus
parents: 159
diff changeset
   172
    When such a situation arises, the VM (runtime system) will raise the
48061f8659aa more queries
claus
parents: 159
diff changeset
   173
    PrivateMethodSignal exception (if nonNil), which usually brings you into the
48061f8659aa more queries
claus
parents: 159
diff changeset
   174
    debugger.
48061f8659aa more queries
claus
parents: 159
diff changeset
   175
227
23b1c4de3402 package & cleanup
claus
parents: 216
diff changeset
   176
    If PrivateMethodSignal is nil, the VM will not check for this, and
176
48061f8659aa more queries
claus
parents: 159
diff changeset
   177
    execution is as usual. (you may want to nil-it for production code,
48061f8659aa more queries
claus
parents: 159
diff changeset
   178
    and leave it non nil during development).
48061f8659aa more queries
claus
parents: 159
diff changeset
   179
20208
79b24601b7d6 #OTHER by mawalch
mawalch
parents: 20035
diff changeset
   180
    NOTICE: there is no (not yet?) standard defined for method privacy,
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
   181
    however, the definition protocol was designed to be somewhat ENVY compatible
5277
d457937a69e5 comments & code-cleanup in #who
Claus Gittinger <cg@exept.de>
parents: 5241
diff changeset
   182
    (from what can be deduced by reading PD code).
d457937a69e5 comments & code-cleanup in #who
Claus Gittinger <cg@exept.de>
parents: 5241
diff changeset
   183
176
48061f8659aa more queries
claus
parents: 159
diff changeset
   184
    Also, the usability of privacy is still to be tested.
415
claus
parents: 414
diff changeset
   185
    This interface, the implementation and the rules for when a privacy violation
claus
parents: 414
diff changeset
   186
    may change (in case of some ANSI standard being defined).
227
23b1c4de3402 package & cleanup
claus
parents: 216
diff changeset
   187
    Be warned and send me suggestions & critics (constructive ;-)
5277
d457937a69e5 comments & code-cleanup in #who
Claus Gittinger <cg@exept.de>
parents: 5241
diff changeset
   188
d457937a69e5 comments & code-cleanup in #who
Claus Gittinger <cg@exept.de>
parents: 5241
diff changeset
   189
    Late note (Feb 2000):
20208
79b24601b7d6 #OTHER by mawalch
mawalch
parents: 20035
diff changeset
   190
        the privacy feature has now been in ST/X for some years and was NOT heavily
79b24601b7d6 #OTHER by mawalch
mawalch
parents: 20035
diff changeset
   191
        used - neither at eXept, nor by customers.
79b24601b7d6 #OTHER by mawalch
mawalch
parents: 20035
diff changeset
   192
        In Smalltalk, it seems to be a very questionable feature, actually limiting
79b24601b7d6 #OTHER by mawalch
mawalch
parents: 20035
diff changeset
   193
        code reusability.
79b24601b7d6 #OTHER by mawalch
mawalch
parents: 20035
diff changeset
   194
        The privacy features are left in the system to demonstrate that it can be
79b24601b7d6 #OTHER by mawalch
mawalch
parents: 20035
diff changeset
   195
        done in Smalltalk (for religious C++ fans ... to avoid useless discussions)
79b24601b7d6 #OTHER by mawalch
mawalch
parents: 20035
diff changeset
   196
        (the check is not expensive, w.r.t. the VM runtime behavior).
176
48061f8659aa more queries
claus
parents: 159
diff changeset
   197
"
42
e33491f6f260 *** empty log message ***
claus
parents: 39
diff changeset
   198
! !
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   199
1775
6892b91ddc0b F_CALLED flag is no longer present
Claus Gittinger <cg@exept.de>
parents: 1692
diff changeset
   200
!Method class methodsFor:'initialization'!
109
1fae65190b17 errors raise signals; check arg-count in valueWith...
claus
parents: 93
diff changeset
   201
1fae65190b17 errors raise signals; check arg-count in valueWith...
claus
parents: 93
diff changeset
   202
initialize
1254
48c2748b5197 commentary
Claus Gittinger <cg@exept.de>
parents: 1236
diff changeset
   203
    "create signals"
48c2748b5197 commentary
Claus Gittinger <cg@exept.de>
parents: 1236
diff changeset
   204
109
1fae65190b17 errors raise signals; check arg-count in valueWith...
claus
parents: 93
diff changeset
   205
    PrivateMethodSignal isNil ifTrue:[
20032
68dbfb9bf2c1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19868
diff changeset
   206
        "EXPERIMENTAL"
68dbfb9bf2c1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19868
diff changeset
   207
        PrivateMethodSignal := ExecutionError newSignalMayProceed:true.
68dbfb9bf2c1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19868
diff changeset
   208
        PrivateMethodSignal nameClass:self message:#privateMethodSignal.
68dbfb9bf2c1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19868
diff changeset
   209
        PrivateMethodSignal notifierString:'attempt to execute private/protected method'.
2079
bcf84ab30304 Make cached sourcefile thread-protected.
Stefan Vogel <sv@exept.de>
parents: 2066
diff changeset
   210
    ].
bcf84ab30304 Make cached sourcefile thread-protected.
Stefan Vogel <sv@exept.de>
parents: 2066
diff changeset
   211
bcf84ab30304 Make cached sourcefile thread-protected.
Stefan Vogel <sv@exept.de>
parents: 2066
diff changeset
   212
    LastFileLock isNil ifTrue:[
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   213
        LastFileLock := RecursionLock name:'Method-LastFile'.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   214
        LastMethodSourcesLock := RecursionLock name:'Method-LastMethodSources'.
20032
68dbfb9bf2c1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19868
diff changeset
   215
68dbfb9bf2c1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19868
diff changeset
   216
        LastFileReference := WeakArray new:1.
2079
bcf84ab30304 Make cached sourcefile thread-protected.
Stefan Vogel <sv@exept.de>
parents: 2066
diff changeset
   217
    ].
1254
48c2748b5197 commentary
Claus Gittinger <cg@exept.de>
parents: 1236
diff changeset
   218
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   219
    CompilationLock := RecursionLock name:'MethodCompilation'.
4290
5e43473d7a35 moved recompilation semaphore from LazyMethod to Method
Claus Gittinger <cg@exept.de>
parents: 4015
diff changeset
   220
14231
a61fd41fe0d6 variable renamed in: #initialize
Claus Gittinger <cg@exept.de>
parents: 14161
diff changeset
   221
    "Modified: / 03-01-1997 / 16:58:16 / stefan"
a61fd41fe0d6 variable renamed in: #initialize
Claus Gittinger <cg@exept.de>
parents: 14161
diff changeset
   222
    "Modified (comment): / 20-07-2012 / 18:41:11 / cg"
10375
b1558b2e851d care for source access BEFORE being initialized.
ca
parents: 10207
diff changeset
   223
!
b1558b2e851d care for source access BEFORE being initialized.
ca
parents: 10207
diff changeset
   224
b1558b2e851d care for source access BEFORE being initialized.
ca
parents: 10207
diff changeset
   225
lastMethodSourcesLock
b1558b2e851d care for source access BEFORE being initialized.
ca
parents: 10207
diff changeset
   226
    LastMethodSourcesLock isNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   227
	self initialize
10375
b1558b2e851d care for source access BEFORE being initialized.
ca
parents: 10207
diff changeset
   228
    ].
b1558b2e851d care for source access BEFORE being initialized.
ca
parents: 10207
diff changeset
   229
    ^ LastMethodSourcesLock
109
1fae65190b17 errors raise signals; check arg-count in valueWith...
claus
parents: 93
diff changeset
   230
! !
1fae65190b17 errors raise signals; check arg-count in valueWith...
claus
parents: 93
diff changeset
   231
1775
6892b91ddc0b F_CALLED flag is no longer present
Claus Gittinger <cg@exept.de>
parents: 1692
diff changeset
   232
!Method class methodsFor:'Signal constants'!
159
514c749165c3 *** empty log message ***
claus
parents: 142
diff changeset
   233
514c749165c3 *** empty log message ***
claus
parents: 142
diff changeset
   234
privateMethodSignal
176
48061f8659aa more queries
claus
parents: 159
diff changeset
   235
    "return the signal raised when a private/protected method is called
48061f8659aa more queries
claus
parents: 159
diff changeset
   236
     by some other object (i.e. not a self- or super send)"
48061f8659aa more queries
claus
parents: 159
diff changeset
   237
159
514c749165c3 *** empty log message ***
claus
parents: 142
diff changeset
   238
    ^ PrivateMethodSignal
514c749165c3 *** empty log message ***
claus
parents: 142
diff changeset
   239
! !
514c749165c3 *** empty log message ***
claus
parents: 142
diff changeset
   240
13570
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
   241
!Method class methodsFor:'cleanup'!
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
   242
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
   243
lowSpaceCleanup
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   244
    "cleanup in low-memory situations"
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   245
13570
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
   246
    LastParseTreeCache := nil.
13572
c81aeb055fd3 changed: #lowSpaceCleanup
Claus Gittinger <cg@exept.de>
parents: 13571
diff changeset
   247
    LastSourceFileName := LastWhoClass := nil.
14236
d383e9f70795 changed: #lowSpaceCleanup
Claus Gittinger <cg@exept.de>
parents: 14231
diff changeset
   248
    self flushSourceStreamCache.
13570
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
   249
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
   250
    "Created: / 08-08-2011 / 19:11:23 / cg"
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   251
    "Modified (comment): / 20-07-2017 / 12:06:17 / cg"
13570
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
   252
! !
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
   253
1775
6892b91ddc0b F_CALLED flag is no longer present
Claus Gittinger <cg@exept.de>
parents: 1692
diff changeset
   254
!Method class methodsFor:'queries'!
3
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
   255
18462
c45bfbc05503 class: Method
Stefan Vogel <sv@exept.de>
parents: 18438
diff changeset
   256
binarySelectorCharacters
c45bfbc05503 class: Method
Stefan Vogel <sv@exept.de>
parents: 18438
diff changeset
   257
    "return a collection of characters which are allowed in binary selectors"
c45bfbc05503 class: Method
Stefan Vogel <sv@exept.de>
parents: 18438
diff changeset
   258
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   259
    "/ does not work yet, because we have no 2-byte symbols yet...
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   260
    "/ ^ '&-+=*/\<>~@,?!!|%#≈≠≡≤≥∓∗∘∧∨∴∼'.
18462
c45bfbc05503 class: Method
Stefan Vogel <sv@exept.de>
parents: 18438
diff changeset
   261
    ^ '&-+=*/\<>~@,?!!|%#'.
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   262
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   263
    "Modified: / 02-07-2017 / 01:09:52 / cg"
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   264
!
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   265
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   266
imageResourceTypes
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   267
    "get the types of resources which generate an image"
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   268
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   269
    ^ #(image fileImage programImage uncachedImage).
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   270
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   271
    "Created: / 31-05-2020 / 15:45:21 / cg"
18462
c45bfbc05503 class: Method
Stefan Vogel <sv@exept.de>
parents: 18438
diff changeset
   272
!
c45bfbc05503 class: Method
Stefan Vogel <sv@exept.de>
parents: 18438
diff changeset
   273
3
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
   274
isBuiltInClass
1264
8d916aa63bce commentary
Claus Gittinger <cg@exept.de>
parents: 1260
diff changeset
   275
    "return true if this class is known by the run-time-system.
8d916aa63bce commentary
Claus Gittinger <cg@exept.de>
parents: 1260
diff changeset
   276
     Here, true is returned for myself, false for subclasses."
3
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
   277
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
   278
    ^ self == Method
1264
8d916aa63bce commentary
Claus Gittinger <cg@exept.de>
parents: 1260
diff changeset
   279
8d916aa63bce commentary
Claus Gittinger <cg@exept.de>
parents: 1260
diff changeset
   280
    "Modified: 23.4.1996 / 15:59:50 / cg"
44
b262907c93ea *** empty log message ***
claus
parents: 42
diff changeset
   281
!
b262907c93ea *** empty log message ***
claus
parents: 42
diff changeset
   282
18462
c45bfbc05503 class: Method
Stefan Vogel <sv@exept.de>
parents: 18438
diff changeset
   283
maxBinarySelectorSize
c45bfbc05503 class: Method
Stefan Vogel <sv@exept.de>
parents: 18438
diff changeset
   284
    ^ 3
c45bfbc05503 class: Method
Stefan Vogel <sv@exept.de>
parents: 18438
diff changeset
   285
c45bfbc05503 class: Method
Stefan Vogel <sv@exept.de>
parents: 18438
diff changeset
   286
    "
c45bfbc05503 class: Method
Stefan Vogel <sv@exept.de>
parents: 18438
diff changeset
   287
     in ST/X, binops are allowed with up-to 3 characters;
c45bfbc05503 class: Method
Stefan Vogel <sv@exept.de>
parents: 18438
diff changeset
   288
     for example:
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   289
	<->
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   290
	<=>
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   291
	+++
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   292
	:=:
18462
c45bfbc05503 class: Method
Stefan Vogel <sv@exept.de>
parents: 18438
diff changeset
   293
     etc. are valid binOps here
c45bfbc05503 class: Method
Stefan Vogel <sv@exept.de>
parents: 18438
diff changeset
   294
    "
c45bfbc05503 class: Method
Stefan Vogel <sv@exept.de>
parents: 18438
diff changeset
   295
!
c45bfbc05503 class: Method
Stefan Vogel <sv@exept.de>
parents: 18438
diff changeset
   296
6089
a3710756f360 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6071
diff changeset
   297
methodDefinitionTemplateForSelector:aSelector
a3710756f360 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6071
diff changeset
   298
    "given a selector, return a prototype definition string"
a3710756f360 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6071
diff changeset
   299
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   300
    ^ self programmingLanguage
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   301
	methodDefinitionTemplateForSelector:aSelector
6090
77dfb33df61a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6089
diff changeset
   302
77dfb33df61a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6089
diff changeset
   303
    "
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
   304
     Method methodDefinitionTemplateForSelector:#foo
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
   305
     Method methodDefinitionTemplateForSelector:#+
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
   306
     Method methodDefinitionTemplateForSelector:#foo:bar:baz:
6090
77dfb33df61a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6089
diff changeset
   307
    "
77dfb33df61a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6089
diff changeset
   308
!
77dfb33df61a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6089
diff changeset
   309
77dfb33df61a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6089
diff changeset
   310
methodDefinitionTemplateForSelector:aSelector andArgumentNames:argNames
77dfb33df61a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6089
diff changeset
   311
    "given a selector, return a prototype definition string"
77dfb33df61a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6089
diff changeset
   312
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   313
    ^ self programmingLanguage
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   314
	methodDefinitionTemplateForSelector:aSelector andArgumentNames:argNames
6089
a3710756f360 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6071
diff changeset
   315
a3710756f360 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6071
diff changeset
   316
    "
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   317
     Method methodDefinitionTemplateForSelector:#foo          andArgumentNames:#()
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
   318
     Method methodDefinitionTemplateForSelector:#+            andArgumentNames:#('aNumber')
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
   319
     Method methodDefinitionTemplateForSelector:#foo:bar:baz: andArgumentNames:#('fooArg' 'barArg' 'bazArg')
6089
a3710756f360 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6071
diff changeset
   320
    "
a3710756f360 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6071
diff changeset
   321
!
a3710756f360 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6071
diff changeset
   322
747
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
   323
methodPrivacySupported
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
   324
    "return true, if the system was compiled to support methodPrivacy.
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
   325
     You should not depend on that feature being available."
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
   326
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
   327
%{  /* NOCONTEXT */
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
   328
#if defined(F_PRIVATE) || defined(F_CLASSPRIVATE)
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
   329
    RETURN (true);
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
   330
#else
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
   331
    RETURN (false);
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
   332
#endif
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
   333
%}
3342
8bcf0fc80a21 class method #resourceTypes re-added
tz
parents: 3341
diff changeset
   334
!
8bcf0fc80a21 class method #resourceTypes re-added
tz
parents: 3341
diff changeset
   335
8bcf0fc80a21 class method #resourceTypes re-added
tz
parents: 3341
diff changeset
   336
resourceTypes
8bcf0fc80a21 class method #resourceTypes re-added
tz
parents: 3341
diff changeset
   337
    "get the types of resources for which a spec definition and corresponding editor exist"
8bcf0fc80a21 class method #resourceTypes re-added
tz
parents: 3341
diff changeset
   338
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   339
    ^ #(canvas menu 
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   340
        image fileImage uncachedImage
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   341
        help hierarchicalList tabList tableColumns)
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   342
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   343
    "Modified: / 31-05-2020 / 15:45:46 / cg"
3
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
   344
! !
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
   345
1775
6892b91ddc0b F_CALLED flag is no longer present
Claus Gittinger <cg@exept.de>
parents: 1692
diff changeset
   346
!Method class methodsFor:'special'!
957
b405ae99d437 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 952
diff changeset
   347
14039
30251b45156a added: #flushParseTreeCache
Claus Gittinger <cg@exept.de>
parents: 13847
diff changeset
   348
flushParseTreeCache
30251b45156a added: #flushParseTreeCache
Claus Gittinger <cg@exept.de>
parents: 13847
diff changeset
   349
    "used by lint and the compiler"
30251b45156a added: #flushParseTreeCache
Claus Gittinger <cg@exept.de>
parents: 13847
diff changeset
   350
30251b45156a added: #flushParseTreeCache
Claus Gittinger <cg@exept.de>
parents: 13847
diff changeset
   351
    LastParseTreeCache := nil
30251b45156a added: #flushParseTreeCache
Claus Gittinger <cg@exept.de>
parents: 13847
diff changeset
   352
30251b45156a added: #flushParseTreeCache
Claus Gittinger <cg@exept.de>
parents: 13847
diff changeset
   353
    "
30251b45156a added: #flushParseTreeCache
Claus Gittinger <cg@exept.de>
parents: 13847
diff changeset
   354
     Method flushParseTreeCache
30251b45156a added: #flushParseTreeCache
Claus Gittinger <cg@exept.de>
parents: 13847
diff changeset
   355
    "
30251b45156a added: #flushParseTreeCache
Claus Gittinger <cg@exept.de>
parents: 13847
diff changeset
   356
30251b45156a added: #flushParseTreeCache
Claus Gittinger <cg@exept.de>
parents: 13847
diff changeset
   357
    "Created: / 01-03-2012 / 16:45:34 / cg"
30251b45156a added: #flushParseTreeCache
Claus Gittinger <cg@exept.de>
parents: 13847
diff changeset
   358
!
30251b45156a added: #flushParseTreeCache
Claus Gittinger <cg@exept.de>
parents: 13847
diff changeset
   359
957
b405ae99d437 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 952
diff changeset
   360
flushSourceStreamCache
11663
6ef3b25bd306 changed #sourceStream - honor lock
Stefan Vogel <sv@exept.de>
parents: 11428
diff changeset
   361
    LastFileLock critical:[
20035
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   362
        LastSourceFileName := LastMethodSources := nil.
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   363
        LastFileReference at:1 put:nil.
11663
6ef3b25bd306 changed #sourceStream - honor lock
Stefan Vogel <sv@exept.de>
parents: 11428
diff changeset
   364
    ].
957
b405ae99d437 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 952
diff changeset
   365
7830
a19d3746255f comment
Claus Gittinger <cg@exept.de>
parents: 7771
diff changeset
   366
    "
a19d3746255f comment
Claus Gittinger <cg@exept.de>
parents: 7771
diff changeset
   367
     Method flushSourceStreamCache
a19d3746255f comment
Claus Gittinger <cg@exept.de>
parents: 7771
diff changeset
   368
    "
a19d3746255f comment
Claus Gittinger <cg@exept.de>
parents: 7771
diff changeset
   369
957
b405ae99d437 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 952
diff changeset
   370
    "Created: 9.2.1996 / 19:05:28 / cg"
b405ae99d437 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 952
diff changeset
   371
! !
b405ae99d437 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 952
diff changeset
   372
13657
206c6696707b added: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13651
diff changeset
   373
!Method class methodsFor:'trap methods'!
206c6696707b added: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13651
diff changeset
   374
206c6696707b added: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13651
diff changeset
   375
trapMethodForNumArgs:numArgs
13805
dec466a100bc changed: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13693
diff changeset
   376
    "return a method which will raise an invalid code object exception.
dec466a100bc changed: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13693
diff changeset
   377
     Before recompiling methods (due to changed variable scopes, for example),
dec466a100bc changed: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13693
diff changeset
   378
     all method's code is replaced by this. If recompilation fails, this code
dec466a100bc changed: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13693
diff changeset
   379
     remains in the method to make it trap, whenever executed later.
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   380
     Otherwise, if recompilation succeeds, that code will vanish after the compile"
13805
dec466a100bc changed: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13693
diff changeset
   381
dec466a100bc changed: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13693
diff changeset
   382
    |trapSel trapMethod|
13657
206c6696707b added: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13651
diff changeset
   383
206c6696707b added: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13651
diff changeset
   384
    trapSel := #(
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   385
                   invalidCodeObject
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   386
                   invalidCodeObjectWith:
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   387
                   invalidCodeObjectWith:with:
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   388
                   invalidCodeObjectWith:with:with:
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   389
                   invalidCodeObjectWith:with:with:with:
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   390
                   invalidCodeObjectWith:with:with:with:with:
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   391
                   invalidCodeObjectWith:with:with:with:with:with:
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   392
                   invalidCodeObjectWith:with:with:with:with:with:with:
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   393
                   invalidCodeObjectWith:with:with:with:with:with:with:with:
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   394
                   invalidCodeObjectWith:with:with:with:with:with:with:with:with:
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   395
                   invalidCodeObjectWith:with:with:with:with:with:with:with:with:with:
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   396
                   invalidCodeObjectWith:with:with:with:with:with:with:with:with:with:with:
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   397
                   invalidCodeObjectWith:with:with:with:with:with:with:with:with:with:with:with:
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   398
                   invalidCodeObjectWith:with:with:with:with:with:with:with:with:with:with:with:with:
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   399
                   invalidCodeObjectWith:with:with:with:with:with:with:with:with:with:with:with:with:with:
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   400
                   invalidCodeObjectWith:with:with:with:with:with:with:with:with:with:with:with:with:with:with:
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   401
                ) at:(numArgs + 1).
13657
206c6696707b added: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13651
diff changeset
   402
13805
dec466a100bc changed: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13693
diff changeset
   403
    (trapMethod := self compiledMethodAt:trapSel) isNil ifTrue:[
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   404
        trapMethod := Method compiledMethodAt:trapSel.
13805
dec466a100bc changed: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13693
diff changeset
   405
    ].
dec466a100bc changed: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13693
diff changeset
   406
    ^ trapMethod.
13657
206c6696707b added: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13651
diff changeset
   407
16261
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
   408
    "
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   409
        self trapMethodForNumArgs:2
16261
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
   410
    "
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
   411
13657
206c6696707b added: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13651
diff changeset
   412
    "Created: / 04-11-1996 / 21:58:58 / cg"
13693
16c890248840 added: #invalidCodeObjectWith:
sr
parents: 13683
diff changeset
   413
    "Modified: / 14-09-2011 / 11:23:09 / sr"
13805
dec466a100bc changed: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13693
diff changeset
   414
    "Modified (comment): / 30-10-2011 / 11:04:24 / cg"
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   415
    "Modified (comment): / 22-05-2017 / 15:08:44 / mawalch"
13657
206c6696707b added: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13651
diff changeset
   416
! !
206c6696707b added: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13651
diff changeset
   417
13634
40d6d6b5d9f0 added: #pragmas
Claus Gittinger <cg@exept.de>
parents: 13629
diff changeset
   418
!Method methodsFor:'Compatibility-Squeak'!
40d6d6b5d9f0 added: #pragmas
Claus Gittinger <cg@exept.de>
parents: 13629
diff changeset
   419
14161
3b44e4394070 added: #isCompiledMethod
Claus Gittinger <cg@exept.de>
parents: 14152
diff changeset
   420
isCompiledMethod
3b44e4394070 added: #isCompiledMethod
Claus Gittinger <cg@exept.de>
parents: 14152
diff changeset
   421
    ^ true
3b44e4394070 added: #isCompiledMethod
Claus Gittinger <cg@exept.de>
parents: 14152
diff changeset
   422
3b44e4394070 added: #isCompiledMethod
Claus Gittinger <cg@exept.de>
parents: 14152
diff changeset
   423
    "Created: / 13-06-2012 / 14:51:19 / cg"
3b44e4394070 added: #isCompiledMethod
Claus Gittinger <cg@exept.de>
parents: 14152
diff changeset
   424
!
3b44e4394070 added: #isCompiledMethod
Claus Gittinger <cg@exept.de>
parents: 14152
diff changeset
   425
13676
a45e94212639 added: #pragmaAt:
Claus Gittinger <cg@exept.de>
parents: 13662
diff changeset
   426
pragmaAt:aKey
a45e94212639 added: #pragmaAt:
Claus Gittinger <cg@exept.de>
parents: 13662
diff changeset
   427
    ^ self annotationAt:aKey
a45e94212639 added: #pragmaAt:
Claus Gittinger <cg@exept.de>
parents: 13662
diff changeset
   428
a45e94212639 added: #pragmaAt:
Claus Gittinger <cg@exept.de>
parents: 13662
diff changeset
   429
    "Created: / 11-09-2011 / 18:09:05 / cg"
a45e94212639 added: #pragmaAt:
Claus Gittinger <cg@exept.de>
parents: 13662
diff changeset
   430
!
a45e94212639 added: #pragmaAt:
Claus Gittinger <cg@exept.de>
parents: 13662
diff changeset
   431
13634
40d6d6b5d9f0 added: #pragmas
Claus Gittinger <cg@exept.de>
parents: 13629
diff changeset
   432
pragmas
16193
004fe3b584a7 class: Method
Claus Gittinger <cg@exept.de>
parents: 16130
diff changeset
   433
    "for squeak compatibility, we only present real pragmas"
004fe3b584a7 class: Method
Claus Gittinger <cg@exept.de>
parents: 16130
diff changeset
   434
004fe3b584a7 class: Method
Claus Gittinger <cg@exept.de>
parents: 16130
diff changeset
   435
    ^ (self annotations ? #()) select:[:a | a isArray not and:[ a isResource not ] ]
13679
3fd763ff0911 added: #propertyValueAt:
Claus Gittinger <cg@exept.de>
parents: 13676
diff changeset
   436
!
3fd763ff0911 added: #propertyValueAt:
Claus Gittinger <cg@exept.de>
parents: 13676
diff changeset
   437
3fd763ff0911 added: #propertyValueAt:
Claus Gittinger <cg@exept.de>
parents: 13676
diff changeset
   438
propertyValueAt:aKey
3fd763ff0911 added: #propertyValueAt:
Claus Gittinger <cg@exept.de>
parents: 13676
diff changeset
   439
    "for now - no properties"
3fd763ff0911 added: #propertyValueAt:
Claus Gittinger <cg@exept.de>
parents: 13676
diff changeset
   440
3fd763ff0911 added: #propertyValueAt:
Claus Gittinger <cg@exept.de>
parents: 13676
diff changeset
   441
    ^ nil
3fd763ff0911 added: #propertyValueAt:
Claus Gittinger <cg@exept.de>
parents: 13676
diff changeset
   442
3fd763ff0911 added: #propertyValueAt:
Claus Gittinger <cg@exept.de>
parents: 13676
diff changeset
   443
    "Created: / 12-09-2011 / 08:42:02 / cg"
16910
8f814706ef37 Added Method>>sourceCode Squeak compatibility method
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16877
diff changeset
   444
!
8f814706ef37 Added Method>>sourceCode Squeak compatibility method
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16877
diff changeset
   445
8f814706ef37 Added Method>>sourceCode Squeak compatibility method
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16877
diff changeset
   446
sourceCode
8f814706ef37 Added Method>>sourceCode Squeak compatibility method
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16877
diff changeset
   447
    ^ self source
8f814706ef37 Added Method>>sourceCode Squeak compatibility method
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16877
diff changeset
   448
8f814706ef37 Added Method>>sourceCode Squeak compatibility method
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16877
diff changeset
   449
    "Created: / 30-10-2014 / 23:24:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
13634
40d6d6b5d9f0 added: #pragmas
Claus Gittinger <cg@exept.de>
parents: 13629
diff changeset
   450
! !
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   451
7261
f35fc9cee675 method category rename
Claus Gittinger <cg@exept.de>
parents: 7258
diff changeset
   452
!Method methodsFor:'Compatibility-VW'!
5967
ab762bb4f64f added #sendsSelector:
Claus Gittinger <cg@exept.de>
parents: 5959
diff changeset
   453
17647
6728a090cd05 class: Method
Claus Gittinger <cg@exept.de>
parents: 17562
diff changeset
   454
attributeAt:aSymbol ifAbsent:exceptionValue
6728a090cd05 class: Method
Claus Gittinger <cg@exept.de>
parents: 17562
diff changeset
   455
    |annots|
6728a090cd05 class: Method
Claus Gittinger <cg@exept.de>
parents: 17562
diff changeset
   456
6728a090cd05 class: Method
Claus Gittinger <cg@exept.de>
parents: 17562
diff changeset
   457
    annots := self annotationsAt:aSymbol.
17693
34f65034df3e class: Method
Claus Gittinger <cg@exept.de>
parents: 17647
diff changeset
   458
    annots isEmptyOrNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   459
	(aSymbol endsWith:$:) ifFalse:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   460
	    annots := self annotationsAt:(aSymbol,$:) asSymbol.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   461
	].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   462
	annots isEmptyOrNil ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   463
	    ^ exceptionValue value
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   464
	].
17693
34f65034df3e class: Method
Claus Gittinger <cg@exept.de>
parents: 17647
diff changeset
   465
    ].
17647
6728a090cd05 class: Method
Claus Gittinger <cg@exept.de>
parents: 17562
diff changeset
   466
    ^ annots first arguments first
6728a090cd05 class: Method
Claus Gittinger <cg@exept.de>
parents: 17562
diff changeset
   467
!
6728a090cd05 class: Method
Claus Gittinger <cg@exept.de>
parents: 17562
diff changeset
   468
6728a090cd05 class: Method
Claus Gittinger <cg@exept.de>
parents: 17562
diff changeset
   469
attributeMessages
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   470
    ^ self annotations
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   471
	collect:[:annot | Message selector:annot key arguments:annot arguments]
17647
6728a090cd05 class: Method
Claus Gittinger <cg@exept.de>
parents: 17562
diff changeset
   472
!
6728a090cd05 class: Method
Claus Gittinger <cg@exept.de>
parents: 17562
diff changeset
   473
11146
553e658691d2 +classIsMeta
Claus Gittinger <cg@exept.de>
parents: 11066
diff changeset
   474
classIsMeta
553e658691d2 +classIsMeta
Claus Gittinger <cg@exept.de>
parents: 11066
diff changeset
   475
    "return true, if this method is a class method"
553e658691d2 +classIsMeta
Claus Gittinger <cg@exept.de>
parents: 11066
diff changeset
   476
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
   477
    ^ self mclass isMeta
11146
553e658691d2 +classIsMeta
Claus Gittinger <cg@exept.de>
parents: 11066
diff changeset
   478
!
553e658691d2 +classIsMeta
Claus Gittinger <cg@exept.de>
parents: 11066
diff changeset
   479
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   480
protocol
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   481
    "called 'category' here"
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   482
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   483
    ^ self category
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   484
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   485
    "Created: / 09-05-2020 / 00:03:23 / cg"
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   486
!
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   487
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   488
sendsAnySelector:aCollectionOfSelectorSymbols
17175
9b51d2509e65 class: Method
Claus Gittinger <cg@exept.de>
parents: 17173
diff changeset
   489
    "return true, if this method contains a message-send
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   490
     to any of aCollectionOfSelectorSymbols."
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   491
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   492
    |msgs|
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   493
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   494
    (aCollectionOfSelectorSymbols contains:[:sym | self referencesLiteral:sym]) ifTrue:[
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   495
        "/ cg: was temporarily disabled to speed up some searches.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   496
        "/ I think, we have to change the caller's to call referencesLiteral: instead,
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   497
        "/ if there is any speed problem there. Not here.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   498
        "/ ^ true.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   499
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   500
        msgs := self messagesSent.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   501
        ^ aCollectionOfSelectorSymbols contains:[:sym | msgs includesIdentical:sym]
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   502
    ].
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   503
    ^ false
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   504
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   505
    "Modified: / 05-02-2017 / 01:22:03 / cg"
17175
9b51d2509e65 class: Method
Claus Gittinger <cg@exept.de>
parents: 17173
diff changeset
   506
!
9b51d2509e65 class: Method
Claus Gittinger <cg@exept.de>
parents: 17173
diff changeset
   507
5967
ab762bb4f64f added #sendsSelector:
Claus Gittinger <cg@exept.de>
parents: 5959
diff changeset
   508
sendsSelector:aSelectorSymbol
ab762bb4f64f added #sendsSelector:
Claus Gittinger <cg@exept.de>
parents: 5959
diff changeset
   509
    "return true, if this method contains a message-send
ab762bb4f64f added #sendsSelector:
Claus Gittinger <cg@exept.de>
parents: 5959
diff changeset
   510
     with aSelectorSymbol as selector."
ab762bb4f64f added #sendsSelector:
Claus Gittinger <cg@exept.de>
parents: 5959
diff changeset
   511
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   512
    (self referencesLiteral:aSelectorSymbol) ifTrue:[
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   513
        "/ cg: was temporarily disabled to speed up some searches.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   514
        "/ I think, we have to change the callers to call referencesLiteral: instead,
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   515
        "/ if there is any speed problem there. Not here.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   516
        "/ ^ true.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   517
        "/ the self messagesSent does a parse-tree analysis
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   518
        ^ self messagesSent includesIdentical:aSelectorSymbol
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   519
    ].
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   520
    ^ false
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   521
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   522
    "Modified: / 05-02-2017 / 01:21:09 / cg"
5967
ab762bb4f64f added #sendsSelector:
Claus Gittinger <cg@exept.de>
parents: 5959
diff changeset
   523
! !
ab762bb4f64f added #sendsSelector:
Claus Gittinger <cg@exept.de>
parents: 5959
diff changeset
   524
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   525
!Method methodsFor:'accessing'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   526
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
   527
category
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   528
    "return the method's category or nil"
737
4ed893ad3f0f try more to find source of obsolete methods
Claus Gittinger <cg@exept.de>
parents: 690
diff changeset
   529
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
   530
    ^ category
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   531
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   532
    "Modified (comment): / 21-11-2017 / 13:03:48 / cg"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   533
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   534
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
   535
category:aStringOrSymbol
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   536
    "set the method's category"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   537
5724
96c2a5cf4217 category: and package: now send change notifications.
Claus Gittinger <cg@exept.de>
parents: 5721
diff changeset
   538
    |newCategory oldCategory cls|
5721
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
   539
3934
a8c6075f9988 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3845
diff changeset
   540
    aStringOrSymbol notNil ifTrue:[
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   541
        newCategory := aStringOrSymbol.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   542
        newCategory ~= (oldCategory := category) ifTrue:[
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   543
            self setCategory:newCategory.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   544
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   545
            cls := self mclass.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   546
            cls notNil ifTrue:[
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   547
                cls addChangeRecordForMethodCategory:self category:newCategory.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   548
                self changed:#category with:oldCategory.            "/ will vanish
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   549
                cls changed:#organization with:self selector.       "/ will vanish
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   550
                Smalltalk changed:#methodCategory with:(Array with:cls with:self with:oldCategory).
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   551
            ]
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   552
        ]
3934
a8c6075f9988 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3845
diff changeset
   553
    ]
a8c6075f9988 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3845
diff changeset
   554
10729
16fea9f03635 changed #category:
Claus Gittinger <cg@exept.de>
parents: 10673
diff changeset
   555
    "Modified: / 25-09-2007 / 16:15:24 / cg"
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   556
    "Modified (comment): / 21-11-2017 / 13:03:52 / cg"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   557
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   558
39
bcf183a31bbb *** empty log message ***
claus
parents: 13
diff changeset
   559
comment
16847
b3e7faf77eb1 class: Method
Claus Gittinger <cg@exept.de>
parents: 16737
diff changeset
   560
    "return the method's comment.
68
59faa75185ba *** empty log message ***
claus
parents: 56
diff changeset
   561
     This is done by searching for and returning the first comment
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   562
     from the method's source (excluding any double-quotes).
68
59faa75185ba *** empty log message ***
claus
parents: 56
diff changeset
   563
     Returns nil if there is no comment (or source is not available)."
39
bcf183a31bbb *** empty log message ***
claus
parents: 13
diff changeset
   564
14152
4b6500ff4bec changed: #comment
Claus Gittinger <cg@exept.de>
parents: 14090
diff changeset
   565
    |src parserClass|
39
bcf183a31bbb *** empty log message ***
claus
parents: 13
diff changeset
   566
159
514c749165c3 *** empty log message ***
claus
parents: 142
diff changeset
   567
    src := self source.
514c749165c3 *** empty log message ***
claus
parents: 142
diff changeset
   568
    src isNil ifTrue:[^ nil].
14152
4b6500ff4bec changed: #comment
Claus Gittinger <cg@exept.de>
parents: 14090
diff changeset
   569
    (parserClass := self programmingLanguage parserClass) isNil ifTrue:[^ nil].
4b6500ff4bec changed: #comment
Claus Gittinger <cg@exept.de>
parents: 14090
diff changeset
   570
    ^ parserClass methodCommentFromSource:src
93
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
   571
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
   572
    "
13463
7c98583d98c8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 13422
diff changeset
   573
     (Method compiledMethodAt:#comment) comment
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
   574
     (Object class compiledMethodAt:#infoPrinting:) comment
93
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
   575
    "
1236
5c9bc68e3c71 use new scanner feature to extract comment
Claus Gittinger <cg@exept.de>
parents: 1194
diff changeset
   576
12948
f238e8b26110 changed: #comment
Claus Gittinger <cg@exept.de>
parents: 12913
diff changeset
   577
    "Modified: / 23-02-1998 / 10:26:08 / stefan"
14152
4b6500ff4bec changed: #comment
Claus Gittinger <cg@exept.de>
parents: 14090
diff changeset
   578
    "Modified: / 01-06-2012 / 23:03:57 / cg"
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   579
    "Modified (comment): / 21-11-2017 / 13:03:59 / cg"
39
bcf183a31bbb *** empty log message ***
claus
parents: 13
diff changeset
   580
!
bcf183a31bbb *** empty log message ***
claus
parents: 13
diff changeset
   581
14595
5c27c812055b class: Method
Claus Gittinger <cg@exept.de>
parents: 14573
diff changeset
   582
getMclass
17278
7813956ffab4 class: Method
Claus Gittinger <cg@exept.de>
parents: 17254
diff changeset
   583
    "return the last known class in which this method was (or still is) contained in.
7813956ffab4 class: Method
Claus Gittinger <cg@exept.de>
parents: 17254
diff changeset
   584
     Notice, that the mclass query returns nil, if a method is wrapped or no longer valid
7813956ffab4 class: Method
Claus Gittinger <cg@exept.de>
parents: 17254
diff changeset
   585
     due to an accept in a browser or debugger. However, the mclass slot still contains a
7813956ffab4 class: Method
Claus Gittinger <cg@exept.de>
parents: 17254
diff changeset
   586
     reference to the once valid class"
7813956ffab4 class: Method
Claus Gittinger <cg@exept.de>
parents: 17254
diff changeset
   587
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   588
    ^ mclass
14595
5c27c812055b class: Method
Claus Gittinger <cg@exept.de>
parents: 14573
diff changeset
   589
!
5c27c812055b class: Method
Claus Gittinger <cg@exept.de>
parents: 14573
diff changeset
   590
9702
468675f92260 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9692
diff changeset
   591
getPackage
468675f92260 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9692
diff changeset
   592
    "return the package-ID of the method"
468675f92260 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9692
diff changeset
   593
468675f92260 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9692
diff changeset
   594
    ^ package
468675f92260 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9692
diff changeset
   595
!
468675f92260 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9692
diff changeset
   596
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
   597
getSource
3160
db5c1aa38fda comment
Claus Gittinger <cg@exept.de>
parents: 3144
diff changeset
   598
    "low-level access to the source instance-variable.
4751
174a92d4ba3f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4669
diff changeset
   599
     For internal (compiler) use only.
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   600
     This is NOT always the method's source string"
3160
db5c1aa38fda comment
Claus Gittinger <cg@exept.de>
parents: 3144
diff changeset
   601
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
   602
    ^ source
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   603
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   604
    "Modified (comment): / 21-11-2017 / 13:04:03 / cg"
414
claus
parents: 400
diff changeset
   605
!
claus
parents: 400
diff changeset
   606
4751
174a92d4ba3f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4669
diff changeset
   607
getSourcePosition
174a92d4ba3f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4669
diff changeset
   608
    "low-level access to the sourcePosition instance-variable.
174a92d4ba3f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4669
diff changeset
   609
     For internal (compiler) use only.
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   610
     This is NOT always the method's sourcePosition"
4751
174a92d4ba3f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4669
diff changeset
   611
174a92d4ba3f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4669
diff changeset
   612
    ^ sourcePosition
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   613
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   614
    "Modified (comment): / 21-11-2017 / 13:04:07 / cg"
4751
174a92d4ba3f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4669
diff changeset
   615
!
174a92d4ba3f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4669
diff changeset
   616
2176
1a24b0cef25a when compressing sources, make certain to avoid later
Claus Gittinger <cg@exept.de>
parents: 2171
diff changeset
   617
localSourceFilename:aFileName position:aNumber
15346
c8f751f80e5b class: Method
Claus Gittinger <cg@exept.de>
parents: 15245
diff changeset
   618
    "set the method's sourcefile/position indicating, that
c8f751f80e5b class: Method
Claus Gittinger <cg@exept.de>
parents: 15245
diff changeset
   619
     this is a local file (i.e. the 'st.src' file).
c8f751f80e5b class: Method
Claus Gittinger <cg@exept.de>
parents: 15245
diff changeset
   620
     The indicator for this is a negative source position."
c8f751f80e5b class: Method
Claus Gittinger <cg@exept.de>
parents: 15245
diff changeset
   621
c8f751f80e5b class: Method
Claus Gittinger <cg@exept.de>
parents: 15245
diff changeset
   622
    self assert:(aFileName isText not).   "/ will break monticello-binary-data-writing
2176
1a24b0cef25a when compressing sources, make certain to avoid later
Claus Gittinger <cg@exept.de>
parents: 2171
diff changeset
   623
    source := aFileName.
1a24b0cef25a when compressing sources, make certain to avoid later
Claus Gittinger <cg@exept.de>
parents: 2171
diff changeset
   624
    sourcePosition := aNumber negated
1a24b0cef25a when compressing sources, make certain to avoid later
Claus Gittinger <cg@exept.de>
parents: 2171
diff changeset
   625
1a24b0cef25a when compressing sources, make certain to avoid later
Claus Gittinger <cg@exept.de>
parents: 2171
diff changeset
   626
    "Created: 16.1.1997 / 01:25:52 / cg"
1a24b0cef25a when compressing sources, make certain to avoid later
Claus Gittinger <cg@exept.de>
parents: 2171
diff changeset
   627
!
1a24b0cef25a when compressing sources, make certain to avoid later
Claus Gittinger <cg@exept.de>
parents: 2171
diff changeset
   628
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   629
lookupObject
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   630
18368
5e8af3b07aa1 class: Method
Claus Gittinger <cg@exept.de>
parents: 17693
diff changeset
   631
    "/ lookupObject isNil ifTrue:[^ BuiltinLookup instance "Lookup builtin"].
5e8af3b07aa1 class: Method
Claus Gittinger <cg@exept.de>
parents: 17693
diff changeset
   632
    ^ lookupObject
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   633
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   634
    "Created: / 28-04-2010 / 18:36:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
13817
7d1e0e8ea364 changed:10 methods
Claus Gittinger <cg@exept.de>
parents: 13805
diff changeset
   635
    "Modified: / 18-11-2011 / 14:47:12 / cg"
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   636
!
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   637
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   638
lookupObject: anObject
18368
5e8af3b07aa1 class: Method
Claus Gittinger <cg@exept.de>
parents: 17693
diff changeset
   639
    anObject == BuiltinLookup instance ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   640
	self setLookupObject: nil
18368
5e8af3b07aa1 class: Method
Claus Gittinger <cg@exept.de>
parents: 17693
diff changeset
   641
    ] ifFalse:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   642
	self setLookupObject: anObject.
18368
5e8af3b07aa1 class: Method
Claus Gittinger <cg@exept.de>
parents: 17693
diff changeset
   643
    ].
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   644
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   645
    "Created: / 28-04-2010 / 18:36:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   646
    "Modified: / 11-07-2010 / 19:32:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   647
!
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   648
5152
2aacfb3976d4 when changing the package, make certain that the source
Claus Gittinger <cg@exept.de>
parents: 5115
diff changeset
   649
makeLocalStringSource
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   650
    "assure that the method's source code is stored locally as a string
5152
2aacfb3976d4 when changing the package, make certain that the source
Claus Gittinger <cg@exept.de>
parents: 5115
diff changeset
   651
     within the method (as opposed to an external string, which is accessed
2aacfb3976d4 when changing the package, make certain that the source
Claus Gittinger <cg@exept.de>
parents: 5115
diff changeset
   652
     by reading the source code file).
15346
c8f751f80e5b class: Method
Claus Gittinger <cg@exept.de>
parents: 15245
diff changeset
   653
     This is required, when a method's package is changed, to assure that its
5152
2aacfb3976d4 when changing the package, make certain that the source
Claus Gittinger <cg@exept.de>
parents: 5115
diff changeset
   654
     sourceCode is not lost."
2aacfb3976d4 when changing the package, make certain that the source
Claus Gittinger <cg@exept.de>
parents: 5115
diff changeset
   655
2aacfb3976d4 when changing the package, make certain that the source
Claus Gittinger <cg@exept.de>
parents: 5115
diff changeset
   656
    source notNil ifTrue:[
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   657
        sourcePosition notNil ifTrue:[
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   658
            "/ this looks wierd - but (self source) will retrieve the external source
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   659
            "/ (from the file) and store it. So afterwards, we will have the string and
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   660
            "/ sourcePosition will be nil
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   661
            self source:(self source)
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   662
        ]
5152
2aacfb3976d4 when changing the package, make certain that the source
Claus Gittinger <cg@exept.de>
parents: 5115
diff changeset
   663
    ].
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   664
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   665
    "Modified (comment): / 21-11-2017 / 13:04:13 / cg"
5152
2aacfb3976d4 when changing the package, make certain that the source
Claus Gittinger <cg@exept.de>
parents: 5115
diff changeset
   666
!
2aacfb3976d4 when changing the package, make certain that the source
Claus Gittinger <cg@exept.de>
parents: 5115
diff changeset
   667
5324
5c9959ce98af make use of mclass
Claus Gittinger <cg@exept.de>
parents: 5322
diff changeset
   668
mclass:aClass
14508
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   669
    "set the method's class. That is the class in which I am installed.
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   670
     This is a cache; the validity of which will be checked and the cache
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   671
     possibly be invalidated when mclass is asked for."
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   672
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   673
"/    mclass == aClass ifTrue:[ ^ self ].
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   674
"/
12323
973c8740503b changed: #mclass:
Claus Gittinger <cg@exept.de>
parents: 12283
diff changeset
   675
"/     (mclass notNil and:[aClass notNil]) ifTrue:[
973c8740503b changed: #mclass:
Claus Gittinger <cg@exept.de>
parents: 12283
diff changeset
   676
"/         'Method [warning]: mclass already set' errorPrintCR.
973c8740503b changed: #mclass:
Claus Gittinger <cg@exept.de>
parents: 12283
diff changeset
   677
"/     ].
5696
958a0643496d compatibility
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
   678
    mclass := aClass.
10207
b5ca553d15ad localSourceFirst for extensions.
Claus Gittinger <cg@exept.de>
parents: 10201
diff changeset
   679
b5ca553d15ad localSourceFirst for extensions.
Claus Gittinger <cg@exept.de>
parents: 10201
diff changeset
   680
    "Modified: / 28-11-2006 / 12:12:27 / cg"
5696
958a0643496d compatibility
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
   681
!
5324
5c9959ce98af make use of mclass
Claus Gittinger <cg@exept.de>
parents: 5322
diff changeset
   682
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   683
nameSpace
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   684
    "Returns my namespace or nil. If no explicit method namespace
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   685
     is set, my programming language is used as default namespace
17514
eb4568cb00ba class: Method
Claus Gittinger <cg@exept.de>
parents: 17463
diff changeset
   686
     (for compatibility reasons, nil is returned for smalltalk methods,
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   687
     which means that the method is not namespaced).
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   688
    "
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   689
14552
3ab1c7006ba1 class: Method
Claus Gittinger <cg@exept.de>
parents: 14536
diff changeset
   690
    | nsA prefix |
14264
fd05137bd3c3 comment/format in: #nameSpace
Claus Gittinger <cg@exept.de>
parents: 14261
diff changeset
   691
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   692
    nsA := self annotationAt: #namespace:.
14552
3ab1c7006ba1 class: Method
Claus Gittinger <cg@exept.de>
parents: 14536
diff changeset
   693
    nsA notNil ifTrue:[^nsA nameSpace].
3ab1c7006ba1 class: Method
Claus Gittinger <cg@exept.de>
parents: 14536
diff changeset
   694
3ab1c7006ba1 class: Method
Claus Gittinger <cg@exept.de>
parents: 14536
diff changeset
   695
    prefix := self programmingLanguage defaultSelectorNameSpacePrefix.
3ab1c7006ba1 class: Method
Claus Gittinger <cg@exept.de>
parents: 14536
diff changeset
   696
    (prefix isNil or:[prefix = 'Smalltalk']) ifTrue:[ ^ nil].
15045
00763bf986f0 class: Method
Claus Gittinger <cg@exept.de>
parents: 14864
diff changeset
   697
    ^ NameSpace name:prefix
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   698
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   699
    "
15045
00763bf986f0 class: Method
Claus Gittinger <cg@exept.de>
parents: 14864
diff changeset
   700
     (Method >> #nameSpace) nameSpace
00763bf986f0 class: Method
Claus Gittinger <cg@exept.de>
parents: 14864
diff changeset
   701
     (Object >> #yourself) nameSpace
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   702
    "
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   703
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   704
    "Created: / 26-04-2010 / 16:30:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   705
    "Modified: / 20-05-2010 / 09:38:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
14264
fd05137bd3c3 comment/format in: #nameSpace
Claus Gittinger <cg@exept.de>
parents: 14261
diff changeset
   706
    "Modified (format): / 27-07-2012 / 14:17:09 / cg"
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   707
    "Modified (comment): / 16-05-2017 / 11:00:42 / mawalch"
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   708
!
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   709
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   710
nameSpace: aNameSpace
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   711
14261
403921157431 changed: #nameSpace:
Claus Gittinger <cg@exept.de>
parents: 14253
diff changeset
   712
    self annotateWith: (Annotation nameSpace: aNameSpace name)
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   713
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   714
    "Created: / 20-05-2010 / 10:05:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   715
    "Modified: / 20-05-2010 / 11:30:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
14261
403921157431 changed: #nameSpace:
Claus Gittinger <cg@exept.de>
parents: 14253
diff changeset
   716
    "Modified: / 26-07-2012 / 23:08:48 / cg"
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   717
!
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   718
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   719
nameSpaceName
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   720
    | ns |
16261
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
   721
    ns := self nameSpace.
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
   722
    ^ ns isNil ifTrue:[''] ifFalse:[ns name]
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   723
!
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   724
13100
d5333b6746d1 +originalMethodIfWrapped
Claus Gittinger <cg@exept.de>
parents: 12948
diff changeset
   725
originalMethodIfWrapped
d5333b6746d1 +originalMethodIfWrapped
Claus Gittinger <cg@exept.de>
parents: 12948
diff changeset
   726
    "return the method the receiver is wrapping - none here"
d5333b6746d1 +originalMethodIfWrapped
Claus Gittinger <cg@exept.de>
parents: 12948
diff changeset
   727
d5333b6746d1 +originalMethodIfWrapped
Claus Gittinger <cg@exept.de>
parents: 12948
diff changeset
   728
    ^ self
d5333b6746d1 +originalMethodIfWrapped
Claus Gittinger <cg@exept.de>
parents: 12948
diff changeset
   729
d5333b6746d1 +originalMethodIfWrapped
Claus Gittinger <cg@exept.de>
parents: 12948
diff changeset
   730
    "Created: / 22-10-2010 / 11:46:07 / cg"
d5333b6746d1 +originalMethodIfWrapped
Claus Gittinger <cg@exept.de>
parents: 12948
diff changeset
   731
!
d5333b6746d1 +originalMethodIfWrapped
Claus Gittinger <cg@exept.de>
parents: 12948
diff changeset
   732
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   733
overriddenMethod
15952
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   734
    <resource: #obsolete>
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   735
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   736
    self obsoleteMethodWarning: 'Use overwrittenMethod instead, stupid naming'.
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   737
    ^self overwrittenMethod
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   738
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   739
    "Created: / 17-06-2009 / 19:09:58 / Jan Vrany <vranyj1@fel.cvut.cz>"
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   740
    "Modified (format): / 18-11-2011 / 14:48:07 / cg"
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   741
    "Modified: / 05-07-2012 / 10:51:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   742
!
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   743
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   744
overriddenMethod: aMethod
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   745
    <resource: #obsolete>
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   746
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   747
    self obsoleteMethodWarning: 'Use overwrittenMethod: instead, stupid naming'.
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   748
    self overwrittenMethod: aMethod
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   749
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   750
    "Created: / 17-06-2009 / 19:09:17 / Jan Vrany <vranyj1@fel.cvut.cz>"
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   751
    "Modified: / 22-08-2009 / 10:47:42 / Jan Vrany <vranyj1@fel.cvut.cz>"
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   752
    "Modified: / 18-11-2011 / 14:48:26 / cg"
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   753
    "Modified: / 05-07-2012 / 10:51:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   754
!
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   755
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   756
overwrittenMethod
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   757
    "Answers overridden method or nil."
20208
79b24601b7d6 #OTHER by mawalch
mawalch
parents: 20035
diff changeset
   758
20035
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   759
    Overrides isNil ifTrue:[
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   760
        ^ nil
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   761
    ].
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   762
    ^ Overrides at:self ifAbsent:nil.
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   763
15952
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   764
    "Created: / 05-07-2012 / 10:49:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   765
!
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   766
15952
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   767
overwrittenMethod: aMethod
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   768
    "Set overridden method to aMethod"
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   769
13817
7d1e0e8ea364 changed:10 methods
Claus Gittinger <cg@exept.de>
parents: 13805
diff changeset
   770
    Overrides isNil ifTrue:[Overrides := WeakIdentityDictionary new:10].
7d1e0e8ea364 changed:10 methods
Claus Gittinger <cg@exept.de>
parents: 13805
diff changeset
   771
    aMethod notNil ifTrue:[aMethod makeLocalStringSource].
20035
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   772
    Overrides at:self put:aMethod
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   773
15952
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   774
    "Created: / 05-07-2012 / 10:50:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   775
!
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   776
1093
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   777
package
14573
f89b1f406974 class: Method
Claus Gittinger <cg@exept.de>
parents: 14552
diff changeset
   778
    "return the package-symbol of the method (nil is translated to noProject here)"
1093
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   779
5385
7637332d7b38 care for nil package
Claus Gittinger <cg@exept.de>
parents: 5339
diff changeset
   780
    |cls|
7637332d7b38 care for nil package
Claus Gittinger <cg@exept.de>
parents: 5339
diff changeset
   781
7637332d7b38 care for nil package
Claus Gittinger <cg@exept.de>
parents: 5339
diff changeset
   782
    package notNil ifTrue:[ ^ package ].
14573
f89b1f406974 class: Method
Claus Gittinger <cg@exept.de>
parents: 14552
diff changeset
   783
f89b1f406974 class: Method
Claus Gittinger <cg@exept.de>
parents: 14552
diff changeset
   784
    "/ get it from my class
5385
7637332d7b38 care for nil package
Claus Gittinger <cg@exept.de>
parents: 5339
diff changeset
   785
    (cls := self mclass) isNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   786
	^ PackageId noProjectID.
5385
7637332d7b38 care for nil package
Claus Gittinger <cg@exept.de>
parents: 5339
diff changeset
   787
    ].
5724
96c2a5cf4217 category: and package: now send change notifications.
Claus Gittinger <cg@exept.de>
parents: 5721
diff changeset
   788
    "/ set it.
9692
d53de4f90660 allow for and hide nil-packageID (== NoProject)
Claus Gittinger <cg@exept.de>
parents: 9661
diff changeset
   789
    package := cls getPackage.
d53de4f90660 allow for and hide nil-packageID (== NoProject)
Claus Gittinger <cg@exept.de>
parents: 9661
diff changeset
   790
    package isNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   791
	^ PackageId noProjectID.
9692
d53de4f90660 allow for and hide nil-packageID (== NoProject)
Claus Gittinger <cg@exept.de>
parents: 9661
diff changeset
   792
    ].
d53de4f90660 allow for and hide nil-packageID (== NoProject)
Claus Gittinger <cg@exept.de>
parents: 9661
diff changeset
   793
    ^ package
3950
f9c4485a91d1 avoid nil package return
Claus Gittinger <cg@exept.de>
parents: 3934
diff changeset
   794
10207
b5ca553d15ad localSourceFirst for extensions.
Claus Gittinger <cg@exept.de>
parents: 10201
diff changeset
   795
    "Modified: / 28-11-2006 / 12:12:43 / cg"
1093
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   796
!
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   797
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   798
package:aSymbol
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   799
    "set the package-symbol"
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   800
9692
d53de4f90660 allow for and hide nil-packageID (== NoProject)
Claus Gittinger <cg@exept.de>
parents: 9661
diff changeset
   801
    |cls oldPackage newPackage|
d53de4f90660 allow for and hide nil-packageID (== NoProject)
Claus Gittinger <cg@exept.de>
parents: 9661
diff changeset
   802
19025
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   803
    newPackage := aSymbol.
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   804
    oldPackage := package.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   805
    oldPackage ~~ newPackage ifTrue:[
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   806
        newPackage == PackageId noProjectID ifTrue:[
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   807
            Logger warning:'warning: unassigning method from previous package: ' with:oldPackage.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   808
            "/ newPackage := nil
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   809
        ].
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   810
19025
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   811
        "/ this is required, because otherwise I would no longer be able to
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   812
        "/ reconstruct my sourcecode (as the connection to the source-file is lost).
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   813
        self makeLocalStringSource.
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   814
        package := newPackage.
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   815
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   816
        cls := self mclass.
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   817
        "JV@2011-01-27: BUG FIX: method may be wrapped (breakpoint on it).
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   818
         Search for the wrapper, if none is found, return immediately
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   819
         (avoids DNU)"
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   820
        cls isNil ifTrue:[
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   821
            | wrapper |
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   822
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   823
            wrapper := self wrapper.
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   824
            wrapper isNil ifTrue:[ ^ self ].
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   825
            cls := wrapper mclass.
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   826
            cls isNil ifTrue:[ ^ self ].
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   827
        ].
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   828
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   829
        self changed:#package.                                              "/ will vanish
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   830
        cls changed:#methodPackage with:self selector.                      "/ will vanish
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   831
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   832
        Smalltalk changed:#projectOrganization with:(Array with:cls with:self with:oldPackage).
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   833
        cls addChangeRecordForMethodPackage:self package:newPackage.
5724
96c2a5cf4217 category: and package: now send change notifications.
Claus Gittinger <cg@exept.de>
parents: 5721
diff changeset
   834
    ]
10196
f72831ddec29 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10156
diff changeset
   835
f72831ddec29 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10156
diff changeset
   836
    "Modified: / 23-11-2006 / 17:01:02 / cg"
15952
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   837
    "Modified: / 27-01-2012 / 17:15:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   838
    "Modified (comment): / 27-01-2012 / 21:22:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   839
    "Modified: / 23-06-2019 / 14:10:59 / Claus Gittinger"
1093
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   840
!
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   841
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   842
setAnnotations: anObject
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   843
    "set the annotations (low level - do not use)"
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   844
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   845
    annotations :=  anObject
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   846
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   847
    "Created: / 20-05-2010 / 11:27:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   848
    "Modified (comment): / 29-08-2018 / 10:25:51 / Claus Gittinger"
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   849
!
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   850
5721
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
   851
setCategory:aStringOrSymbol
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   852
    "set the method's category (without change notification)"
5721
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
   853
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
   854
    aStringOrSymbol notNil ifTrue:[
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   855
        category := aStringOrSymbol asSymbol
5721
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
   856
    ]
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
   857
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   858
    "Modified: / 13-11-1998 / 23:55:05 / cg"
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   859
    "Modified (comment): / 21-11-2017 / 13:05:26 / cg"
5721
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
   860
!
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
   861
5398
b15f5eca2060 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5387
diff changeset
   862
setPackage:aSymbol
9702
468675f92260 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9692
diff changeset
   863
    "set the package-symbol (low level - use package:)"
5398
b15f5eca2060 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5387
diff changeset
   864
b15f5eca2060 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5387
diff changeset
   865
    package := aSymbol
b15f5eca2060 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5387
diff changeset
   866
!
b15f5eca2060 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5387
diff changeset
   867
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   868
setSource:aString
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   869
    "set the method's source"
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   870
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   871
    source := aString.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   872
!
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   873
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   874
setSourcePosition:aNumberOrNil
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   875
    "set the method's sourcePosition"
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   876
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   877
    sourcePosition := aNumberOrNil.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   878
!
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   879
1093
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   880
source
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   881
    "return the sourcestring for the receiver"
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   882
12598
a6862e9bcb8e comment/format in: #source
Claus Gittinger <cg@exept.de>
parents: 12569
diff changeset
   883
    |sourceStream chunk|
1093
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   884
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   885
    "
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   886
     if sourcePosition is nonNil, its the fileName and abs(sourcePosition) is the offset.
1093
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   887
     Otherwise, source is the real source
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   888
    "
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   889
    sourcePosition isNil ifTrue:[^ source].
13381
e16cafbd22bd comment/format in: #sourceStreamUsingCache:
Claus Gittinger <cg@exept.de>
parents: 13189
diff changeset
   890
    source isNil ifTrue:[^ nil].
e16cafbd22bd comment/format in: #sourceStreamUsingCache:
Claus Gittinger <cg@exept.de>
parents: 13189
diff changeset
   891
20035
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   892
    LastMethodSources notNil ifTrue:[
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   893
        self class lastMethodSourcesLock critical:[
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   894
            LastMethodSources notNil ifTrue:[
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   895
                chunk := LastMethodSources at:self ifAbsent:nil.
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   896
            ].
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   897
        ].
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   898
        chunk notNil ifTrue:[
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   899
            ^ chunk
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   900
        ].
13381
e16cafbd22bd comment/format in: #sourceStreamUsingCache:
Claus Gittinger <cg@exept.de>
parents: 13189
diff changeset
   901
    ].
e16cafbd22bd comment/format in: #sourceStreamUsingCache:
Claus Gittinger <cg@exept.de>
parents: 13189
diff changeset
   902
13463
7c98583d98c8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 13422
diff changeset
   903
    LastFileLock
20035
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   904
        critical:[
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   905
            "have to protect sourceStream from being closed as a side effect
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   906
             of some other process fetching some the source from a different source file"
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   907
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   908
            sourceStream := self sourceStreamUsingCache:true.
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   909
            sourceStream notNil ifTrue:[
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   910
                [
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   911
                    chunk := self sourceChunkFromStream:sourceStream.
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   912
                ] on:DecodingError do:[:ex|
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   913
                    "CharacterEncoder>>#guessEncoding is not fail safe - retry with plain unencoded data"
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   914
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   915
                    Logger info:'DecodingError ignored when reading %1 (%2)' with:self whoString with:ex description.
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   916
                    sourceStream := self rawSourceStreamUsingCache:true.
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   917
                    ex restart.
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   918
                ].
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   919
            ].
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   920
        ]
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   921
        timeoutMs:100
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   922
        ifBlocking:[
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   923
            "take care if LastFileLock is not available - maybe we are
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   924
             called by a debugger while someone holds the lock.
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   925
             Use uncached source streams"
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   926
            sourceStream := self sourceStreamUsingCache:false.
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   927
            sourceStream notNil ifTrue:[
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   928
                [
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   929
                    chunk := self sourceChunkFromStream:sourceStream.
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   930
                    sourceStream close.
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   931
                ] on:DecodingError do:[:ex|
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   932
                    "CharacterEncoder>>#guessEncoding is not fail safe - retry with plain unencoded data"
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   933
                    Logger info:'DecodingError ignored when reading %1 (%2)' with:self whoString with:ex description.
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   934
                    sourceStream close.
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   935
                    sourceStream := self rawSourceStreamUsingCache:false.
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   936
                    ex restart.
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   937
                ].
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   938
            ].
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   939
        ].
2979
6bb06c5e49d8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2868
diff changeset
   940
10673
05229646ecd7 #source - handle DecodingError when fetching the method's source
Stefan Vogel <sv@exept.de>
parents: 10608
diff changeset
   941
    "Cache the source of recently used methods"
10608
82b1346f3e8d Use similar code when accessing method and class source code
Stefan Vogel <sv@exept.de>
parents: 10482
diff changeset
   942
    chunk notNil ifTrue:[
20035
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   943
        "JV@2013-08-19: Don't consult UserPreferences if the system is initializing. This may
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   944
         lead in funny side-effect as #initializeDefaultPreferences is called which tries to
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   945
         initialize some colors. But Color itself is likely not yet initialized, so DNU is
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   946
         thrown.
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   947
         CG: also care for standalone non-GUI progs, which have no userPreferences class"
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   948
        (Smalltalk isInitialized
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   949
        and:[UserPreferences notNil
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   950
        and:[UserPreferences current keepMethodSourceCode]]) ifTrue:[
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   951
            source := chunk.
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   952
            sourcePosition := nil.
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   953
            ^ source.
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   954
        ].
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   955
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   956
        CacheDictionary notNil ifTrue:[
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   957
            self class lastMethodSourcesLock critical:[
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   958
                LastMethodSources isNil ifTrue:[
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   959
                    LastMethodSources := CacheDictionary new:50.
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   960
                ].
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   961
                LastMethodSources at:self put:chunk.
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   962
            ]
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
   963
        ].
2979
6bb06c5e49d8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2868
diff changeset
   964
    ].
6bb06c5e49d8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2868
diff changeset
   965
10608
82b1346f3e8d Use similar code when accessing method and class source code
Stefan Vogel <sv@exept.de>
parents: 10482
diff changeset
   966
    ^ chunk
1093
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   967
10201
f90568a94903 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10196
diff changeset
   968
    "Modified: / 07-01-1997 / 16:20:09 / stefan"
1093
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   969
!
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   970
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   971
source:aString
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   972
    "set the method's sourcestring"
1093
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   973
15346
c8f751f80e5b class: Method
Claus Gittinger <cg@exept.de>
parents: 15245
diff changeset
   974
    self assert:(aString isText not).   "/ will break monticello-binary-data-writing
1093
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   975
    source := aString.
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   976
    sourcePosition := nil
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   977
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   978
    "Modified (comment): / 21-11-2017 / 13:05:59 / cg"
1093
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   979
!
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   980
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   981
sourceFilename
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   982
    "return the sourcefilename if source is extern; nil otherwise"
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   983
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   984
    sourcePosition notNil ifTrue:[^ source].
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   985
    ^ nil
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   986
!
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   987
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   988
sourceFilename:aFileName position:aNumber
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   989
    "set the method's sourcefile/position"
1093
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   990
15346
c8f751f80e5b class: Method
Claus Gittinger <cg@exept.de>
parents: 15245
diff changeset
   991
    self assert:(aFileName isText not).   "/ will break monticello-binary-data-writing
1093
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   992
    source := aFileName.
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   993
    sourcePosition := aNumber
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   994
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
   995
    "Modified (comment): / 21-11-2017 / 13:06:03 / cg"
1093
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   996
!
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   997
2812
660a3a2a0ef3 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2805
diff changeset
   998
sourceLineNumber
660a3a2a0ef3 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2805
diff changeset
   999
    "return the lineNumber of my source within the returned
660a3a2a0ef3 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2805
diff changeset
  1000
     source sourcestring.
660a3a2a0ef3 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2805
diff changeset
  1001
     For ST methods, the returned sourceString is always the
660a3a2a0ef3 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2805
diff changeset
  1002
     methods pure source; therefore, the lineNumber is always 1."
660a3a2a0ef3 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2805
diff changeset
  1003
660a3a2a0ef3 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2805
diff changeset
  1004
    ^ 1
660a3a2a0ef3 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2805
diff changeset
  1005
660a3a2a0ef3 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2805
diff changeset
  1006
    "Created: 30.7.1997 / 15:42:01 / cg"
660a3a2a0ef3 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2805
diff changeset
  1007
!
660a3a2a0ef3 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2805
diff changeset
  1008
1093
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  1009
sourcePosition
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  1010
    "return the sourceposition if source is extern; nil otherwise"
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  1011
2176
1a24b0cef25a when compressing sources, make certain to avoid later
Claus Gittinger <cg@exept.de>
parents: 2171
diff changeset
  1012
    sourcePosition isNil ifTrue:[^ sourcePosition].
1a24b0cef25a when compressing sources, make certain to avoid later
Claus Gittinger <cg@exept.de>
parents: 2171
diff changeset
  1013
    ^ sourcePosition abs
1a24b0cef25a when compressing sources, make certain to avoid later
Claus Gittinger <cg@exept.de>
parents: 2171
diff changeset
  1014
1a24b0cef25a when compressing sources, make certain to avoid later
Claus Gittinger <cg@exept.de>
parents: 2171
diff changeset
  1015
    "Modified: 16.1.1997 / 01:28:25 / cg"
1093
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  1016
! !
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  1017
14508
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1018
!Method methodsFor:'accessing-annotations'!
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1019
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1020
annotateWith: annotation
16221
00b413ddccd5 class: Method
Claus Gittinger <cg@exept.de>
parents: 16220
diff changeset
  1021
    "add a (hidden) annotation.
00b413ddccd5 class: Method
Claus Gittinger <cg@exept.de>
parents: 16220
diff changeset
  1022
     This is only present in the image, not in the method's source code"
00b413ddccd5 class: Method
Claus Gittinger <cg@exept.de>
parents: 16220
diff changeset
  1023
14508
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1024
    | index |
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1025
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1026
    index := self annotationIndexOf: annotation key.
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1027
    index isNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1028
	annotations := annotations isNil
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1029
			    ifTrue:[Array with: annotation]
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1030
			    ifFalse:[annotations copyWith:annotation]
14508
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1031
    ] ifFalse:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1032
	annotations at: index put: annotation
14508
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1033
    ].
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1034
"/    annotation annotatesMethod: self.
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1035
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1036
    "
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1037
	(Object >> #yourself) annotateWith: (Annotation namespace: 'Fictious').
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1038
	(Object >> #yourself) annotations.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1039
	(Object >> #yourself) annotationAt: #namespace:
14508
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1040
    "
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1041
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1042
    "Created: / 19-05-2010 / 16:20:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1043
    "Modified: / 20-05-2010 / 11:22:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1044
    "Modified (format): / 26-07-2012 / 15:47:51 / cg"
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1045
!
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1046
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1047
annotationAt: key
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1048
    | index |
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1049
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1050
    index := self annotationIndexOf: key.
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1051
    index isNil ifTrue:[^ nil].
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1052
    ^ self annotationAtIndex: index.
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1053
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1054
    "
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  1055
     (Object >> #yourself) annotationAt: #namespace:
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  1056
     (WindowsAutomation2::Client >> #stopRecording) annotationAt: #foreignSelectors:
14508
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1057
    "
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1058
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1059
    "Created: / 19-05-2010 / 16:16:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1060
    "Modified: / 02-07-2010 / 22:35:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1061
    "Modified: / 18-11-2011 / 14:46:21 / cg"
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  1062
    "Modified (comment): / 24-05-2020 / 03:19:05 / cg"
14508
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1063
!
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1064
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1065
annotations
18411
e6d26bb9b37b class: Method
Claus Gittinger <cg@exept.de>
parents: 18368
diff changeset
  1066
    "return (a copy) of the annotations array"
e6d26bb9b37b class: Method
Claus Gittinger <cg@exept.de>
parents: 18368
diff changeset
  1067
16220
0834bd0e9d85 Fixed bug in Method>>#annotations - always return an array with Annotation (sub)instances.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16218
diff changeset
  1068
    | retval |
14508
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1069
16261
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
  1070
    annotations isNil ifTrue:[^ #()].
18411
e6d26bb9b37b class: Method
Claus Gittinger <cg@exept.de>
parents: 18368
diff changeset
  1071
16220
0834bd0e9d85 Fixed bug in Method>>#annotations - always return an array with Annotation (sub)instances.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16218
diff changeset
  1072
    retval := Array new: annotations size.
0834bd0e9d85 Fixed bug in Method>>#annotations - always return an array with Annotation (sub)instances.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16218
diff changeset
  1073
    1 to: annotations size do: [:i|
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1074
	retval at: i put: (self annotationAtIndex: i).
16220
0834bd0e9d85 Fixed bug in Method>>#annotations - always return an array with Annotation (sub)instances.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16218
diff changeset
  1075
    ].
0834bd0e9d85 Fixed bug in Method>>#annotations - always return an array with Annotation (sub)instances.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16218
diff changeset
  1076
    ^ retval.
0834bd0e9d85 Fixed bug in Method>>#annotations - always return an array with Annotation (sub)instances.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16218
diff changeset
  1077
14508
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1078
    "Modified: / 18-11-2011 / 14:46:56 / cg"
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1079
    "Modified (comment): / 26-07-2012 / 15:50:26 / cg"
16220
0834bd0e9d85 Fixed bug in Method>>#annotations - always return an array with Annotation (sub)instances.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16218
diff changeset
  1080
    "Modified: / 05-03-2014 / 15:18:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
14508
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1081
!
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1082
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1083
annotations: anObject
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1084
    "set the annotations"
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1085
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1086
    self setAnnotations: anObject.
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1087
"/    "iterate over annotations just to invoke
19868
8abfb62f8c29 #DOCUMENTATION by mawalch
mawalch
parents: 19847
diff changeset
  1088
"/     annotationAtIndex: which lazily initializes annotations
8abfb62f8c29 #DOCUMENTATION by mawalch
mawalch
parents: 19847
diff changeset
  1089
"/     and sends #annotatesMethod:"
14508
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1090
"/    self annotationsDo:[:annotation|]
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1091
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1092
    "Created: / 02-07-2010 / 22:38:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1093
!
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1094
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1095
annotationsAt: key
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1096
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1097
    ^OrderedCollection
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1098
	streamContents:[:annotStream|
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1099
	    self annotationsAt: key do: [:annot| annotStream nextPut: annot]
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1100
	]
14508
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1101
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1102
    "Created: / 16-07-2010 / 11:41:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1103
    "Modified (format): / 26-07-2012 / 15:46:56 / cg"
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1104
!
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1105
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1106
annotationsAt: key do: block
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1107
    self annotationsDo: [:annot|
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1108
	annot key == key ifTrue:[block value: annot]
14508
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1109
    ]
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1110
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1111
    "Created: / 16-07-2010 / 11:48:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1112
    "Modified (format): / 26-07-2012 / 15:48:37 / cg"
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1113
!
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1114
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1115
annotationsAt: key1 orAt: key2
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1116
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1117
    ^OrderedCollection
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1118
	streamContents:[:annotStream|
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1119
	    self annotationsAt: key1 orAt: key2 do: [:annot|annotStream nextPut: annot]
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1120
	]
14508
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1121
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1122
    "Created: / 16-07-2010 / 11:41:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1123
    "Modified (format): / 26-07-2012 / 15:49:11 / cg"
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1124
!
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1125
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1126
annotationsAt: key1 orAt: key2 do: block
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1127
    self annotationsDo:[:annot |
19585
2aab71e0f0b6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19449
diff changeset
  1128
        |key|
2aab71e0f0b6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19449
diff changeset
  1129
        key := annot key.
2aab71e0f0b6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19449
diff changeset
  1130
        (key == key1 or:[key == key2]) ifTrue:[
2aab71e0f0b6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19449
diff changeset
  1131
            block value: annot
2aab71e0f0b6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19449
diff changeset
  1132
        ]
14508
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1133
    ]
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1134
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1135
    "Created: / 16-07-2010 / 11:47:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1136
    "Modified (format): / 26-07-2012 / 15:49:30 / cg"
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1137
!
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1138
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1139
annotationsDo: aBlock
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1140
    annotations isNil ifTrue:[^nil].
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1141
    1 to: annotations size do: [:i|
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1142
	aBlock value: (self annotationAtIndex: i)
14508
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1143
    ].
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1144
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1145
    "Created: / 02-07-2010 / 22:33:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1146
    "Modified: / 11-07-2010 / 19:38:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1147
    "Modified (format): / 18-11-2011 / 14:47:06 / cg"
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1148
! !
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1149
1093
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  1150
!Method methodsFor:'accessing-visibility'!
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  1151
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1152
isIgnored
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1153
    "return true, if this is an ignored method.
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1154
     Ignored methods are physically present in the source file,
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1155
     but no code is generated for it by stc, and the VM does not see
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1156
     it in its message lookup.
747
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1157
     (i.e. setting a method to #ignored, and sending that selector,
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  1158
      leads to either the superclasses implementation to be called,
747
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1159
      or a doesNotUnderstand exception to be raised)
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1160
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1161
     Notice: this is a nonstandard feature, not supported
747
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1162
     by other smalltalk implementations and not specified in the ANSI spec.
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1163
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1164
     This is EXPERIMENTAL - and being evaluated for usability.
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1165
     It may change or even vanish (if it shows to be not useful)."
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1166
3216
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1167
    ^ self privacy == #ignored
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1168
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1169
    "Modified: / 23.1.1998 / 15:23:02 / stefan"
176
48061f8659aa more queries
claus
parents: 159
diff changeset
  1170
!
48061f8659aa more queries
claus
parents: 159
diff changeset
  1171
48061f8659aa more queries
claus
parents: 159
diff changeset
  1172
isPrivate
48061f8659aa more queries
claus
parents: 159
diff changeset
  1173
    "return true, if this is a private method.
8518
7dc3f9909640 Interchanged the meaning of method privacy -
Stefan Vogel <sv@exept.de>
parents: 8465
diff changeset
  1174
     Execution of private methods is only allowed via self sends
7dc3f9909640 Interchanged the meaning of method privacy -
Stefan Vogel <sv@exept.de>
parents: 8465
diff changeset
  1175
     from superclasses or the class itself.
176
48061f8659aa more queries
claus
parents: 159
diff changeset
  1176
     If a private method is called by some other class, a runtime
48061f8659aa more queries
claus
parents: 159
diff changeset
  1177
     error (PrivateMethodSignal) is raised.
48061f8659aa more queries
claus
parents: 159
diff changeset
  1178
     Notice: method privacy is a nonstandard feature, not supported
48061f8659aa more queries
claus
parents: 159
diff changeset
  1179
     by other smalltalk implementations and not specified in the ANSI spec.
747
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1180
176
48061f8659aa more queries
claus
parents: 159
diff changeset
  1181
     This is EXPERIMENTAL - and being evaluated for usability.
48061f8659aa more queries
claus
parents: 159
diff changeset
  1182
     It may change or even vanish (if it shows to be not useful)."
48061f8659aa more queries
claus
parents: 159
diff changeset
  1183
3216
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1184
    ^ self privacy == #private
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1185
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1186
    "Modified: / 23.1.1998 / 15:23:13 / stefan"
68
59faa75185ba *** empty log message ***
claus
parents: 56
diff changeset
  1187
!
59faa75185ba *** empty log message ***
claus
parents: 56
diff changeset
  1188
176
48061f8659aa more queries
claus
parents: 159
diff changeset
  1189
isProtected
48061f8659aa more queries
claus
parents: 159
diff changeset
  1190
    "return true, if this is a protected method.
8518
7dc3f9909640 Interchanged the meaning of method privacy -
Stefan Vogel <sv@exept.de>
parents: 8465
diff changeset
  1191
     Execution of protected methods is only allowed via self/super sends
7dc3f9909640 Interchanged the meaning of method privacy -
Stefan Vogel <sv@exept.de>
parents: 8465
diff changeset
  1192
     from superclasses, the class itself or subclasse.
176
48061f8659aa more queries
claus
parents: 159
diff changeset
  1193
     If a protected method is called by some other class, a runtime
48061f8659aa more queries
claus
parents: 159
diff changeset
  1194
     error (PrivateMethodSignal) is raised.
747
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1195
176
48061f8659aa more queries
claus
parents: 159
diff changeset
  1196
     Notice: method privacy is a nonstandard feature, not supported
48061f8659aa more queries
claus
parents: 159
diff changeset
  1197
     by other smalltalk implementations and not specified in the ANSI spec.
747
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1198
176
48061f8659aa more queries
claus
parents: 159
diff changeset
  1199
     This is EXPERIMENTAL - and being evaluated for usability.
48061f8659aa more queries
claus
parents: 159
diff changeset
  1200
     It may change or even vanish (if it shows to be not useful)."
48061f8659aa more queries
claus
parents: 159
diff changeset
  1201
3216
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1202
    ^ self privacy == #protected
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1203
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1204
    "Modified: / 23.1.1998 / 15:23:27 / stefan"
176
48061f8659aa more queries
claus
parents: 159
diff changeset
  1205
!
48061f8659aa more queries
claus
parents: 159
diff changeset
  1206
48061f8659aa more queries
claus
parents: 159
diff changeset
  1207
isPublic
48061f8659aa more queries
claus
parents: 159
diff changeset
  1208
    "return true, if this is a public method - I.e. can be executed via any send.
747
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1209
     This is the default and how other smalltalk implementations treat all methods.
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1210
360
claus
parents: 350
diff changeset
  1211
     Notice: method privacy is a nonstandard feature, not supported
claus
parents: 350
diff changeset
  1212
     by other smalltalk implementations and not specified in the ANSI spec.
747
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1213
360
claus
parents: 350
diff changeset
  1214
     This is EXPERIMENTAL - and being evaluated for usability.
claus
parents: 350
diff changeset
  1215
     It may change or even vanish (if it shows to be not useful)."
176
48061f8659aa more queries
claus
parents: 159
diff changeset
  1216
3216
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1217
    ^ self privacy == #public
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1218
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1219
    "Modified: / 23.1.1998 / 15:23:40 / stefan"
176
48061f8659aa more queries
claus
parents: 159
diff changeset
  1220
!
48061f8659aa more queries
claus
parents: 159
diff changeset
  1221
747
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1222
isRestricted
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1223
    "return the flag bit stating that this method is restricted.
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1224
     Execution of the receiver will only be allowed if the system is not in
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  1225
     'trap restricted mode' (-->ObjectMemory) otherise a runtime
747
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1226
     error (PrivateMethodSignal) is raised.
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1227
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1228
     Notice: method restriction is a nonstandard feature, not supported
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1229
     by other smalltalk implementations and not specified in the ANSI spec.
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1230
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1231
     This is EXPERIMENTAL - and being evaluated for usability.
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1232
     It may change or even vanish (if it shows to be not useful)."
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1233
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1234
%{  /* NOCONTEXT */
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1235
#ifdef F_RESTRICTED
2868
772c890f907c alpha64
Claus Gittinger <cg@exept.de>
parents: 2826
diff changeset
  1236
    INT f = __intVal(__INST(flags));
747
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1237
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1238
    if (f & F_RESTRICTED) {
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1239
	RETURN (true);
747
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1240
    }
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1241
#endif
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1242
%}.
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1243
    ^ false
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  1244
!
8526
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1245
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1246
primSetPrivacy:aSymbol
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1247
    "set the methods access rights (privacy) from a symbol;
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1248
     Currently, this must be one of #private, #protected, #public or #ignored.
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  1249
     #setPrivacy: simply sets the attribute. When changing methods, that
8526
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1250
     have already been called, #privacy: should be used.
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1251
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1252
     Notice: method privacy is a nonstandard feature, not supported
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1253
     by other smalltalk implementations and not specified in the ANSI spec.
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1254
     If at all, use it for debugging purposes, to catch messagesends
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1255
     which are not supposed to be sent by others.
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1256
     (especially, if working in a team, while integrating other peoples work)
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1257
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1258
     This is EXPERIMENTAL - and being evaluated for usability.
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1259
     It may change or even vanish (if it shows to be not useful)."
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1260
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1261
%{  /* NOCONTEXT */
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1262
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1263
#if defined(M_PRIVACY)
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1264
    INT f = __intVal(__INST(flags));
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1265
    INT p;
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1266
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1267
    if (aSymbol == @symbol(public))
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1268
	p = 0;
8526
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1269
    else if (aSymbol == @symbol(protected))
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1270
	p = F_PRIVATE;
8526
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1271
    else if (aSymbol == @symbol(private))
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1272
	p = F_CLASSPRIVATE;
8526
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1273
    else if (aSymbol == @symbol(ignored))
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1274
	p = F_IGNORED;
8526
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1275
    else
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1276
	RETURN(false);  /* illegal symbol */
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  1277
8526
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1278
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1279
    f = (f & ~M_PRIVACY) | p;
8913
b9498d27a554 64bit; mkSmallInteger
Claus Gittinger <cg@exept.de>
parents: 8896
diff changeset
  1280
    __INST(flags) = __mkSmallInteger(f);
8526
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1281
#endif
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1282
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1283
%}.
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1284
    ^ true
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1285
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1286
    "Modified: 27.8.1995 / 22:58:08 / claus"
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  1287
!
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1288
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1289
privacy
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1290
    "return a symbol describing the methods access rights (privacy);
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1291
     Currently, this is one of #private, #protected, #public or #ignored.
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1292
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1293
     Notice: method privacy is a nonstandard feature, not supported
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1294
     by other smalltalk implementations and not specified in the ANSI spec.
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1295
     If at all, use it for debugging purposes, to catch messagesends
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1296
     which are not supposed to be sent by others.
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1297
     (especially, if working in a team, while integrating other peoples work)
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1298
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1299
     This is EXPERIMENTAL - and being evaluated for usability.
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1300
     It may change or even vanish (if it shows to be not useful)."
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1301
3216
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1302
%{  /* NOCONTEXT */
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1303
    /* I made this a primitive to get the define constant from stc.h */
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1304
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1305
#if defined(M_PRIVACY) && (defined(F_PRIVATE) || defined(F_CLASSPRIVATE) || defined(F_IGNORED))
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1306
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1307
    INT f = __intVal(__INST(flags));
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1308
    switch (f & M_PRIVACY) {
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1309
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1310
# ifdef F_PRIVATE
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1311
    case F_PRIVATE:
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1312
	RETURN (@symbol(protected));
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1313
	break;
3216
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1314
# endif
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1315
# ifdef F_CLASSPRIVATE
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1316
    case F_CLASSPRIVATE:
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1317
	RETURN (@symbol(private));
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1318
	break;
3216
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1319
# endif
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1320
# ifdef F_IGNORED
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1321
    case F_IGNORED:
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1322
	RETURN (@symbol(ignored));
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1323
	break;
3216
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1324
# endif
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1325
    }
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1326
#endif
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1327
%}.
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1328
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1329
    ^ #public
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1330
!
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1331
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1332
privacy:aSymbol
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  1333
    "set the method's access rights (privacy) from a symbol;
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1334
     Currently, this must be one of #private, #protected, #public or #ignored.
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1335
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1336
     Notice: method privacy is a nonstandard feature, not supported
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1337
     by other smalltalk implementations and not specified in the ANSI spec.
8518
7dc3f9909640 Interchanged the meaning of method privacy -
Stefan Vogel <sv@exept.de>
parents: 8465
diff changeset
  1338
     If at all, use it for debugging purposes, to catch message sends
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1339
     which are not supposed to be sent by others.
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1340
     (especially, if working in a team, while integrating other peoples work)
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1341
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1342
     This is EXPERIMENTAL - and being evaluated for usability.
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1343
     It may change or even vanish (if it shows to be not useful)."
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1344
8526
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1345
    |oldPrivacy|
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1346
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1347
    oldPrivacy := self privacy.
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1348
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1349
    (self setPrivacy:aSymbol flushCaches:true) ifTrue:[
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  1350
        |myClass mySelector|
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  1351
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  1352
        myClass := self mclass.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  1353
        mySelector := self selector.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  1354
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  1355
        self changed:#privacy.                                       "/ will vanish
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  1356
        myClass notNil ifTrue:[
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  1357
            mySelector notNil ifTrue:[
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  1358
                myClass changed:#methodPrivacy with:mySelector.      "/ will vanish
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  1359
                Smalltalk changed:#privacyOfMethod with:(Array with:myClass with:self with:oldPrivacy).
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  1360
                myClass addChangeRecordForMethodPrivacy:self.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  1361
            ]
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  1362
        ]
3216
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1363
    ]
10196
f72831ddec29 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10156
diff changeset
  1364
f72831ddec29 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10156
diff changeset
  1365
    "Modified: / 23-11-2006 / 17:03:20 / cg"
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  1366
    "Modified (comment): / 21-11-2017 / 13:05:14 / cg"
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1367
!
747
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1368
532
2511c99de912 New code to trap restricted (RT) methods.
Stefan Vogel <sv@exept.de>
parents: 530
diff changeset
  1369
restricted:aBoolean
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  1370
    "set or clear the flag bit stating that this method is restricted.
532
2511c99de912 New code to trap restricted (RT) methods.
Stefan Vogel <sv@exept.de>
parents: 530
diff changeset
  1371
     Execution of the receiver will only be allowed if the system is not in
2511c99de912 New code to trap restricted (RT) methods.
Stefan Vogel <sv@exept.de>
parents: 530
diff changeset
  1372
     'trap restricted mode' (-->ObjectMemory) otherise a runtime
2511c99de912 New code to trap restricted (RT) methods.
Stefan Vogel <sv@exept.de>
parents: 530
diff changeset
  1373
     error (PrivateMethodSignal) is raised.
747
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1374
532
2511c99de912 New code to trap restricted (RT) methods.
Stefan Vogel <sv@exept.de>
parents: 530
diff changeset
  1375
     Notice: method restriction is a nonstandard feature, not supported
2511c99de912 New code to trap restricted (RT) methods.
Stefan Vogel <sv@exept.de>
parents: 530
diff changeset
  1376
     by other smalltalk implementations and not specified in the ANSI spec.
747
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1377
532
2511c99de912 New code to trap restricted (RT) methods.
Stefan Vogel <sv@exept.de>
parents: 530
diff changeset
  1378
     This is EXPERIMENTAL - and being evaluated for usability.
2511c99de912 New code to trap restricted (RT) methods.
Stefan Vogel <sv@exept.de>
parents: 530
diff changeset
  1379
     It may change or even vanish (if it shows to be not useful)."
2511c99de912 New code to trap restricted (RT) methods.
Stefan Vogel <sv@exept.de>
parents: 530
diff changeset
  1380
2511c99de912 New code to trap restricted (RT) methods.
Stefan Vogel <sv@exept.de>
parents: 530
diff changeset
  1381
%{  /* NOCONTEXT */
2511c99de912 New code to trap restricted (RT) methods.
Stefan Vogel <sv@exept.de>
parents: 530
diff changeset
  1382
    /* I made this a primitive to get the define constant from stc.h */
2511c99de912 New code to trap restricted (RT) methods.
Stefan Vogel <sv@exept.de>
parents: 530
diff changeset
  1383
2511c99de912 New code to trap restricted (RT) methods.
Stefan Vogel <sv@exept.de>
parents: 530
diff changeset
  1384
#ifdef F_RESTRICTED
2868
772c890f907c alpha64
Claus Gittinger <cg@exept.de>
parents: 2826
diff changeset
  1385
    INT f = __intVal(__INST(flags));
772c890f907c alpha64
Claus Gittinger <cg@exept.de>
parents: 2826
diff changeset
  1386
    INT old;
532
2511c99de912 New code to trap restricted (RT) methods.
Stefan Vogel <sv@exept.de>
parents: 530
diff changeset
  1387
747
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1388
    old = f;
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  1389
    if (aBoolean == true)
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1390
	f |= F_RESTRICTED;
532
2511c99de912 New code to trap restricted (RT) methods.
Stefan Vogel <sv@exept.de>
parents: 530
diff changeset
  1391
    else
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1392
	f &= ~F_RESTRICTED;
8913
b9498d27a554 64bit; mkSmallInteger
Claus Gittinger <cg@exept.de>
parents: 8896
diff changeset
  1393
    __INST(flags) = __mkSmallInteger(f);
532
2511c99de912 New code to trap restricted (RT) methods.
Stefan Vogel <sv@exept.de>
parents: 530
diff changeset
  1394
    if (old & F_RESTRICTED)
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1395
	RETURN(true);
532
2511c99de912 New code to trap restricted (RT) methods.
Stefan Vogel <sv@exept.de>
parents: 530
diff changeset
  1396
#endif
2511c99de912 New code to trap restricted (RT) methods.
Stefan Vogel <sv@exept.de>
parents: 530
diff changeset
  1397
%}.
2511c99de912 New code to trap restricted (RT) methods.
Stefan Vogel <sv@exept.de>
parents: 530
diff changeset
  1398
    ^ false
2511c99de912 New code to trap restricted (RT) methods.
Stefan Vogel <sv@exept.de>
parents: 530
diff changeset
  1399
747
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1400
    "
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1401
     (ObjectMemory class compiledMethodAt:#compressingGarbageCollect) restricted:true
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1402
    "
532
2511c99de912 New code to trap restricted (RT) methods.
Stefan Vogel <sv@exept.de>
parents: 530
diff changeset
  1403
2511c99de912 New code to trap restricted (RT) methods.
Stefan Vogel <sv@exept.de>
parents: 530
diff changeset
  1404
    "Created: 7.11.1995 / 20:36:19 / stefan"
2511c99de912 New code to trap restricted (RT) methods.
Stefan Vogel <sv@exept.de>
parents: 530
diff changeset
  1405
!
2511c99de912 New code to trap restricted (RT) methods.
Stefan Vogel <sv@exept.de>
parents: 530
diff changeset
  1406
3216
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1407
setPrivacy:aSymbol
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  1408
    "set the method's access rights (privacy) from a symbol;
3216
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1409
     Currently, this must be one of #private, #protected, #public or #ignored.
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  1410
     #setPrivacy: simply sets the attribute. 
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  1411
     When changing methods which have already been called, #privacy: should be used.
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1412
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1413
     Notice: method privacy is a nonstandard feature, not supported
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1414
     by other smalltalk implementations and not specified in the ANSI spec.
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1415
     If at all, use it for debugging purposes, to catch messagesends
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1416
     which are not supposed to be sent by others.
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1417
     (especially, if working in a team, while integrating other peoples work)
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1418
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1419
     This is EXPERIMENTAL - and being evaluated for usability.
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1420
     It may change or even vanish (if it shows to be not useful)."
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1421
8526
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1422
    ^ self setPrivacy:aSymbol flushCaches:true
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  1423
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  1424
    "Modified (comment): / 21-11-2017 / 13:05:54 / cg"
8526
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1425
!
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1426
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1427
setPrivacy:aSymbol flushCaches:doFlush
17526
cbad04a94bb2 class: Method
Claus Gittinger <cg@exept.de>
parents: 17515
diff changeset
  1428
    "set the method's access rights (privacy) from a symbol;
8526
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1429
     Currently, this must be one of #private, #protected, #public or #ignored.
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  1430
     #setPrivacy: simply sets the attribute. When changing methods, that
8526
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1431
     have already been called, #privacy: should be used.
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1432
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1433
     Notice: method privacy is a nonstandard feature, not supported
17526
cbad04a94bb2 class: Method
Claus Gittinger <cg@exept.de>
parents: 17515
diff changeset
  1434
     by other Smalltalk implementations and not specified in the ANSI spec.
cbad04a94bb2 class: Method
Claus Gittinger <cg@exept.de>
parents: 17515
diff changeset
  1435
     If at all, use it for debugging purposes, to catch message sends
8526
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1436
     which are not supposed to be sent by others.
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1437
     (especially, if working in a team, while integrating other peoples work)
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1438
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1439
     This is EXPERIMENTAL - and being evaluated for usability.
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1440
     It may change or even vanish (if it shows to be not useful)."
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1441
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1442
    |old sel|
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1443
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1444
    old := self privacy.
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1445
    old == aSymbol ifTrue:[^ false].
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1446
    (self primSetPrivacy:aSymbol) ifFalse:[^ false].
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1447
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1448
    "/
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1449
    "/ no need to flush, if changing from private to public
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1450
    "/
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1451
    doFlush ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1452
	(aSymbol == #public and:[old ~~ #ignored]) ifFalse:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1453
	    (sel := self selector) notNil ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1454
		ObjectMemory flushCachesForSelector:sel numArgs:self argumentCount
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1455
	    ] ifFalse:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1456
		ObjectMemory flushCaches.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1457
	    ].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1458
	].
8526
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1459
    ].
3216
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1460
    ^ true
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1461
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1462
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1463
!Method methodsFor:'binary storage'!
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1464
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1465
asByteCodeMethod
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1466
    "if the receiver has no bytecodes, create & return a method having
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1467
     the same semantics as the receiver, but uses interpreted bytecodes.
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1468
     Otherwise, return the receiver. The new method is not installed in
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1469
     the methodDictionary of any class - just returned.
2064
68b185fbddb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2063
diff changeset
  1470
     If the method contains primitive code, this may return a method
68b185fbddb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2063
diff changeset
  1471
     without bytecode.
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  1472
     Can be used to obtain a bytecode version of a machine-code method,
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1473
     for binary storage or dynamic recompilation (which is not yet finished)
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1474
     or to compile lazy methods down to executable ones."
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1475
9096
84df3b129718 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9075
diff changeset
  1476
    |mthd|
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1477
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1478
    byteCode notNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1479
	"
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1480
	 is already a bytecoded method
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1481
	"
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1482
	^ self
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1483
    ].
9096
84df3b129718 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9075
diff changeset
  1484
84df3b129718 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9075
diff changeset
  1485
    ParserFlags
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1486
	withSTCCompilation:#never
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1487
	do:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1488
	    mthd := self asExecutableMethod.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1489
	].
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1490
    ^ mthd
68
59faa75185ba *** empty log message ***
claus
parents: 56
diff changeset
  1491
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1492
    "Created: 24.10.1995 / 14:02:32 / cg"
2064
68b185fbddb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2063
diff changeset
  1493
    "Modified: 5.1.1997 / 01:01:53 / cg"
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1494
!
306
365e65400c93 *** empty log message ***
claus
parents: 302
diff changeset
  1495
5405
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  1496
asByteCodeMethodWithSource:newSource
9096
84df3b129718 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9075
diff changeset
  1497
    |mthd|
84df3b129718 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9075
diff changeset
  1498
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  1499
    ParserFlags
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1500
	withSTCCompilation:#never
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1501
	do:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1502
	    mthd := self asExecutableMethodWithSource:newSource.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1503
	].
5405
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  1504
    ^ mthd
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  1505
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  1506
    "Created: 24.10.1995 / 14:02:32 / cg"
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  1507
    "Modified: 5.1.1997 / 01:01:53 / cg"
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  1508
!
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  1509
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1510
asExecutableMethod
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  1511
    "if the receiver has neither bytecodes nor machinecode, create & return a
19449
607eb2e0e46c #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19025
diff changeset
  1512
     method having semantics as the receiver's source. This may be machine code,
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1513
     if the system supports dynamic loading of object code and the source includes
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1514
     primitive code. However, bytecode is preferred, since it compiles faster.
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1515
     Otherwise, return the receiver. The new method is not installed in
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1516
     the methodDictionary of any class - just returned.
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1517
     Can be used to compile lazy methods down to executable ones."
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1518
5700
ee59aff043c4 asExecutableMethod / asExecutableMethodWith: - code reuse
Claus Gittinger <cg@exept.de>
parents: 5696
diff changeset
  1519
    |temporaryMethod sourceString|
306
365e65400c93 *** empty log message ***
claus
parents: 302
diff changeset
  1520
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1521
    byteCode notNil ifTrue:[
19449
607eb2e0e46c #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19025
diff changeset
  1522
        "
607eb2e0e46c #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19025
diff changeset
  1523
         is already a bytecoded method
607eb2e0e46c #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19025
diff changeset
  1524
        "
607eb2e0e46c #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19025
diff changeset
  1525
        ^ self
5700
ee59aff043c4 asExecutableMethod / asExecutableMethodWith: - code reuse
Claus Gittinger <cg@exept.de>
parents: 5696
diff changeset
  1526
    ].
ee59aff043c4 asExecutableMethod / asExecutableMethodWith: - code reuse
Claus Gittinger <cg@exept.de>
parents: 5696
diff changeset
  1527
ee59aff043c4 asExecutableMethod / asExecutableMethodWith: - code reuse
Claus Gittinger <cg@exept.de>
parents: 5696
diff changeset
  1528
    sourceString := self source.
ee59aff043c4 asExecutableMethod / asExecutableMethodWith: - code reuse
Claus Gittinger <cg@exept.de>
parents: 5696
diff changeset
  1529
    sourceString isNil ifTrue:[
19449
607eb2e0e46c #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19025
diff changeset
  1530
        'Method [warning]: cannot generate bytecode (no source for compilation)' errorPrintCR.
607eb2e0e46c #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19025
diff changeset
  1531
        ^ nil
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1532
    ].
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1533
5700
ee59aff043c4 asExecutableMethod / asExecutableMethodWith: - code reuse
Claus Gittinger <cg@exept.de>
parents: 5696
diff changeset
  1534
    temporaryMethod := self asExecutableMethodWithSource:sourceString.
ee59aff043c4 asExecutableMethod / asExecutableMethodWith: - code reuse
Claus Gittinger <cg@exept.de>
parents: 5696
diff changeset
  1535
ee59aff043c4 asExecutableMethod / asExecutableMethodWith: - code reuse
Claus Gittinger <cg@exept.de>
parents: 5696
diff changeset
  1536
    (temporaryMethod isNil or:[temporaryMethod == #Error]) ifTrue:[
19449
607eb2e0e46c #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19025
diff changeset
  1537
        'Method [warning]: cannot generate bytecode (contains primitive code or error)' errorPrintCR.
607eb2e0e46c #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19025
diff changeset
  1538
        ^ nil.
5700
ee59aff043c4 asExecutableMethod / asExecutableMethodWith: - code reuse
Claus Gittinger <cg@exept.de>
parents: 5696
diff changeset
  1539
    ].
ee59aff043c4 asExecutableMethod / asExecutableMethodWith: - code reuse
Claus Gittinger <cg@exept.de>
parents: 5696
diff changeset
  1540
    "/
ee59aff043c4 asExecutableMethod / asExecutableMethodWith: - code reuse
Claus Gittinger <cg@exept.de>
parents: 5696
diff changeset
  1541
    "/ try to save a bit of memory, by sharing the source (whatever it is)
ee59aff043c4 asExecutableMethod / asExecutableMethodWith: - code reuse
Claus Gittinger <cg@exept.de>
parents: 5696
diff changeset
  1542
    "/
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  1543
    temporaryMethod sourceFilename:source position:sourcePosition.
5700
ee59aff043c4 asExecutableMethod / asExecutableMethodWith: - code reuse
Claus Gittinger <cg@exept.de>
parents: 5696
diff changeset
  1544
    ^ temporaryMethod
ee59aff043c4 asExecutableMethod / asExecutableMethodWith: - code reuse
Claus Gittinger <cg@exept.de>
parents: 5696
diff changeset
  1545
!
ee59aff043c4 asExecutableMethod / asExecutableMethodWith: - code reuse
Claus Gittinger <cg@exept.de>
parents: 5696
diff changeset
  1546
ee59aff043c4 asExecutableMethod / asExecutableMethodWith: - code reuse
Claus Gittinger <cg@exept.de>
parents: 5696
diff changeset
  1547
asExecutableMethodWithSource:newSource
ee59aff043c4 asExecutableMethod / asExecutableMethodWith: - code reuse
Claus Gittinger <cg@exept.de>
parents: 5696
diff changeset
  1548
    |temporaryMethod cls|
ee59aff043c4 asExecutableMethod / asExecutableMethodWith: - code reuse
Claus Gittinger <cg@exept.de>
parents: 5696
diff changeset
  1549
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1550
    cls := self containingClass.
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1551
    cls isNil ifTrue:[
20804
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1552
        'Method [warning]: cannot generate bytecode (no class for compilation)' errorPrintCR.
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1553
        ^ nil
306
365e65400c93 *** empty log message ***
claus
parents: 302
diff changeset
  1554
    ].
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1555
4290
5e43473d7a35 moved recompilation semaphore from LazyMethod to Method
Claus Gittinger <cg@exept.de>
parents: 4015
diff changeset
  1556
    "we have to sequentialize this using a lock-semaphore,
5e43473d7a35 moved recompilation semaphore from LazyMethod to Method
Claus Gittinger <cg@exept.de>
parents: 4015
diff changeset
  1557
     to make sure only one method is compiled at a time.
5e43473d7a35 moved recompilation semaphore from LazyMethod to Method
Claus Gittinger <cg@exept.de>
parents: 4015
diff changeset
  1558
     Otherwise, we might get into trouble, if (due to a timeout)
5e43473d7a35 moved recompilation semaphore from LazyMethod to Method
Claus Gittinger <cg@exept.de>
parents: 4015
diff changeset
  1559
     another recompile is forced while compiling this one ...
5e43473d7a35 moved recompilation semaphore from LazyMethod to Method
Claus Gittinger <cg@exept.de>
parents: 4015
diff changeset
  1560
     (happened when autoloading animation demos)
176
48061f8659aa more queries
claus
parents: 159
diff changeset
  1561
    "
4290
5e43473d7a35 moved recompilation semaphore from LazyMethod to Method
Claus Gittinger <cg@exept.de>
parents: 4015
diff changeset
  1562
    CompilationLock critical:[
20804
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1563
        "
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1564
         don't want this to go into the changes file,
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1565
         don't want output on Transcript and definitely
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1566
         don't want a lazy method ...
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1567
        "
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1568
        Class withoutUpdatingChangesDo:[
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1569
            |silent lazy|
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1570
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1571
            silent := Smalltalk silentLoading:true.
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1572
            lazy := Compiler compileLazy:false.
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1573
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1574
            [
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1575
                |compiler|
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1576
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1577
                Class nameSpaceQuerySignal answer:(cls nameSpace)
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1578
                do:[
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1579
                    compiler := cls compilerClass.
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1580
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1581
                    "/
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1582
                    "/ kludge - have to make ST/X's compiler protocol
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1583
                    "/ be compatible to ST-80's
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1584
                    "/
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1585
                    (compiler respondsTo:#compile:forClass:inCategory:notifying:install:)
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1586
                    ifTrue:[
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1587
                        temporaryMethod := compiler
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1588
                                             compile:newSource
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1589
                                             forClass:cls
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1590
                                             inCategory:(self category)
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1591
                                             notifying:nil
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1592
                                             install:false.
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1593
                    ] ifFalse:[
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1594
                        temporaryMethod := compiler new
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1595
                                             compile:newSource
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1596
                                             in:cls
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1597
                                             notifying:nil
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1598
                                             ifFail:nil
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1599
                    ].
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1600
                ].
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1601
            ] ensure:[
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1602
                Compiler compileLazy:lazy.
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1603
                Smalltalk silentLoading:silent.
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1604
            ]
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1605
        ].
463
447ead9f870c be silent on transcript when parsing for args, vars and primitiveCode
Claus Gittinger <cg@exept.de>
parents: 444
diff changeset
  1606
    ].
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1607
    (temporaryMethod isNil or:[temporaryMethod == #Error]) ifTrue:[
20804
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1608
        'Method [warning]: cannot generate bytecode (contains primitive code or error)' errorPrintCR.
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  1609
        ^ nil.
5405
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  1610
    ].
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  1611
    "/
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  1612
    "/ try to save a bit of memory, by sharing the source (whatever it is)
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  1613
    "/
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  1614
    temporaryMethod source:newSource.
5405
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  1615
    "/
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  1616
    "/ don't forget the method's class & package ...
5405
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  1617
    "/
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  1618
    temporaryMethod setPackage:package.
17250
a0d78c57d994 class: Method
Claus Gittinger <cg@exept.de>
parents: 17175
diff changeset
  1619
    temporaryMethod mclass:(self getMclass).
5405
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  1620
    ^ temporaryMethod
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  1621
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  1622
    "Modified (comment): / 21-11-2017 / 13:03:45 / cg"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1623
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1624
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1625
!Method methodsFor:'copying'!
438
claus
parents: 423
diff changeset
  1626
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1627
copy
2176
1a24b0cef25a when compressing sources, make certain to avoid later
Claus Gittinger <cg@exept.de>
parents: 2171
diff changeset
  1628
    "redefined to change a source ref into a real string"
438
claus
parents: 423
diff changeset
  1629
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1630
    |aCopy|
438
claus
parents: 423
diff changeset
  1631
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1632
    aCopy := super copy.
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  1633
    aCopy setSource:source.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  1634
    aCopy setSourcePosition:sourcePosition.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  1635
    "/ avoid recursion problems when source needs the source 
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  1636
    "/ (to extract/verify the classs CVS-version)
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  1637
    thisContext isRecursive ifFalse:[
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  1638
        sourcePosition notNil ifTrue:[
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  1639
            aCopy source:(self source)
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  1640
        ].
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1641
    ].
5676
db728e9fe276 must flush cached mclass, when copying methods around
src
parents: 5665
diff changeset
  1642
    aCopy mclass:nil.
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1643
    ^ aCopy
2176
1a24b0cef25a when compressing sources, make certain to avoid later
Claus Gittinger <cg@exept.de>
parents: 2171
diff changeset
  1644
5696
958a0643496d compatibility
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
  1645
    "Modified: 16.1.1997 / 01:27:25 / cg"
958a0643496d compatibility
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
  1646
! !
438
claus
parents: 423
diff changeset
  1647
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1648
!Method methodsFor:'error handling'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1649
328
claus
parents: 326
diff changeset
  1650
invalidCodeObject
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1651
    "{ Pragma: +optSpace }"
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1652
93
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
  1653
    "this method is triggered by the interpreter when a nil or non method
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
  1654
     is about to be executed.
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
  1655
     In this case, the VM sends this to the bad method (the receiver).
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
  1656
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
  1657
     Also, the Compiler creates methods with their code/bytecode set to
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
  1658
     this method if - after a class change - a method cannot be compiled
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
  1659
     and is therefore no longer executable (for example, after an instvar
68
59faa75185ba *** empty log message ***
claus
parents: 56
diff changeset
  1660
     has been removed, and a method still tries to access this instvar)
44
b262907c93ea *** empty log message ***
claus
parents: 42
diff changeset
  1661
93
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
  1662
     Thus, we arrive here, when playing around in a classes methodArray,
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  1663
     or compiler/runtime system is broken :-(,
93
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
  1664
     or you ignore the error messages during some recompile."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1665
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1666
%{
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1667
    /*
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1668
     * for reasons too far from being explained here,
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1669
     * this MUST be a compiled method
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1670
     */
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1671
%}.
7601
57c257f1150a Fix race when accessing source
Stefan Vogel <sv@exept.de>
parents: 7457
diff changeset
  1672
    ^ InvalidCodeError
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1673
	raiseErrorString:'invalid method - not executable'.
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1674
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1675
    "Modified: 4.11.1996 / 22:45:06 / cg"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1676
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1677
13693
16c890248840 added: #invalidCodeObjectWith:
sr
parents: 13683
diff changeset
  1678
invalidCodeObjectWith:arg
16c890248840 added: #invalidCodeObjectWith:
sr
parents: 13683
diff changeset
  1679
    "{ Pragma: +optSpace }"
16c890248840 added: #invalidCodeObjectWith:
sr
parents: 13683
diff changeset
  1680
16c890248840 added: #invalidCodeObjectWith:
sr
parents: 13683
diff changeset
  1681
    "When recompiling classes after a definition-change, all
16c890248840 added: #invalidCodeObjectWith:
sr
parents: 13683
diff changeset
  1682
     uncompilable methods (with 2 args) will be bound to this method here,
16c890248840 added: #invalidCodeObjectWith:
sr
parents: 13683
diff changeset
  1683
     so that evaluating such an uncompilable method will trigger an error."
16c890248840 added: #invalidCodeObjectWith:
sr
parents: 13683
diff changeset
  1684
16c890248840 added: #invalidCodeObjectWith:
sr
parents: 13683
diff changeset
  1685
%{
16c890248840 added: #invalidCodeObjectWith:
sr
parents: 13683
diff changeset
  1686
    /*
16c890248840 added: #invalidCodeObjectWith:
sr
parents: 13683
diff changeset
  1687
     * for reasons too far from being explained here,
16c890248840 added: #invalidCodeObjectWith:
sr
parents: 13683
diff changeset
  1688
     * this MUST be a compiled method
16c890248840 added: #invalidCodeObjectWith:
sr
parents: 13683
diff changeset
  1689
     */
16c890248840 added: #invalidCodeObjectWith:
sr
parents: 13683
diff changeset
  1690
%}.
16c890248840 added: #invalidCodeObjectWith:
sr
parents: 13683
diff changeset
  1691
    ^ InvalidCodeError
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1692
	raiseErrorString:'invalid method - not executable'.
13693
16c890248840 added: #invalidCodeObjectWith:
sr
parents: 13683
diff changeset
  1693
16c890248840 added: #invalidCodeObjectWith:
sr
parents: 13683
diff changeset
  1694
    "Created: / 14-09-2011 / 11:23:49 / sr"
16c890248840 added: #invalidCodeObjectWith:
sr
parents: 13683
diff changeset
  1695
!
16c890248840 added: #invalidCodeObjectWith:
sr
parents: 13683
diff changeset
  1696
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1697
invalidCodeObjectWith:arg with:arg2
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1698
    "{ Pragma: +optSpace }"
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1699
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1700
    "When recompiling classes after a definition-change, all
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1701
     uncompilable methods (with 2 args) will be bound to this method here,
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1702
     so that evaluating such an uncompilable method will trigger an error."
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1703
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1704
%{
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1705
    /*
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1706
     * for reasons too far from being explained here,
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1707
     * this MUST be a compiled method
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1708
     */
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1709
%}.
7601
57c257f1150a Fix race when accessing source
Stefan Vogel <sv@exept.de>
parents: 7457
diff changeset
  1710
    ^ InvalidCodeError
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1711
	raiseErrorString:'invalid method - not executable'.
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1712
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1713
    "Created: 4.11.1996 / 21:16:41 / cg"
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1714
    "Modified: 4.11.1996 / 22:45:15 / cg"
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1715
!
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1716
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1717
invalidCodeObjectWith:arg with:arg2 with:arg3
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1718
    "{ Pragma: +optSpace }"
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1719
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1720
    "When recompiling classes after a definition-change, all
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1721
     uncompilable methods (with 3 args) will be bound to this method here,
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1722
     so that evaluating such an uncompilable method will trigger an error."
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1723
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1724
%{
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1725
    /*
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1726
     * for reasons too far from being explained here,
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1727
     * this MUST be a compiled method
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1728
     */
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1729
%}.
7601
57c257f1150a Fix race when accessing source
Stefan Vogel <sv@exept.de>
parents: 7457
diff changeset
  1730
    ^ InvalidCodeError
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1731
	raiseErrorString:'invalid method - not executable'.
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1732
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1733
    "Created: 4.11.1996 / 21:16:51 / cg"
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1734
    "Modified: 4.11.1996 / 22:45:18 / cg"
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1735
!
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1736
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1737
invalidCodeObjectWith:arg with:arg2 with:arg3 with:arg4
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1738
    "{ Pragma: +optSpace }"
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1739
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1740
    "When recompiling classes after a definition-change, all
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1741
     uncompilable methods (with 4 args) will be bound to this method here,
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1742
     so that evaluating such an uncompilable method will trigger an error."
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1743
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1744
%{
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1745
    /*
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1746
     * for reasons too far from being explained here,
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1747
     * this MUST be a compiled method
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1748
     */
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1749
%}.
7601
57c257f1150a Fix race when accessing source
Stefan Vogel <sv@exept.de>
parents: 7457
diff changeset
  1750
    ^ InvalidCodeError
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1751
	raiseErrorString:'invalid method - not executable'.
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1752
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1753
    "Created: 4.11.1996 / 21:17:00 / cg"
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1754
    "Modified: 4.11.1996 / 22:45:22 / cg"
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1755
!
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1756
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1757
invalidCodeObjectWith:arg with:arg2 with:arg3 with:arg4 with:arg5
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1758
    "{ Pragma: +optSpace }"
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1759
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1760
    "When recompiling classes after a definition-change, all
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1761
     uncompilable methods (with 5 args) will be bound to this method here,
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1762
     so that evaluating such an uncompilable method will trigger an error."
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1763
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1764
%{
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1765
    /*
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1766
     * for reasons too far from being explained here,
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1767
     * this MUST be a compiled method
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1768
     */
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1769
%}.
7601
57c257f1150a Fix race when accessing source
Stefan Vogel <sv@exept.de>
parents: 7457
diff changeset
  1770
    ^ InvalidCodeError
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1771
	raiseErrorString:'invalid method - not executable'.
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1772
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1773
    "Created: 4.11.1996 / 21:17:09 / cg"
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1774
    "Modified: 4.11.1996 / 22:45:25 / cg"
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1775
!
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1776
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1777
invalidCodeObjectWith:arg with:arg2 with:arg3 with:arg4 with:arg5 with:arg6
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1778
    "{ Pragma: +optSpace }"
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1779
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1780
    "When recompiling classes after a definition-change, all
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1781
     uncompilable methods (with 6 args) will be bound to this method here,
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1782
     so that evaluating such an uncompilable method will trigger an error."
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1783
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1784
%{
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1785
    /*
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1786
     * for reasons too far from being explained here,
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1787
     * this MUST be a compiled method
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1788
     */
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1789
%}.
7601
57c257f1150a Fix race when accessing source
Stefan Vogel <sv@exept.de>
parents: 7457
diff changeset
  1790
    ^ InvalidCodeError
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1791
	raiseErrorString:'invalid method - not executable'.
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1792
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1793
    "Created: 4.11.1996 / 21:17:17 / cg"
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1794
    "Modified: 4.11.1996 / 22:45:28 / cg"
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1795
!
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1796
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1797
invalidCodeObjectWith:arg with:arg2 with:arg3 with:arg4 with:arg5 with:arg6 with:arg7
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1798
    "{ Pragma: +optSpace }"
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1799
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1800
    "When recompiling classes after a definition-change, all
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1801
     uncompilable methods (with 7 args) will be bound to this method here,
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1802
     so that evaluating such an uncompilable method will trigger an error."
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1803
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1804
%{
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1805
    /*
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1806
     * for reasons too far from being explained here,
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1807
     * this MUST be a compiled method
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1808
     */
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1809
%}.
7601
57c257f1150a Fix race when accessing source
Stefan Vogel <sv@exept.de>
parents: 7457
diff changeset
  1810
    ^ InvalidCodeError
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1811
	raiseErrorString:'invalid method - not executable'.
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1812
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1813
    "Created: 4.11.1996 / 21:17:25 / cg"
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1814
    "Modified: 4.11.1996 / 22:45:31 / cg"
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1815
!
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1816
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1817
invalidCodeObjectWith:arg with:arg2 with:arg3 with:arg4 with:arg5 with:arg6 with:arg7 with:arg8
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1818
    "{ Pragma: +optSpace }"
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1819
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1820
    "When recompiling classes after a definition-change, all
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1821
     uncompilable methods (with 8 args) will be bound to this method here,
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1822
     so that evaluating such an uncompilable method will trigger an error."
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1823
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1824
%{
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1825
    /*
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1826
     * for reasons too far from being explained here,
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1827
     * this MUST be a compiled method
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1828
     */
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1829
%}.
7601
57c257f1150a Fix race when accessing source
Stefan Vogel <sv@exept.de>
parents: 7457
diff changeset
  1830
    ^ InvalidCodeError
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1831
	raiseErrorString:'invalid method - not executable'.
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1832
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1833
    "Created: 4.11.1996 / 21:17:32 / cg"
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1834
    "Modified: 4.11.1996 / 22:45:38 / cg"
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1835
!
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1836
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1837
invalidCodeObjectWith:arg with:arg2 with:arg3 with:arg4 with:arg5 with:arg6 with:arg7 with:arg8 with:arg9
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1838
    "{ Pragma: +optSpace }"
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1839
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1840
    "When recompiling classes after a definition-change, all
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1841
     uncompilable methods (with 9 args) will be bound to this method here,
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1842
     so that evaluating such an uncompilable method will trigger an error."
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1843
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1844
%{
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1845
    /*
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1846
     * for reasons too far from being explained here,
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1847
     * this MUST be a compiled method
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1848
     */
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1849
%}.
7601
57c257f1150a Fix race when accessing source
Stefan Vogel <sv@exept.de>
parents: 7457
diff changeset
  1850
    ^ InvalidCodeError
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1851
	raiseErrorString:'invalid method - not executable'.
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1852
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1853
    "Created: 4.11.1996 / 21:17:37 / cg"
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1854
    "Modified: 4.11.1996 / 22:45:41 / cg"
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1855
!
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1856
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1857
invalidCodeObjectWith:arg with:arg2 with:arg3 with:arg4 with:arg5 with:arg6 with:arg7 with:arg8 with:arg9 with:arg10
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1858
    "{ Pragma: +optSpace }"
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1859
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1860
    "When recompiling classes after a definition-change, all
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1861
     uncompilable methods (with 10 args) will be bound to this method here,
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1862
     so that evaluating such an uncompilable method will trigger an error."
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1863
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1864
%{
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1865
    /*
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1866
     * for reasons too far from being explained here,
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1867
     * this MUST be a compiled method
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1868
     */
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1869
%}.
7601
57c257f1150a Fix race when accessing source
Stefan Vogel <sv@exept.de>
parents: 7457
diff changeset
  1870
    ^ InvalidCodeError
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1871
	raiseErrorString:'invalid method - not executable'.
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1872
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1873
    "Created: 4.11.1996 / 21:17:45 / cg"
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1874
    "Modified: 4.11.1996 / 22:45:44 / cg"
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1875
!
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1876
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1877
invalidCodeObjectWith:arg with:arg2 with:arg3 with:arg4 with:arg5 with:arg6 with:arg7 with:arg8 with:arg9 with:arg10 with:arg11
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1878
    "{ Pragma: +optSpace }"
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1879
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1880
    "When recompiling classes after a definition-change, all
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1881
     uncompilable methods (with 11 args) will be bound to this method here,
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1882
     so that evaluating such an uncompilable method will trigger an error."
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1883
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1884
%{
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1885
    /*
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1886
     * for reasons too far from being explained here,
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1887
     * this MUST be a compiled method
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1888
     */
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1889
%}.
7601
57c257f1150a Fix race when accessing source
Stefan Vogel <sv@exept.de>
parents: 7457
diff changeset
  1890
    ^ InvalidCodeError
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1891
	raiseErrorString:'invalid method - not executable'.
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1892
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1893
    "Created: 4.11.1996 / 21:17:52 / cg"
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1894
    "Modified: 4.11.1996 / 22:45:47 / cg"
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1895
!
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1896
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1897
invalidCodeObjectWith:arg with:arg2 with:arg3 with:arg4 with:arg5 with:arg6 with:arg7 with:arg8 with:arg9 with:arg10 with:arg11 with:arg12
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1898
    "{ Pragma: +optSpace }"
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1899
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1900
    "When recompiling classes after a definition-change, all
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1901
     uncompilable methods (with 12 args) will be bound to this method here,
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1902
     so that evaluating such an uncompilable method will trigger an error."
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1903
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1904
%{
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1905
    /*
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1906
     * for reasons too far from being explained here,
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1907
     * this MUST be a compiled method
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1908
     */
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1909
%}.
7601
57c257f1150a Fix race when accessing source
Stefan Vogel <sv@exept.de>
parents: 7457
diff changeset
  1910
    ^ InvalidCodeError
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1911
	raiseErrorString:'invalid method - not executable'.
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1912
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1913
    "Created: 4.11.1996 / 20:51:28 / cg"
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1914
    "Modified: 4.11.1996 / 22:46:01 / cg"
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1915
!
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1916
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1917
invalidCodeObjectWith:arg with:arg2 with:arg3 with:arg4 with:arg5 with:arg6 with:arg7 with:arg8 with:arg9 with:arg10 with:arg11 with:arg12 with:arg13
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1918
    "{ Pragma: +optSpace }"
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1919
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1920
    "When recompiling classes after a definition-change, all
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1921
     uncompilable methods (with 13 args) will be bound to this method here,
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1922
     so that evaluating such an uncompilable method will trigger an error."
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1923
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1924
%{
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1925
    /*
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1926
     * for reasons too far from being explained here,
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1927
     * this MUST be a compiled method
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1928
     */
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1929
%}.
7601
57c257f1150a Fix race when accessing source
Stefan Vogel <sv@exept.de>
parents: 7457
diff changeset
  1930
    ^ InvalidCodeError
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1931
	raiseErrorString:'invalid method - not executable'.
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1932
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1933
    "Created: 4.11.1996 / 21:18:09 / cg"
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1934
    "Modified: 4.11.1996 / 22:45:57 / cg"
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1935
!
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1936
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1937
invalidCodeObjectWith:arg with:arg2 with:arg3 with:arg4 with:arg5 with:arg6 with:arg7 with:arg8 with:arg9 with:arg10 with:arg11 with:arg12 with:arg13 with:arg14
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1938
    "{ Pragma: +optSpace }"
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1939
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1940
    "When recompiling classes after a definition-change, all
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1941
     uncompilable methods (with 14 args) will be bound to this method here,
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1942
     so that evaluating such an uncompilable method will trigger an error."
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1943
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1944
%{
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1945
    /*
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1946
     * for reasons too far from being explained here,
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1947
     * this MUST be a compiled method
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1948
     */
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1949
%}.
7601
57c257f1150a Fix race when accessing source
Stefan Vogel <sv@exept.de>
parents: 7457
diff changeset
  1950
    ^ InvalidCodeError
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1951
	raiseErrorString:'invalid method - not executable'.
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1952
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1953
    "Created: 4.11.1996 / 21:18:17 / cg"
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1954
    "Modified: 4.11.1996 / 22:45:55 / cg"
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1955
!
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1956
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1957
invalidCodeObjectWith:arg with:arg2 with:arg3 with:arg4 with:arg5 with:arg6 with:arg7 with:arg8 with:arg9 with:arg10 with:arg11 with:arg12 with:arg13 with:arg14 with:arg15
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1958
    "{ Pragma: +optSpace }"
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1959
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1960
    "When recompiling classes after a definition-change, all
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1961
     uncompilable methods (with 15 args) will be bound to this method here,
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1962
     so that evaluating such an uncompilable method will trigger an error."
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1963
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1964
%{
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1965
    /*
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1966
     * for reasons too far from being explained here,
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1967
     * this MUST be a compiled method
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1968
     */
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1969
%}.
7601
57c257f1150a Fix race when accessing source
Stefan Vogel <sv@exept.de>
parents: 7457
diff changeset
  1970
    ^ InvalidCodeError
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1971
	raiseErrorString:'invalid method - not executable'.
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1972
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1973
    "Created: 4.11.1996 / 21:18:22 / cg"
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1974
    "Modified: 4.11.1996 / 22:45:52 / cg"
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1975
!
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1976
109
1fae65190b17 errors raise signals; check arg-count in valueWith...
claus
parents: 93
diff changeset
  1977
privateMethodCalled
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1978
    "{ Pragma: +optSpace }"
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1979
980
0ab2f56ecfc7 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 957
diff changeset
  1980
    "this error is triggered, if a private or protected method is called.
0ab2f56ecfc7 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 957
diff changeset
  1981
360
claus
parents: 350
diff changeset
  1982
     If you continue in the debugger, the method will be called,
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  1983
     and further privacy exceptions will NOT be reported at this call location,
360
claus
parents: 350
diff changeset
  1984
     until any new method is compiled, or the privacy of any method changes,
claus
parents: 350
diff changeset
  1985
     or the caches are flushed.
20209
ad8f8594c10d #OTHER by mawalch
mawalch
parents: 20208
diff changeset
  1986
     (the reason is that after the continue, the method is entered into the
360
claus
parents: 350
diff changeset
  1987
      calling cache, for which method privacy is not checked.
claus
parents: 350
diff changeset
  1988
      Any of the above actions flushes this cache and a privacy check
claus
parents: 350
diff changeset
  1989
      is performed again.)
claus
parents: 350
diff changeset
  1990
     Future versions may not enter private methods into the cache, to fix this
claus
parents: 350
diff changeset
  1991
     (unobvious) behavior. However, then you will get an exception for EVERY
claus
parents: 350
diff changeset
  1992
     call to a private method ...
claus
parents: 350
diff changeset
  1993
claus
parents: 350
diff changeset
  1994
     Notice: method privacy is a nonstandard feature, not supported
claus
parents: 350
diff changeset
  1995
     by other smalltalk implementations and not specified in the ANSI spec.
claus
parents: 350
diff changeset
  1996
     This is EXPERIMENTAL - and being evaluated for usability.
claus
parents: 350
diff changeset
  1997
     It may change or even vanish (if it shows to be not useful)."
68
59faa75185ba *** empty log message ***
claus
parents: 56
diff changeset
  1998
8518
7dc3f9909640 Interchanged the meaning of method privacy -
Stefan Vogel <sv@exept.de>
parents: 8465
diff changeset
  1999
    ^ PrivateMethodSignal raiseRequest
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2000
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2001
    "Modified: 4.11.1996 / 22:46:09 / cg"
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2002
!
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2003
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2004
uncompiledCodeObject
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2005
    "{ Pragma: +optSpace }"
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2006
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2007
    "this method is invoked by methods which contain primitive code,
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2008
     but have not been compiled to machine code (either due to an error
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2009
     when compiling, or simply because no stc is available.
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2010
     For those methods, the compiler generated a method object consisting
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2011
     of the original source code, but with this methods machine/byte code."
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2012
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2013
%{
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2014
    /*
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2015
     * for reasons too far from being explained here,
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2016
     * this MUST be a compiled method
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2017
     */
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2018
%}.
7601
57c257f1150a Fix race when accessing source
Stefan Vogel <sv@exept.de>
parents: 7457
diff changeset
  2019
    ^ InvalidCodeError
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2020
	raiseRequestWith:self
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2021
	errorString:'invalid method - not compiled'.
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2022
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2023
    "Modified: 4.11.1996 / 22:58:02 / cg"
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2024
!
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2025
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2026
unloadedCodeObject
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2027
    "{ Pragma: +optSpace }"
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2028
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2029
    "this method is invoked by methods which have been binary-unloaded
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2030
     For those the source info consists
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2031
     of the original source code, but with this methods machine/byte code."
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2032
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2033
%{
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2034
    /*
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2035
     * for reasons too far from being explained here,
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2036
     * this MUST be a compiled method
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2037
     */
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2038
%}.
7601
57c257f1150a Fix race when accessing source
Stefan Vogel <sv@exept.de>
parents: 7457
diff changeset
  2039
    ^ InvalidCodeError
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2040
	raiseRequestWith:self
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2041
	errorString:'invalid method - unloaded'.
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2042
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2043
    "Created: 4.11.1996 / 22:57:54 / cg"
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2044
    "Modified: 4.11.1996 / 22:58:28 / cg"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2045
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2046
93
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
  2047
!Method methodsFor:'printing & storing'!
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2048
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2049
printOn:aStream
56
be0ed17e6f85 *** empty log message ***
claus
parents: 49
diff changeset
  2050
    "put a printed representation of the receiver onto aStream.
be0ed17e6f85 *** empty log message ***
claus
parents: 49
diff changeset
  2051
     Since methods do not store their class/selector, we have to search
be0ed17e6f85 *** empty log message ***
claus
parents: 49
diff changeset
  2052
     for it here."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2053
227
23b1c4de3402 package & cleanup
claus
parents: 216
diff changeset
  2054
    |classAndSelector m wrapped|
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2055
253
30daee717a53 *** empty log message ***
claus
parents: 227
diff changeset
  2056
    wrapped := false.
30daee717a53 *** empty log message ***
claus
parents: 227
diff changeset
  2057
6234
d8083875f657 fixed pixmap readout for win32, where red and green are exchanged
Claus Gittinger <cg@exept.de>
parents: 6160
diff changeset
  2058
    self basicPrintOn:aStream."/ aStream nextPutAll:(self classNameWithArticle).
159
514c749165c3 *** empty log message ***
claus
parents: 142
diff changeset
  2059
    aStream nextPut:$(.
227
23b1c4de3402 package & cleanup
claus
parents: 216
diff changeset
  2060
176
48061f8659aa more queries
claus
parents: 159
diff changeset
  2061
    classAndSelector := self who.
227
23b1c4de3402 package & cleanup
claus
parents: 216
diff changeset
  2062
    classAndSelector isNil ifTrue:[
19847
ef7bf75df3ee #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19782
diff changeset
  2063
        "
ef7bf75df3ee #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19782
diff changeset
  2064
         not anchored in any class.
ef7bf75df3ee #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19782
diff changeset
  2065
         check if wrapped (to be more informative in inspectors)
ef7bf75df3ee #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19782
diff changeset
  2066
        "
ef7bf75df3ee #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19782
diff changeset
  2067
        m := self wrapper.
ef7bf75df3ee #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19782
diff changeset
  2068
        m notNil ifTrue:[
ef7bf75df3ee #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19782
diff changeset
  2069
            classAndSelector := m who.
ef7bf75df3ee #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19782
diff changeset
  2070
            wrapped := true.
ef7bf75df3ee #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19782
diff changeset
  2071
        ]
227
23b1c4de3402 package & cleanup
claus
parents: 216
diff changeset
  2072
    ].
176
48061f8659aa more queries
claus
parents: 159
diff changeset
  2073
    classAndSelector notNil ifTrue:[
19847
ef7bf75df3ee #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19782
diff changeset
  2074
        (classAndSelector methodClass) name printOn:aStream.
ef7bf75df3ee #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19782
diff changeset
  2075
        "/ print out in a form that can directly be evaluated (>> is a selector in Behavior)
21156
975c87964fac #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20804
diff changeset
  2076
        "/ in order to not break existing code which parses those strings,
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2077
        "/ do not replace '>>' by ' » '
19847
ef7bf75df3ee #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19782
diff changeset
  2078
        aStream nextPutAll:' >> '.
ef7bf75df3ee #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19782
diff changeset
  2079
        (classAndSelector methodSelector) printOn:aStream.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2080
    ] ifFalse:[
19847
ef7bf75df3ee #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19782
diff changeset
  2081
        "
ef7bf75df3ee #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19782
diff changeset
  2082
         sorry, a method which is nowhere anchored
ef7bf75df3ee #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19782
diff changeset
  2083
        "
ef7bf75df3ee #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19782
diff changeset
  2084
        aStream nextPutAll:'unbound'
56
be0ed17e6f85 *** empty log message ***
claus
parents: 49
diff changeset
  2085
    ].
13101
7dc4234a844d changed: #printOn:
Claus Gittinger <cg@exept.de>
parents: 13100
diff changeset
  2086
    aStream nextPut:$).
7dc4234a844d changed: #printOn:
Claus Gittinger <cg@exept.de>
parents: 13100
diff changeset
  2087
7dc4234a844d changed: #printOn:
Claus Gittinger <cg@exept.de>
parents: 13100
diff changeset
  2088
    wrapped ifTrue:[
19847
ef7bf75df3ee #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19782
diff changeset
  2089
        aStream nextPutAll:'; wrapped'
13101
7dc4234a844d changed: #printOn:
Claus Gittinger <cg@exept.de>
parents: 13100
diff changeset
  2090
    ].
176
48061f8659aa more queries
claus
parents: 159
diff changeset
  2091
48061f8659aa more queries
claus
parents: 159
diff changeset
  2092
    "
253
30daee717a53 *** empty log message ***
claus
parents: 227
diff changeset
  2093
     (Object compiledMethodAt:#at:) printOn:Transcript. Transcript cr.
30daee717a53 *** empty log message ***
claus
parents: 227
diff changeset
  2094
     (Object compiledMethodAt:#at:) copy printOn:Transcript. Transcript cr.
10083
8cec9ab7373e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10044
diff changeset
  2095
8cec9ab7373e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10044
diff changeset
  2096
     (Object compiledMethodAt:#at:) whoString printOn:Transcript. Transcript cr.
8cec9ab7373e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10044
diff changeset
  2097
     (Object compiledMethodAt:#at:) copy whoString printOn:Transcript. Transcript cr.
176
48061f8659aa more queries
claus
parents: 159
diff changeset
  2098
    "
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  2099
13101
7dc4234a844d changed: #printOn:
Claus Gittinger <cg@exept.de>
parents: 13100
diff changeset
  2100
    "Modified: / 22-10-2010 / 12:07:25 / cg"
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2101
!
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2102
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2103
whoString
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2104
    "return a string as className>>selector, if this is not an unbound
20208
79b24601b7d6 #OTHER by mawalch
mawalch
parents: 20035
diff changeset
  2105
     method.
19782
41efda05474e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19739
diff changeset
  2106
     Otherwise return 'unbound'. Used with debugging."
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2107
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  2108
    |who|
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2109
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  2110
    who := self who.
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  2111
    who notNil ifTrue:[
19782
41efda05474e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19739
diff changeset
  2112
        "/ in order to not break existing code which parses those strings,
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2113
        "/ do not replace '>>' by ' » '
19782
41efda05474e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19739
diff changeset
  2114
        ^ who methodClass name , ' >> ' , (who methodSelector storeString)
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2115
    ].
6071
c10946059080 whoString can be evaluated
Claus Gittinger <cg@exept.de>
parents: 6058
diff changeset
  2116
    ^ 'unboundMethod'
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2117
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2118
    "
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2119
     Method new whoString
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2120
     (Method compiledMethodAt:#whoString) whoString
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2121
    "
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  2122
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  2123
    "Modified: 1.11.1996 / 16:27:04 / cg"
21156
975c87964fac #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20804
diff changeset
  2124
!
975c87964fac #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20804
diff changeset
  2125
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2126
whoStringWith:sepString
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2127
    "return a string like className>>selector, where '>>' is replaced by sepString. 
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2128
     If this is an unbound method, return 'unbound'. 
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2129
     Used with debugging."
21156
975c87964fac #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20804
diff changeset
  2130
975c87964fac #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20804
diff changeset
  2131
    |who|
975c87964fac #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20804
diff changeset
  2132
975c87964fac #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20804
diff changeset
  2133
    who := self who.
975c87964fac #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20804
diff changeset
  2134
    who notNil ifTrue:[
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2135
        ^ who methodClass name , sepString , (who methodSelector storeString)
21156
975c87964fac #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20804
diff changeset
  2136
    ].
975c87964fac #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20804
diff changeset
  2137
    ^ 'unboundMethod'
975c87964fac #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20804
diff changeset
  2138
975c87964fac #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20804
diff changeset
  2139
    "
975c87964fac #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20804
diff changeset
  2140
     Method new whoStringWith:' >> '
975c87964fac #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20804
diff changeset
  2141
     (Method compiledMethodAt:#whoString) whoStringWith:' >> '
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2142
     (Method compiledMethodAt:#whoString) whoStringWith:' » '
21157
c4dc25f898da #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21156
diff changeset
  2143
     (Method compiledMethodAt:#whoString) whoStringWith:' -> '
21156
975c87964fac #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 20804
diff changeset
  2144
    "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2145
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2146
8141
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2147
!Method methodsFor:'private'!
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2148
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2149
annotationAtIndex: index
14253
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  2150
    "return the annotation at given index.
18411
e6d26bb9b37b class: Method
Claus Gittinger <cg@exept.de>
parents: 18368
diff changeset
  2151
     any raw annotation array (as generated by the compiler)
e6d26bb9b37b class: Method
Claus Gittinger <cg@exept.de>
parents: 18368
diff changeset
  2152
     is lazily initialized from the 2-element format to real annotation instances here.
e6d26bb9b37b class: Method
Claus Gittinger <cg@exept.de>
parents: 18368
diff changeset
  2153
     This is done to avoid the need for knowledge about annotation instances in the stc compiler."
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2154
13662
7d7ae1e5f589 changed: #annotationAtIndex:
Claus Gittinger <cg@exept.de>
parents: 13660
diff changeset
  2155
    | annotationOrArray annotation args |
13683
1b6be902030b comment/format in: #annotationAtIndex:
Claus Gittinger <cg@exept.de>
parents: 13679
diff changeset
  2156
13817
7d1e0e8ea364 changed:10 methods
Claus Gittinger <cg@exept.de>
parents: 13805
diff changeset
  2157
    annotations isNil ifTrue:[^nil].
18411
e6d26bb9b37b class: Method
Claus Gittinger <cg@exept.de>
parents: 18368
diff changeset
  2158
13662
7d7ae1e5f589 changed: #annotationAtIndex:
Claus Gittinger <cg@exept.de>
parents: 13660
diff changeset
  2159
    annotationOrArray := annotation := annotations at: index.
7d7ae1e5f589 changed: #annotationAtIndex:
Claus Gittinger <cg@exept.de>
parents: 13660
diff changeset
  2160
    annotationOrArray isArray ifTrue:[
20547
72ae31e8718b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 20209
diff changeset
  2161
        args := annotationOrArray size == 2
72ae31e8718b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 20209
diff changeset
  2162
                    ifTrue:[annotationOrArray second]
72ae31e8718b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 20209
diff changeset
  2163
                    ifFalse:[#()].
72ae31e8718b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 20209
diff changeset
  2164
        args isArray ifFalse:[args := Array with: args].
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2165
        annotation := Annotation method:self key: annotationOrArray first arguments: args.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2166
                        
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2167
        "/ unknown annotations are not written back,
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2168
        "/ to give later loaded annotation classes a chance to create
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2169
        "/ a proper instance (otherwise, it would be and remain an unknown annotation)
20547
72ae31e8718b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 20209
diff changeset
  2170
        annotation isUnknown ifFalse:[
72ae31e8718b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 20209
diff changeset
  2171
            annotations isImmutable ifTrue:[
72ae31e8718b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 20209
diff changeset
  2172
                annotations := annotations asMutableCollection
72ae31e8718b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 20209
diff changeset
  2173
            ].
72ae31e8718b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 20209
diff changeset
  2174
            annotations at: index put: annotation.
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2175
"/            annotation annotatesMethod: self
20547
72ae31e8718b #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 20209
diff changeset
  2176
        ].
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2177
    ].    
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2178
    ^annotation
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2179
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2180
    "Created: / 02-07-2010 / 22:30:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2181
    "Modified: / 11-07-2010 / 19:39:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2182
    "Modified (format): / 07-02-2017 / 20:17:30 / cg"
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2183
!
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2184
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2185
annotationIndexOf: key
14253
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  2186
    "Returns the index of annotation with given key
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2187
     or nil if there is no such annotation"
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2188
13817
7d1e0e8ea364 changed:10 methods
Claus Gittinger <cg@exept.de>
parents: 13805
diff changeset
  2189
    annotations isNil ifTrue:[^nil].
7d1e0e8ea364 changed:10 methods
Claus Gittinger <cg@exept.de>
parents: 13805
diff changeset
  2190
7d1e0e8ea364 changed:10 methods
Claus Gittinger <cg@exept.de>
parents: 13805
diff changeset
  2191
    annotations keysAndValuesDo: [:index :annotationOrArray|
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2192
	annotationOrArray isArray
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2193
	    ifTrue: [annotationOrArray first == key ifTrue:[^index]]
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2194
	    ifFalse:[annotationOrArray key == key ifTrue:[^index]]
13817
7d1e0e8ea364 changed:10 methods
Claus Gittinger <cg@exept.de>
parents: 13805
diff changeset
  2195
    ].
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2196
    ^nil.
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2197
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2198
    "Created: / 19-05-2010 / 16:40:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2199
    "Modified: / 11-07-2010 / 19:23:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
14253
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  2200
    "Modified (comment): / 26-07-2012 / 15:48:14 / cg"
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2201
!
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2202
12695
14b7044c2e4a changed:
Stefan Vogel <sv@exept.de>
parents: 12682
diff changeset
  2203
cacheSourceStream:aStream
14b7044c2e4a changed:
Stefan Vogel <sv@exept.de>
parents: 12682
diff changeset
  2204
    "remember a (raw) source stream for later use"
14b7044c2e4a changed:
Stefan Vogel <sv@exept.de>
parents: 12682
diff changeset
  2205
14b7044c2e4a changed:
Stefan Vogel <sv@exept.de>
parents: 12682
diff changeset
  2206
    |lastStream|
14b7044c2e4a changed:
Stefan Vogel <sv@exept.de>
parents: 12682
diff changeset
  2207
14b7044c2e4a changed:
Stefan Vogel <sv@exept.de>
parents: 12682
diff changeset
  2208
    (package notNil and:[package ~= PackageId noProjectID]) ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2209
	LastFileLock critical:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2210
	    lastStream := LastFileReference at:1.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2211
	    (lastStream notNil
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2212
	      and:[lastStream class ~~ SmallInteger
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2213
	      and:[lastStream isOpen]]) ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2214
		lastStream close.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2215
	    ].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2216
	    LastSourceFileName := package,'/',source.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2217
	    LastFileReference at:1 put:aStream.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2218
	].
12695
14b7044c2e4a changed:
Stefan Vogel <sv@exept.de>
parents: 12682
diff changeset
  2219
    ].
14b7044c2e4a changed:
Stefan Vogel <sv@exept.de>
parents: 12682
diff changeset
  2220
!
14b7044c2e4a changed:
Stefan Vogel <sv@exept.de>
parents: 12682
diff changeset
  2221
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2222
getAnnotations
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2223
    ^annotations
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2224
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2225
    "Created: / 10-07-2010 / 21:55:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2226
    "Modified: / 11-07-2010 / 19:30:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
14253
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  2227
    "Modified (format): / 26-07-2012 / 15:49:38 / cg"
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2228
!
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2229
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2230
getLookupObject
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2231
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2232
    ^lookupObject
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2233
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2234
    "Created: / 10-07-2010 / 21:55:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2235
!
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2236
8141
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2237
localSourceStream
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2238
    "try to open a stream from a local source file,
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2239
     searching in standard places."
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2240
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2241
    |dir fileName aStream|
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2242
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2243
    "/ to test CVS access, uncomment the following:
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2244
    "/ ^ nil.
8141
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2245
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2246
    package notNil ifTrue:[
20358
310244bfc8b3 Allow for absolute filenames as method's and class source's files
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20357
diff changeset
  2247
        "/
310244bfc8b3 Allow for absolute filenames as method's and class source's files
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20357
diff changeset
  2248
        "/ old: look in 'source/<filename>'
310244bfc8b3 Allow for absolute filenames as method's and class source's files
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20357
diff changeset
  2249
        "/ this is still kept in order to find user-private
310244bfc8b3 Allow for absolute filenames as method's and class source's files
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20357
diff changeset
  2250
        "/ classes in her currentDirectory.
310244bfc8b3 Allow for absolute filenames as method's and class source's files
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20357
diff changeset
  2251
        "/
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2252
        fileName := Smalltalk getSourceFileName:(package copyReplaceAll:$: with:$/) , '/' , source.
20358
310244bfc8b3 Allow for absolute filenames as method's and class source's files
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20357
diff changeset
  2253
        fileName notNil ifTrue:[
310244bfc8b3 Allow for absolute filenames as method's and class source's files
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20357
diff changeset
  2254
            aStream := fileName asFilename readStreamOrNil.
310244bfc8b3 Allow for absolute filenames as method's and class source's files
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20357
diff changeset
  2255
            aStream notNil ifTrue:[^ aStream].
310244bfc8b3 Allow for absolute filenames as method's and class source's files
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20357
diff changeset
  2256
        ].
310244bfc8b3 Allow for absolute filenames as method's and class source's files
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20357
diff changeset
  2257
        "/
310244bfc8b3 Allow for absolute filenames as method's and class source's files
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20357
diff changeset
  2258
        "/ new: look in package-dir
310244bfc8b3 Allow for absolute filenames as method's and class source's files
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20357
diff changeset
  2259
        "/
310244bfc8b3 Allow for absolute filenames as method's and class source's files
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20357
diff changeset
  2260
        dir := Smalltalk getPackageDirectoryForPackage:package.
310244bfc8b3 Allow for absolute filenames as method's and class source's files
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20357
diff changeset
  2261
        dir notNil ifTrue:[
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2262
            fileName := dir construct:source.
20358
310244bfc8b3 Allow for absolute filenames as method's and class source's files
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20357
diff changeset
  2263
            aStream := fileName asFilename readStreamOrNil.
310244bfc8b3 Allow for absolute filenames as method's and class source's files
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20357
diff changeset
  2264
            aStream notNil ifTrue:[^ aStream].
310244bfc8b3 Allow for absolute filenames as method's and class source's files
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20357
diff changeset
  2265
        ].
8141
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2266
    ].
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2267
    fileName := Smalltalk getSourceFileName:source.
8141
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2268
    fileName notNil ifTrue:[
20358
310244bfc8b3 Allow for absolute filenames as method's and class source's files
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20357
diff changeset
  2269
        aStream := fileName asFilename readStreamOrNil.
8141
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2270
    ].
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2271
    ^ aStream
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2272
!
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2273
25398
b0d020199bd0 Refactor class- and method- source stream access
Jan Vrany <jan.vrany@labware.com>
parents: 23107
diff changeset
  2274
rawSourceStreamUsingCache:usingCache
12682
Stefan Vogel <sv@exept.de>
parents: 12620
diff changeset
  2275
    "return an open sourceStream (needs positioning).
Stefan Vogel <sv@exept.de>
parents: 12620
diff changeset
  2276
     If usingCacheBoolean is true, cache the stream (but take care against concurrent access).
13390
3bee59036719 comment/format in: #rawSourceStreamUsingCache:
Stefan Vogel <sv@exept.de>
parents: 13381
diff changeset
  2277
     You have to close the stream, if usingCacheBoolean is false, and should not close it
12682
Stefan Vogel <sv@exept.de>
parents: 12620
diff changeset
  2278
     if usingCacheBoolean is true."
8141
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2279
25398
b0d020199bd0 Refactor class- and method- source stream access
Jan Vrany <jan.vrany@labware.com>
parents: 23107
diff changeset
  2280
    | sourceStream fileName |
8141
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2281
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2282
    "
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2283
     if sourcePosition is nonNil, its the fileName and
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2284
     abs(sourcePosition) is the offset.
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2285
     Otherwise, source is the real source
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2286
    "
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2287
    source isNil ifTrue:[^ nil].
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2288
    sourcePosition isNil ifTrue:[^ source readStream].
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2289
25398
b0d020199bd0 Refactor class- and method- source stream access
Jan Vrany <jan.vrany@labware.com>
parents: 23107
diff changeset
  2290
    usingCache ifTrue:[
20035
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
  2291
        (package notNil and:[package ~= PackageId noProjectID]) ifTrue:[
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
  2292
            "/ keep the last source file open, because open/close
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
  2293
            "/ operations maybe slow on NFS-mounted file systems.
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
  2294
            "/ Since the reference to the file is weak, it will be closed
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
  2295
            "/ automatically if the file is not referenced for a while.
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
  2296
            "/ Neat trick.
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
  2297
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
  2298
            LastFileLock critical:[
25398
b0d020199bd0 Refactor class- and method- source stream access
Jan Vrany <jan.vrany@labware.com>
parents: 23107
diff changeset
  2299
                sourceStream := LastFileReference at:1.
b0d020199bd0 Refactor class- and method- source stream access
Jan Vrany <jan.vrany@labware.com>
parents: 23107
diff changeset
  2300
                (sourceStream isNil
b0d020199bd0 Refactor class- and method- source stream access
Jan Vrany <jan.vrany@labware.com>
parents: 23107
diff changeset
  2301
                  or:[sourceStream class == SmallInteger
b0d020199bd0 Refactor class- and method- source stream access
Jan Vrany <jan.vrany@labware.com>
parents: 23107
diff changeset
  2302
                  or:[sourceStream isOpen not]]) ifTrue:[
b0d020199bd0 Refactor class- and method- source stream access
Jan Vrany <jan.vrany@labware.com>
parents: 23107
diff changeset
  2303
                    sourceStream := nil.
20035
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
  2304
                    LastFileReference at:1 put:nil.
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
  2305
                ].
25398
b0d020199bd0 Refactor class- and method- source stream access
Jan Vrany <jan.vrany@labware.com>
parents: 23107
diff changeset
  2306
                (sourceStream notNil
20035
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
  2307
                 and:[LastSourceFileName ~= (package,'/',source)]) ifTrue:[
25398
b0d020199bd0 Refactor class- and method- source stream access
Jan Vrany <jan.vrany@labware.com>
parents: 23107
diff changeset
  2308
                    sourceStream := nil.
20035
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
  2309
                ].
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
  2310
            ].
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
  2311
25398
b0d020199bd0 Refactor class- and method- source stream access
Jan Vrany <jan.vrany@labware.com>
parents: 23107
diff changeset
  2312
            sourceStream notNil ifTrue:[
b0d020199bd0 Refactor class- and method- source stream access
Jan Vrany <jan.vrany@labware.com>
parents: 23107
diff changeset
  2313
                ^ sourceStream
20035
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
  2314
            ].
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
  2315
        ].
8141
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2316
    ].
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2317
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2318
    "/ a negative sourcePosition indicates
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2319
    "/ that this is a local file
8141
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2320
    "/ (not to be requested via the sourceCodeManager)
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2321
    "/ This kludge was added, to allow sourceCode to be
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2322
    "/ saved to a local source file (i.e. 'st.src')
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2323
    "/ and having a clue for which file is meant later.
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2324
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2325
    sourcePosition < 0 ifTrue:[
25398
b0d020199bd0 Refactor class- and method- source stream access
Jan Vrany <jan.vrany@labware.com>
parents: 23107
diff changeset
  2326
        sourceStream := source asFilename readStreamOrNil.
b0d020199bd0 Refactor class- and method- source stream access
Jan Vrany <jan.vrany@labware.com>
parents: 23107
diff changeset
  2327
        sourceStream isNil ifTrue:[
20035
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
  2328
            "/ search in some standard places
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
  2329
            fileName := Smalltalk getSourceFileName:source.
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
  2330
            fileName notNil ifTrue:[
25398
b0d020199bd0 Refactor class- and method- source stream access
Jan Vrany <jan.vrany@labware.com>
parents: 23107
diff changeset
  2331
                sourceStream := fileName asFilename readStreamOrNil.
20035
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
  2332
            ].
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
  2333
        ].
25398
b0d020199bd0 Refactor class- and method- source stream access
Jan Vrany <jan.vrany@labware.com>
parents: 23107
diff changeset
  2334
        sourceStream notNil ifTrue:[
b0d020199bd0 Refactor class- and method- source stream access
Jan Vrany <jan.vrany@labware.com>
parents: 23107
diff changeset
  2335
            usingCache ifTrue:[
b0d020199bd0 Refactor class- and method- source stream access
Jan Vrany <jan.vrany@labware.com>
parents: 23107
diff changeset
  2336
                self cacheSourceStream:sourceStream.
20357
0eae8bf21a91 Method: don't try to figure out a source code manager for method when using local source
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20210
diff changeset
  2337
            ].
25398
b0d020199bd0 Refactor class- and method- source stream access
Jan Vrany <jan.vrany@labware.com>
parents: 23107
diff changeset
  2338
            ^ sourceStream
20035
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
  2339
        ].
8141
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2340
    ].
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2341
25398
b0d020199bd0 Refactor class- and method- source stream access
Jan Vrany <jan.vrany@labware.com>
parents: 23107
diff changeset
  2342
b0d020199bd0 Refactor class- and method- source stream access
Jan Vrany <jan.vrany@labware.com>
parents: 23107
diff changeset
  2343
    (mclass notNil and:[package == mclass package]) ifTrue: [
b0d020199bd0 Refactor class- and method- source stream access
Jan Vrany <jan.vrany@labware.com>
parents: 23107
diff changeset
  2344
        "/ If this is not an extension, ask class for source stream.
b0d020199bd0 Refactor class- and method- source stream access
Jan Vrany <jan.vrany@labware.com>
parents: 23107
diff changeset
  2345
        sourceStream := mclass sourceStream.
b0d020199bd0 Refactor class- and method- source stream access
Jan Vrany <jan.vrany@labware.com>
parents: 23107
diff changeset
  2346
        sourceStream notNil ifTrue:[
b0d020199bd0 Refactor class- and method- source stream access
Jan Vrany <jan.vrany@labware.com>
parents: 23107
diff changeset
  2347
            usingCache ifTrue:[
b0d020199bd0 Refactor class- and method- source stream access
Jan Vrany <jan.vrany@labware.com>
parents: 23107
diff changeset
  2348
                self cacheSourceStream:sourceStream.
20035
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
  2349
            ].
25398
b0d020199bd0 Refactor class- and method- source stream access
Jan Vrany <jan.vrany@labware.com>
parents: 23107
diff changeset
  2350
            ^ sourceStream
20035
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
  2351
        ].
25398
b0d020199bd0 Refactor class- and method- source stream access
Jan Vrany <jan.vrany@labware.com>
parents: 23107
diff changeset
  2352
    ] ifFalse: [
b0d020199bd0 Refactor class- and method- source stream access
Jan Vrany <jan.vrany@labware.com>
parents: 23107
diff changeset
  2353
        "/ If it is an extension, return local source.
b0d020199bd0 Refactor class- and method- source stream access
Jan Vrany <jan.vrany@labware.com>
parents: 23107
diff changeset
  2354
        "/ This one may have been invalid, but we have no chance to
b0d020199bd0 Refactor class- and method- source stream access
Jan Vrany <jan.vrany@labware.com>
parents: 23107
diff changeset
  2355
        "/ check this (no checksum)
b0d020199bd0 Refactor class- and method- source stream access
Jan Vrany <jan.vrany@labware.com>
parents: 23107
diff changeset
  2356
        sourceStream := self localSourceStream.
8141
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2357
    ].
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2358
25398
b0d020199bd0 Refactor class- and method- source stream access
Jan Vrany <jan.vrany@labware.com>
parents: 23107
diff changeset
  2359
    (sourceStream notNil and:[usingCache]) ifTrue:[
b0d020199bd0 Refactor class- and method- source stream access
Jan Vrany <jan.vrany@labware.com>
parents: 23107
diff changeset
  2360
        self cacheSourceStream:sourceStream.
8141
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2361
    ].
25398
b0d020199bd0 Refactor class- and method- source stream access
Jan Vrany <jan.vrany@labware.com>
parents: 23107
diff changeset
  2362
    ^ sourceStream.
10201
f90568a94903 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10196
diff changeset
  2363
f90568a94903 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10196
diff changeset
  2364
    "Modified: / 26-11-2006 / 22:33:38 / cg"
20358
310244bfc8b3 Allow for absolute filenames as method's and class source's files
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20357
diff changeset
  2365
    "Modified: / 07-09-2016 / 08:53:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
25398
b0d020199bd0 Refactor class- and method- source stream access
Jan Vrany <jan.vrany@labware.com>
parents: 23107
diff changeset
  2366
    "Modified: / 09-07-2020 / 22:28:05 / Jan Vrany <jan.vrany@labware.com>"
8141
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2367
!
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2368
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2369
setLookupObject: lookup
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2370
    "set the lookupObject (low level - use lookupObject:)"
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2371
14536
db30b9862370 class: Method
Claus Gittinger <cg@exept.de>
parents: 14508
diff changeset
  2372
    lookupObject ~~ lookup ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2373
	lookupObject := lookup.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2374
	ObjectMemory flushCaches.
14536
db30b9862370 class: Method
Claus Gittinger <cg@exept.de>
parents: 14508
diff changeset
  2375
    ].
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2376
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2377
    "Created: / 11-07-2010 / 19:31:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2378
!
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2379
8141
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2380
sourceChunkFromStream:aStream
10673
05229646ecd7 #source - handle DecodingError when fetching the method's source
Stefan Vogel <sv@exept.de>
parents: 10608
diff changeset
  2381
    PositionError handle:[:ex |
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2382
	^ nil
8141
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2383
    ] do:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2384
	aStream position:(sourcePosition ? 1) abs - 1.
8141
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2385
    ].
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2386
    ^ aStream nextChunk.
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2387
!
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2388
12682
Stefan Vogel <sv@exept.de>
parents: 12620
diff changeset
  2389
sourceStreamUsingCache:usingCacheBoolean
Stefan Vogel <sv@exept.de>
parents: 12620
diff changeset
  2390
    "return an open sourceStream (needs positioning).
Stefan Vogel <sv@exept.de>
parents: 12620
diff changeset
  2391
     If usingCacheBoolean is true, cache the stream (but take care against concurrent access).
14090
bb45ad9b6aab changed: #sourceStreamUsingCache:
Stefan Vogel <sv@exept.de>
parents: 14047
diff changeset
  2392
     You have to close the stream, if usingCacheBoolean is false, and should not close it
12682
Stefan Vogel <sv@exept.de>
parents: 12620
diff changeset
  2393
     if usingCacheBoolean is true."
8141
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2394
12695
14b7044c2e4a changed:
Stefan Vogel <sv@exept.de>
parents: 12682
diff changeset
  2395
    |rawStream|
14b7044c2e4a changed:
Stefan Vogel <sv@exept.de>
parents: 12682
diff changeset
  2396
14b7044c2e4a changed:
Stefan Vogel <sv@exept.de>
parents: 12682
diff changeset
  2397
    rawStream := self rawSourceStreamUsingCache:usingCacheBoolean.
14b7044c2e4a changed:
Stefan Vogel <sv@exept.de>
parents: 12682
diff changeset
  2398
    rawStream isNil ifTrue:[
25398
b0d020199bd0 Refactor class- and method- source stream access
Jan Vrany <jan.vrany@labware.com>
parents: 23107
diff changeset
  2399
        ^ nil.
8141
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2400
    ].
14090
bb45ad9b6aab changed: #sourceStreamUsingCache:
Stefan Vogel <sv@exept.de>
parents: 14047
diff changeset
  2401
    rawStream position:0.
12695
14b7044c2e4a changed:
Stefan Vogel <sv@exept.de>
parents: 12682
diff changeset
  2402
14b7044c2e4a changed:
Stefan Vogel <sv@exept.de>
parents: 12682
diff changeset
  2403
    "/ see if its utf8 encoded...
25398
b0d020199bd0 Refactor class- and method- source stream access
Jan Vrany <jan.vrany@labware.com>
parents: 23107
diff changeset
  2404
    rawStream isEncodedStream ifTrue:[
b0d020199bd0 Refactor class- and method- source stream access
Jan Vrany <jan.vrany@labware.com>
parents: 23107
diff changeset
  2405
        ^ rawStream
b0d020199bd0 Refactor class- and method- source stream access
Jan Vrany <jan.vrany@labware.com>
parents: 23107
diff changeset
  2406
    ] ifFalse: [
b0d020199bd0 Refactor class- and method- source stream access
Jan Vrany <jan.vrany@labware.com>
parents: 23107
diff changeset
  2407
        ^ EncodedStream decodedStreamFor:rawStream.
b0d020199bd0 Refactor class- and method- source stream access
Jan Vrany <jan.vrany@labware.com>
parents: 23107
diff changeset
  2408
    ]
b0d020199bd0 Refactor class- and method- source stream access
Jan Vrany <jan.vrany@labware.com>
parents: 23107
diff changeset
  2409
b0d020199bd0 Refactor class- and method- source stream access
Jan Vrany <jan.vrany@labware.com>
parents: 23107
diff changeset
  2410
    "Modified: / 20-07-2020 / 15:31:49 / Jan Vrany <jan.vrany@labware.com>"
8141
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2411
! !
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2412
1093
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  2413
!Method methodsFor:'private-compiler interface'!
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  2414
5405
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2415
primitiveNumber
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2416
    "for stx rel >= 5.x only:
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2417
     return the primitive number."
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2418
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2419
%{  /* NOCONTEXT */
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2420
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2421
#ifdef F_PRIMITIVE
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2422
    INT f = __intVal(__INST(flags));
6014
14acbd7c25d4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6006
diff changeset
  2423
    OBJ nr = 0;
5405
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2424
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2425
    if (f & F_PRIMITIVE) {
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2426
	nr = __INST(code_);
5405
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2427
    }
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2428
    RETURN (nr);
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2429
#endif
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2430
%}.
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2431
    self primitiveFailed
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2432
!
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2433
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2434
setPrimitiveNumber:aNumber
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2435
    "for stx rel >= 5.x only:
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2436
     mark the method as having primitive code."
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2437
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2438
%{  /* NOCONTEXT */
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2439
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2440
#ifdef F_PRIMITIVE
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2441
    INT f = __intVal(__INST(flags));
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2442
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2443
    f |= F_PRIMITIVE;
8913
b9498d27a554 64bit; mkSmallInteger
Claus Gittinger <cg@exept.de>
parents: 8896
diff changeset
  2444
    __INST(flags) = __mkSmallInteger(f);
5405
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2445
    __INST(code_) = aNumber;
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2446
    RETURN (self);
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2447
#endif
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2448
%}.
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2449
    self primitiveFailed
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2450
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2451
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2452
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2453
!
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2454
1093
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  2455
setResourceFlag
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  2456
    "mark the method as having a <resource> definition in its
8518
7dc3f9909640 Interchanged the meaning of method privacy -
Stefan Vogel <sv@exept.de>
parents: 8465
diff changeset
  2457
     source. This flag can be used to find resource-flagged methods quicker."
1093
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  2458
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  2459
%{  /* NOCONTEXT */
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  2460
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  2461
#ifdef F_RESOURCE
2868
772c890f907c alpha64
Claus Gittinger <cg@exept.de>
parents: 2826
diff changeset
  2462
    INT f = __intVal(__INST(flags));
1093
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  2463
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  2464
    f |= F_RESOURCE;
8913
b9498d27a554 64bit; mkSmallInteger
Claus Gittinger <cg@exept.de>
parents: 8896
diff changeset
  2465
    __INST(flags) = __mkSmallInteger(f);
1093
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  2466
#endif
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  2467
%}
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  2468
! !
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  2469
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2470
!Method methodsFor:'queries'!
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2471
2702
5d6f23d8ee18 more ST80 queries
Claus Gittinger <cg@exept.de>
parents: 2695
diff changeset
  2472
accessedInstVars
5d6f23d8ee18 more ST80 queries
Claus Gittinger <cg@exept.de>
parents: 2695
diff changeset
  2473
    "return a collection of instVarNames, which are accessed by
5d6f23d8ee18 more ST80 queries
Claus Gittinger <cg@exept.de>
parents: 2695
diff changeset
  2474
     the receiver method"
5d6f23d8ee18 more ST80 queries
Claus Gittinger <cg@exept.de>
parents: 2695
diff changeset
  2475
5d6f23d8ee18 more ST80 queries
Claus Gittinger <cg@exept.de>
parents: 2695
diff changeset
  2476
    |src parser|
5d6f23d8ee18 more ST80 queries
Claus Gittinger <cg@exept.de>
parents: 2695
diff changeset
  2477
5d6f23d8ee18 more ST80 queries
Claus Gittinger <cg@exept.de>
parents: 2695
diff changeset
  2478
    src := self source.
5d6f23d8ee18 more ST80 queries
Claus Gittinger <cg@exept.de>
parents: 2695
diff changeset
  2479
    src notNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2480
	parser := Parser
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2481
			parseMethod:src
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2482
			in:self containingClass
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2483
			ignoreErrors:true
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2484
			ignoreWarnings:true.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2485
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2486
	(parser notNil and:[parser ~~ #Error]) ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2487
	    ^ parser usedInstVars
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2488
	].
2702
5d6f23d8ee18 more ST80 queries
Claus Gittinger <cg@exept.de>
parents: 2695
diff changeset
  2489
    ].
5d6f23d8ee18 more ST80 queries
Claus Gittinger <cg@exept.de>
parents: 2695
diff changeset
  2490
    ^ #() "/ actually: unknown
5d6f23d8ee18 more ST80 queries
Claus Gittinger <cg@exept.de>
parents: 2695
diff changeset
  2491
5d6f23d8ee18 more ST80 queries
Claus Gittinger <cg@exept.de>
parents: 2695
diff changeset
  2492
    "Modified: 19.6.1997 / 17:54:09 / cg"
5d6f23d8ee18 more ST80 queries
Claus Gittinger <cg@exept.de>
parents: 2695
diff changeset
  2493
!
5d6f23d8ee18 more ST80 queries
Claus Gittinger <cg@exept.de>
parents: 2695
diff changeset
  2494
14237
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2495
accessesField:instVarIndex
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2496
    "return true, if the instvar at instVarIndex is accessed by the receiver.
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2497
     Uses parser (for now); could look at bytecode as well here..."
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2498
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2499
    |instVarName|
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2500
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2501
    instVarName := (self mclass allInstVarNames) at:instVarIndex.
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2502
    ^ self accessesInstVar:instVarName
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2503
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2504
    "Created: / 23-07-2012 / 11:13:54 / cg"
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2505
!
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2506
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2507
accessesInstVar:instVarName
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2508
    "return true, if the named instvar is accessed by the receiver.
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2509
     Uses parser (for now); could look at bytecode as well here..."
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2510
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2511
    |usedInstVars|
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2512
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2513
    (self source includesString:instVarName) ifFalse:[^ false].     "/ that's much faster than parsing...
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2514
    usedInstVars := self parse:#'parseMethodSilent:in:' with:self mclass  return:#usedInstVars or:#().
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2515
    ^ usedInstVars includes:instVarName.
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2516
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2517
    "Created: / 23-07-2012 / 11:15:02 / cg"
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2518
!
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2519
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2520
containingClass
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2521
    "return the class I am defined in.
17278
7813956ffab4 class: Method
Claus Gittinger <cg@exept.de>
parents: 17254
diff changeset
  2522
     Notice, that the containingClass query returns nil, if a method is wrapped or no longer valid
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2523
     due to an accept in a browser or debugger.
17278
7813956ffab4 class: Method
Claus Gittinger <cg@exept.de>
parents: 17254
diff changeset
  2524
     However, the mclass slot still contains a reference to the once valid class and can be fetched
7813956ffab4 class: Method
Claus Gittinger <cg@exept.de>
parents: 17254
diff changeset
  2525
     via getMclass.
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2526
     See comment in who."
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2527
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2528
    "based on who, which has been added for ST-80 compatibility"
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2529
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  2530
    |who|
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2531
5704
aeeece3a93ef flush mclass, if no longer valid
Claus Gittinger <cg@exept.de>
parents: 5700
diff changeset
  2532
    mclass notNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2533
	"/ check if this (cached) info is still valid...
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2534
	(mclass containsMethod:self) ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2535
	    ^ mclass
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2536
	].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2537
	^ nil.
5704
aeeece3a93ef flush mclass, if no longer valid
Claus Gittinger <cg@exept.de>
parents: 5700
diff changeset
  2538
    ].
5324
5c9959ce98af make use of mclass
Claus Gittinger <cg@exept.de>
parents: 5322
diff changeset
  2539
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  2540
    who := self who.
17254
053fe5d7fec8 class: Method
Claus Gittinger <cg@exept.de>
parents: 17250
diff changeset
  2541
    who notNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2542
	mclass := who methodClass.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2543
	^ mclass
17254
053fe5d7fec8 class: Method
Claus Gittinger <cg@exept.de>
parents: 17250
diff changeset
  2544
    ].
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2545
    "
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2546
     none found - sorry
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2547
    "
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2548
    ^ nil
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2549
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2550
    "
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2551
     (Object compiledMethodAt:#at:) containingClass
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2552
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2553
     (Object class compiledMethodAt:#version) containingClass
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2554
    "
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2555
!
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2556
10482
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2557
externalLibraryFunction
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2558
    "if this is an externalLibraryFunction call, return the externalLibraryFunction.
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2559
     Returns nil otherwise."
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2560
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2561
    |invokeSelectors newMethod function|
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2562
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2563
    invokeSelectors := ExternalLibraryFunction invokeSelectors.
13463
7c98583d98c8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 13422
diff changeset
  2564
    (self
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2565
        literalsDetect:[:lit | invokeSelectors includes:lit]
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2566
        ifNone:nil) notNil
13189
96fe3d9e3f3a changed: #externalLibraryFunction
Claus Gittinger <cg@exept.de>
parents: 13156
diff changeset
  2567
    ifTrue:[
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2568
        "/ sigh - for stc-compiled code, this does not work:
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2569
        function := self literalsDetect:[:lit | lit isExternalLibraryFunction] ifNone:nil.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2570
        function isNil ifTrue:[
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2571
            "/ parse it and ask the parser
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2572
            newMethod := Compiler compile:self source forClass:self mclass install:false.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2573
            function := newMethod literalsDetect:[:lit | lit isExternalLibraryFunction] ifNone:nil.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2574
        ].
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2575
        ^ function
13189
96fe3d9e3f3a changed: #externalLibraryFunction
Claus Gittinger <cg@exept.de>
parents: 13156
diff changeset
  2576
    ].
96fe3d9e3f3a changed: #externalLibraryFunction
Claus Gittinger <cg@exept.de>
parents: 13156
diff changeset
  2577
    ^ nil
96fe3d9e3f3a changed: #externalLibraryFunction
Claus Gittinger <cg@exept.de>
parents: 13156
diff changeset
  2578
96fe3d9e3f3a changed: #externalLibraryFunction
Claus Gittinger <cg@exept.de>
parents: 13156
diff changeset
  2579
    "
96fe3d9e3f3a changed: #externalLibraryFunction
Claus Gittinger <cg@exept.de>
parents: 13156
diff changeset
  2580
     (IDispatchPointer compiledMethodAt:#'invokeGetTypeInfo:_:_:')
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2581
        externalLibraryFunction
13189
96fe3d9e3f3a changed: #externalLibraryFunction
Claus Gittinger <cg@exept.de>
parents: 13156
diff changeset
  2582
    "
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2583
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2584
    "Modified: / 04-03-2019 / 09:37:01 / Claus Gittinger"
10482
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2585
!
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2586
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2587
hasAnnotation
14253
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  2588
    "Return true iff the method has any annotation"
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2589
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2590
    ^annotations notNil
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2591
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2592
    "Created: / 11-07-2010 / 19:27:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
14253
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  2593
    "Modified (comment): / 26-07-2012 / 15:49:59 / cg"
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2594
!
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2595
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2596
hasAnnotation: key
14253
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  2597
    "Return true iff the method is annotated with the given key"
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2598
17463
9f3633d1b67e class: Method
Claus Gittinger <cg@exept.de>
parents: 17452
diff changeset
  2599
    annotations isNil ifTrue:[^ false].
9f3633d1b67e class: Method
Claus Gittinger <cg@exept.de>
parents: 17452
diff changeset
  2600
    ^ (self annotationIndexOf: key) notNil
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2601
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2602
    "Created: / 11-07-2010 / 19:28:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
14253
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  2603
    "Modified (comment): / 26-07-2012 / 15:49:54 / cg"
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2604
!
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2605
12913
142c9566a768 added: #hasAnyResource:
Claus Gittinger <cg@exept.de>
parents: 12900
diff changeset
  2606
hasAnyResource:aCollectionOfSymbols
142c9566a768 added: #hasAnyResource:
Claus Gittinger <cg@exept.de>
parents: 12900
diff changeset
  2607
    "return true if the method has a <resource> definition for any symbol in aCollectionOfSymbols"
142c9566a768 added: #hasAnyResource:
Claus Gittinger <cg@exept.de>
parents: 12900
diff changeset
  2608
142c9566a768 added: #hasAnyResource:
Claus Gittinger <cg@exept.de>
parents: 12900
diff changeset
  2609
    ^ self hasResource and:[ self resources keys includesAny:aCollectionOfSymbols ]
142c9566a768 added: #hasAnyResource:
Claus Gittinger <cg@exept.de>
parents: 12900
diff changeset
  2610
142c9566a768 added: #hasAnyResource:
Claus Gittinger <cg@exept.de>
parents: 12900
diff changeset
  2611
    "
142c9566a768 added: #hasAnyResource:
Claus Gittinger <cg@exept.de>
parents: 12900
diff changeset
  2612
     Method allInstancesDo:[:m |
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2613
	(m hasAnyResource:#(image canvas)) ifTrue:[self halt]
12913
142c9566a768 added: #hasAnyResource:
Claus Gittinger <cg@exept.de>
parents: 12900
diff changeset
  2614
     ].
142c9566a768 added: #hasAnyResource:
Claus Gittinger <cg@exept.de>
parents: 12900
diff changeset
  2615
    "
142c9566a768 added: #hasAnyResource:
Claus Gittinger <cg@exept.de>
parents: 12900
diff changeset
  2616
!
142c9566a768 added: #hasAnyResource:
Claus Gittinger <cg@exept.de>
parents: 12900
diff changeset
  2617
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2618
hasPrimitiveCode
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2619
    "true if I have primitive code."
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2620
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2621
%{  /* NOCONTEXT */
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2622
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2623
#ifdef F_PRIMITIVE
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2624
    INT f = __intVal(__INST(flags));
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2625
    OBJ nr = 0;
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2626
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2627
    if (f & F_PRIMITIVE) {
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2628
        RETURN(true);
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2629
    }
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2630
    RETURN (false);
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2631
#endif
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2632
%}.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2633
    self primitiveFailed
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2634
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2635
    "Modified: / 22-01-1997 / 00:03:45 / cg"
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2636
    "Modified: / 14-03-2019 / 21:11:38 / Claus Gittinger"
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2637
!
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2638
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2639
hasPrimitiveCodeInSource
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2640
    "return true, if the method contains primitive code; false if not.
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2641
     Uses Parser to parse methods source and get the information."
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2642
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2643
    |src|
159
514c749165c3 *** empty log message ***
claus
parents: 142
diff changeset
  2644
2218
93c4cb83372a comment
Claus Gittinger <cg@exept.de>
parents: 2201
diff changeset
  2645
    "/ first a trivial reject, if the source does not
5534
bf00d9a2dfd5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5530
diff changeset
  2646
    "/ contain a '% {' sequence
2218
93c4cb83372a comment
Claus Gittinger <cg@exept.de>
parents: 2201
diff changeset
  2647
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2648
    src := self source.
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2649
    src notNil ifTrue:[
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2650
        (src includesString:(String with:$% with:${) "<- no constant here - to avoid trouble with stupid scanners" ) ifFalse:[
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2651
            "/ cannot contain primitive code.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2652
            ^ false
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2653
        ]
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2654
    ].
2218
93c4cb83372a comment
Claus Gittinger <cg@exept.de>
parents: 2201
diff changeset
  2655
93c4cb83372a comment
Claus Gittinger <cg@exept.de>
parents: 2201
diff changeset
  2656
    "/ ok; it may or may not ...
93c4cb83372a comment
Claus Gittinger <cg@exept.de>
parents: 2201
diff changeset
  2657
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2658
    ^ self parse:#'parseMethodSilent:' return:#hasPrimitiveCode or:false
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2659
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2660
    "
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2661
     (Method compiledMethodAt:#hasPrimitiveCode) hasPrimitiveCode
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2662
     (Object compiledMethodAt:#at:) hasPrimitiveCode
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2663
     (Object compiledMethodAt:#basicAt:) hasPrimitiveCode
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2664
    "
159
514c749165c3 *** empty log message ***
claus
parents: 142
diff changeset
  2665
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2666
    "Created: / 14-03-2019 / 21:11:32 / Claus Gittinger"
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2667
!
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2668
1093
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  2669
hasResource
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  2670
    "return true if the method had a <resource> definition in its
8518
7dc3f9909640 Interchanged the meaning of method privacy -
Stefan Vogel <sv@exept.de>
parents: 8465
diff changeset
  2671
     source. This flag can be used to find resource-flagged methods quicker."
1093
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  2672
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  2673
%{  /* NOCONTEXT */
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  2674
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  2675
#ifdef F_RESOURCE
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1103
diff changeset
  2676
    RETURN (((INT)__INST(flags) & __MASKSMALLINT(F_RESOURCE)) ? true : false);
1093
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  2677
#endif
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  2678
%}.
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  2679
    ^ false
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  2680
!
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  2681
10482
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2682
indexOfOLECall
14357
08d5b662477a comment/format in: #indexOfOLECall
Claus Gittinger <cg@exept.de>
parents: 14274
diff changeset
  2683
    "return the vtable inedx, if the method contains an ole call; nil if not.
10482
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2684
     Uses Parser to parse methods source and get the information."
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2685
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2686
    |funcOrNil|
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2687
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2688
    funcOrNil := self externalLibraryFunction.
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2689
    (funcOrNil isNil or:[funcOrNil isCallTypeOLE not]) ifTrue:[^ nil].
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2690
    ^ funcOrNil vtableIndex
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2691
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2692
    "
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2693
     (Method compiledMethodAt:#hasPrimitiveCode) isOLECall
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2694
     (Method compiledMethodAt:#hasPrimitiveCode) indexOfOLECall
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2695
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2696
     (Win32OperatingSystem class compiledMethodAt:#primClosePrinter:) isOLECall
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2697
     (Win32OperatingSystem class compiledMethodAt:#primClosePrinter:) indexOfOLECall
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2698
     (Win32OperatingSystem class compiledMethodAt:#primClosePrinter:) isExternalLibraryFunctionCall
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2699
     (Win32OperatingSystem class compiledMethodAt:#primClosePrinter:) externalLibraryFunctionCall
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2700
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2701
     (IUnknownPointer compiledMethodAt:#invokeAddRef) isExternalLibraryFunctionCall
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2702
     (IUnknownPointer compiledMethodAt:#invokeAddRef) externalLibraryFunction
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2703
     (IUnknownPointer compiledMethodAt:#invokeAddRef) isOLECall
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2704
     (IUnknownPointer compiledMethodAt:#invokeAddRef) indexOfOLECall
10482
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2705
    "
14357
08d5b662477a comment/format in: #indexOfOLECall
Claus Gittinger <cg@exept.de>
parents: 14274
diff changeset
  2706
08d5b662477a comment/format in: #indexOfOLECall
Claus Gittinger <cg@exept.de>
parents: 14274
diff changeset
  2707
    "Modified (comment): / 25-09-2012 / 12:01:32 / cg"
10482
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2708
!
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2709
11986
3f2738b9e2c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11985
diff changeset
  2710
isDocumentationMethod
11987
05e30e073541 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11986
diff changeset
  2711
    "Return true, if this is a documentation only (only a comment) method
05e30e073541 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11986
diff changeset
  2712
     (implies being a metaclass method)"
11986
3f2738b9e2c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11985
diff changeset
  2713
12275
8ca2aabefa4e changed: #isDocumentationMethod
Claus Gittinger <cg@exept.de>
parents: 12216
diff changeset
  2714
    self mclass isMeta ifFalse:[^ false].
12283
54b6f67bcc26 changed: #isDocumentationMethod
Claus Gittinger <cg@exept.de>
parents: 12275
diff changeset
  2715
    self isVersionMethod ifTrue:[^ false].
12159
1768c0019100 compiler interface
fm
parents: 12017
diff changeset
  2716
    ^ self parse:#'parseMethodSilent:' return:#isEmptyMethod or:false.
11986
3f2738b9e2c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11985
diff changeset
  2717
!
3f2738b9e2c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11985
diff changeset
  2718
13639
01a74c51c29a added: #isExtension
Claus Gittinger <cg@exept.de>
parents: 13638
diff changeset
  2719
isExtension
01a74c51c29a added: #isExtension
Claus Gittinger <cg@exept.de>
parents: 13638
diff changeset
  2720
    "return true, if this method is an extension (i.e. package ~= classes' package)"
01a74c51c29a added: #isExtension
Claus Gittinger <cg@exept.de>
parents: 13638
diff changeset
  2721
01a74c51c29a added: #isExtension
Claus Gittinger <cg@exept.de>
parents: 13638
diff changeset
  2722
    ^ package ~= self mclass package
01a74c51c29a added: #isExtension
Claus Gittinger <cg@exept.de>
parents: 13638
diff changeset
  2723
01a74c51c29a added: #isExtension
Claus Gittinger <cg@exept.de>
parents: 13638
diff changeset
  2724
    "Created: / 07-09-2011 / 09:29:13 / cg"
01a74c51c29a added: #isExtension
Claus Gittinger <cg@exept.de>
parents: 13638
diff changeset
  2725
!
01a74c51c29a added: #isExtension
Claus Gittinger <cg@exept.de>
parents: 13638
diff changeset
  2726
10482
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2727
isExternalLibraryFunctionCall
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2728
    "Return true, if this is an externalLibraryFunction call."
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2729
12569
b97efbbc1ac7 comment/format in: #isExternalLibraryFunctionCall
Claus Gittinger <cg@exept.de>
parents: 12546
diff changeset
  2730
    "/ sigh - for now, stc-compiled code does not have it in the literal array
b97efbbc1ac7 comment/format in: #isExternalLibraryFunctionCall
Claus Gittinger <cg@exept.de>
parents: 12546
diff changeset
  2731
    "/ to be fixed...
b97efbbc1ac7 comment/format in: #isExternalLibraryFunctionCall
Claus Gittinger <cg@exept.de>
parents: 12546
diff changeset
  2732
10482
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2733
    ^ self externalLibraryFunction notNil
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2734
!
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2735
20683
728746379f4b #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 20547
diff changeset
  2736
isForCompatibility
728746379f4b #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 20547
diff changeset
  2737
    "returns true, if this method only used for compatibility
728746379f4b #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 20547
diff changeset
  2738
     and should use only when porting foreign code but not otherwise"
728746379f4b #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 20547
diff changeset
  2739
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2740
    ^ (self package == #'stx:libcompat') or:[self isTaggedAs:#compatibility]
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2741
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2742
    "Modified: / 15-02-2017 / 17:16:10 / cg"
20683
728746379f4b #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 20547
diff changeset
  2743
!
728746379f4b #QUALITY by stefan
Stefan Vogel <sv@exept.de>
parents: 20547
diff changeset
  2744
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2745
isInvalid
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2746
    "return true, if this method is not executable due to
1194
628abcb5fbb6 moved some protocol from to upper levels
Claus Gittinger <cg@exept.de>
parents: 1190
diff changeset
  2747
     a (re)-compilation error. Since invalidation is by patching the
17452
b97d151f8a34 class: Method
Claus Gittinger <cg@exept.de>
parents: 17402
diff changeset
  2748
     method's code-pointer to a trap function, check for that here.
1194
628abcb5fbb6 moved some protocol from to upper levels
Claus Gittinger <cg@exept.de>
parents: 1190
diff changeset
  2749
     (see comment in Method>>invalidCodeObject)."
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2750
2558
07e7d6fef46d removed unused var
Claus Gittinger <cg@exept.de>
parents: 2541
diff changeset
  2751
    |m myCode|
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2752
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2753
    myCode := self code.
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2754
18438
0655839a70f8 class: Method
Stefan Vogel <sv@exept.de>
parents: 18431
diff changeset
  2755
    m := self trapMethodForNumArgs:(self argumentCount).
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2756
    (m notNil and:[self ~~ m]) ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2757
	(myCode notNil and:[myCode = m code]) ifTrue:[^ true].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2758
	(byteCode notNil and:[byteCode == m byteCode]) ifTrue:[^ true].
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2759
    ].
159
514c749165c3 *** empty log message ***
claus
parents: 142
diff changeset
  2760
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2761
    m := Method compiledMethodAt:#uncompiledCodeObject.
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2762
    (m notNil and:[self ~~ m]) ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2763
	(myCode notNil and:[myCode = m code]) ifTrue:[^ true].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2764
	(byteCode notNil and:[byteCode == m byteCode]) ifTrue:[^ true].
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2765
    ].
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2766
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2767
    m := Method compiledMethodAt:#unloadedCodeObject.
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2768
    (m notNil and:[self ~~ m]) ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2769
	(myCode notNil and:[myCode = m code]) ifTrue:[^ true].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2770
	(byteCode notNil and:[byteCode == m byteCode]) ifTrue:[^ true].
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2771
    ].
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2772
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2773
    ^ false
1194
628abcb5fbb6 moved some protocol from to upper levels
Claus Gittinger <cg@exept.de>
parents: 1190
diff changeset
  2774
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2775
    "Modified: 4.11.1996 / 23:34:24 / cg"
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2776
!
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2777
10482
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2778
isOLECall
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2779
    "return true, if the method is an ole call; false if not."
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2780
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2781
    |funcOrNil|
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2782
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2783
    funcOrNil := self externalLibraryFunction.
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2784
    ^ funcOrNil notNil and:[funcOrNil isCallTypeOLE]
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2785
!
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2786
5894
ed6193fa6040 Define #isObsolete and fix various comments
Stefan Vogel <sv@exept.de>
parents: 5818
diff changeset
  2787
isObsolete
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2788
    "returns true, if this method is obsolete and should not be used any longer.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2789
     Obsolete methods are marked by a:
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2790
        <resource: #obsolete> 
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2791
     attribute.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2792
    "
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2793
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2794
    ^ self isTaggedAs:#obsolete
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2795
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2796
    "
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2797
     SystemBrowser browseMethods:(Method allInstances select:#isObsolete)  
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2798
    "
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2799
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2800
    "Modified: / 15-02-2017 / 17:15:25 / cg"
5894
ed6193fa6040 Define #isObsolete and fix various comments
Stefan Vogel <sv@exept.de>
parents: 5818
diff changeset
  2801
!
ed6193fa6040 Define #isObsolete and fix various comments
Stefan Vogel <sv@exept.de>
parents: 5818
diff changeset
  2802
15079
8f16af69c964 class: Method
Claus Gittinger <cg@exept.de>
parents: 15045
diff changeset
  2803
isShadowingExtension
8f16af69c964 class: Method
Claus Gittinger <cg@exept.de>
parents: 15045
diff changeset
  2804
    "return true, if this method is an extension (i.e. package ~= classes' package)
8f16af69c964 class: Method
Claus Gittinger <cg@exept.de>
parents: 15045
diff changeset
  2805
     which shadows an existing method from another package (i.e. a package conflict)"
8f16af69c964 class: Method
Claus Gittinger <cg@exept.de>
parents: 15045
diff changeset
  2806
16877
d4a452edacb5 Added Method>>shadowedMethod returning shadowed method or nil.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16847
diff changeset
  2807
    ^ self shadowedMethod notNil.
d4a452edacb5 Added Method>>shadowedMethod returning shadowed method or nil.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16847
diff changeset
  2808
d4a452edacb5 Added Method>>shadowedMethod returning shadowed method or nil.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16847
diff changeset
  2809
    "Modified: / 03-10-2014 / 15:16:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
15079
8f16af69c964 class: Method
Claus Gittinger <cg@exept.de>
parents: 15045
diff changeset
  2810
!
8f16af69c964 class: Method
Claus Gittinger <cg@exept.de>
parents: 15045
diff changeset
  2811
22909
2669c1bd20a5 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21246
diff changeset
  2812
isSubclassResponsibility
2669c1bd20a5 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21246
diff changeset
  2813
    ^ self 
2669c1bd20a5 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21246
diff changeset
  2814
        sendsAnySelector:#( 
2669c1bd20a5 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21246
diff changeset
  2815
            #subclassResponsibility #subclassResponsibility: 
2669c1bd20a5 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21246
diff changeset
  2816
            #implementedBySubclass  "/ ST/V code uses this
2669c1bd20a5 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21246
diff changeset
  2817
        ).
2669c1bd20a5 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21246
diff changeset
  2818
2669c1bd20a5 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21246
diff changeset
  2819
    "Created: / 16-07-2017 / 11:25:54 / cg"
2669c1bd20a5 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21246
diff changeset
  2820
!
2669c1bd20a5 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21246
diff changeset
  2821
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2822
isSynthetic
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2823
    "a synthetic method does not really exist - it is only shown in a browser's list"
13638
c5b12d3594ba changed: #rationale
Claus Gittinger <cg@exept.de>
parents: 13634
diff changeset
  2824
c5b12d3594ba changed: #rationale
Claus Gittinger <cg@exept.de>
parents: 13634
diff changeset
  2825
    ^ false
c5b12d3594ba changed: #rationale
Claus Gittinger <cg@exept.de>
parents: 13634
diff changeset
  2826
c5b12d3594ba changed: #rationale
Claus Gittinger <cg@exept.de>
parents: 13634
diff changeset
  2827
    "Modified (format): / 07-09-2011 / 09:00:56 / cg"
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2828
    "Modified (comment): / 01-02-2017 / 16:58:39 / stefan"
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2829
!
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2830
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2831
isTaggedAs:tag
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2832
    "returns true, if this method has a <resource: tag> annotation"
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2833
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2834
    |res|
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2835
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2836
    ^ (res := self resources) notNil and:[res includesKey:tag]
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2837
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2838
    "Created: / 15-02-2017 / 17:15:15 / cg"
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2839
!
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2840
11985
5fb68bfa4648 +isVersionMethod
Claus Gittinger <cg@exept.de>
parents: 11950
diff changeset
  2841
isVersionMethod
12017
908685b92c3e comment/format in: #isVersionMethod
Claus Gittinger <cg@exept.de>
parents: 12016
diff changeset
  2842
    "Return true, if this is a CVS, SVN or other version method.
908685b92c3e comment/format in: #isVersionMethod
Claus Gittinger <cg@exept.de>
parents: 12016
diff changeset
  2843
     Stupid: need to know all of them here; better add a pragma or
908685b92c3e comment/format in: #isVersionMethod
Claus Gittinger <cg@exept.de>
parents: 12016
diff changeset
  2844
     method attribute for that..."
11985
5fb68bfa4648 +isVersionMethod
Claus Gittinger <cg@exept.de>
parents: 11950
diff changeset
  2845
12016
7918f05b2046 changed: #isVersionMethod
Claus Gittinger <cg@exept.de>
parents: 11987
diff changeset
  2846
    ^ self mclass isMeta
12165
ca71a1aba926 changed: #isVersionMethod
fm
parents: 12159
diff changeset
  2847
    and:[(AbstractSourceCodeManager isVersionMethodSelector:self selector)]
11985
5fb68bfa4648 +isVersionMethod
Claus Gittinger <cg@exept.de>
parents: 11950
diff changeset
  2848
5fb68bfa4648 +isVersionMethod
Claus Gittinger <cg@exept.de>
parents: 11950
diff changeset
  2849
    "
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2850
     (Method class compiledMethodAt:#version) isVersionMethod
11985
5fb68bfa4648 +isVersionMethod
Claus Gittinger <cg@exept.de>
parents: 11950
diff changeset
  2851
     (Method class compiledMethodAt:#documentation) isVersionMethod
5fb68bfa4648 +isVersionMethod
Claus Gittinger <cg@exept.de>
parents: 11950
diff changeset
  2852
    "
5fb68bfa4648 +isVersionMethod
Claus Gittinger <cg@exept.de>
parents: 11950
diff changeset
  2853
!
5fb68bfa4648 +isVersionMethod
Claus Gittinger <cg@exept.de>
parents: 11950
diff changeset
  2854
11848
ca89d472f9cf *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11778
diff changeset
  2855
isVisualWorksTypedef
ca89d472f9cf *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11778
diff changeset
  2856
    "Return true, if this is a type-returning method (a visualWorks typedef)"
ca89d472f9cf *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11778
diff changeset
  2857
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2858
    ^ (self literals size ~~ 0)
11848
ca89d472f9cf *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11778
diff changeset
  2859
    and:[ (self literalAt:1) isKindOf:CType ]
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2860
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2861
    "Modified: / 01-03-2019 / 15:59:37 / Claus Gittinger"
11848
ca89d472f9cf *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11778
diff changeset
  2862
!
ca89d472f9cf *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11778
diff changeset
  2863
2695
79229a9ab2da added #mclass for ST80 compatibility
Claus Gittinger <cg@exept.de>
parents: 2694
diff changeset
  2864
mclass
17278
7813956ffab4 class: Method
Claus Gittinger <cg@exept.de>
parents: 17254
diff changeset
  2865
    "return the class in which the receiver is currently contained in.
7813956ffab4 class: Method
Claus Gittinger <cg@exept.de>
parents: 17254
diff changeset
  2866
     Notice, that the mclass query returns nil, if a method is wrapped or no longer valid
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2867
     due to an accept in a browser or debugger.
17278
7813956ffab4 class: Method
Claus Gittinger <cg@exept.de>
parents: 17254
diff changeset
  2868
     However, the mclass slot still contains a reference to the once valid class and can be fetched
7813956ffab4 class: Method
Claus Gittinger <cg@exept.de>
parents: 17254
diff changeset
  2869
     via getMclass.
2695
79229a9ab2da added #mclass for ST80 compatibility
Claus Gittinger <cg@exept.de>
parents: 2694
diff changeset
  2870
     Same as #containingClass, for ST80 compatibility."
79229a9ab2da added #mclass for ST80 compatibility
Claus Gittinger <cg@exept.de>
parents: 2694
diff changeset
  2871
79229a9ab2da added #mclass for ST80 compatibility
Claus Gittinger <cg@exept.de>
parents: 2694
diff changeset
  2872
    ^ self containingClass
79229a9ab2da added #mclass for ST80 compatibility
Claus Gittinger <cg@exept.de>
parents: 2694
diff changeset
  2873
79229a9ab2da added #mclass for ST80 compatibility
Claus Gittinger <cg@exept.de>
parents: 2694
diff changeset
  2874
    "Created: 19.6.1997 / 16:26:13 / cg"
79229a9ab2da added #mclass for ST80 compatibility
Claus Gittinger <cg@exept.de>
parents: 2694
diff changeset
  2875
!
79229a9ab2da added #mclass for ST80 compatibility
Claus Gittinger <cg@exept.de>
parents: 2694
diff changeset
  2876
5696
958a0643496d compatibility
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
  2877
messages
958a0643496d compatibility
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
  2878
    "return a collection of message-selectors, sent by this method."
958a0643496d compatibility
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
  2879
958a0643496d compatibility
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
  2880
    ^ self messagesSent
958a0643496d compatibility
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
  2881
!
958a0643496d compatibility
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
  2882
5584
b175797a8c4d #messagesDo: (VW compatibility)
Claus Gittinger <cg@exept.de>
parents: 5582
diff changeset
  2883
messagesDo:aBlock
b175797a8c4d #messagesDo: (VW compatibility)
Claus Gittinger <cg@exept.de>
parents: 5582
diff changeset
  2884
    "evaluate aBlock for each message-selector sent by this method.
b175797a8c4d #messagesDo: (VW compatibility)
Claus Gittinger <cg@exept.de>
parents: 5582
diff changeset
  2885
     Uses Parser to parse methods source and extract the names."
b175797a8c4d #messagesDo: (VW compatibility)
Claus Gittinger <cg@exept.de>
parents: 5582
diff changeset
  2886
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2887
    self messagesSent do:aBlock
5584
b175797a8c4d #messagesDo: (VW compatibility)
Claus Gittinger <cg@exept.de>
parents: 5582
diff changeset
  2888
!
b175797a8c4d #messagesDo: (VW compatibility)
Claus Gittinger <cg@exept.de>
parents: 5582
diff changeset
  2889
14402
Claus Gittinger <cg@exept.de>
parents: 14375
diff changeset
  2890
messagesPossiblySent
Claus Gittinger <cg@exept.de>
parents: 14375
diff changeset
  2891
    "return a collection with the message selectors possibly sent to by the receiver.
Claus Gittinger <cg@exept.de>
parents: 14375
diff changeset
  2892
     Uses Parser to parse methods source and extract the names.
Claus Gittinger <cg@exept.de>
parents: 14375
diff changeset
  2893
     The returned collection includes perform-like and possibly performed messages"
Claus Gittinger <cg@exept.de>
parents: 14375
diff changeset
  2894
Claus Gittinger <cg@exept.de>
parents: 14375
diff changeset
  2895
    ^ self parse:#'parseMethodSilent:in:' with:self mclass return:#messagesPossiblySent or:#()
Claus Gittinger <cg@exept.de>
parents: 14375
diff changeset
  2896
Claus Gittinger <cg@exept.de>
parents: 14375
diff changeset
  2897
    "
Claus Gittinger <cg@exept.de>
parents: 14375
diff changeset
  2898
     (Method compiledMethodAt:#printOn:) messagesSent
Claus Gittinger <cg@exept.de>
parents: 14375
diff changeset
  2899
     (Point compiledMethodAt:#x:) messagesSent
17173
e8fd5eb30331 class: Method
Claus Gittinger <cg@exept.de>
parents: 17159
diff changeset
  2900
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2901
     (WindowEvent class compiledMethodAt:#focusInView:) messagesSent
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2902
     (WindowEvent class compiledMethodAt:#focusInView:) messagesPossiblySent
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2903
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2904
     (Method compiledMethodAt:#messagesPossiblySent) messagesSent
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2905
     (Method compiledMethodAt:#messagesPossiblySent) messagesPossiblySent
14402
Claus Gittinger <cg@exept.de>
parents: 14375
diff changeset
  2906
    "
Claus Gittinger <cg@exept.de>
parents: 14375
diff changeset
  2907
!
Claus Gittinger <cg@exept.de>
parents: 14375
diff changeset
  2908
5582
737d121ae7de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5564
diff changeset
  2909
messagesSent
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2910
    "return a set-like collection with the message selectors sent by the receiver.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2911
     Uses Parser to parse method's source and extract the names.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2912
     The returned collection includes all used message selectors 
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2913
     (i.e. including super-send messages)"
5582
737d121ae7de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5564
diff changeset
  2914
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2915
    ^ self parse:#'parseMethodSilent:in:' with:self mclass return:#messagesSent or:#()
5582
737d121ae7de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5564
diff changeset
  2916
737d121ae7de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5564
diff changeset
  2917
    "
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2918
     (Method compiledMethodAt:#printOn:) messagesSent
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2919
     (Point compiledMethodAt:#x:) messagesSent
5582
737d121ae7de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5564
diff changeset
  2920
    "
737d121ae7de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5564
diff changeset
  2921
!
737d121ae7de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5564
diff changeset
  2922
737d121ae7de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5564
diff changeset
  2923
messagesSentToSelf
737d121ae7de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5564
diff changeset
  2924
    "return a collection with the message selectors sent to self by the receiver.
737d121ae7de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5564
diff changeset
  2925
     Uses Parser to parse methods source and extract the names."
737d121ae7de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5564
diff changeset
  2926
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2927
    ^ self parse:#'parseMethodSilent:in:' with:self mclass return:#messagesSentToSelf or:#()
5652
f832f4c5cfdd messagesSentTo* fixed
Claus Gittinger <cg@exept.de>
parents: 5644
diff changeset
  2928
5582
737d121ae7de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5564
diff changeset
  2929
!
737d121ae7de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5564
diff changeset
  2930
737d121ae7de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5564
diff changeset
  2931
messagesSentToSuper
737d121ae7de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5564
diff changeset
  2932
    "return a collection with the message selectors sent to super by the receiver.
737d121ae7de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5564
diff changeset
  2933
     Uses Parser to parse methods source and extract the names."
737d121ae7de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5564
diff changeset
  2934
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2935
    ^ self parse:#'parseMethodSilent:in:' with:self mclass return:#messagesSentToSuper or:#()
5652
f832f4c5cfdd messagesSentTo* fixed
Claus Gittinger <cg@exept.de>
parents: 5644
diff changeset
  2936
5582
737d121ae7de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5564
diff changeset
  2937
!
737d121ae7de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5564
diff changeset
  2938
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2939
methodArgAndVarNames
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2940
    "return a collection with the method's argument and variable names.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2941
     Uses Parser to parse the method's source and extract the names.
15787
7ea8bff49835 class: Method
Claus Gittinger <cg@exept.de>
parents: 15768
diff changeset
  2942
     Returns an empty collection if the source is not available, or some other
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2943
     syntax/parse error occurred.
15787
7ea8bff49835 class: Method
Claus Gittinger <cg@exept.de>
parents: 15768
diff changeset
  2944
     For methods with no args and no vars, an empty collection is returned."
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2945
8427
bba41f189196 parserClass stuff
ca
parents: 8419
diff changeset
  2946
    |parserClass parser sourceString argNames varNames|
bba41f189196 parserClass stuff
ca
parents: 8419
diff changeset
  2947
bba41f189196 parserClass stuff
ca
parents: 8419
diff changeset
  2948
    parserClass := self parserClass.
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2949
    sourceString := self source.
8427
bba41f189196 parserClass stuff
ca
parents: 8419
diff changeset
  2950
    (parserClass notNil and:[sourceString notNil]) ifTrue:[
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2951
        parser := parserClass parseMethodArgAndVarSpecificationSilent:sourceString.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2952
        (parser isNil or:[parser == #Error]) ifTrue:[^ #()].
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2953
        argNames := parser methodArgs.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2954
        varNames := parser methodVars.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2955
        argNames isNil ifTrue:[^ varNames ? #()].
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2956
        varNames isNil ifTrue:[^ argNames ? #()].
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2957
        ^ (argNames , varNames)
159
514c749165c3 *** empty log message ***
claus
parents: 142
diff changeset
  2958
    ].
15787
7ea8bff49835 class: Method
Claus Gittinger <cg@exept.de>
parents: 15768
diff changeset
  2959
    ^ #()
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2960
159
514c749165c3 *** empty log message ***
claus
parents: 142
diff changeset
  2961
    "
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2962
     (Method compiledMethodAt:#printOn:) methodArgAndVarNames
159
514c749165c3 *** empty log message ***
claus
parents: 142
diff changeset
  2963
    "
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2964
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2965
    "Modified (comment): / 21-11-2017 / 13:04:33 / cg"
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2966
!
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2967
15649
4484fd85cb9e class: Method
Stefan Vogel <sv@exept.de>
parents: 15614
diff changeset
  2968
methodArgAndVarNamesInContext: context
15727
d0ec35ce96fc class: Method
Claus Gittinger <cg@exept.de>
parents: 15649
diff changeset
  2969
    "return a collection with the method's argument and variable names.
15649
4484fd85cb9e class: Method
Stefan Vogel <sv@exept.de>
parents: 15614
diff changeset
  2970
     Uses Parser to parse methods source and extract the names.
4484fd85cb9e class: Method
Stefan Vogel <sv@exept.de>
parents: 15614
diff changeset
  2971
     Returns nil if the source is not available, or some other
4484fd85cb9e class: Method
Stefan Vogel <sv@exept.de>
parents: 15614
diff changeset
  2972
     syntax/parse error occurred. For methods with no args and no vars,
4484fd85cb9e class: Method
Stefan Vogel <sv@exept.de>
parents: 15614
diff changeset
  2973
     an empty collection is returned."
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2974
15649
4484fd85cb9e class: Method
Stefan Vogel <sv@exept.de>
parents: 15614
diff changeset
  2975
     ^self methodArgAndVarNames
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2976
15649
4484fd85cb9e class: Method
Stefan Vogel <sv@exept.de>
parents: 15614
diff changeset
  2977
     "Created: / 18-12-2012 / 18:17:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
4484fd85cb9e class: Method
Stefan Vogel <sv@exept.de>
parents: 15614
diff changeset
  2978
!
4484fd85cb9e class: Method
Stefan Vogel <sv@exept.de>
parents: 15614
diff changeset
  2979
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2980
methodArgAndVarNamesInContextForInspector:context
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2981
    "return a collection with the method's argument and variable names.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2982
     Uses Parser to parse methods source and extract the names.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2983
     Returns nil if the source is not available, or some other
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2984
     syntax/parse error occurred. For methods with no args and no vars,
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2985
     an empty collection is returned."
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2986
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2987
     ^self methodArgAndVarNamesInContext: context
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2988
!
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2989
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2990
methodArgNames
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2991
    "return a collection with the method's argument names.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2992
     Uses Parser to parse the method's source and extract the names."
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2993
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  2994
    ^ self parse:#parseMethodSpecificationSilent: return:#methodArgs or:nil
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2995
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2996
    "
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2997
     (Method compiledMethodAt:#printOn:) methodArgNames
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2998
    "
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2999
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3000
    "Modified: / 31-10-1995 / 14:36:46 / cg"
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3001
    "Modified (comment): / 21-11-2017 / 13:04:44 / cg"
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3002
    "Modified (format): / 12-04-2018 / 08:41:23 / stefan"
872
af04035b443d binary class storage support
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  3003
!
af04035b443d binary class storage support
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  3004
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3005
methodComment
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3006
    "return the method's first comment, nil if there is none.
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3007
     This is a somewhat stupid implementation."
872
af04035b443d binary class storage support
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  3008
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3009
    |text line nQuote index qIndex qIndex2 comment|
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3010
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3011
    text := self source asCollectionOfLines.
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3012
    (text size < 2) ifTrue:[^nil].
872
af04035b443d binary class storage support
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  3013
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3014
    line := (text at:2).
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3015
    nQuote := line occurrencesOf:(Character doubleQuote).
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3016
    (nQuote == 2) ifTrue:[
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3017
        qIndex := line indexOf:(Character doubleQuote).
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3018
        qIndex2 := line indexOf:(Character doubleQuote) startingAt:(qIndex + 1).
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3019
        ^ line copyFrom:(qIndex + 1) to:(qIndex2 - 1)
872
af04035b443d binary class storage support
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  3020
    ].
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3021
    (nQuote == 1) ifTrue:[
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3022
        qIndex := line indexOf:(Character doubleQuote).
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3023
        comment := line copyFrom:(qIndex + 1).
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3024
        (line indexOf:$/ startingAt:qIndex) == (qIndex+1) ifTrue:[
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3025
            "/ an EOL comment
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3026
            ^ (comment copyFrom:2) withoutSeparators
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3027
        ].
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3028
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3029
        "/ not an EOL comment
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3030
        index := 3.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3031
        line := text at:index.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3032
        nQuote := line occurrencesOf:(Character doubleQuote).
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3033
        [nQuote ~~ 1] whileTrue:[
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3034
            comment := comment , Character cr asString , line withoutSpaces.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3035
            index := index + 1.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3036
            line := text at:index.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3037
            nQuote := line occurrencesOf:(Character doubleQuote)
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3038
        ].
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3039
        qIndex := line indexOf:(Character doubleQuote).
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3040
        ^ comment , Character cr asString , (line copyTo:(qIndex - 1)) withoutSpaces
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3041
    ].
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3042
    ^ nil
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3043
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3044
    "
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3045
     (Method compiledMethodAt:#methodComment) methodComment
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3046
    "
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3047
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3048
    "Modified (comment): / 21-11-2017 / 13:04:50 / cg"
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3049
!
872
af04035b443d binary class storage support
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  3050
9364
beef5f0aa8bb New: #methodDefinitionTemplate
Stefan Vogel <sv@exept.de>
parents: 9288
diff changeset
  3051
methodDefinitionTemplate
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3052
    "return the string that defines the method and the arguments;
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3053
     i.e. the methodSpec in the source.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3054
     If the source is available, correct argument names will be presented;
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3055
     otherwise, synthetic names are generated"
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3056
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3057
    ^ self methodDefinitionTemplateForSelector:self selector
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3058
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3059
    "
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3060
      (self compiledMethodAt:#printOn:) methodDefinitionTemplate
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3061
      (self compiledMethodAt:#printOn:) methodDefinitionTemplateForSelector:'newSel:'
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3062
    "
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3063
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3064
    "Modified (comment): / 18-07-2019 / 07:50:37 / Claus Gittinger"
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3065
!
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3066
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3067
methodDefinitionTemplateForSelector:aSelector
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3068
    "return the string that would define the method and the arguments,
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3069
     iff the selected was aSelector; i.e. the methodSpec in the source.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3070
     If the source is available, correct argument names will be presented;
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3071
     otherwise, synthetic names are generated"
9364
beef5f0aa8bb New: #methodDefinitionTemplate
Stefan Vogel <sv@exept.de>
parents: 9288
diff changeset
  3072
16261
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
  3073
    ^ self class
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3074
        methodDefinitionTemplateForSelector:aSelector
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3075
        andArgumentNames:self methodArgNames
9364
beef5f0aa8bb New: #methodDefinitionTemplate
Stefan Vogel <sv@exept.de>
parents: 9288
diff changeset
  3076
beef5f0aa8bb New: #methodDefinitionTemplate
Stefan Vogel <sv@exept.de>
parents: 9288
diff changeset
  3077
    "
beef5f0aa8bb New: #methodDefinitionTemplate
Stefan Vogel <sv@exept.de>
parents: 9288
diff changeset
  3078
      (self compiledMethodAt:#printOn:) methodDefinitionTemplate
beef5f0aa8bb New: #methodDefinitionTemplate
Stefan Vogel <sv@exept.de>
parents: 9288
diff changeset
  3079
    "
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3080
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3081
    "Created: / 18-07-2019 / 07:50:09 / Claus Gittinger"
9364
beef5f0aa8bb New: #methodDefinitionTemplate
Stefan Vogel <sv@exept.de>
parents: 9288
diff changeset
  3082
!
beef5f0aa8bb New: #methodDefinitionTemplate
Stefan Vogel <sv@exept.de>
parents: 9288
diff changeset
  3083
12900
4cda19285039 category of: #methodInvocationInfo
Claus Gittinger <cg@exept.de>
parents: 12899
diff changeset
  3084
methodInvocationInfo
13567
fe6564553977 comment: #methodInvocationInfo
Claus Gittinger <cg@exept.de>
parents: 13463
diff changeset
  3085
    "redefined by InstrumentedMethod, to return the collected info"
fe6564553977 comment: #methodInvocationInfo
Claus Gittinger <cg@exept.de>
parents: 13463
diff changeset
  3086
12900
4cda19285039 category of: #methodInvocationInfo
Claus Gittinger <cg@exept.de>
parents: 12899
diff changeset
  3087
    ^ nil
4cda19285039 category of: #methodInvocationInfo
Claus Gittinger <cg@exept.de>
parents: 12899
diff changeset
  3088
4cda19285039 category of: #methodInvocationInfo
Claus Gittinger <cg@exept.de>
parents: 12899
diff changeset
  3089
    "Created: / 27-04-2010 / 13:36:12 / cg"
4cda19285039 category of: #methodInvocationInfo
Claus Gittinger <cg@exept.de>
parents: 12899
diff changeset
  3090
!
4cda19285039 category of: #methodInvocationInfo
Claus Gittinger <cg@exept.de>
parents: 12899
diff changeset
  3091
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3092
methodVarNames
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3093
    "return a collection with the method's local-variable names.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3094
     Uses Parser to parse the method's source and extract the names."
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3095
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3096
    ^ self parse:#'parseMethodArgAndVarSpecificationSilent:' return:#methodVars or:nil
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3097
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3098
    "
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3099
     (Method compiledMethodAt:#printOn:) methodVarNames
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3100
    "
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3101
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3102
    "Modified: / 31-10-1995 / 14:36:49 / cg"
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3103
    "Modified (comment): / 21-11-2017 / 13:04:59 / cg"
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3104
!
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3105
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3106
modificationTime
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3107
    "try to extract the modificationTime as a timeStamp from
19449
607eb2e0e46c #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19025
diff changeset
  3108
     the receiver's source. If there is no source or no history line,
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3109
     we do not know the modification time, and nil is returned."
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3110
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3111
    |s list histLine|
877
63ebb325ed20 flush global-access cache (using snapshotID) when saving a methods binary code
Claus Gittinger <cg@exept.de>
parents: 872
diff changeset
  3112
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3113
    HistoryManager isNil ifTrue:[^ nil].
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3114
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3115
    s := self source.
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3116
    s isNil ifTrue:[^ nil].
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3117
    list := HistoryManager getAllHistoriesFrom:s.
16261
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
  3118
    list isEmptyOrNil ifTrue:[^ nil].
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3119
    histLine := list last.
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  3120
    ^ Timestamp
19449
607eb2e0e46c #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19025
diff changeset
  3121
        fromDate:histLine date
607eb2e0e46c #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19025
diff changeset
  3122
        andTime:histLine time
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3123
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3124
    "
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3125
     (Method compiledMethodAt:#modificationTime) modificationTime
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  3126
     (Method compiledMethodAt:#isMethod) modificationTime
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3127
    "
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3128
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3129
    "Modified: 8.9.1995 / 15:08:22 / claus"
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3130
    "Modified: 4.11.1996 / 22:28:17 / cg"
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3131
!
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3132
15424
143d8fdfa609 class: Method
Claus Gittinger <cg@exept.de>
parents: 15416
diff changeset
  3133
modifiedInstVars
143d8fdfa609 class: Method
Claus Gittinger <cg@exept.de>
parents: 15416
diff changeset
  3134
    "returns a collection of instance variables which are modified by this method.
143d8fdfa609 class: Method
Claus Gittinger <cg@exept.de>
parents: 15416
diff changeset
  3135
     Uses parser (for now); could look at bytecode as well here..."
143d8fdfa609 class: Method
Claus Gittinger <cg@exept.de>
parents: 15416
diff changeset
  3136
143d8fdfa609 class: Method
Claus Gittinger <cg@exept.de>
parents: 15416
diff changeset
  3137
    ^ self parse:#'parseMethodSilent:in:' with:self mclass  return:#modifiedInstVars or:#().
143d8fdfa609 class: Method
Claus Gittinger <cg@exept.de>
parents: 15416
diff changeset
  3138
!
143d8fdfa609 class: Method
Claus Gittinger <cg@exept.de>
parents: 15416
diff changeset
  3139
3845
729fda604d59 added #name (for javaMethod compatibility)
Claus Gittinger <cg@exept.de>
parents: 3697
diff changeset
  3140
name
729fda604d59 added #name (for javaMethod compatibility)
Claus Gittinger <cg@exept.de>
parents: 3697
diff changeset
  3141
    "for compatibility with javaMethods"
729fda604d59 added #name (for javaMethod compatibility)
Claus Gittinger <cg@exept.de>
parents: 3697
diff changeset
  3142
729fda604d59 added #name (for javaMethod compatibility)
Claus Gittinger <cg@exept.de>
parents: 3697
diff changeset
  3143
    ^ self selector
729fda604d59 added #name (for javaMethod compatibility)
Claus Gittinger <cg@exept.de>
parents: 3697
diff changeset
  3144
729fda604d59 added #name (for javaMethod compatibility)
Claus Gittinger <cg@exept.de>
parents: 3697
diff changeset
  3145
    "Created: / 9.11.1998 / 06:15:08 / cg"
729fda604d59 added #name (for javaMethod compatibility)
Claus Gittinger <cg@exept.de>
parents: 3697
diff changeset
  3146
!
729fda604d59 added #name (for javaMethod compatibility)
Claus Gittinger <cg@exept.de>
parents: 3697
diff changeset
  3147
20208
79b24601b7d6 #OTHER by mawalch
mawalch
parents: 20035
diff changeset
  3148
overwrites:aMethod
20035
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
  3149
    |mth|
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
  3150
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
  3151
    mth := self.
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
  3152
    [ mth := mth overwrittenMethod. mth notNil ] whileTrue:[
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
  3153
        mth == aMethod ifTrue:[
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
  3154
            ^ true
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
  3155
        ].
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
  3156
    ].
74774e1ee05d #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 20032
diff changeset
  3157
    ^ false
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3158
15952
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
  3159
    "Created: / 05-07-2012 / 10:52:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3160
!
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3161
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  3162
parse:parseSelector return:accessSelector or:valueIfNoSource
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3163
    "helper for methodArgNames, methodVarNames etc.
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3164
     Get the source, let parser parse it using parseSelector,
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3165
     return parser-info using accessSelector"
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3166
5633
15b028ad5e03 #usedGlobals check was wrong sometimes
Claus Gittinger <cg@exept.de>
parents: 5584
diff changeset
  3167
    ^ self parse:parseSelector with:nil return:accessSelector or:valueIfNoSource
15b028ad5e03 #usedGlobals check was wrong sometimes
Claus Gittinger <cg@exept.de>
parents: 5584
diff changeset
  3168
15b028ad5e03 #usedGlobals check was wrong sometimes
Claus Gittinger <cg@exept.de>
parents: 5584
diff changeset
  3169
    "
15b028ad5e03 #usedGlobals check was wrong sometimes
Claus Gittinger <cg@exept.de>
parents: 5584
diff changeset
  3170
     (Method compiledMethodAt:#parse:return:or:)
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3171
	parse:#'parseMethodSilent:' return:#sentMessages or:#()
5633
15b028ad5e03 #usedGlobals check was wrong sometimes
Claus Gittinger <cg@exept.de>
parents: 5584
diff changeset
  3172
    "
15b028ad5e03 #usedGlobals check was wrong sometimes
Claus Gittinger <cg@exept.de>
parents: 5584
diff changeset
  3173
!
15b028ad5e03 #usedGlobals check was wrong sometimes
Claus Gittinger <cg@exept.de>
parents: 5584
diff changeset
  3174
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  3175
parse:parseSelector with:arg2 return:accessSelector or:valueIfNoSource
5633
15b028ad5e03 #usedGlobals check was wrong sometimes
Claus Gittinger <cg@exept.de>
parents: 5584
diff changeset
  3176
    "helper for methodArgNames, methodVarNames etc.
15b028ad5e03 #usedGlobals check was wrong sometimes
Claus Gittinger <cg@exept.de>
parents: 5584
diff changeset
  3177
     Get the source, let parser parse it using parseSelector,
15b028ad5e03 #usedGlobals check was wrong sometimes
Claus Gittinger <cg@exept.de>
parents: 5584
diff changeset
  3178
     return parser-info using accessSelector"
15b028ad5e03 #usedGlobals check was wrong sometimes
Claus Gittinger <cg@exept.de>
parents: 5584
diff changeset
  3179
13570
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3180
    |parser parserClass sourceString cachedInfo|
8427
bba41f189196 parserClass stuff
ca
parents: 8419
diff changeset
  3181
bba41f189196 parserClass stuff
ca
parents: 8419
diff changeset
  3182
    parserClass := self parserClass.
13570
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3183
14039
30251b45156a added: #flushParseTreeCache
Claus Gittinger <cg@exept.de>
parents: 13847
diff changeset
  3184
    "/ because parsing the same method multiple times for different aspects
13570
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3185
    "/ is very common with the new browser's info displays, we cache a few
14047
016eab1c3b9a comment/format in: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 14039
diff changeset
  3186
    "/ of them. If the same is parsed soon after, we do not have to parse again.
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3187
    parseSelector == #'parseMethodSilent:in:' ifTrue:[
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3188
        LastParseTreeCache notNil ifTrue:[
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3189
            "/ to flush: LastParseTreeCache removeAll.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3190
            cachedInfo := LastParseTreeCache at:self ifAbsent:nil.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3191
            cachedInfo notNil ifTrue:[
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3192
                cachedInfo method == self ifTrue:[
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3193
                    cachedInfo parser class == parserClass ifTrue:[
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3194
                        "/ Transcript show:'hit '; showCR:self.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3195
                        ^ cachedInfo parser perform:accessSelector
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3196
                    ]
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3197
                ].
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3198
                LastParseTreeCache removeKey:self
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3199
            ]
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3200
        ].
13570
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3201
    ].
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3202
    
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3203
    sourceString := self source.
8427
bba41f189196 parserClass stuff
ca
parents: 8419
diff changeset
  3204
    (parserClass notNil and:[sourceString notNil]) ifTrue:[
19716
34387335cbba #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 19699
diff changeset
  3205
        parseSelector argumentCount == 2 ifTrue:[
34387335cbba #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 19699
diff changeset
  3206
            parser := parserClass perform:parseSelector with:sourceString with:arg2.
34387335cbba #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 19699
diff changeset
  3207
        ] ifFalse:[
34387335cbba #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 19699
diff changeset
  3208
            parser := parserClass perform:parseSelector with:sourceString.
34387335cbba #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 19699
diff changeset
  3209
        ].
34387335cbba #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 19699
diff changeset
  3210
        (parser isNil or:[parser == #Error]) ifTrue:[^ valueIfNoSource].
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3211
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3212
        parseSelector == #'parseMethodSilent:in:' ifTrue:[
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3213
            "do not cache the parser, if it was parsing for code - a lot of information is missing then"
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3214
            (self mclass notNil and:[parser wasParsedForCode not]) ifTrue:[
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3215
                LastParseTreeCache isNil ifTrue:[
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3216
                    LastParseTreeCache := CacheDictionary new:500.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3217
                ].
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3218
                LastParseTreeCache 
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3219
                    at:self 
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3220
                    put:(ParserCacheEntry new method:self parser:parser).
19716
34387335cbba #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 19699
diff changeset
  3221
            ].
34387335cbba #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 19699
diff changeset
  3222
        ].
34387335cbba #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 19699
diff changeset
  3223
        ^ parser perform:accessSelector
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3224
    ].
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3225
    ^ valueIfNoSource
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3226
5500
8bc3b30296ae more queries (sentMessages ...)
Claus Gittinger <cg@exept.de>
parents: 5406
diff changeset
  3227
    "
15579
cc4c6bae6927 class: Method
Claus Gittinger <cg@exept.de>
parents: 15445
diff changeset
  3228
     LastParseTreeCache removeAll.
cc4c6bae6927 class: Method
Claus Gittinger <cg@exept.de>
parents: 15445
diff changeset
  3229
5500
8bc3b30296ae more queries (sentMessages ...)
Claus Gittinger <cg@exept.de>
parents: 5406
diff changeset
  3230
     (Method compiledMethodAt:#parse:return:or:)
19716
34387335cbba #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 19699
diff changeset
  3231
        parse:#'parseMethodSilent:' return:#sentMessages or:#()
5500
8bc3b30296ae more queries (sentMessages ...)
Claus Gittinger <cg@exept.de>
parents: 5406
diff changeset
  3232
    "
13570
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3233
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3234
    "Modified: / 26-02-2017 / 12:05:50 / cg"
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3235
    "Modified: / 12-04-2018 / 08:51:07 / stefan"
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3236
    "Modified (format): / 01-08-2018 / 22:24:59 / Claus Gittinger"
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3237
!
159
514c749165c3 *** empty log message ***
claus
parents: 142
diff changeset
  3238
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3239
parseAnnotations
17361
ab3b25502ca4 class: Method
Claus Gittinger <cg@exept.de>
parents: 17278
diff changeset
  3240
    "return the method's annotations."
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3241
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3242
    |src parser|
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3243
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3244
    src := self source.
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3245
    src isNil ifTrue:[
20804
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  3246
        ^ nil "/ actually: don't know
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3247
    ].
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3248
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3249
    self parserClass isNil ifTrue:[
20804
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  3250
        ^ nil
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3251
    ].
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3252
    parser := self parserClass parseMethod: src.
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3253
    (parser isNil or: [parser == #Error]) ifTrue:[
20804
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  3254
        ^ nil "/ actually error
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3255
    ].
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3256
    ^ annotations := parser annotations.
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3257
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3258
    "Created: / 10-07-2010 / 21:16:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3259
!
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3260
5721
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
  3261
parseResources
16218
5e87a242990b class: Method
Claus Gittinger <cg@exept.de>
parents: 16193
diff changeset
  3262
    "return the method's resource spec; either nil or a collection of symbols.
5e87a242990b class: Method
Claus Gittinger <cg@exept.de>
parents: 16193
diff changeset
  3263
     Resources are a special kind of annotation, of the form:
20804
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  3264
        <resource: #symbol...>
16218
5e87a242990b class: Method
Claus Gittinger <cg@exept.de>
parents: 16193
diff changeset
  3265
     and flags methods which depend on keyboard bindings or provide menus, specs or bitmap images"
5721
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
  3266
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
  3267
    |src parser|
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
  3268
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
  3269
    src := self source.
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
  3270
    src isNil ifTrue:[
20804
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  3271
        ^ nil "/ actually: don't know
5721
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
  3272
    ].
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
  3273
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3274
    (src includesString:'resource:') ifFalse:[
20804
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  3275
        ^ nil "/ actually: error
5721
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
  3276
    ].
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
  3277
    "/ no need to parse all - only interested in resource-info
8427
bba41f189196 parserClass stuff
ca
parents: 8419
diff changeset
  3278
    self parserClass isNil ifTrue:[
20804
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  3279
        ^ nil
8427
bba41f189196 parserClass stuff
ca
parents: 8419
diff changeset
  3280
    ].
8419
42a6fd0ef3bd allow for subclasses to redefine the parserClass
ca
parents: 8364
diff changeset
  3281
    parser := self parserClass parseMethodArgAndVarSpecificationSilent:src in:nil.
5721
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
  3282
    parser isNil ifTrue:[
20804
8fc0aa10c3a8 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20683
diff changeset
  3283
        ^ nil "/ actually error
5721
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
  3284
    ].
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
  3285
    ^ parser primitiveResources.
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3286
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3287
    "Modified: / 12-04-2018 / 09:32:53 / stefan"
5721
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
  3288
!
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
  3289
14402
Claus Gittinger <cg@exept.de>
parents: 14375
diff changeset
  3290
possiblySends:aSelectorSymbol
Claus Gittinger <cg@exept.de>
parents: 14375
diff changeset
  3291
    "return true, if this method contains an indirect message-send
Claus Gittinger <cg@exept.de>
parents: 14375
diff changeset
  3292
     (such as perform) with aSelectorSymbol as selector."
Claus Gittinger <cg@exept.de>
parents: 14375
diff changeset
  3293
Claus Gittinger <cg@exept.de>
parents: 14375
diff changeset
  3294
    (self referencesLiteral:aSelectorSymbol) ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3295
	^ self messagesPossiblySent includesIdentical:aSelectorSymbol
14402
Claus Gittinger <cg@exept.de>
parents: 14375
diff changeset
  3296
    ].
Claus Gittinger <cg@exept.de>
parents: 14375
diff changeset
  3297
    ^ false
Claus Gittinger <cg@exept.de>
parents: 14375
diff changeset
  3298
!
Claus Gittinger <cg@exept.de>
parents: 14375
diff changeset
  3299
1923
97b099fef985 optionally keep a history of changed methods
Claus Gittinger <cg@exept.de>
parents: 1873
diff changeset
  3300
previousVersion
19449
607eb2e0e46c #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19025
diff changeset
  3301
    "return the receiver's previous version's source code"
14251
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3302
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3303
    |previous|
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3304
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3305
    previous := self previousVersions:2.
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3306
    previous isEmptyOrNil ifTrue:[^ nil].
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3307
    ^ previous first.
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3308
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3309
"/    |sel cls previous|
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3310
"/
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3311
"/    sel := self selector.
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3312
"/    sel isNil ifTrue:[ ^ nil ].
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3313
"/
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3314
"/    cls := self mclass.
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3315
"/    cls isNil ifTrue:[ ^ nil ].
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3316
"/
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3317
"/    ChangeSet current reverseDo:[:change |
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3318
"/        (change isMethodChange
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3319
"/            and:[ (change selector == sel)
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3320
"/            and:[ change changeClass == cls ]])
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3321
"/        ifTrue:[
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3322
"/            previous := change previousVersion.
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3323
"/            previous notNil ifTrue:[
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3324
"/                ^ previous
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3325
"/            ]
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3326
"/        ]
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3327
"/    ].
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3328
"/    ^ nil.
6644
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3329
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3330
"/    history := Class methodHistory.
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3331
"/    history isNil ifTrue:[^ nil].
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3332
"/
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3333
"/    entry := history detect:[:entry | |type old new|
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3334
"/                                    type := entry first.
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3335
"/                                    type == #methodChange ifTrue:[
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3336
"/                                        old := entry second.
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3337
"/                                        new := entry third.
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3338
"/                                        new == self
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3339
"/                                    ] ifFalse:[
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3340
"/                                        false
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3341
"/                                    ]
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  3342
"/                             ]
6644
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3343
"/                     ifNone:nil.
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3344
"/    entry isNil ifTrue:[^nil].
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3345
"/    ^ entry second.
5339
c922450b57b5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5324
diff changeset
  3346
"/    ^ history at:self ifAbsent:nil
1923
97b099fef985 optionally keep a history of changed methods
Claus Gittinger <cg@exept.de>
parents: 1873
diff changeset
  3347
14251
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3348
    "Modified: / 26-07-2012 / 13:16:34 / cg"
1923
97b099fef985 optionally keep a history of changed methods
Claus Gittinger <cg@exept.de>
parents: 1873
diff changeset
  3349
!
97b099fef985 optionally keep a history of changed methods
Claus Gittinger <cg@exept.de>
parents: 1873
diff changeset
  3350
7210
80bb33c02780 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7085
diff changeset
  3351
previousVersionCode
19449
607eb2e0e46c #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19025
diff changeset
  3352
    "return the receiver's previous version's source code"
7210
80bb33c02780 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7085
diff changeset
  3353
80bb33c02780 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7085
diff changeset
  3354
    |previous|
80bb33c02780 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7085
diff changeset
  3355
80bb33c02780 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7085
diff changeset
  3356
    previous := self previousVersion.
80bb33c02780 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7085
diff changeset
  3357
    previous isNil ifTrue:[ ^ nil ].
80bb33c02780 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7085
diff changeset
  3358
80bb33c02780 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7085
diff changeset
  3359
    ^ previous source
80bb33c02780 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7085
diff changeset
  3360
!
80bb33c02780 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7085
diff changeset
  3361
6644
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3362
previousVersions
14251
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3363
    "return a collection of the receiver's previous versions (sources)"
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3364
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3365
    ^ self previousVersions:nil
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3366
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3367
    "Modified (comment): / 26-07-2012 / 12:04:15 / cg"
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3368
!
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3369
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3370
previousVersions:count
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3371
    "return a collection of the receiver's count previous versions (sources).
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3372
     A nil count will retrieve all versions"
6644
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3373
7453
48c427d125f4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7328
diff changeset
  3374
    |sel cls versions lastChange firstSrc last|
6644
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3375
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3376
    sel := self selector.
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3377
    sel isNil ifTrue:[^ #()].
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3378
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3379
    cls := self mclass.
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3380
    cls isNil ifTrue:[^ #()].
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3381
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3382
    versions := OrderedCollection new.
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3383
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  3384
    ChangeSet current reverseDo:[:change |
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3385
	(change isMethodChange
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3386
	    and:[ (change selector == sel)
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3387
	    and:[ change changeClass == cls ]])
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3388
	ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3389
	    versions addFirst:change.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3390
	    lastChange := change.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3391
	    (count notNil and:[versions size == count]) ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3392
		^ versions
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3393
	    ]
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3394
	]
6644
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3395
    ].
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3396
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3397
    lastChange notNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3398
	last := lastChange previousVersion.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3399
	last notNil ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3400
	    firstSrc := last source.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3401
	    (firstSrc notEmptyOrNil
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3402
	    and:[ firstSrc ~= lastChange source]) ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3403
		versions addFirst:(MethodDefinitionChange
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3404
				    className:lastChange className
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3405
				    selector:lastChange selector
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3406
				    source:firstSrc
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3407
				    category:lastChange category).
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3408
	    ]
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3409
	]
6644
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3410
    ].
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3411
    ^ versions
14251
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3412
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3413
    "
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3414
     (Method compiledMethodAt:#previousVersions:) previousVersions:nil
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3415
    "
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3416
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3417
    "Created: / 26-07-2012 / 11:59:57 / cg"
6644
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3418
!
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3419
5564
0f513f04c50f #readsFields: and #writesField: for st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 5562
diff changeset
  3420
readsField:instVarIndex
0f513f04c50f #readsFields: and #writesField: for st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 5562
diff changeset
  3421
    "return true, if the instvar at instVarIndex is read by the receiver.
0f513f04c50f #readsFields: and #writesField: for st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 5562
diff changeset
  3422
     Uses parser (for now); could look at bytecode as well here..."
0f513f04c50f #readsFields: and #writesField: for st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 5562
diff changeset
  3423
14237
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3424
    |instVarName|
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3425
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3426
    instVarName := (self mclass allInstVarNames) at:instVarIndex.
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3427
    ^ self readsInstVar:instVarName
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3428
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3429
    "Modified: / 23-07-2012 / 11:16:08 / cg"
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3430
!
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3431
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3432
readsInstVar:instVarName
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3433
    "return true, if the named instvar is read by the receiver.
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3434
     Uses parser (for now); could look at bytecode as well here..."
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3435
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3436
    |readInstVars|
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3437
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3438
    (self source includesString:instVarName) ifFalse:[^ false].     "/ that's much faster than parsing...
5636
eab6a71fb3d0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5634
diff changeset
  3439
    readInstVars := self parse:#'parseMethodSilent:in:' with:self mclass  return:#readInstVars or:#().
14237
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3440
    ^ readInstVars includes:instVarName.
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3441
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3442
    "Created: / 23-07-2012 / 11:15:56 / cg"
5564
0f513f04c50f #readsFields: and #writesField: for st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 5562
diff changeset
  3443
!
0f513f04c50f #readsFields: and #writesField: for st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 5562
diff changeset
  3444
14253
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  3445
refersToLiteral: anObject
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  3446
    "redefined to search in annotations"
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  3447
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  3448
    (super refersToLiteral: anObject) ifTrue:[^ true].
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  3449
15387
f8f6247b071f class: Method
Claus Gittinger <cg@exept.de>
parents: 15346
diff changeset
  3450
    self annotationsDo:[:annot |
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3451
	(annot refersToLiteral: anObject) ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3452
	    "/ self halt.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3453
	    ^ true
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3454
	].
14253
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  3455
    ].
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  3456
    ^ false
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  3457
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  3458
    "Created: / 26-07-2012 / 15:51:14 / cg"
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  3459
!
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  3460
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  3461
refersToLiteralMatching: aMatchString
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  3462
    (super refersToLiteralMatching: aMatchString) ifTrue:[^ true].
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  3463
15387
f8f6247b071f class: Method
Claus Gittinger <cg@exept.de>
parents: 15346
diff changeset
  3464
    self annotationsDo:[:annot |
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3465
	(annot refersToLiteralMatching: aMatchString) ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3466
	    "/ self halt.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3467
	    ^ true
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3468
	].
14253
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  3469
    ].
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  3470
    ^ false
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  3471
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  3472
    "Created: / 26-07-2012 / 15:51:36 / cg"
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  3473
!
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  3474
3052
f384e7082ee9 more resource stuff (VW compatibility)
Claus Gittinger <cg@exept.de>
parents: 3030
diff changeset
  3475
resourceType
f384e7082ee9 more resource stuff (VW compatibility)
Claus Gittinger <cg@exept.de>
parents: 3030
diff changeset
  3476
    "ST-80 compatibility:
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3477
     return the method's first resource specs key.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3478
     Returns either nil, or a single symbol.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3479
     For example, for an image-spec method, the resourceType
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3480
     would be #image"
3052
f384e7082ee9 more resource stuff (VW compatibility)
Claus Gittinger <cg@exept.de>
parents: 3030
diff changeset
  3481
3387
dbe1b3cf7b83 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3372
diff changeset
  3482
    |resources|
dbe1b3cf7b83 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3372
diff changeset
  3483
dbe1b3cf7b83 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3372
diff changeset
  3484
    (resources := self resources) notNil ifTrue:[
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3485
        resources keysAndValuesDo:[:key :val|
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3486
            ^ key
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3487
        ].
3341
c5773eb96bd2 resource icons moved to class BrowserView
tz
parents: 3297
diff changeset
  3488
    ].
3387
dbe1b3cf7b83 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3372
diff changeset
  3489
    ^ nil
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3490
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3491
    "Modified (comment): / 21-11-2017 / 13:05:19 / cg"
3052
f384e7082ee9 more resource stuff (VW compatibility)
Claus Gittinger <cg@exept.de>
parents: 3030
diff changeset
  3492
!
f384e7082ee9 more resource stuff (VW compatibility)
Claus Gittinger <cg@exept.de>
parents: 3030
diff changeset
  3493
f384e7082ee9 more resource stuff (VW compatibility)
Claus Gittinger <cg@exept.de>
parents: 3030
diff changeset
  3494
resources
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3495
    "return the method's resource spec (i.e. resource-annotation); 
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3496
     either nil or a collection of symbols."
3052
f384e7082ee9 more resource stuff (VW compatibility)
Claus Gittinger <cg@exept.de>
parents: 3030
diff changeset
  3497
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3498
    | resources |
13817
7d1e0e8ea364 changed:10 methods
Claus Gittinger <cg@exept.de>
parents: 13805
diff changeset
  3499
3052
f384e7082ee9 more resource stuff (VW compatibility)
Claus Gittinger <cg@exept.de>
parents: 3030
diff changeset
  3500
    self hasResource ifFalse:[^ nil].
13817
7d1e0e8ea364 changed:10 methods
Claus Gittinger <cg@exept.de>
parents: 13805
diff changeset
  3501
    annotations isNil ifTrue:[^ self parseResources].
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3502
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3503
    resources := IdentityDictionary new.
18753
941d99755164 #BUGFIX
Stefan Vogel <sv@exept.de>
parents: 18620
diff changeset
  3504
    self annotationsAt: #resource: orAt: #resource:values: do:[:annot|
941d99755164 #BUGFIX
Stefan Vogel <sv@exept.de>
parents: 18620
diff changeset
  3505
        resources at: annot type put: annot value ? true
13817
7d1e0e8ea364 changed:10 methods
Claus Gittinger <cg@exept.de>
parents: 13805
diff changeset
  3506
    ].
7d1e0e8ea364 changed:10 methods
Claus Gittinger <cg@exept.de>
parents: 13805
diff changeset
  3507
    ^ resources
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3508
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3509
    "Modified: / 16-07-2010 / 11:49:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
13817
7d1e0e8ea364 changed:10 methods
Claus Gittinger <cg@exept.de>
parents: 13805
diff changeset
  3510
    "Modified: / 18-11-2011 / 14:48:41 / cg"
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3511
    "Modified (comment): / 21-11-2017 / 13:05:22 / cg"
3052
f384e7082ee9 more resource stuff (VW compatibility)
Claus Gittinger <cg@exept.de>
parents: 3030
diff changeset
  3512
!
f384e7082ee9 more resource stuff (VW compatibility)
Claus Gittinger <cg@exept.de>
parents: 3030
diff changeset
  3513
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3514
selector
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3515
    "return the selector under which I am found in my containingClasses
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  3516
     method-table.
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3517
     See comment in who."
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3518
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3519
    "based on who, which has been added for ST-80 compatibility"
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3520
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3521
    |who|
68
59faa75185ba *** empty log message ***
claus
parents: 56
diff changeset
  3522
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3523
    who := self who.
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3524
    who notNil ifTrue:[^ who methodSelector].
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3525
    "
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3526
     none found - sorry
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3527
    "
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3528
    ^ nil
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3529
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3530
    "
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3531
     |m|
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3532
     m := Object compiledMethodAt:#at:.
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3533
     m selector
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3534
    "
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3535
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3536
    "Modified: 1.11.1996 / 16:25:48 / cg"
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3537
!
68
59faa75185ba *** empty log message ***
claus
parents: 56
diff changeset
  3538
12363
a7251dc427bd added: #sends:or:
Claus Gittinger <cg@exept.de>
parents: 12324
diff changeset
  3539
sends:selectorSymbol1 or:selectorSymbol2
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3540
    <resource: #obsolete>
12363
a7251dc427bd added: #sends:or:
Claus Gittinger <cg@exept.de>
parents: 12324
diff changeset
  3541
    "return true, if this method contains a message-send
13569
82bcca38e855 comment/format in: #sends:or:
Claus Gittinger <cg@exept.de>
parents: 13567
diff changeset
  3542
     to either selectorSymbol1 or selectorSymbol2.
82bcca38e855 comment/format in: #sends:or:
Claus Gittinger <cg@exept.de>
parents: 13567
diff changeset
  3543
     This is a hack, because calling sends: twice parses twice (should cache parse trees)"
12363
a7251dc427bd added: #sends:or:
Claus Gittinger <cg@exept.de>
parents: 12324
diff changeset
  3544
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3545
    ^ self sendsAnySelector:{ selectorSymbol1 . selectorSymbol2 }
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3546
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3547
    "Modified: / 05-02-2017 / 01:28:03 / cg"
13570
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3548
!
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3549
19739
5f6b9dbd32c6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19732
diff changeset
  3550
sendsMessageForWhich:aCheckBlock
5f6b9dbd32c6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19732
diff changeset
  3551
    "return true, if this method contains a message-send
5f6b9dbd32c6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19732
diff changeset
  3552
     for which aCheckBlock returns true, when given the selector."
5f6b9dbd32c6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19732
diff changeset
  3553
5f6b9dbd32c6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19732
diff changeset
  3554
    self literalsDo:[:each |
5f6b9dbd32c6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19732
diff changeset
  3555
        each isSymbol ifTrue:[
5f6b9dbd32c6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19732
diff changeset
  3556
            "/ first check if the selector matches
5f6b9dbd32c6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19732
diff changeset
  3557
            (aCheckBlock value:each) ifTrue:[
5f6b9dbd32c6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19732
diff changeset
  3558
                "/ then, if this is really a message send
5f6b9dbd32c6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19732
diff changeset
  3559
                (self messagesSent includes:each) ifTrue:[^ true].
5f6b9dbd32c6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19732
diff changeset
  3560
            ]
5f6b9dbd32c6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19732
diff changeset
  3561
        ]
20208
79b24601b7d6 #OTHER by mawalch
mawalch
parents: 20035
diff changeset
  3562
    ].
19739
5f6b9dbd32c6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19732
diff changeset
  3563
    ^ false
5f6b9dbd32c6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19732
diff changeset
  3564
5f6b9dbd32c6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19732
diff changeset
  3565
    "
20208
79b24601b7d6 #OTHER by mawalch
mawalch
parents: 20035
diff changeset
  3566
     (self compiledMethodAt:#sendsAnyForWhich:)
19739
5f6b9dbd32c6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19732
diff changeset
  3567
        sendsAnyForWhich:[:sel | sel startsWith:'message']
20208
79b24601b7d6 #OTHER by mawalch
mawalch
parents: 20035
diff changeset
  3568
     (self compiledMethodAt:#sendsAnyForWhich:)
19739
5f6b9dbd32c6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19732
diff changeset
  3569
        sendsAnyForWhich:[:sel | sel startsWith:'foo']
5f6b9dbd32c6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19732
diff changeset
  3570
    "
5f6b9dbd32c6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19732
diff changeset
  3571
!
5f6b9dbd32c6 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19732
diff changeset
  3572
16877
d4a452edacb5 Added Method>>shadowedMethod returning shadowed method or nil.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16847
diff changeset
  3573
shadowedMethod
17562
ee6d827bd625 class: Method
Claus Gittinger <cg@exept.de>
parents: 17547
diff changeset
  3574
    "Return the shadowed method if this method is an extension (i.e. package ~= classes' package)
ee6d827bd625 class: Method
Claus Gittinger <cg@exept.de>
parents: 17547
diff changeset
  3575
     AND it shadows (redefines) an existing method from the method's class.
16877
d4a452edacb5 Added Method>>shadowedMethod returning shadowed method or nil.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16847
diff changeset
  3576
     If this method does not shadow any other method, return nil."
d4a452edacb5 Added Method>>shadowedMethod returning shadowed method or nil.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16847
diff changeset
  3577
17562
ee6d827bd625 class: Method
Claus Gittinger <cg@exept.de>
parents: 17547
diff changeset
  3578
    | myClass nonMetaClass myProjectDefinition originalMethod|
16877
d4a452edacb5 Added Method>>shadowedMethod returning shadowed method or nil.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16847
diff changeset
  3579
d4a452edacb5 Added Method>>shadowedMethod returning shadowed method or nil.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16847
diff changeset
  3580
    myClass := self mclass.
d4a452edacb5 Added Method>>shadowedMethod returning shadowed method or nil.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16847
diff changeset
  3581
    myClass isNil ifTrue:[^ nil].
17562
ee6d827bd625 class: Method
Claus Gittinger <cg@exept.de>
parents: 17547
diff changeset
  3582
    nonMetaClass := myClass theNonMetaclass.
ee6d827bd625 class: Method
Claus Gittinger <cg@exept.de>
parents: 17547
diff changeset
  3583
ee6d827bd625 class: Method
Claus Gittinger <cg@exept.de>
parents: 17547
diff changeset
  3584
    (package ~= nonMetaClass package
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3585
	and:[ package ~= PackageId noProjectID
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3586
	and:[ (myProjectDefinition := nonMetaClass projectDefinitionClass) notNil ]])
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3587
    ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3588
	originalMethod := myProjectDefinition savedOverwrittenMethodForClass:myClass selector:self selector.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3589
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3590
	"/ mhm - what if it does no make a difference?
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3591
	"/ (originalMethod notNil and:[originalMethod source = self source]) ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3592
	"/    "/ self halt. ^ nil
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3593
	"/ ].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3594
	^ originalMethod
17562
ee6d827bd625 class: Method
Claus Gittinger <cg@exept.de>
parents: 17547
diff changeset
  3595
    ].
16877
d4a452edacb5 Added Method>>shadowedMethod returning shadowed method or nil.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16847
diff changeset
  3596
    ^ nil
d4a452edacb5 Added Method>>shadowedMethod returning shadowed method or nil.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16847
diff changeset
  3597
d4a452edacb5 Added Method>>shadowedMethod returning shadowed method or nil.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16847
diff changeset
  3598
    "Created: / 03-10-2014 / 15:16:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
d4a452edacb5 Added Method>>shadowedMethod returning shadowed method or nil.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16847
diff changeset
  3599
!
d4a452edacb5 Added Method>>shadowedMethod returning shadowed method or nil.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16847
diff changeset
  3600
11022
8dd9f699915f +shouldBeSkippedInDebuggersWalkBack
Claus Gittinger <cg@exept.de>
parents: 11016
diff changeset
  3601
shouldBeSkippedInDebuggersWalkBack
8dd9f699915f +shouldBeSkippedInDebuggersWalkBack
Claus Gittinger <cg@exept.de>
parents: 11016
diff changeset
  3602
    "return true, if this method thinks, it should be skipped in a walkback.
17463
9f3633d1b67e class: Method
Claus Gittinger <cg@exept.de>
parents: 17452
diff changeset
  3603
     This is done by looking for a #skipInDebuggersWalkBack flag in the method's resources."
11022
8dd9f699915f +shouldBeSkippedInDebuggersWalkBack
Claus Gittinger <cg@exept.de>
parents: 11016
diff changeset
  3604
8dd9f699915f +shouldBeSkippedInDebuggersWalkBack
Claus Gittinger <cg@exept.de>
parents: 11016
diff changeset
  3605
    |resources|
8dd9f699915f +shouldBeSkippedInDebuggersWalkBack
Claus Gittinger <cg@exept.de>
parents: 11016
diff changeset
  3606
8dd9f699915f +shouldBeSkippedInDebuggersWalkBack
Claus Gittinger <cg@exept.de>
parents: 11016
diff changeset
  3607
    resources := self resources.
20208
79b24601b7d6 #OTHER by mawalch
mawalch
parents: 20035
diff changeset
  3608
    ^ resources notNil
19699
01a9805ec9ab #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19693
diff changeset
  3609
        and:[ resources includesKey:#skipInDebuggersWalkBack ].
11022
8dd9f699915f +shouldBeSkippedInDebuggersWalkBack
Claus Gittinger <cg@exept.de>
parents: 11016
diff changeset
  3610
!
8dd9f699915f +shouldBeSkippedInDebuggersWalkBack
Claus Gittinger <cg@exept.de>
parents: 11016
diff changeset
  3611
5696
958a0643496d compatibility
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
  3612
superMessages
958a0643496d compatibility
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
  3613
    "return a collection of message-selectors, sent to super by this method."
958a0643496d compatibility
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
  3614
958a0643496d compatibility
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
  3615
    ^ self messagesSentToSuper
958a0643496d compatibility
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
  3616
!
958a0643496d compatibility
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
  3617
5523
86ad12f4afc9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5509
diff changeset
  3618
usedGlobals
86ad12f4afc9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5509
diff changeset
  3619
    "return a collection with the global names referred to by the receiver.
86ad12f4afc9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5509
diff changeset
  3620
     Uses Parser to parse methods source and extract them."
86ad12f4afc9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5509
diff changeset
  3621
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  3622
    ^ self parse:#'parseMethodSilent:in:' with:self mclass return:#usedGlobals or:#()
5523
86ad12f4afc9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5509
diff changeset
  3623
86ad12f4afc9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5509
diff changeset
  3624
    "
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  3625
     (Method compiledMethodAt:#resources) usedGlobals
5523
86ad12f4afc9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5509
diff changeset
  3626
    "
86ad12f4afc9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5509
diff changeset
  3627
!
86ad12f4afc9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5509
diff changeset
  3628
5509
c0277123fe4a added #usedSymbols query
Claus Gittinger <cg@exept.de>
parents: 5500
diff changeset
  3629
usedSymbols
c0277123fe4a added #usedSymbols query
Claus Gittinger <cg@exept.de>
parents: 5500
diff changeset
  3630
    "return a collection with the symbols referred to by the receiver.
c0277123fe4a added #usedSymbols query
Claus Gittinger <cg@exept.de>
parents: 5500
diff changeset
  3631
     Uses Parser to parse methods source and extract them.
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  3632
     This collection only includes implicit symbols references
8895
81e4e78ef244 comment
Claus Gittinger <cg@exept.de>
parents: 8854
diff changeset
  3633
     (i.e. not messages sent)"
5509
c0277123fe4a added #usedSymbols query
Claus Gittinger <cg@exept.de>
parents: 5500
diff changeset
  3634
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  3635
    ^ self parse:#'parseMethodSilent:in:' with:self mclass return:#usedSymbols or:#()
5509
c0277123fe4a added #usedSymbols query
Claus Gittinger <cg@exept.de>
parents: 5500
diff changeset
  3636
c0277123fe4a added #usedSymbols query
Claus Gittinger <cg@exept.de>
parents: 5500
diff changeset
  3637
    "
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  3638
     (Method compiledMethodAt:#usedSymbols) usedSymbols
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  3639
     (Method compiledMethodAt:#usedSymbols) messagesSent
5509
c0277123fe4a added #usedSymbols query
Claus Gittinger <cg@exept.de>
parents: 5500
diff changeset
  3640
    "
c0277123fe4a added #usedSymbols query
Claus Gittinger <cg@exept.de>
parents: 5500
diff changeset
  3641
!
c0277123fe4a added #usedSymbols query
Claus Gittinger <cg@exept.de>
parents: 5500
diff changeset
  3642
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3643
who
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3644
    "return the class and selector of where I am defined in;
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3645
     nil is returned for unbound methods.
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3646
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  3647
     ST/X special notice:
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3648
	returns an instance of MethodWhoInfo, which
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3649
	responds to #methodClass and #methodSelector query messages.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3650
	For backward- (& ST-80) compatibility, the returned object also
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3651
	responds to #at:1 and #at:2 messages.
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3652
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3653
     Implementation notice:
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3654
	To avoid an expensive search, the once valid containing class is kept and remembered
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3655
	in the mclass slot. However, if a method gets recompiled or wrapped, the mclass field is
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3656
	no longer valid and who on the old method returns nil (because the method is actually no longer
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3657
	contained in that class). However, to allow easier unwrapping (and gathering of the corresponding
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3658
	wrapper), the mclass field is never nilled. I.e. it still refers to the original class.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3659
	Therefore, a validation of the mclass slot is done here."
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3660
17250
a0d78c57d994 class: Method
Claus Gittinger <cg@exept.de>
parents: 17175
diff changeset
  3661
    |cls sel fn clsName checkBlock|
a0d78c57d994 class: Method
Claus Gittinger <cg@exept.de>
parents: 17175
diff changeset
  3662
5324
5c9959ce98af make use of mclass
Claus Gittinger <cg@exept.de>
parents: 5322
diff changeset
  3663
    mclass notNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3664
	"/ check if this (cached) info is still valid...
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3665
	sel := mclass selectorAtMethod:self.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3666
	sel notNil ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3667
	    ^ MethodWhoInfo class:mclass selector:sel
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3668
	].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3669
	^ nil.
5324
5c9959ce98af make use of mclass
Claus Gittinger <cg@exept.de>
parents: 5322
diff changeset
  3670
    ].
5c9959ce98af make use of mclass
Claus Gittinger <cg@exept.de>
parents: 5322
diff changeset
  3671
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3672
    checkBlock :=
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3673
	[:cls |
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3674
	    |sel|
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3675
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3676
	    sel := cls selectorAtMethod:self.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3677
	    sel notNil ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3678
		LastWhoClass := cls theNonMetaclass name.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3679
		mclass := cls.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3680
		^ MethodWhoInfo class:cls selector:sel
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3681
	    ].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3682
	].
17250
a0d78c57d994 class: Method
Claus Gittinger <cg@exept.de>
parents: 17175
diff changeset
  3683
a0d78c57d994 class: Method
Claus Gittinger <cg@exept.de>
parents: 17175
diff changeset
  3684
    "
a0d78c57d994 class: Method
Claus Gittinger <cg@exept.de>
parents: 17175
diff changeset
  3685
     first, look in the class we found something the last time
a0d78c57d994 class: Method
Claus Gittinger <cg@exept.de>
parents: 17175
diff changeset
  3686
     this may often give a hit, when asking who repeatingly for
a0d78c57d994 class: Method
Claus Gittinger <cg@exept.de>
parents: 17175
diff changeset
  3687
     a context chain. (keep last by its name, to not keep classes from
a0d78c57d994 class: Method
Claus Gittinger <cg@exept.de>
parents: 17175
diff changeset
  3688
     being garbage collected)
a0d78c57d994 class: Method
Claus Gittinger <cg@exept.de>
parents: 17175
diff changeset
  3689
    "
a0d78c57d994 class: Method
Claus Gittinger <cg@exept.de>
parents: 17175
diff changeset
  3690
    LastWhoClass notNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3691
	cls := Smalltalk at:LastWhoClass ifAbsent:nil.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3692
	cls notNil ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3693
	    checkBlock value:cls theNonMetaclass.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3694
	    checkBlock value:cls theMetaclass.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3695
	]
6420
ba05391a71af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6397
diff changeset
  3696
    ].
ba05391a71af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6397
diff changeset
  3697
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3698
    "
5294
f2d689cf7be4 speedup #who (guess className from sourceFileName)
Claus Gittinger <cg@exept.de>
parents: 5284
diff changeset
  3699
     speedup kludge: if my sourceFileName is valid,
f2d689cf7be4 speedup #who (guess className from sourceFileName)
Claus Gittinger <cg@exept.de>
parents: 5284
diff changeset
  3700
     extract the className from it and try that class first.
f2d689cf7be4 speedup #who (guess className from sourceFileName)
Claus Gittinger <cg@exept.de>
parents: 5284
diff changeset
  3701
    "
f2d689cf7be4 speedup #who (guess className from sourceFileName)
Claus Gittinger <cg@exept.de>
parents: 5284
diff changeset
  3702
    (fn := self sourceFilename) notNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3703
	clsName := fn asFilename nameWithoutSuffix.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3704
	clsName := clsName asSymbolIfInterned.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3705
	clsName notNil ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3706
	    cls := Smalltalk at:clsName ifAbsent:nil.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3707
	    cls notNil ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3708
		checkBlock value:cls theNonMetaclass.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3709
		checkBlock value:cls theMetaclass.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3710
	    ]
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3711
	].
5294
f2d689cf7be4 speedup #who (guess className from sourceFileName)
Claus Gittinger <cg@exept.de>
parents: 5284
diff changeset
  3712
    ].
f2d689cf7be4 speedup #who (guess className from sourceFileName)
Claus Gittinger <cg@exept.de>
parents: 5284
diff changeset
  3713
f2d689cf7be4 speedup #who (guess className from sourceFileName)
Claus Gittinger <cg@exept.de>
parents: 5284
diff changeset
  3714
    "
17250
a0d78c57d994 class: Method
Claus Gittinger <cg@exept.de>
parents: 17175
diff changeset
  3715
     limit the search to global classes only -
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3716
     since probability is high, that the receiver is found in there ...
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3717
    "
17250
a0d78c57d994 class: Method
Claus Gittinger <cg@exept.de>
parents: 17175
diff changeset
  3718
    Smalltalk allClassesDo:[:cls |
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3719
	checkBlock value:cls theNonMetaclass.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3720
	checkBlock value:cls theMetaclass.
142
c7844287bddf *** empty log message ***
claus
parents: 109
diff changeset
  3721
    ].
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3722
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3723
    LastWhoClass := nil.
6397
311358bdeed6 do not search for anonymous classes in #who
Claus Gittinger <cg@exept.de>
parents: 6365
diff changeset
  3724
"/    "
311358bdeed6 do not search for anonymous classes in #who
Claus Gittinger <cg@exept.de>
parents: 6365
diff changeset
  3725
"/     mhmh - must be a method of some anonymous class (i.e. one not
311358bdeed6 do not search for anonymous classes in #who
Claus Gittinger <cg@exept.de>
parents: 6365
diff changeset
  3726
"/     in the Smalltalk dictionary). Search all instances of Behavior
311358bdeed6 do not search for anonymous classes in #who
Claus Gittinger <cg@exept.de>
parents: 6365
diff changeset
  3727
"/    "
6420
ba05391a71af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6397
diff changeset
  3728
"/    Behavior allSubInstancesDo:[:someClassLikeThingy |
ba05391a71af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6397
diff changeset
  3729
"/        (classes includes:someClassLikeThingy) ifFalse:[
ba05391a71af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6397
diff changeset
  3730
"/            checkBlock value:someClassLikeThingy.
6397
311358bdeed6 do not search for anonymous classes in #who
Claus Gittinger <cg@exept.de>
parents: 6365
diff changeset
  3731
"/        ]
311358bdeed6 do not search for anonymous classes in #who
Claus Gittinger <cg@exept.de>
parents: 6365
diff changeset
  3732
"/    ].
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3733
    "
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3734
     none found - sorry
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3735
    "
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3736
    ^ nil
444
071b4f32272c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 443
diff changeset
  3737
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3738
    "typical situation: some well-known class"
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3739
    "
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3740
     |m|
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3741
     m := Object compiledMethodAt:#copy.
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3742
     m who
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3743
    "
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3744
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3745
    "untypical situation: an anonymous class"
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3746
    "
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3747
     |m cls|
444
071b4f32272c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 443
diff changeset
  3748
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  3749
     Object
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3750
	subclass:#FunnyClass
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3751
	instanceVariableNames:'foo'
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3752
	classVariableNames:''
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3753
	poolDictionaries:''
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3754
	category:'testing'.
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3755
     cls := Smalltalk at:#FunnyClass.
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3756
     Smalltalk removeClass:cls.
444
071b4f32272c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 443
diff changeset
  3757
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3758
     cls compile:'testMethod1:arg foo:=arg'.
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3759
     cls compile:'testMethod2 ^ foo'.
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3760
     m := cls compiledMethodAt:#testMethod1:.
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3761
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3762
     m who
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3763
    "
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3764
10156
d35f30a7fde5 changed #who
Claus Gittinger <cg@exept.de>
parents: 10083
diff changeset
  3765
    "Modified: / 07-11-2006 / 13:58:50 / cg"
68
59faa75185ba *** empty log message ***
claus
parents: 56
diff changeset
  3766
!
59faa75185ba *** empty log message ***
claus
parents: 56
diff changeset
  3767
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3768
wrapper
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3769
    "only for wrapped methods: return the wrapper.
14419
eef0be88cb60 comment/format in: #wrapper
Claus Gittinger <cg@exept.de>
parents: 14402
diff changeset
  3770
     That's the WrapperMethod which contains myself."
159
514c749165c3 *** empty log message ***
claus
parents: 142
diff changeset
  3771
13847
c1552e51c27a changed: #wrapper
Claus Gittinger <cg@exept.de>
parents: 13817
diff changeset
  3772
    WrappedMethod notNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3773
	WrappedMethod allInstancesDo:[:m |
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3774
	    m originalMethod == self ifTrue:[^ m].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3775
	].
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3776
    ].
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3777
    ^ nil
13847
c1552e51c27a changed: #wrapper
Claus Gittinger <cg@exept.de>
parents: 13817
diff changeset
  3778
c1552e51c27a changed: #wrapper
Claus Gittinger <cg@exept.de>
parents: 13817
diff changeset
  3779
    "Modified: / 05-12-2011 / 11:15:26 / cg"
5564
0f513f04c50f #readsFields: and #writesField: for st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 5562
diff changeset
  3780
!
0f513f04c50f #readsFields: and #writesField: for st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 5562
diff changeset
  3781
0f513f04c50f #readsFields: and #writesField: for st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 5562
diff changeset
  3782
writesField:instVarIndex
0f513f04c50f #readsFields: and #writesField: for st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 5562
diff changeset
  3783
    "return true, if the instvar at instVarIndex is written (modified) by the receiver.
0f513f04c50f #readsFields: and #writesField: for st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 5562
diff changeset
  3784
     Uses parser (for now); could look at bytecode as well here..."
0f513f04c50f #readsFields: and #writesField: for st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 5562
diff changeset
  3785
14237
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3786
    |instVarName|
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3787
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3788
    instVarName := (self mclass allInstVarNames) at:instVarIndex.
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3789
    ^ self writesInstVar:instVarName
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3790
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3791
    "Modified: / 23-07-2012 / 11:16:51 / cg"
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3792
!
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3793
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3794
writesInstVar:instVarName
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3795
    "return true, if the named instvar is written (modified) by the receiver.
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3796
     Uses parser (for now); could look at bytecode as well here..."
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3797
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3798
    |modifiedInstVars|
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3799
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3800
    (self source includesString:instVarName) ifFalse:[^ false].     "/ that's much faster than parsing...
5636
eab6a71fb3d0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5634
diff changeset
  3801
    modifiedInstVars := self parse:#'parseMethodSilent:in:' with:self mclass return:#modifiedInstVars or:#().
14237
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3802
    ^ modifiedInstVars includes:instVarName.
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3803
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3804
    "Created: / 23-07-2012 / 11:16:36 / cg"
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3805
! !
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  3806
14863
49e50305f097 class: Method
Claus Gittinger <cg@exept.de>
parents: 14595
diff changeset
  3807
!Method methodsFor:'source management'!
49e50305f097 class: Method
Claus Gittinger <cg@exept.de>
parents: 14595
diff changeset
  3808
49e50305f097 class: Method
Claus Gittinger <cg@exept.de>
parents: 14595
diff changeset
  3809
revisionInfo
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3810
    <resource: #todo>
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3811
    "cg: is this correct for extensions? 
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3812
     (shouldn't this be the revisionInfo from the extensions container?)"
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3813
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3814
    ^ self containingClass theNonMetaclass revisionInfo
14863
49e50305f097 class: Method
Claus Gittinger <cg@exept.de>
parents: 14595
diff changeset
  3815
49e50305f097 class: Method
Claus Gittinger <cg@exept.de>
parents: 14595
diff changeset
  3816
    "Created: / 28-08-2010 / 22:43:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
49e50305f097 class: Method
Claus Gittinger <cg@exept.de>
parents: 14595
diff changeset
  3817
    "Modified: / 12-09-2010 / 16:38:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3818
    "Modified (format): / 08-05-2019 / 12:22:49 / Claus Gittinger"
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3819
! !
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3820
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3821
!Method methodsFor:'testing'!
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3822
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3823
isMethod
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3824
    "return true, if the receiver is some kind of method;
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3825
     true returned here - the method is redefined from Object."
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3826
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3827
    ^ true
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3828
!
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3829
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3830
isMethodWithBreakpoints
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3831
    "only redefined in MethodWithBreakpoints"
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3832
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3833
    ^ false
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3834
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3835
    "Created: / 01-08-2012 / 17:26:43 / cg"
14863
49e50305f097 class: Method
Claus Gittinger <cg@exept.de>
parents: 14595
diff changeset
  3836
! !
49e50305f097 class: Method
Claus Gittinger <cg@exept.de>
parents: 14595
diff changeset
  3837
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3838
!Method methodsFor:'trap methods'!
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  3839
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3840
makeInvalid
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3841
    "make the receiver an invalid method, which raises an invalidCodeObject
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3842
     signal when executed. This is not for public use - it is required for
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3843
     the objectFileLoader to invalidate methods whose code is unloaded."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3844
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3845
    |invldMethod|
159
514c749165c3 *** empty log message ***
claus
parents: 142
diff changeset
  3846
18438
0655839a70f8 class: Method
Stefan Vogel <sv@exept.de>
parents: 18431
diff changeset
  3847
    invldMethod := self trapMethodForNumArgs:(self argumentCount).
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3848
    self code:invldMethod code.
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3849
    self byteCode:nil.
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3850
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3851
    "Created: 17.9.1995 / 15:00:52 / claus"
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3852
    "Modified: 4.11.1996 / 23:04:34 / cg"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3853
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3854
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3855
makeUncompiled
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3856
    "make the receiver an uncompiled method, which raises an invalidCodeObject
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3857
     signal when executed. This is not for public use - it is required for
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3858
     the compiler to invalidate methods which cannot be compiled due to errors
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3859
     after a class definition change (for example: instvars are no longer there)."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3860
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3861
    |invldMethod|
872
af04035b443d binary class storage support
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  3862
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3863
    invldMethod := Method compiledMethodAt:#uncompiledCodeObject.
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3864
    self code:invldMethod code.
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3865
    self byteCode:nil.
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3866
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3867
    "Created: / 17-09-1995 / 15:01:14 / claus"
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3868
    "Modified: / 10-04-2017 / 22:50:21 / cg"
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3869
!
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3870
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3871
makeUnloaded
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3872
    "make the receiver an unloaded method, which raises an invalidCodeObject
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3873
     signal when executed. This is not for public use - it is required for
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3874
     the objectFileLoader to invalidate methods for which a shared library has
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3875
     been removed."
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3876
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3877
    |invldMethod|
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3878
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3879
    invldMethod := self class compiledMethodAt:#unloadedCodeObject.
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3880
    self code:invldMethod code.
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3881
    self byteCode:nil.
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3882
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3883
    "Created: 4.11.1996 / 22:59:21 / cg"
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3884
    "Modified: 4.11.1996 / 23:04:52 / cg"
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  3885
!
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  3886
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  3887
trapMethodForNumArgs:numArgs
13657
206c6696707b added: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13651
diff changeset
  3888
    ^ self class trapMethodForNumArgs:numArgs
206c6696707b added: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13651
diff changeset
  3889
206c6696707b added: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13651
diff changeset
  3890
    "Created: / 04-11-1996 / 21:58:58 / cg"
206c6696707b added: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13651
diff changeset
  3891
    "Modified: / 08-09-2011 / 05:35:48 / cg"
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3892
! !
872
af04035b443d binary class storage support
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  3893
2022
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3894
!Method::MethodWhoInfo class methodsFor:'documentation'!
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3895
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3896
documentation
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3897
"
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3898
    In earlier times, Method>>who returned an array filled
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3899
    with the method's class and selector.
2022
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3900
    This was done, since a smalltalk method cannot return multiple
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3901
    values, but 2 values had to be returned from that method.
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3902
    Thus, the who-interface was used as:
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3903
        info := <someMethod> who.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3904
        class := info at:1.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3905
        sel := info at:2.
2022
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3906
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3907
    Sure, this is ugly coding style, and the system has been changed to return
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3908
    an object (an instance of MethodWhoInfo) which responds to the two
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3909
    messages: #methodClass and #methodSelector.
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3910
    This allows to write things much more intuitive:
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3911
        info := <someMethod> who.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3912
        class := info methodClass.
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3913
        sel := info methodSelector.
2022
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3914
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3915
    However, to be backward compatible, the returned object still responds to
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3916
    the #at: message, but only allows inices of 1 and 2 to be used.
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3917
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3918
    The MethodWhoInfo class is private to Method - its not visible to other
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3919
    classes.
2242
5037033b8002 commentary
Claus Gittinger <cg@exept.de>
parents: 2218
diff changeset
  3920
5037033b8002 commentary
Claus Gittinger <cg@exept.de>
parents: 2218
diff changeset
  3921
    [author:]
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3922
        Claus Gittinger
2242
5037033b8002 commentary
Claus Gittinger <cg@exept.de>
parents: 2218
diff changeset
  3923
5037033b8002 commentary
Claus Gittinger <cg@exept.de>
parents: 2218
diff changeset
  3924
    [see also:]
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3925
        Method
2022
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3926
"
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3927
! !
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3928
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3929
!Method::MethodWhoInfo class methodsFor:'instance creation'!
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3930
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3931
class:cls selector:sel
2023
4c6416d1a54d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2022
diff changeset
  3932
    "return a new MethodWhoInfo object;
4c6416d1a54d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2022
diff changeset
  3933
     this is a private interface for Method"
4c6416d1a54d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2022
diff changeset
  3934
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3935
    ^ self basicNew class:cls selector:sel
2023
4c6416d1a54d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2022
diff changeset
  3936
4c6416d1a54d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2022
diff changeset
  3937
    "Modified: 2.1.1997 / 15:27:59 / cg"
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3938
! !
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3939
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3940
!Method::MethodWhoInfo methodsFor:'accessing'!
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3941
4669
828addb1c376 source code access - care for package different from my classes
Claus Gittinger <cg@exept.de>
parents: 4595
diff changeset
  3942
method
828addb1c376 source code access - care for package different from my classes
Claus Gittinger <cg@exept.de>
parents: 4595
diff changeset
  3943
    ^ myClass compiledMethodAt:mySelector
828addb1c376 source code access - care for package different from my classes
Claus Gittinger <cg@exept.de>
parents: 4595
diff changeset
  3944
!
828addb1c376 source code access - care for package different from my classes
Claus Gittinger <cg@exept.de>
parents: 4595
diff changeset
  3945
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3946
methodClass
2022
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3947
    "return the class which contains the method represented by myself"
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3948
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3949
    ^ myClass
2022
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3950
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3951
    "
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3952
     (Method compiledMethodAt:#who) who methodClass
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3953
     (Method::MethodWhoInfo compiledMethodAt:#methodClass) who methodClass
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3954
    "
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3955
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3956
    "Modified: 2.1.1997 / 14:59:02 / cg"
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3957
!
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3958
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3959
methodSelector
2022
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3960
    "return the selector under which the the method represented by myself
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3961
     is found in the class"
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3962
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3963
    ^ mySelector
2022
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3964
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3965
    "Modified: 2.1.1997 / 14:59:24 / cg"
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3966
! !
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3967
25415
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3968
!Method::MethodWhoInfo methodsFor:'comparing'!
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3969
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3970
= something
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3971
    ^ something class == self class
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3972
    and:[something methodClass name = self methodClass name
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3973
    and:[something methodSelector = self methodSelector ]]
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3974
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3975
    "Created: / 21-04-2020 / 13:23:07 / cg"
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3976
! !
4ea1fe7c363f Cherry-picked changes from eXept, part 1
Jan Vrany <jan.vrany@labware.com>
parents: 25398
diff changeset
  3977
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3978
!Method::MethodWhoInfo methodsFor:'compatibility'!
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3979
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3980
at:index
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3981
    "simulate the old behavior (when Method>>who returned an array)"
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3982
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3983
    index == 1 ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3984
	^ myClass
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3985
    ].
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3986
    index == 2 ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3987
	^ mySelector
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3988
    ].
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3989
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3990
    "/ sigh - full compatibility ?
7219
7c7b9d76af21 subscriptBoundsError -> subscriptBoundsError:
Claus Gittinger <cg@exept.de>
parents: 7210
diff changeset
  3991
    ^ self indexNotIntegerOrOutOfBounds:index
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3992
! !
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3993
7258
9ccdbee7d1ad method category rename
Claus Gittinger <cg@exept.de>
parents: 7219
diff changeset
  3994
!Method::MethodWhoInfo methodsFor:'private-accessing'!
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3995
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3996
class:cls selector:sel
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3997
    myClass := cls.
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3998
    mySelector := sel
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3999
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  4000
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  4001
! !
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  4002
13570
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4003
!Method::ParseTreeCacheEntry methodsFor:'accessing'!
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4004
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4005
method
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4006
    ^ method
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4007
!
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4008
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4009
method:something
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4010
    method := something.
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4011
!
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4012
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4013
parser
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4014
    ^ parser
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4015
!
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4016
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4017
parser:something
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4018
    parser := something.
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4019
!
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4020
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4021
parserClass
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4022
    ^ parserClass
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4023
!
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4024
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4025
parserClass:something
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4026
    parserClass := something.
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4027
!
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4028
13660
Claus Gittinger <cg@exept.de>
parents: 13659
diff changeset
  4029
parserClass:parserClassArg method:methodArg
13570
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4030
    parserClass := parserClassArg.
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4031
    method := methodArg.
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4032
!
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4033
13660
Claus Gittinger <cg@exept.de>
parents: 13659
diff changeset
  4034
parserClass:parserClassArg method:methodArg parser:parserArg
13570
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4035
    parserClass := parserClassArg.
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4036
    method := methodArg.
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4037
    parser := parserArg.
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4038
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4039
    "Created: / 08-08-2011 / 19:05:02 / cg"
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4040
! !
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4041
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4042
!Method::ParserCacheEntry methodsFor:'accessing'!
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4043
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4044
method
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4045
    ^ method
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4046
!
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4047
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4048
method:something
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4049
    method := something.
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4050
!
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4051
19716
34387335cbba #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 19699
diff changeset
  4052
method:methodArg parser:parserArg
34387335cbba #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 19699
diff changeset
  4053
    method := methodArg.
34387335cbba #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 19699
diff changeset
  4054
    parser := parserArg.
34387335cbba #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 19699
diff changeset
  4055
34387335cbba #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 19699
diff changeset
  4056
    "Created: / 08-08-2011 / 19:05:02 / cg"
34387335cbba #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 19699
diff changeset
  4057
!
34387335cbba #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 19699
diff changeset
  4058
13570
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4059
parser
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4060
    ^ parser
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4061
!
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4062
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4063
parser:something
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4064
    parser := something.
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4065
! !
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  4066
1775
6892b91ddc0b F_CALLED flag is no longer present
Claus Gittinger <cg@exept.de>
parents: 1692
diff changeset
  4067
!Method class methodsFor:'documentation'!
872
af04035b443d binary class storage support
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  4068
13569
82bcca38e855 comment/format in: #sends:or:
Claus Gittinger <cg@exept.de>
parents: 13567
diff changeset
  4069
version
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  4070
    ^ '$Header$'
13569
82bcca38e855 comment/format in: #sends:or:
Claus Gittinger <cg@exept.de>
parents: 13567
diff changeset
  4071
!
82bcca38e855 comment/format in: #sends:or:
Claus Gittinger <cg@exept.de>
parents: 13567
diff changeset
  4072
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  4073
version_CVS
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  4074
    ^ '$Header$'
12159
1768c0019100 compiler interface
fm
parents: 12017
diff changeset
  4075
!
1768c0019100 compiler interface
fm
parents: 12017
diff changeset
  4076
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  4077
version_SVN
15245
84fe46f42c9f class: Method
Claus Gittinger <cg@exept.de>
parents: 15109
diff changeset
  4078
    ^ '$ Id: Method.st 10648 2011-06-23 15:55:10Z vranyj1 $'
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  4079
! !
6956
23f0066163ff oops - EOL comments were handled wrong
Claus Gittinger <cg@exept.de>
parents: 6725
diff changeset
  4080
14863
49e50305f097 class: Method
Claus Gittinger <cg@exept.de>
parents: 14595
diff changeset
  4081
952
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  4082
Method initialize!