Method.st
author Claus Gittinger <cg@exept.de>
Thu, 14 Jan 2016 17:08:34 +0100
changeset 19025 f35582ce8389
parent 18753 941d99755164
child 19027 d1a18f4568a8
child 19449 607eb2e0e46c
permissions -rw-r--r--
#DOCUMENTATION class: Method changed: #package: used to suppress assigning NoProject. changed to allow this.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     1
"
5
67342904af11 *** empty log message ***
claus
parents: 3
diff changeset
     2
 COPYRIGHT (c) 1989 by Claus Gittinger
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
     3
	      All Rights Reserved
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     4
a27a279701f8 Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
a27a279701f8 Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
a27a279701f8 Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
a27a279701f8 Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
a27a279701f8 Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
a27a279701f8 Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
a27a279701f8 Initial revision
claus
parents:
diff changeset
    11
"
5385
7637332d7b38 care for nil package
Claus Gittinger <cg@exept.de>
parents: 5339
diff changeset
    12
"{ Package: 'stx:libbasic' }"
7637332d7b38 care for nil package
Claus Gittinger <cg@exept.de>
parents: 5339
diff changeset
    13
17278
7813956ffab4 class: Method
Claus Gittinger <cg@exept.de>
parents: 17254
diff changeset
    14
"{ NameSpace: Smalltalk }"
7813956ffab4 class: Method
Claus Gittinger <cg@exept.de>
parents: 17254
diff changeset
    15
3934
a8c6075f9988 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3845
diff changeset
    16
CompiledCode variableSubclass:#Method
16261
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
    17
	instanceVariableNames:'source sourcePosition category package mclass lookupObject
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
    18
		annotations'
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
    19
	classVariableNames:'PrivateMethodSignal LastFileReference LastSourceFileName
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
    20
		LastWhoClass LastFileLock LastMethodSources LastMethodSourcesLock
17254
053fe5d7fec8 class: Method
Claus Gittinger <cg@exept.de>
parents: 17250
diff changeset
    21
		CompilationLock Overrides LastParseTreeCache'
16261
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
    22
	poolDictionaries:''
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
    23
	category:'Kernel-Methods'
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    24
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    25
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
    26
Object subclass:#MethodWhoInfo
16261
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
    27
	instanceVariableNames:'myClass mySelector'
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
    28
	classVariableNames:''
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
    29
	poolDictionaries:''
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
    30
	privateIn:Method
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
    31
!
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
    32
13570
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
    33
Object subclass:#ParseTreeCacheEntry
16261
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
    34
	instanceVariableNames:'parserClass method parser'
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
    35
	classVariableNames:''
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
    36
	poolDictionaries:''
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
    37
	privateIn:Method
13570
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
    38
!
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
    39
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
    40
Object subclass:#ParserCacheEntry
16261
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
    41
	instanceVariableNames:'parserClass method parser'
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
    42
	classVariableNames:''
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
    43
	poolDictionaries:''
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
    44
	privateIn:Method
13570
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
1775
6892b91ddc0b F_CALLED flag is no longer present
Claus Gittinger <cg@exept.de>
parents: 1692
diff changeset
    47
!Method class methodsFor:'documentation'!
42
e33491f6f260 *** empty log message ***
claus
parents: 39
diff changeset
    48
88
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    49
copyright
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    50
"
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    51
 COPYRIGHT (c) 1989 by Claus Gittinger
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
    52
	      All Rights Reserved
88
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    53
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    54
 This software is furnished under a license and may be used
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    55
 only in accordance with the terms of that license and with the
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    56
 inclusion of the above copyright notice.   This software may not
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    57
 be provided or otherwise made available to, or used by, any
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    58
 other person.  No title to or ownership of the software is
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    59
 hereby transferred.
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    60
"
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    61
!
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    62
42
e33491f6f260 *** empty log message ***
claus
parents: 39
diff changeset
    63
documentation
e33491f6f260 *** empty log message ***
claus
parents: 39
diff changeset
    64
"
68
59faa75185ba *** empty log message ***
claus
parents: 56
diff changeset
    65
    this class defines protocol for executable methods;
59faa75185ba *** empty log message ***
claus
parents: 56
diff changeset
    66
    both compiled and interpreted methods are represented by this class.
59faa75185ba *** empty log message ***
claus
parents: 56
diff changeset
    67
    Compiled methods have a non-nil code field, while interpreted methods have
59faa75185ba *** empty log message ***
claus
parents: 56
diff changeset
    68
    a nil code field and non-nil byteCode field.
88
81dacba7a63a *** empty log message ***
claus
parents: 85
diff changeset
    69
    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
    70
    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
    71
    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
    72
    (or, a user defined interpreter can be invoked on the smalltalk level)
ae2934928225 class: Method
Claus Gittinger <cg@exept.de>
parents: 18411
diff changeset
    73
ae2934928225 class: Method
Claus Gittinger <cg@exept.de>
parents: 18411
diff changeset
    74
    The method's sourcecode is represented by source and sourcePosition:
227
23b1c4de3402 package & cleanup
claus
parents: 216
diff changeset
    75
    - if sourcePosition is a Number, the source-field is the fileName and
23b1c4de3402 package & cleanup
claus
parents: 216
diff changeset
    76
      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
    77
    - If sourcePosition is nil, the source fields holds the source string.
227
23b1c4de3402 package & cleanup
claus
parents: 216
diff changeset
    78
    (an old version used ExternalString instances here, but that lead to
18417
ae2934928225 class: Method
Claus Gittinger <cg@exept.de>
parents: 18411
diff changeset
    79
     10000's of additional little objects ...)
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    80
68
59faa75185ba *** empty log message ***
claus
parents: 56
diff changeset
    81
    The flags field defines things like the number of method-locals,
227
23b1c4de3402 package & cleanup
claus
parents: 216
diff changeset
    82
    method arguments and stack requirements (for interpreted methods).
68
59faa75185ba *** empty log message ***
claus
parents: 56
diff changeset
    83
    Do not depend on any value in the flags field - it may change without
59faa75185ba *** empty log message ***
claus
parents: 56
diff changeset
    84
    notice.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    85
438
claus
parents: 423
diff changeset
    86
    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
    87
    identified not by being an instance of Block or Method, but instead by
438
claus
parents: 423
diff changeset
    88
    having the executable flag bit set in the class. The VM can execute anything
claus
parents: 423
diff changeset
    89
    which is identified as executable (assuming that the first instance variable
claus
parents: 423
diff changeset
    90
    is the machine-code address) - this allows for easy future extension.
claus
parents: 423
diff changeset
    91
1293
02fb05148c98 documentation
Claus Gittinger <cg@exept.de>
parents: 1264
diff changeset
    92
    [Instance variables:]
93
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
    93
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
    94
	source          <String>        the source itself (if sourcePosition isNil)
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
    95
					or the fileName where the source is found
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
    96
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
    97
	sourcePosition  <Integer>       the position of the methods chunk in the file
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
    98
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
    99
	category        <Symbol>        the methods category
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   100
	package         <Symbol>        the package, in which the methods was defined
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   101
	mclass          <Class>         the class in which I am defined
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   102
	indexed slots                   literals
227
23b1c4de3402 package & cleanup
claus
parents: 216
diff changeset
   103
1293
02fb05148c98 documentation
Claus Gittinger <cg@exept.de>
parents: 1264
diff changeset
   104
    [Class variables:]
227
23b1c4de3402 package & cleanup
claus
parents: 216
diff changeset
   105
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   106
	PrivateMethodSignal             raised on privacy violation (see docu)
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   107
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   108
	LastFileReference               weak reference to the last sourceFile
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   109
	LastSourceFileName              to speedup source access via NFS
93
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
   110
68
59faa75185ba *** empty log message ***
claus
parents: 56
diff changeset
   111
    WARNING: layout known by compiler and runtime system - dont change
1293
02fb05148c98 documentation
Claus Gittinger <cg@exept.de>
parents: 1264
diff changeset
   112
02fb05148c98 documentation
Claus Gittinger <cg@exept.de>
parents: 1264
diff changeset
   113
    [author:]
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   114
	Claus Gittinger
42
e33491f6f260 *** empty log message ***
claus
parents: 39
diff changeset
   115
"
176
48061f8659aa more queries
claus
parents: 159
diff changeset
   116
!
48061f8659aa more queries
claus
parents: 159
diff changeset
   117
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
   118
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
   119
"
5277
d457937a69e5 comments & code-cleanup in #who
Claus Gittinger <cg@exept.de>
parents: 5241
diff changeset
   120
    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
   121
    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
   122
    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
   123
    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
   124
    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
   125
    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
   126
    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
   127
    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
   128
d457937a69e5 comments & code-cleanup in #who
Claus Gittinger <cg@exept.de>
parents: 5241
diff changeset
   129
    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
   130
    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
   131
    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
   132
    which is compiled by the machines native C-compiler.
d457937a69e5 comments & code-cleanup in #who
Claus Gittinger <cg@exept.de>
parents: 5241
diff changeset
   133
    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
   134
"
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
!
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
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
   137
privacy
176
48061f8659aa more queries
claus
parents: 159
diff changeset
   138
"
48061f8659aa more queries
claus
parents: 159
diff changeset
   139
    ST/X includes an EXPERIMENTAL implementation of method privacy.
48061f8659aa more queries
claus
parents: 159
diff changeset
   140
    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
   141
    privacy:#private and privacy:#protected messages. Also, categories may be
202
40ca7cc6fb9c *** empty log message ***
claus
parents: 192
diff changeset
   142
    filedIn as a whole as private using #privateMethodsFor: or as
40ca7cc6fb9c *** empty log message ***
claus
parents: 192
diff changeset
   143
    protected using #protectedMethodsFor: instead of the well known #methodsFor:.
40ca7cc6fb9c *** empty log message ***
claus
parents: 192
diff changeset
   144
176
48061f8659aa more queries
claus
parents: 159
diff changeset
   145
    The additional #publicMethodsFor: is for documentation purposes, and
227
23b1c4de3402 package & cleanup
claus
parents: 216
diff changeset
   146
    is equivalent to #methodsFor: (also to support fileIn of ENVY methods).
176
48061f8659aa more queries
claus
parents: 159
diff changeset
   147
8518
7dc3f9909640 Interchanged the meaning of method privacy -
Stefan Vogel <sv@exept.de>
parents: 8465
diff changeset
   148
    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
   149
    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
   150
    class itself or subclasses.
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
   151
    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
   152
    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
   153
    (i.e. protected methods are less private than private ones)
176
48061f8659aa more queries
claus
parents: 159
diff changeset
   154
48061f8659aa more queries
claus
parents: 159
diff changeset
   155
    When such a situation arises, the VM (runtime system) will raise the
48061f8659aa more queries
claus
parents: 159
diff changeset
   156
    PrivateMethodSignal exception (if nonNil), which usually brings you into the
48061f8659aa more queries
claus
parents: 159
diff changeset
   157
    debugger.
48061f8659aa more queries
claus
parents: 159
diff changeset
   158
227
23b1c4de3402 package & cleanup
claus
parents: 216
diff changeset
   159
    If PrivateMethodSignal is nil, the VM will not check for this, and
176
48061f8659aa more queries
claus
parents: 159
diff changeset
   160
    execution is as usual. (you may want to nil-it for production code,
48061f8659aa more queries
claus
parents: 159
diff changeset
   161
    and leave it non nil during development).
48061f8659aa more queries
claus
parents: 159
diff changeset
   162
48061f8659aa more queries
claus
parents: 159
diff changeset
   163
    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
   164
    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
   165
    (from what can be deduced by reading PD code).
d457937a69e5 comments & code-cleanup in #who
Claus Gittinger <cg@exept.de>
parents: 5241
diff changeset
   166
176
48061f8659aa more queries
claus
parents: 159
diff changeset
   167
    Also, the usability of privacy is still to be tested.
415
claus
parents: 414
diff changeset
   168
    This interface, the implementation and the rules for when a privacy violation
claus
parents: 414
diff changeset
   169
    may change (in case of some ANSI standard being defined).
227
23b1c4de3402 package & cleanup
claus
parents: 216
diff changeset
   170
    Be warned and send me suggestions & critics (constructive ;-)
5277
d457937a69e5 comments & code-cleanup in #who
Claus Gittinger <cg@exept.de>
parents: 5241
diff changeset
   171
d457937a69e5 comments & code-cleanup in #who
Claus Gittinger <cg@exept.de>
parents: 5241
diff changeset
   172
    Late note (Feb 2000):
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   173
	the privacy feature has new been in ST/X for some years and was NOT heavily
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   174
	used - neither at eXept, nor by customers.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   175
	In Smalltalk, it seems to be a very questionable feature, actually limiting
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   176
	code reusability.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   177
	The privacy features are left in the system to demonstrate that it can be
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   178
	done in Smalltalk (for religious C++ fans ... to avoid useless discussions)
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   179
	(the check is not expensive, w.r.t. the VM runtime behavior).
176
48061f8659aa more queries
claus
parents: 159
diff changeset
   180
"
42
e33491f6f260 *** empty log message ***
claus
parents: 39
diff changeset
   181
! !
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   182
1775
6892b91ddc0b F_CALLED flag is no longer present
Claus Gittinger <cg@exept.de>
parents: 1692
diff changeset
   183
!Method class methodsFor:'initialization'!
109
1fae65190b17 errors raise signals; check arg-count in valueWith...
claus
parents: 93
diff changeset
   184
1fae65190b17 errors raise signals; check arg-count in valueWith...
claus
parents: 93
diff changeset
   185
initialize
1254
48c2748b5197 commentary
Claus Gittinger <cg@exept.de>
parents: 1236
diff changeset
   186
    "create signals"
48c2748b5197 commentary
Claus Gittinger <cg@exept.de>
parents: 1236
diff changeset
   187
109
1fae65190b17 errors raise signals; check arg-count in valueWith...
claus
parents: 93
diff changeset
   188
    PrivateMethodSignal isNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   189
	"EXPERIMENTAL"
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   190
	PrivateMethodSignal := ExecutionError newSignalMayProceed:true.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   191
	PrivateMethodSignal nameClass:self message:#privateMethodSignal.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   192
	PrivateMethodSignal notifierString:'attempt to execute private/protected method'.
2079
bcf84ab30304 Make cached sourcefile thread-protected.
Stefan Vogel <sv@exept.de>
parents: 2066
diff changeset
   193
    ].
bcf84ab30304 Make cached sourcefile thread-protected.
Stefan Vogel <sv@exept.de>
parents: 2066
diff changeset
   194
bcf84ab30304 Make cached sourcefile thread-protected.
Stefan Vogel <sv@exept.de>
parents: 2066
diff changeset
   195
    LastFileLock isNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   196
	LastFileLock := RecursionLock new name:'Method-LastFile'.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   197
	LastMethodSourcesLock := RecursionLock new name:'Method-LastMethodSources'.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   198
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   199
	LastFileReference := WeakArray new:1.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   200
	LastFileReference at:1 put:nil.
2079
bcf84ab30304 Make cached sourcefile thread-protected.
Stefan Vogel <sv@exept.de>
parents: 2066
diff changeset
   201
    ].
1254
48c2748b5197 commentary
Claus Gittinger <cg@exept.de>
parents: 1236
diff changeset
   202
5387
f855cf3b2f67 need a recursionLock as compilationLock
Claus Gittinger <cg@exept.de>
parents: 5386
diff changeset
   203
    CompilationLock := RecursionLock new name:'MethodCompilation'.
4290
5e43473d7a35 moved recompilation semaphore from LazyMethod to Method
Claus Gittinger <cg@exept.de>
parents: 4015
diff changeset
   204
14231
a61fd41fe0d6 variable renamed in: #initialize
Claus Gittinger <cg@exept.de>
parents: 14161
diff changeset
   205
    "Modified: / 03-01-1997 / 16:58:16 / stefan"
a61fd41fe0d6 variable renamed in: #initialize
Claus Gittinger <cg@exept.de>
parents: 14161
diff changeset
   206
    "Modified (comment): / 20-07-2012 / 18:41:11 / cg"
10375
b1558b2e851d care for source access BEFORE being initialized.
ca
parents: 10207
diff changeset
   207
!
b1558b2e851d care for source access BEFORE being initialized.
ca
parents: 10207
diff changeset
   208
b1558b2e851d care for source access BEFORE being initialized.
ca
parents: 10207
diff changeset
   209
lastMethodSourcesLock
b1558b2e851d care for source access BEFORE being initialized.
ca
parents: 10207
diff changeset
   210
    LastMethodSourcesLock isNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   211
	self initialize
10375
b1558b2e851d care for source access BEFORE being initialized.
ca
parents: 10207
diff changeset
   212
    ].
b1558b2e851d care for source access BEFORE being initialized.
ca
parents: 10207
diff changeset
   213
    ^ LastMethodSourcesLock
109
1fae65190b17 errors raise signals; check arg-count in valueWith...
claus
parents: 93
diff changeset
   214
! !
1fae65190b17 errors raise signals; check arg-count in valueWith...
claus
parents: 93
diff changeset
   215
1775
6892b91ddc0b F_CALLED flag is no longer present
Claus Gittinger <cg@exept.de>
parents: 1692
diff changeset
   216
!Method class methodsFor:'Signal constants'!
159
514c749165c3 *** empty log message ***
claus
parents: 142
diff changeset
   217
514c749165c3 *** empty log message ***
claus
parents: 142
diff changeset
   218
privateMethodSignal
176
48061f8659aa more queries
claus
parents: 159
diff changeset
   219
    "return the signal raised when a private/protected method is called
48061f8659aa more queries
claus
parents: 159
diff changeset
   220
     by some other object (i.e. not a self- or super send)"
48061f8659aa more queries
claus
parents: 159
diff changeset
   221
159
514c749165c3 *** empty log message ***
claus
parents: 142
diff changeset
   222
    ^ PrivateMethodSignal
514c749165c3 *** empty log message ***
claus
parents: 142
diff changeset
   223
! !
514c749165c3 *** empty log message ***
claus
parents: 142
diff changeset
   224
11022
8dd9f699915f +shouldBeSkippedInDebuggersWalkBack
Claus Gittinger <cg@exept.de>
parents: 11016
diff changeset
   225
13570
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
   226
!Method class methodsFor:'cleanup'!
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
   227
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
   228
lowSpaceCleanup
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
   229
    LastParseTreeCache := nil.
13572
c81aeb055fd3 changed: #lowSpaceCleanup
Claus Gittinger <cg@exept.de>
parents: 13571
diff changeset
   230
    LastSourceFileName := LastWhoClass := nil.
14236
d383e9f70795 changed: #lowSpaceCleanup
Claus Gittinger <cg@exept.de>
parents: 14231
diff changeset
   231
    self flushSourceStreamCache.
13570
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
   232
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
   233
    "Created: / 08-08-2011 / 19:11:23 / cg"
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
   234
! !
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
   235
1775
6892b91ddc0b F_CALLED flag is no longer present
Claus Gittinger <cg@exept.de>
parents: 1692
diff changeset
   236
!Method class methodsFor:'queries'!
3
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
   237
18462
c45bfbc05503 class: Method
Stefan Vogel <sv@exept.de>
parents: 18438
diff changeset
   238
binarySelectorCharacters
c45bfbc05503 class: Method
Stefan Vogel <sv@exept.de>
parents: 18438
diff changeset
   239
    "return a collection of characters which are allowed in binary selectors"
c45bfbc05503 class: Method
Stefan Vogel <sv@exept.de>
parents: 18438
diff changeset
   240
c45bfbc05503 class: Method
Stefan Vogel <sv@exept.de>
parents: 18438
diff changeset
   241
    ^ '&-+=*/\<>~@,?!!|%#'.
c45bfbc05503 class: Method
Stefan Vogel <sv@exept.de>
parents: 18438
diff changeset
   242
!
c45bfbc05503 class: Method
Stefan Vogel <sv@exept.de>
parents: 18438
diff changeset
   243
3
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
   244
isBuiltInClass
1264
8d916aa63bce commentary
Claus Gittinger <cg@exept.de>
parents: 1260
diff changeset
   245
    "return true if this class is known by the run-time-system.
8d916aa63bce commentary
Claus Gittinger <cg@exept.de>
parents: 1260
diff changeset
   246
     Here, true is returned for myself, false for subclasses."
3
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
   247
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
   248
    ^ self == Method
1264
8d916aa63bce commentary
Claus Gittinger <cg@exept.de>
parents: 1260
diff changeset
   249
8d916aa63bce commentary
Claus Gittinger <cg@exept.de>
parents: 1260
diff changeset
   250
    "Modified: 23.4.1996 / 15:59:50 / cg"
44
b262907c93ea *** empty log message ***
claus
parents: 42
diff changeset
   251
!
b262907c93ea *** empty log message ***
claus
parents: 42
diff changeset
   252
18462
c45bfbc05503 class: Method
Stefan Vogel <sv@exept.de>
parents: 18438
diff changeset
   253
maxBinarySelectorSize
c45bfbc05503 class: Method
Stefan Vogel <sv@exept.de>
parents: 18438
diff changeset
   254
    ^ 3
c45bfbc05503 class: Method
Stefan Vogel <sv@exept.de>
parents: 18438
diff changeset
   255
c45bfbc05503 class: Method
Stefan Vogel <sv@exept.de>
parents: 18438
diff changeset
   256
    "
c45bfbc05503 class: Method
Stefan Vogel <sv@exept.de>
parents: 18438
diff changeset
   257
     in ST/X, binops are allowed with up-to 3 characters;
c45bfbc05503 class: Method
Stefan Vogel <sv@exept.de>
parents: 18438
diff changeset
   258
     for example:
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   259
	<->
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   260
	<=>
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   261
	+++
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   262
	:=:
18462
c45bfbc05503 class: Method
Stefan Vogel <sv@exept.de>
parents: 18438
diff changeset
   263
     etc. are valid binOps here
c45bfbc05503 class: Method
Stefan Vogel <sv@exept.de>
parents: 18438
diff changeset
   264
    "
c45bfbc05503 class: Method
Stefan Vogel <sv@exept.de>
parents: 18438
diff changeset
   265
!
c45bfbc05503 class: Method
Stefan Vogel <sv@exept.de>
parents: 18438
diff changeset
   266
6089
a3710756f360 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6071
diff changeset
   267
methodDefinitionTemplateForSelector:aSelector
a3710756f360 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6071
diff changeset
   268
    "given a selector, return a prototype definition string"
a3710756f360 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6071
diff changeset
   269
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   270
    ^ self programmingLanguage
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   271
	methodDefinitionTemplateForSelector:aSelector
6090
77dfb33df61a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6089
diff changeset
   272
77dfb33df61a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6089
diff changeset
   273
    "
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
   274
     Method methodDefinitionTemplateForSelector:#foo
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
   275
     Method methodDefinitionTemplateForSelector:#+
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
   276
     Method methodDefinitionTemplateForSelector:#foo:bar:baz:
6090
77dfb33df61a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6089
diff changeset
   277
    "
77dfb33df61a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6089
diff changeset
   278
!
77dfb33df61a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6089
diff changeset
   279
77dfb33df61a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6089
diff changeset
   280
methodDefinitionTemplateForSelector:aSelector andArgumentNames:argNames
77dfb33df61a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6089
diff changeset
   281
    "given a selector, return a prototype definition string"
77dfb33df61a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6089
diff changeset
   282
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   283
    ^ self programmingLanguage
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   284
	methodDefinitionTemplateForSelector:aSelector andArgumentNames:argNames
6089
a3710756f360 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6071
diff changeset
   285
a3710756f360 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6071
diff changeset
   286
    "
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   287
     Method methodDefinitionTemplateForSelector:#foo          andArgumentNames:#()
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
   288
     Method methodDefinitionTemplateForSelector:#+            andArgumentNames:#('aNumber')
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
   289
     Method methodDefinitionTemplateForSelector:#foo:bar:baz: andArgumentNames:#('fooArg' 'barArg' 'bazArg')
6089
a3710756f360 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6071
diff changeset
   290
    "
a3710756f360 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6071
diff changeset
   291
!
a3710756f360 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6071
diff changeset
   292
747
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
   293
methodPrivacySupported
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
   294
    "return true, if the system was compiled to support methodPrivacy.
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
   295
     You should not depend on that feature being available."
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
   296
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
   297
%{  /* NOCONTEXT */
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
   298
#if defined(F_PRIVATE) || defined(F_CLASSPRIVATE)
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
   299
    RETURN (true);
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
   300
#else
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
   301
    RETURN (false);
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
   302
#endif
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
   303
%}
3342
8bcf0fc80a21 class method #resourceTypes re-added
tz
parents: 3341
diff changeset
   304
!
8bcf0fc80a21 class method #resourceTypes re-added
tz
parents: 3341
diff changeset
   305
8bcf0fc80a21 class method #resourceTypes re-added
tz
parents: 3341
diff changeset
   306
resourceTypes
8bcf0fc80a21 class method #resourceTypes re-added
tz
parents: 3341
diff changeset
   307
    "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
   308
8526
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
   309
    ^ #(canvas menu image fileImage help hierarchicalList tabList tableColumns)
3
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
   310
! !
24d81bf47225 *** empty log message ***
claus
parents: 2
diff changeset
   311
1775
6892b91ddc0b F_CALLED flag is no longer present
Claus Gittinger <cg@exept.de>
parents: 1692
diff changeset
   312
!Method class methodsFor:'special'!
957
b405ae99d437 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 952
diff changeset
   313
14039
30251b45156a added: #flushParseTreeCache
Claus Gittinger <cg@exept.de>
parents: 13847
diff changeset
   314
flushParseTreeCache
30251b45156a added: #flushParseTreeCache
Claus Gittinger <cg@exept.de>
parents: 13847
diff changeset
   315
    "used by lint and the compiler"
30251b45156a added: #flushParseTreeCache
Claus Gittinger <cg@exept.de>
parents: 13847
diff changeset
   316
30251b45156a added: #flushParseTreeCache
Claus Gittinger <cg@exept.de>
parents: 13847
diff changeset
   317
    LastParseTreeCache := nil
30251b45156a added: #flushParseTreeCache
Claus Gittinger <cg@exept.de>
parents: 13847
diff changeset
   318
30251b45156a added: #flushParseTreeCache
Claus Gittinger <cg@exept.de>
parents: 13847
diff changeset
   319
    "
30251b45156a added: #flushParseTreeCache
Claus Gittinger <cg@exept.de>
parents: 13847
diff changeset
   320
     Method flushParseTreeCache
30251b45156a added: #flushParseTreeCache
Claus Gittinger <cg@exept.de>
parents: 13847
diff changeset
   321
    "
30251b45156a added: #flushParseTreeCache
Claus Gittinger <cg@exept.de>
parents: 13847
diff changeset
   322
30251b45156a added: #flushParseTreeCache
Claus Gittinger <cg@exept.de>
parents: 13847
diff changeset
   323
    "Created: / 01-03-2012 / 16:45:34 / cg"
30251b45156a added: #flushParseTreeCache
Claus Gittinger <cg@exept.de>
parents: 13847
diff changeset
   324
!
30251b45156a added: #flushParseTreeCache
Claus Gittinger <cg@exept.de>
parents: 13847
diff changeset
   325
957
b405ae99d437 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 952
diff changeset
   326
flushSourceStreamCache
11663
6ef3b25bd306 changed #sourceStream - honor lock
Stefan Vogel <sv@exept.de>
parents: 11428
diff changeset
   327
    LastFileLock critical:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   328
	LastSourceFileName := LastMethodSources := nil.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   329
	LastFileReference at:1 put:0.
11663
6ef3b25bd306 changed #sourceStream - honor lock
Stefan Vogel <sv@exept.de>
parents: 11428
diff changeset
   330
    ].
957
b405ae99d437 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 952
diff changeset
   331
7830
a19d3746255f comment
Claus Gittinger <cg@exept.de>
parents: 7771
diff changeset
   332
    "
a19d3746255f comment
Claus Gittinger <cg@exept.de>
parents: 7771
diff changeset
   333
     Method flushSourceStreamCache
a19d3746255f comment
Claus Gittinger <cg@exept.de>
parents: 7771
diff changeset
   334
    "
a19d3746255f comment
Claus Gittinger <cg@exept.de>
parents: 7771
diff changeset
   335
957
b405ae99d437 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 952
diff changeset
   336
    "Created: 9.2.1996 / 19:05:28 / cg"
b405ae99d437 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 952
diff changeset
   337
! !
b405ae99d437 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 952
diff changeset
   338
13657
206c6696707b added: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13651
diff changeset
   339
!Method class methodsFor:'trap methods'!
206c6696707b added: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13651
diff changeset
   340
206c6696707b added: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13651
diff changeset
   341
trapMethodForNumArgs:numArgs
13805
dec466a100bc changed: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13693
diff changeset
   342
    "return a method which will raise an invalid code object exception.
dec466a100bc changed: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13693
diff changeset
   343
     Before recompiling methods (due to changed variable scopes, for example),
dec466a100bc changed: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13693
diff changeset
   344
     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
   345
     remains in the method to make it trap, whenever executed later.
dec466a100bc changed: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13693
diff changeset
   346
     Otherwise, if recompilation succeeeds, that code will vanish after the compile"
dec466a100bc changed: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13693
diff changeset
   347
dec466a100bc changed: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13693
diff changeset
   348
    |trapSel trapMethod|
13657
206c6696707b added: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13651
diff changeset
   349
206c6696707b added: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13651
diff changeset
   350
    trapSel := #(
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   351
		   invalidCodeObject
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   352
		   invalidCodeObjectWith:
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   353
		   invalidCodeObjectWith:with:
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   354
		   invalidCodeObjectWith:with:with:
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   355
		   invalidCodeObjectWith:with:with:with:
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   356
		   invalidCodeObjectWith:with:with:with:with:
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   357
		   invalidCodeObjectWith:with:with:with:with:with:
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   358
		   invalidCodeObjectWith:with:with:with:with:with:with:
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   359
		   invalidCodeObjectWith:with:with:with:with:with:with:with:
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   360
		   invalidCodeObjectWith:with:with:with:with:with:with:with:with:
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   361
		   invalidCodeObjectWith:with:with:with:with:with:with:with:with:with:
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   362
		   invalidCodeObjectWith:with:with:with:with:with:with:with:with:with:with:
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   363
		   invalidCodeObjectWith:with:with:with:with:with:with:with:with:with:with:with:
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   364
		   invalidCodeObjectWith:with:with:with:with:with:with:with:with:with:with:with:with:
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   365
		   invalidCodeObjectWith:with:with:with:with:with:with:with:with:with:with:with:with:with:
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   366
		   invalidCodeObjectWith:with:with:with:with:with:with:with:with:with:with:with:with:with:with:
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   367
		) at:(numArgs + 1).
13657
206c6696707b added: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13651
diff changeset
   368
13805
dec466a100bc changed: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13693
diff changeset
   369
    (trapMethod := self compiledMethodAt:trapSel) isNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   370
	trapMethod := Method compiledMethodAt:trapSel.
13805
dec466a100bc changed: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13693
diff changeset
   371
    ].
dec466a100bc changed: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13693
diff changeset
   372
    ^ trapMethod.
13657
206c6696707b added: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13651
diff changeset
   373
16261
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
   374
    "
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   375
	self trapMethodForNumArgs:2
16261
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
   376
    "
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
   377
13657
206c6696707b added: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13651
diff changeset
   378
    "Created: / 04-11-1996 / 21:58:58 / cg"
13693
16c890248840 added: #invalidCodeObjectWith:
sr
parents: 13683
diff changeset
   379
    "Modified: / 14-09-2011 / 11:23:09 / sr"
13805
dec466a100bc changed: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13693
diff changeset
   380
    "Modified (comment): / 30-10-2011 / 11:04:24 / cg"
13657
206c6696707b added: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13651
diff changeset
   381
! !
206c6696707b added: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13651
diff changeset
   382
13634
40d6d6b5d9f0 added: #pragmas
Claus Gittinger <cg@exept.de>
parents: 13629
diff changeset
   383
!Method methodsFor:'Compatibility-Squeak'!
40d6d6b5d9f0 added: #pragmas
Claus Gittinger <cg@exept.de>
parents: 13629
diff changeset
   384
14161
3b44e4394070 added: #isCompiledMethod
Claus Gittinger <cg@exept.de>
parents: 14152
diff changeset
   385
isCompiledMethod
3b44e4394070 added: #isCompiledMethod
Claus Gittinger <cg@exept.de>
parents: 14152
diff changeset
   386
    ^ true
3b44e4394070 added: #isCompiledMethod
Claus Gittinger <cg@exept.de>
parents: 14152
diff changeset
   387
3b44e4394070 added: #isCompiledMethod
Claus Gittinger <cg@exept.de>
parents: 14152
diff changeset
   388
    "Created: / 13-06-2012 / 14:51:19 / cg"
3b44e4394070 added: #isCompiledMethod
Claus Gittinger <cg@exept.de>
parents: 14152
diff changeset
   389
!
3b44e4394070 added: #isCompiledMethod
Claus Gittinger <cg@exept.de>
parents: 14152
diff changeset
   390
13676
a45e94212639 added: #pragmaAt:
Claus Gittinger <cg@exept.de>
parents: 13662
diff changeset
   391
pragmaAt:aKey
a45e94212639 added: #pragmaAt:
Claus Gittinger <cg@exept.de>
parents: 13662
diff changeset
   392
    ^ self annotationAt:aKey
a45e94212639 added: #pragmaAt:
Claus Gittinger <cg@exept.de>
parents: 13662
diff changeset
   393
a45e94212639 added: #pragmaAt:
Claus Gittinger <cg@exept.de>
parents: 13662
diff changeset
   394
    "Created: / 11-09-2011 / 18:09:05 / cg"
a45e94212639 added: #pragmaAt:
Claus Gittinger <cg@exept.de>
parents: 13662
diff changeset
   395
!
a45e94212639 added: #pragmaAt:
Claus Gittinger <cg@exept.de>
parents: 13662
diff changeset
   396
13634
40d6d6b5d9f0 added: #pragmas
Claus Gittinger <cg@exept.de>
parents: 13629
diff changeset
   397
pragmas
16193
004fe3b584a7 class: Method
Claus Gittinger <cg@exept.de>
parents: 16130
diff changeset
   398
    "for squeak compatibility, we only present real pragmas"
004fe3b584a7 class: Method
Claus Gittinger <cg@exept.de>
parents: 16130
diff changeset
   399
004fe3b584a7 class: Method
Claus Gittinger <cg@exept.de>
parents: 16130
diff changeset
   400
    ^ (self annotations ? #()) select:[:a | a isArray not and:[ a isResource not ] ]
13679
3fd763ff0911 added: #propertyValueAt:
Claus Gittinger <cg@exept.de>
parents: 13676
diff changeset
   401
!
3fd763ff0911 added: #propertyValueAt:
Claus Gittinger <cg@exept.de>
parents: 13676
diff changeset
   402
3fd763ff0911 added: #propertyValueAt:
Claus Gittinger <cg@exept.de>
parents: 13676
diff changeset
   403
propertyValueAt:aKey
3fd763ff0911 added: #propertyValueAt:
Claus Gittinger <cg@exept.de>
parents: 13676
diff changeset
   404
    "for now - no properties"
3fd763ff0911 added: #propertyValueAt:
Claus Gittinger <cg@exept.de>
parents: 13676
diff changeset
   405
3fd763ff0911 added: #propertyValueAt:
Claus Gittinger <cg@exept.de>
parents: 13676
diff changeset
   406
    ^ nil
3fd763ff0911 added: #propertyValueAt:
Claus Gittinger <cg@exept.de>
parents: 13676
diff changeset
   407
3fd763ff0911 added: #propertyValueAt:
Claus Gittinger <cg@exept.de>
parents: 13676
diff changeset
   408
    "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
   409
!
8f814706ef37 Added Method>>sourceCode Squeak compatibility method
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16877
diff changeset
   410
8f814706ef37 Added Method>>sourceCode Squeak compatibility method
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16877
diff changeset
   411
sourceCode
8f814706ef37 Added Method>>sourceCode Squeak compatibility method
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16877
diff changeset
   412
    ^ self source
8f814706ef37 Added Method>>sourceCode Squeak compatibility method
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16877
diff changeset
   413
8f814706ef37 Added Method>>sourceCode Squeak compatibility method
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16877
diff changeset
   414
    "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
   415
! !
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   416
7261
f35fc9cee675 method category rename
Claus Gittinger <cg@exept.de>
parents: 7258
diff changeset
   417
!Method methodsFor:'Compatibility-VW'!
5967
ab762bb4f64f added #sendsSelector:
Claus Gittinger <cg@exept.de>
parents: 5959
diff changeset
   418
17647
6728a090cd05 class: Method
Claus Gittinger <cg@exept.de>
parents: 17562
diff changeset
   419
attributeAt:aSymbol ifAbsent:exceptionValue
6728a090cd05 class: Method
Claus Gittinger <cg@exept.de>
parents: 17562
diff changeset
   420
    |annots|
6728a090cd05 class: Method
Claus Gittinger <cg@exept.de>
parents: 17562
diff changeset
   421
6728a090cd05 class: Method
Claus Gittinger <cg@exept.de>
parents: 17562
diff changeset
   422
    annots := self annotationsAt:aSymbol.
17693
34f65034df3e class: Method
Claus Gittinger <cg@exept.de>
parents: 17647
diff changeset
   423
    annots isEmptyOrNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   424
	(aSymbol endsWith:$:) ifFalse:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   425
	    annots := self annotationsAt:(aSymbol,$:) asSymbol.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   426
	].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   427
	annots isEmptyOrNil ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   428
	    ^ exceptionValue value
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   429
	].
17693
34f65034df3e class: Method
Claus Gittinger <cg@exept.de>
parents: 17647
diff changeset
   430
    ].
17647
6728a090cd05 class: Method
Claus Gittinger <cg@exept.de>
parents: 17562
diff changeset
   431
    ^ annots first arguments first
6728a090cd05 class: Method
Claus Gittinger <cg@exept.de>
parents: 17562
diff changeset
   432
!
6728a090cd05 class: Method
Claus Gittinger <cg@exept.de>
parents: 17562
diff changeset
   433
6728a090cd05 class: Method
Claus Gittinger <cg@exept.de>
parents: 17562
diff changeset
   434
attributeMessages
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   435
    ^ self annotations
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   436
	collect:[:annot | Message selector:annot key arguments:annot arguments]
17647
6728a090cd05 class: Method
Claus Gittinger <cg@exept.de>
parents: 17562
diff changeset
   437
!
6728a090cd05 class: Method
Claus Gittinger <cg@exept.de>
parents: 17562
diff changeset
   438
11146
553e658691d2 +classIsMeta
Claus Gittinger <cg@exept.de>
parents: 11066
diff changeset
   439
classIsMeta
553e658691d2 +classIsMeta
Claus Gittinger <cg@exept.de>
parents: 11066
diff changeset
   440
    "return true, if this method is a class method"
553e658691d2 +classIsMeta
Claus Gittinger <cg@exept.de>
parents: 11066
diff changeset
   441
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
   442
    ^ self mclass isMeta
11146
553e658691d2 +classIsMeta
Claus Gittinger <cg@exept.de>
parents: 11066
diff changeset
   443
!
553e658691d2 +classIsMeta
Claus Gittinger <cg@exept.de>
parents: 11066
diff changeset
   444
17175
9b51d2509e65 class: Method
Claus Gittinger <cg@exept.de>
parents: 17173
diff changeset
   445
sendsAnySelector:aCollectionOfSymbols
9b51d2509e65 class: Method
Claus Gittinger <cg@exept.de>
parents: 17173
diff changeset
   446
    "return true, if this method contains a message-send
9b51d2509e65 class: Method
Claus Gittinger <cg@exept.de>
parents: 17173
diff changeset
   447
     with any from aCollectionOfSymbols as selector."
9b51d2509e65 class: Method
Claus Gittinger <cg@exept.de>
parents: 17173
diff changeset
   448
9b51d2509e65 class: Method
Claus Gittinger <cg@exept.de>
parents: 17173
diff changeset
   449
    ^ self sendsAny:aCollectionOfSymbols
9b51d2509e65 class: Method
Claus Gittinger <cg@exept.de>
parents: 17173
diff changeset
   450
!
9b51d2509e65 class: Method
Claus Gittinger <cg@exept.de>
parents: 17173
diff changeset
   451
5967
ab762bb4f64f added #sendsSelector:
Claus Gittinger <cg@exept.de>
parents: 5959
diff changeset
   452
sendsSelector:aSelectorSymbol
ab762bb4f64f added #sendsSelector:
Claus Gittinger <cg@exept.de>
parents: 5959
diff changeset
   453
    "return true, if this method contains a message-send
ab762bb4f64f added #sendsSelector:
Claus Gittinger <cg@exept.de>
parents: 5959
diff changeset
   454
     with aSelectorSymbol as selector."
ab762bb4f64f added #sendsSelector:
Claus Gittinger <cg@exept.de>
parents: 5959
diff changeset
   455
ab762bb4f64f added #sendsSelector:
Claus Gittinger <cg@exept.de>
parents: 5959
diff changeset
   456
    ^ self sends:aSelectorSymbol
ab762bb4f64f added #sendsSelector:
Claus Gittinger <cg@exept.de>
parents: 5959
diff changeset
   457
! !
ab762bb4f64f added #sendsSelector:
Claus Gittinger <cg@exept.de>
parents: 5959
diff changeset
   458
9096
84df3b129718 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9075
diff changeset
   459
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   460
!Method methodsFor:'accessing'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   461
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
   462
category
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
   463
    "return the methods category or nil"
737
4ed893ad3f0f try more to find source of obsolete methods
Claus Gittinger <cg@exept.de>
parents: 690
diff changeset
   464
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
   465
    ^ category
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   466
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   467
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
   468
category:aStringOrSymbol
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
   469
    "set the methods category"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   470
5724
96c2a5cf4217 category: and package: now send change notifications.
Claus Gittinger <cg@exept.de>
parents: 5721
diff changeset
   471
    |newCategory oldCategory cls|
5721
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
   472
3934
a8c6075f9988 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3845
diff changeset
   473
    aStringOrSymbol notNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   474
	newCategory := aStringOrSymbol.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   475
	newCategory ~= (oldCategory := category) ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   476
	    self setCategory:newCategory.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   477
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   478
	    cls := self mclass.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   479
	    cls notNil ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   480
		cls addChangeRecordForMethodCategory:self category:newCategory.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   481
		self changed:#category with:oldCategory.            "/ will vanish
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   482
		cls changed:#organization with:self selector.       "/ will vanish
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   483
		Smalltalk changed:#methodCategory with:(Array with:cls with:self with:oldCategory).
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   484
	    ]
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   485
	]
3934
a8c6075f9988 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3845
diff changeset
   486
    ]
a8c6075f9988 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3845
diff changeset
   487
10729
16fea9f03635 changed #category:
Claus Gittinger <cg@exept.de>
parents: 10673
diff changeset
   488
    "Modified: / 25-09-2007 / 16:15:24 / cg"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   489
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
   490
39
bcf183a31bbb *** empty log message ***
claus
parents: 13
diff changeset
   491
comment
16847
b3e7faf77eb1 class: Method
Claus Gittinger <cg@exept.de>
parents: 16737
diff changeset
   492
    "return the method's comment.
68
59faa75185ba *** empty log message ***
claus
parents: 56
diff changeset
   493
     This is done by searching for and returning the first comment
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
   494
     from the methods source (excluding any double-quotes).
68
59faa75185ba *** empty log message ***
claus
parents: 56
diff changeset
   495
     Returns nil if there is no comment (or source is not available)."
39
bcf183a31bbb *** empty log message ***
claus
parents: 13
diff changeset
   496
14152
4b6500ff4bec changed: #comment
Claus Gittinger <cg@exept.de>
parents: 14090
diff changeset
   497
    |src parserClass|
39
bcf183a31bbb *** empty log message ***
claus
parents: 13
diff changeset
   498
159
514c749165c3 *** empty log message ***
claus
parents: 142
diff changeset
   499
    src := self source.
514c749165c3 *** empty log message ***
claus
parents: 142
diff changeset
   500
    src isNil ifTrue:[^ nil].
14152
4b6500ff4bec changed: #comment
Claus Gittinger <cg@exept.de>
parents: 14090
diff changeset
   501
    (parserClass := self programmingLanguage parserClass) isNil ifTrue:[^ nil].
4b6500ff4bec changed: #comment
Claus Gittinger <cg@exept.de>
parents: 14090
diff changeset
   502
    ^ parserClass methodCommentFromSource:src
93
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
   503
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
   504
    "
13463
7c98583d98c8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 13422
diff changeset
   505
     (Method compiledMethodAt:#comment) comment
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
   506
     (Object class compiledMethodAt:#infoPrinting:) comment
93
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
   507
    "
1236
5c9bc68e3c71 use new scanner feature to extract comment
Claus Gittinger <cg@exept.de>
parents: 1194
diff changeset
   508
12948
f238e8b26110 changed: #comment
Claus Gittinger <cg@exept.de>
parents: 12913
diff changeset
   509
    "Modified: / 23-02-1998 / 10:26:08 / stefan"
14152
4b6500ff4bec changed: #comment
Claus Gittinger <cg@exept.de>
parents: 14090
diff changeset
   510
    "Modified: / 01-06-2012 / 23:03:57 / cg"
39
bcf183a31bbb *** empty log message ***
claus
parents: 13
diff changeset
   511
!
bcf183a31bbb *** empty log message ***
claus
parents: 13
diff changeset
   512
14595
5c27c812055b class: Method
Claus Gittinger <cg@exept.de>
parents: 14573
diff changeset
   513
getMclass
17278
7813956ffab4 class: Method
Claus Gittinger <cg@exept.de>
parents: 17254
diff changeset
   514
    "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
   515
     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
   516
     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
   517
     reference to the once valid class"
7813956ffab4 class: Method
Claus Gittinger <cg@exept.de>
parents: 17254
diff changeset
   518
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   519
    ^ mclass
14595
5c27c812055b class: Method
Claus Gittinger <cg@exept.de>
parents: 14573
diff changeset
   520
!
5c27c812055b class: Method
Claus Gittinger <cg@exept.de>
parents: 14573
diff changeset
   521
9702
468675f92260 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9692
diff changeset
   522
getPackage
468675f92260 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9692
diff changeset
   523
    "return the package-ID of the method"
468675f92260 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9692
diff changeset
   524
468675f92260 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9692
diff changeset
   525
    ^ package
468675f92260 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9692
diff changeset
   526
!
468675f92260 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9692
diff changeset
   527
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
   528
getSource
3160
db5c1aa38fda comment
Claus Gittinger <cg@exept.de>
parents: 3144
diff changeset
   529
    "low-level access to the source instance-variable.
4751
174a92d4ba3f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4669
diff changeset
   530
     For internal (compiler) use only.
3160
db5c1aa38fda comment
Claus Gittinger <cg@exept.de>
parents: 3144
diff changeset
   531
     This is NOT always the methods source string"
db5c1aa38fda comment
Claus Gittinger <cg@exept.de>
parents: 3144
diff changeset
   532
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
   533
    ^ source
414
claus
parents: 400
diff changeset
   534
!
claus
parents: 400
diff changeset
   535
4751
174a92d4ba3f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4669
diff changeset
   536
getSourcePosition
174a92d4ba3f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4669
diff changeset
   537
    "low-level access to the sourcePosition instance-variable.
174a92d4ba3f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4669
diff changeset
   538
     For internal (compiler) use only.
174a92d4ba3f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4669
diff changeset
   539
     This is NOT always the methods sourcePosition"
174a92d4ba3f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4669
diff changeset
   540
174a92d4ba3f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4669
diff changeset
   541
    ^ sourcePosition
174a92d4ba3f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4669
diff changeset
   542
!
174a92d4ba3f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4669
diff changeset
   543
2176
1a24b0cef25a when compressing sources, make certain to avoid later
Claus Gittinger <cg@exept.de>
parents: 2171
diff changeset
   544
localSourceFilename:aFileName position:aNumber
15346
c8f751f80e5b class: Method
Claus Gittinger <cg@exept.de>
parents: 15245
diff changeset
   545
    "set the method's sourcefile/position indicating, that
c8f751f80e5b class: Method
Claus Gittinger <cg@exept.de>
parents: 15245
diff changeset
   546
     this is a local file (i.e. the 'st.src' file).
c8f751f80e5b class: Method
Claus Gittinger <cg@exept.de>
parents: 15245
diff changeset
   547
     The indicator for this is a negative source position."
c8f751f80e5b class: Method
Claus Gittinger <cg@exept.de>
parents: 15245
diff changeset
   548
c8f751f80e5b class: Method
Claus Gittinger <cg@exept.de>
parents: 15245
diff changeset
   549
    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
   550
    source := aFileName.
1a24b0cef25a when compressing sources, make certain to avoid later
Claus Gittinger <cg@exept.de>
parents: 2171
diff changeset
   551
    sourcePosition := aNumber negated
1a24b0cef25a when compressing sources, make certain to avoid later
Claus Gittinger <cg@exept.de>
parents: 2171
diff changeset
   552
1a24b0cef25a when compressing sources, make certain to avoid later
Claus Gittinger <cg@exept.de>
parents: 2171
diff changeset
   553
    "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
   554
!
1a24b0cef25a when compressing sources, make certain to avoid later
Claus Gittinger <cg@exept.de>
parents: 2171
diff changeset
   555
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   556
lookupObject
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   557
18368
5e8af3b07aa1 class: Method
Claus Gittinger <cg@exept.de>
parents: 17693
diff changeset
   558
    "/ lookupObject isNil ifTrue:[^ BuiltinLookup instance "Lookup builtin"].
5e8af3b07aa1 class: Method
Claus Gittinger <cg@exept.de>
parents: 17693
diff changeset
   559
    ^ lookupObject
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   560
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   561
    "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
   562
    "Modified: / 18-11-2011 / 14:47:12 / cg"
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   563
!
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   564
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   565
lookupObject: anObject
18368
5e8af3b07aa1 class: Method
Claus Gittinger <cg@exept.de>
parents: 17693
diff changeset
   566
    anObject == BuiltinLookup instance ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   567
	self setLookupObject: nil
18368
5e8af3b07aa1 class: Method
Claus Gittinger <cg@exept.de>
parents: 17693
diff changeset
   568
    ] ifFalse:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   569
	self setLookupObject: anObject.
18368
5e8af3b07aa1 class: Method
Claus Gittinger <cg@exept.de>
parents: 17693
diff changeset
   570
    ].
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   571
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   572
    "Created: / 28-04-2010 / 18:36:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   573
    "Modified: / 11-07-2010 / 19:32:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   574
!
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   575
5152
2aacfb3976d4 when changing the package, make certain that the source
Claus Gittinger <cg@exept.de>
parents: 5115
diff changeset
   576
makeLocalStringSource
2aacfb3976d4 when changing the package, make certain that the source
Claus Gittinger <cg@exept.de>
parents: 5115
diff changeset
   577
    "assure that the methods source code is stored locally as a string
2aacfb3976d4 when changing the package, make certain that the source
Claus Gittinger <cg@exept.de>
parents: 5115
diff changeset
   578
     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
   579
     by reading the source code file).
15346
c8f751f80e5b class: Method
Claus Gittinger <cg@exept.de>
parents: 15245
diff changeset
   580
     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
   581
     sourceCode is not lost."
2aacfb3976d4 when changing the package, make certain that the source
Claus Gittinger <cg@exept.de>
parents: 5115
diff changeset
   582
2aacfb3976d4 when changing the package, make certain that the source
Claus Gittinger <cg@exept.de>
parents: 5115
diff changeset
   583
    source notNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   584
	sourcePosition notNil ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   585
	    "/ this looks wierd - but (self source) will retrieve the external source
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   586
	    "/ (from the file) and store it. So afterwards, we will have the string and
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   587
	    "/ sourcePosition will be nil
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   588
	    self source:(self source)
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   589
	]
5152
2aacfb3976d4 when changing the package, make certain that the source
Claus Gittinger <cg@exept.de>
parents: 5115
diff changeset
   590
    ].
2aacfb3976d4 when changing the package, make certain that the source
Claus Gittinger <cg@exept.de>
parents: 5115
diff changeset
   591
!
2aacfb3976d4 when changing the package, make certain that the source
Claus Gittinger <cg@exept.de>
parents: 5115
diff changeset
   592
5324
5c9959ce98af make use of mclass
Claus Gittinger <cg@exept.de>
parents: 5322
diff changeset
   593
mclass:aClass
14508
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   594
    "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
   595
     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
   596
     possibly be invalidated when mclass is asked for."
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   597
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   598
"/    mclass == aClass ifTrue:[ ^ self ].
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   599
"/
12323
973c8740503b changed: #mclass:
Claus Gittinger <cg@exept.de>
parents: 12283
diff changeset
   600
"/     (mclass notNil and:[aClass notNil]) ifTrue:[
973c8740503b changed: #mclass:
Claus Gittinger <cg@exept.de>
parents: 12283
diff changeset
   601
"/         'Method [warning]: mclass already set' errorPrintCR.
973c8740503b changed: #mclass:
Claus Gittinger <cg@exept.de>
parents: 12283
diff changeset
   602
"/     ].
5696
958a0643496d compatibility
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
   603
    mclass := aClass.
10207
b5ca553d15ad localSourceFirst for extensions.
Claus Gittinger <cg@exept.de>
parents: 10201
diff changeset
   604
b5ca553d15ad localSourceFirst for extensions.
Claus Gittinger <cg@exept.de>
parents: 10201
diff changeset
   605
    "Modified: / 28-11-2006 / 12:12:27 / cg"
5696
958a0643496d compatibility
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
   606
!
5324
5c9959ce98af make use of mclass
Claus Gittinger <cg@exept.de>
parents: 5322
diff changeset
   607
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   608
nameSpace
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   609
    "Returns my namespace or nil. If no explicit method namespace
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   610
     is set, my programmming language is used as default namespace
17514
eb4568cb00ba class: Method
Claus Gittinger <cg@exept.de>
parents: 17463
diff changeset
   611
     (for compatibility reasons, nil is returned for smalltalk methods,
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   612
     which means that the method is not namespaced).
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   613
    "
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   614
14552
3ab1c7006ba1 class: Method
Claus Gittinger <cg@exept.de>
parents: 14536
diff changeset
   615
    | nsA prefix |
14264
fd05137bd3c3 comment/format in: #nameSpace
Claus Gittinger <cg@exept.de>
parents: 14261
diff changeset
   616
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   617
    nsA := self annotationAt: #namespace:.
14552
3ab1c7006ba1 class: Method
Claus Gittinger <cg@exept.de>
parents: 14536
diff changeset
   618
    nsA notNil ifTrue:[^nsA nameSpace].
3ab1c7006ba1 class: Method
Claus Gittinger <cg@exept.de>
parents: 14536
diff changeset
   619
3ab1c7006ba1 class: Method
Claus Gittinger <cg@exept.de>
parents: 14536
diff changeset
   620
    prefix := self programmingLanguage defaultSelectorNameSpacePrefix.
3ab1c7006ba1 class: Method
Claus Gittinger <cg@exept.de>
parents: 14536
diff changeset
   621
    (prefix isNil or:[prefix = 'Smalltalk']) ifTrue:[ ^ nil].
15045
00763bf986f0 class: Method
Claus Gittinger <cg@exept.de>
parents: 14864
diff changeset
   622
    ^ NameSpace name:prefix
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   623
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   624
    "
15045
00763bf986f0 class: Method
Claus Gittinger <cg@exept.de>
parents: 14864
diff changeset
   625
     (Method >> #nameSpace) nameSpace
00763bf986f0 class: Method
Claus Gittinger <cg@exept.de>
parents: 14864
diff changeset
   626
     (Object >> #yourself) nameSpace
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   627
    "
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   628
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   629
    "Created: / 26-04-2010 / 16:30:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   630
    "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
   631
    "Modified (format): / 27-07-2012 / 14:17:09 / cg"
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   632
!
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   633
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   634
nameSpace: aNameSpace
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   635
14261
403921157431 changed: #nameSpace:
Claus Gittinger <cg@exept.de>
parents: 14253
diff changeset
   636
    self annotateWith: (Annotation nameSpace: aNameSpace name)
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   637
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   638
    "Created: / 20-05-2010 / 10:05:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   639
    "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
   640
    "Modified: / 26-07-2012 / 23:08:48 / cg"
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   641
!
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   642
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   643
nameSpaceName
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   644
    | ns |
16261
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
   645
    ns := self nameSpace.
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
   646
    ^ ns isNil ifTrue:[''] ifFalse:[ns name]
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   647
!
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   648
13100
d5333b6746d1 +originalMethodIfWrapped
Claus Gittinger <cg@exept.de>
parents: 12948
diff changeset
   649
originalMethodIfWrapped
d5333b6746d1 +originalMethodIfWrapped
Claus Gittinger <cg@exept.de>
parents: 12948
diff changeset
   650
    "return the method the receiver is wrapping - none here"
d5333b6746d1 +originalMethodIfWrapped
Claus Gittinger <cg@exept.de>
parents: 12948
diff changeset
   651
d5333b6746d1 +originalMethodIfWrapped
Claus Gittinger <cg@exept.de>
parents: 12948
diff changeset
   652
    ^ self
d5333b6746d1 +originalMethodIfWrapped
Claus Gittinger <cg@exept.de>
parents: 12948
diff changeset
   653
d5333b6746d1 +originalMethodIfWrapped
Claus Gittinger <cg@exept.de>
parents: 12948
diff changeset
   654
    "Created: / 22-10-2010 / 11:46:07 / cg"
d5333b6746d1 +originalMethodIfWrapped
Claus Gittinger <cg@exept.de>
parents: 12948
diff changeset
   655
!
d5333b6746d1 +originalMethodIfWrapped
Claus Gittinger <cg@exept.de>
parents: 12948
diff changeset
   656
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   657
overriddenMethod
15952
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   658
    <resource: #obsolete>
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   659
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   660
    self obsoleteMethodWarning: 'Use overwrittenMethod instead, stupid naming'.
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   661
    ^self overwrittenMethod
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   662
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   663
    "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
   664
    "Modified (format): / 18-11-2011 / 14:48:07 / cg"
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   665
    "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
   666
!
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   667
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   668
overriddenMethod: aMethod
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   669
    <resource: #obsolete>
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   670
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   671
    self obsoleteMethodWarning: 'Use overwrittenMethod: instead, stupid naming'.
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   672
    self overwrittenMethod: aMethod
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   673
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   674
    "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
   675
    "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
   676
    "Modified: / 18-11-2011 / 14:48:26 / cg"
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   677
    "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
   678
!
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   679
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   680
overwrittenMethod
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   681
    "Answers overridden method or nil."
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   682
13817
7d1e0e8ea364 changed:10 methods
Claus Gittinger <cg@exept.de>
parents: 13805
diff changeset
   683
    Overrides isNil ifTrue:[^ nil].
7d1e0e8ea364 changed:10 methods
Claus Gittinger <cg@exept.de>
parents: 13805
diff changeset
   684
    ^ (Overrides includesKey: self)
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   685
	ifTrue:[Overrides at: self]
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   686
15952
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   687
    "Created: / 05-07-2012 / 10:49:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   688
!
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   689
15952
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   690
overwrittenMethod: aMethod
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   691
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   692
    "Set overridden method to aMethod"
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   693
13817
7d1e0e8ea364 changed:10 methods
Claus Gittinger <cg@exept.de>
parents: 13805
diff changeset
   694
    Overrides isNil ifTrue:[Overrides := WeakIdentityDictionary new:10].
7d1e0e8ea364 changed:10 methods
Claus Gittinger <cg@exept.de>
parents: 13805
diff changeset
   695
    aMethod notNil ifTrue:[aMethod makeLocalStringSource].
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   696
    Overrides at: self put: aMethod
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   697
15952
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   698
    "Created: / 05-07-2012 / 10:50:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   699
!
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   700
1093
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   701
package
14573
f89b1f406974 class: Method
Claus Gittinger <cg@exept.de>
parents: 14552
diff changeset
   702
    "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
   703
5385
7637332d7b38 care for nil package
Claus Gittinger <cg@exept.de>
parents: 5339
diff changeset
   704
    |cls|
7637332d7b38 care for nil package
Claus Gittinger <cg@exept.de>
parents: 5339
diff changeset
   705
7637332d7b38 care for nil package
Claus Gittinger <cg@exept.de>
parents: 5339
diff changeset
   706
    package notNil ifTrue:[ ^ package ].
14573
f89b1f406974 class: Method
Claus Gittinger <cg@exept.de>
parents: 14552
diff changeset
   707
f89b1f406974 class: Method
Claus Gittinger <cg@exept.de>
parents: 14552
diff changeset
   708
    "/ get it from my class
5385
7637332d7b38 care for nil package
Claus Gittinger <cg@exept.de>
parents: 5339
diff changeset
   709
    (cls := self mclass) isNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   710
	^ PackageId noProjectID.
5385
7637332d7b38 care for nil package
Claus Gittinger <cg@exept.de>
parents: 5339
diff changeset
   711
    ].
5724
96c2a5cf4217 category: and package: now send change notifications.
Claus Gittinger <cg@exept.de>
parents: 5721
diff changeset
   712
    "/ set it.
9692
d53de4f90660 allow for and hide nil-packageID (== NoProject)
Claus Gittinger <cg@exept.de>
parents: 9661
diff changeset
   713
    package := cls getPackage.
d53de4f90660 allow for and hide nil-packageID (== NoProject)
Claus Gittinger <cg@exept.de>
parents: 9661
diff changeset
   714
    package isNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   715
	^ PackageId noProjectID.
9692
d53de4f90660 allow for and hide nil-packageID (== NoProject)
Claus Gittinger <cg@exept.de>
parents: 9661
diff changeset
   716
    ].
d53de4f90660 allow for and hide nil-packageID (== NoProject)
Claus Gittinger <cg@exept.de>
parents: 9661
diff changeset
   717
    ^ package
3950
f9c4485a91d1 avoid nil package return
Claus Gittinger <cg@exept.de>
parents: 3934
diff changeset
   718
10207
b5ca553d15ad localSourceFirst for extensions.
Claus Gittinger <cg@exept.de>
parents: 10201
diff changeset
   719
    "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
   720
!
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   721
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   722
package:aSymbol
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   723
    "set the package-symbol"
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   724
9692
d53de4f90660 allow for and hide nil-packageID (== NoProject)
Claus Gittinger <cg@exept.de>
parents: 9661
diff changeset
   725
    |cls oldPackage newPackage|
d53de4f90660 allow for and hide nil-packageID (== NoProject)
Claus Gittinger <cg@exept.de>
parents: 9661
diff changeset
   726
19025
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   727
    newPackage := aSymbol.
12216
692af7a76600 Project noProjectId -> PackageId noProjectId
Claus Gittinger <cg@exept.de>
parents: 12193
diff changeset
   728
    aSymbol == PackageId noProjectID ifTrue:[
19025
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   729
        Transcript showCR:'warning: unassigning method from any package'.
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   730
        "/ newPackage := nil
9692
d53de4f90660 allow for and hide nil-packageID (== NoProject)
Claus Gittinger <cg@exept.de>
parents: 9661
diff changeset
   731
    ].
d53de4f90660 allow for and hide nil-packageID (== NoProject)
Claus Gittinger <cg@exept.de>
parents: 9661
diff changeset
   732
9713
fc8ef192492f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9702
diff changeset
   733
    package ~~ newPackage ifTrue:[
19025
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   734
        oldPackage := package.
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   735
        "/ this is required, because otherwise I would no longer be able to
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   736
        "/ reconstruct my sourcecode (as the connection to the source-file is lost).
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   737
        self makeLocalStringSource.
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   738
        package := newPackage.
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   739
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   740
        cls := self mclass.
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   741
        "JV@2011-01-27: BUG FIX: method may be wrapped (breakpoint on it).
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   742
         Search for the wrapper, if none is found, return immediately
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   743
         (avoids DNU)"
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   744
        cls isNil ifTrue:[
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   745
            | wrapper |
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   746
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   747
            wrapper := self wrapper.
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   748
            wrapper isNil ifTrue:[ ^ self ].
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   749
            cls := wrapper mclass.
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   750
            cls isNil ifTrue:[ ^ self ].
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   751
        ].
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   752
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   753
        self changed:#package.                                              "/ will vanish
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   754
        cls changed:#methodPackage with:self selector.                      "/ will vanish
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   755
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   756
        Smalltalk changed:#projectOrganization with:(Array with:cls with:self with:oldPackage).
f35582ce8389 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18753
diff changeset
   757
        cls addChangeRecordForMethodPackage:self package:newPackage.
5724
96c2a5cf4217 category: and package: now send change notifications.
Claus Gittinger <cg@exept.de>
parents: 5721
diff changeset
   758
    ]
10196
f72831ddec29 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10156
diff changeset
   759
f72831ddec29 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10156
diff changeset
   760
    "Modified: / 23-11-2006 / 17:01:02 / cg"
15952
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
   761
    "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
   762
    "Modified (comment): / 27-01-2012 / 21:22:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
1093
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   763
!
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   764
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   765
setAnnotations: anObject
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   766
    "set the annotations (low level - use do not use)"
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   767
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   768
    annotations :=  anObject
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   769
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   770
    "Created: / 20-05-2010 / 11:27:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   771
!
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
   772
5721
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
   773
setCategory:aStringOrSymbol
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
   774
    "set the methods category (without change notification)"
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
   775
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
   776
    aStringOrSymbol notNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   777
	category := aStringOrSymbol asSymbol
5721
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
   778
    ]
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
   779
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
   780
    "Modified: / 13.11.1998 / 23:55:05 / cg"
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
   781
!
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
   782
5398
b15f5eca2060 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5387
diff changeset
   783
setPackage:aSymbol
9702
468675f92260 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9692
diff changeset
   784
    "set the package-symbol (low level - use package:)"
5398
b15f5eca2060 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5387
diff changeset
   785
b15f5eca2060 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5387
diff changeset
   786
    package := aSymbol
b15f5eca2060 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5387
diff changeset
   787
!
b15f5eca2060 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5387
diff changeset
   788
1093
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   789
source
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   790
    "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
   791
12598
a6862e9bcb8e comment/format in: #source
Claus Gittinger <cg@exept.de>
parents: 12569
diff changeset
   792
    |sourceStream chunk|
1093
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   793
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   794
    "
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   795
     if sourcePosition is nonNil, its the fileName and
2176
1a24b0cef25a when compressing sources, make certain to avoid later
Claus Gittinger <cg@exept.de>
parents: 2171
diff changeset
   796
     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
   797
     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
   798
    "
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   799
    sourcePosition isNil ifTrue:[^ source].
13381
e16cafbd22bd comment/format in: #sourceStreamUsingCache:
Claus Gittinger <cg@exept.de>
parents: 13189
diff changeset
   800
    source isNil ifTrue:[^ nil].
e16cafbd22bd comment/format in: #sourceStreamUsingCache:
Claus Gittinger <cg@exept.de>
parents: 13189
diff changeset
   801
e16cafbd22bd comment/format in: #sourceStreamUsingCache:
Claus Gittinger <cg@exept.de>
parents: 13189
diff changeset
   802
    self class lastMethodSourcesLock critical:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   803
	LastMethodSources notNil ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   804
	    chunk := LastMethodSources at:self ifAbsent:nil.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   805
	].
13381
e16cafbd22bd comment/format in: #sourceStreamUsingCache:
Claus Gittinger <cg@exept.de>
parents: 13189
diff changeset
   806
    ].
e16cafbd22bd comment/format in: #sourceStreamUsingCache:
Claus Gittinger <cg@exept.de>
parents: 13189
diff changeset
   807
    chunk notNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   808
	^ chunk
13381
e16cafbd22bd comment/format in: #sourceStreamUsingCache:
Claus Gittinger <cg@exept.de>
parents: 13189
diff changeset
   809
    ].
e16cafbd22bd comment/format in: #sourceStreamUsingCache:
Claus Gittinger <cg@exept.de>
parents: 13189
diff changeset
   810
13463
7c98583d98c8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 13422
diff changeset
   811
    LastFileLock
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   812
	critical:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   813
	    "have to protect sourceStream from being closed as a side effect
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   814
	     of some other process fetching some the source from a different source file"
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   815
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   816
	    sourceStream := self sourceStreamUsingCache:true.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   817
	    sourceStream notNil ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   818
		[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   819
		    chunk := self sourceChunkFromStream:sourceStream.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   820
		] on:DecodingError do:[:ex|
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   821
		    "CharacterEncoder>>#guessEncoding is not fail safe - retry with plain unencoded data"
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   822
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   823
		    ('DecodingError ignored when reading <1p> (<2p>)' expandMacrosWith:self whoString with:ex description) infoPrintCR.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   824
		    sourceStream := self rawSourceStreamUsingCache:true.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   825
		    ex restart.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   826
		].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   827
	    ].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   828
	]
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   829
	timeoutMs:100
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   830
	ifBlocking:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   831
	    "take care if LastFileLock is not available - maybe we are
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   832
	     called by a debugger while someone holds the lock.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   833
	     Use uncached source streams"
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   834
	    sourceStream := self sourceStreamUsingCache:false.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   835
	    sourceStream notNil ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   836
		[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   837
		    chunk := self sourceChunkFromStream:sourceStream.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   838
		    sourceStream close.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   839
		] on:DecodingError do:[:ex|
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   840
		    "CharacterEncoder>>#guessEncoding is not fail safe - retry with plain unencoded data"
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   841
		    ('DecodingError ignored when reading <1p> (<2p>)' expandMacrosWith:self whoString with:ex description) infoPrintCR.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   842
		    sourceStream close.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   843
		    sourceStream := self rawSourceStreamUsingCache:false.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   844
		    ex restart.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   845
		].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   846
	    ].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   847
	].
2979
6bb06c5e49d8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2868
diff changeset
   848
10673
05229646ecd7 #source - handle DecodingError when fetching the method's source
Stefan Vogel <sv@exept.de>
parents: 10608
diff changeset
   849
    "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
   850
    chunk notNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   851
	"JV@2013-08-19: Don't consult UserPreferences if the system is initilizing. This may
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   852
	 lead in funny side-effect as #initializeDefaultPreferences is called which tries to
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   853
	 initialize some colors. But Color itsels is likely not yet initialized, so DNU is
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   854
	 thrown.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   855
	 CG: also care for standalone non-GUI progs, which have no userPreferences class"
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   856
	(Smalltalk isInitialized
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   857
	and:[UserPreferences notNil
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   858
	and:[UserPreferences current keepMethodSourceCode]]) ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   859
	    source := chunk.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   860
	    sourcePosition := nil.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   861
	    ^ source.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   862
	].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   863
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   864
	CacheDictionary notNil ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   865
	    self class lastMethodSourcesLock critical:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   866
		LastMethodSources isNil ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   867
		    LastMethodSources := CacheDictionary new:50.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   868
		].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   869
		LastMethodSources at:self put:chunk.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   870
	    ]
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   871
	].
2979
6bb06c5e49d8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2868
diff changeset
   872
    ].
6bb06c5e49d8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2868
diff changeset
   873
10608
82b1346f3e8d Use similar code when accessing method and class source code
Stefan Vogel <sv@exept.de>
parents: 10482
diff changeset
   874
    ^ chunk
1093
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   875
10201
f90568a94903 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10196
diff changeset
   876
    "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
   877
!
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   878
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   879
source:aString
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   880
    "set the methods sourcestring"
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   881
15346
c8f751f80e5b class: Method
Claus Gittinger <cg@exept.de>
parents: 15245
diff changeset
   882
    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
   883
    source := aString.
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   884
    sourcePosition := nil
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   885
!
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   886
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   887
sourceFilename
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   888
    "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
   889
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   890
    sourcePosition notNil ifTrue:[^ source].
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   891
    ^ nil
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   892
!
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   893
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   894
sourceFilename:aFileName position:aNumber
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   895
    "set the methods sourcefile/position"
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   896
15346
c8f751f80e5b class: Method
Claus Gittinger <cg@exept.de>
parents: 15245
diff changeset
   897
    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
   898
    source := aFileName.
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   899
    sourcePosition := aNumber
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   900
!
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   901
2812
660a3a2a0ef3 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2805
diff changeset
   902
sourceLineNumber
660a3a2a0ef3 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2805
diff changeset
   903
    "return the lineNumber of my source within the returned
660a3a2a0ef3 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2805
diff changeset
   904
     source sourcestring.
660a3a2a0ef3 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2805
diff changeset
   905
     For ST methods, the returned sourceString is always the
660a3a2a0ef3 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2805
diff changeset
   906
     methods pure source; therefore, the lineNumber is always 1."
660a3a2a0ef3 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2805
diff changeset
   907
660a3a2a0ef3 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2805
diff changeset
   908
    ^ 1
660a3a2a0ef3 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2805
diff changeset
   909
660a3a2a0ef3 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2805
diff changeset
   910
    "Created: 30.7.1997 / 15:42:01 / cg"
660a3a2a0ef3 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2805
diff changeset
   911
!
660a3a2a0ef3 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2805
diff changeset
   912
1093
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   913
sourcePosition
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   914
    "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
   915
2176
1a24b0cef25a when compressing sources, make certain to avoid later
Claus Gittinger <cg@exept.de>
parents: 2171
diff changeset
   916
    sourcePosition isNil ifTrue:[^ sourcePosition].
1a24b0cef25a when compressing sources, make certain to avoid later
Claus Gittinger <cg@exept.de>
parents: 2171
diff changeset
   917
    ^ sourcePosition abs
1a24b0cef25a when compressing sources, make certain to avoid later
Claus Gittinger <cg@exept.de>
parents: 2171
diff changeset
   918
1a24b0cef25a when compressing sources, make certain to avoid later
Claus Gittinger <cg@exept.de>
parents: 2171
diff changeset
   919
    "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
   920
! !
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   921
14508
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   922
!Method methodsFor:'accessing-annotations'!
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   923
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   924
annotateWith: annotation
16221
00b413ddccd5 class: Method
Claus Gittinger <cg@exept.de>
parents: 16220
diff changeset
   925
    "add a (hidden) annotation.
00b413ddccd5 class: Method
Claus Gittinger <cg@exept.de>
parents: 16220
diff changeset
   926
     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
   927
14508
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   928
    | index |
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   929
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   930
    index := self annotationIndexOf: annotation key.
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   931
    index isNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   932
	annotations := annotations isNil
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   933
			    ifTrue:[Array with: annotation]
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   934
			    ifFalse:[annotations copyWith:annotation]
14508
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   935
    ] ifFalse:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   936
	annotations at: index put: annotation
14508
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   937
    ].
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   938
"/    annotation annotatesMethod: self.
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   939
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   940
    "
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   941
	(Object >> #yourself) annotateWith: (Annotation namespace: 'Fictious').
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   942
	(Object >> #yourself) annotations.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   943
	(Object >> #yourself) annotationAt: #namespace:
14508
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   944
    "
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   945
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   946
    "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
   947
    "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
   948
    "Modified (format): / 26-07-2012 / 15:47:51 / cg"
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   949
!
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   950
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   951
annotationAt: key
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   952
    | index |
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   953
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   954
    index := self annotationIndexOf: key.
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   955
    index isNil ifTrue:[^ nil].
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   956
    ^ self annotationAtIndex: index.
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   957
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   958
    "
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   959
	(Object >> #yourself) annotationAt: #namespace:
14508
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   960
    "
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   961
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   962
    "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
   963
    "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
   964
    "Modified: / 18-11-2011 / 14:46:21 / cg"
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   965
    "Modified (format): / 26-07-2012 / 15:47:54 / cg"
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   966
!
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   967
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   968
annotations
18411
e6d26bb9b37b class: Method
Claus Gittinger <cg@exept.de>
parents: 18368
diff changeset
   969
    "return (a copy) of the annotations array"
e6d26bb9b37b class: Method
Claus Gittinger <cg@exept.de>
parents: 18368
diff changeset
   970
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
   971
    | retval |
14508
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   972
16261
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
   973
    annotations isNil ifTrue:[^ #()].
18411
e6d26bb9b37b class: Method
Claus Gittinger <cg@exept.de>
parents: 18368
diff changeset
   974
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
   975
    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
   976
    1 to: annotations size do: [:i|
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
   977
	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
   978
    ].
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
   979
    ^ 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
   980
14508
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   981
    "Modified: / 18-11-2011 / 14:46:56 / cg"
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   982
    "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
   983
    "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
   984
!
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   985
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   986
annotations: anObject
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   987
    "set the annotations"
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   988
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   989
    self setAnnotations: anObject.
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   990
"/    "iterate over annotations just to invoke
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   991
"/     annotationAtIndex: which lazyliyinitialize annotations
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   992
"/     and send #annotatesMethod:"
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   993
"/    self annotationsDo:[:annotation|]
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   994
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   995
    "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
   996
!
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   997
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   998
annotationsAt: key
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
   999
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1000
    ^OrderedCollection
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1001
	streamContents:[:annotStream|
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1002
	    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
  1003
	]
14508
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1004
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1005
    "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
  1006
    "Modified (format): / 26-07-2012 / 15:46:56 / cg"
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1007
!
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1008
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1009
annotationsAt: key do: block
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1010
    self annotationsDo: [:annot|
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1011
	annot key == key ifTrue:[block value: annot]
14508
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1012
    ]
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1013
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1014
    "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
  1015
    "Modified (format): / 26-07-2012 / 15:48:37 / cg"
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1016
!
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1017
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1018
annotationsAt: key1 orAt: key2
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1019
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1020
    ^OrderedCollection
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1021
	streamContents:[:annotStream|
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1022
	    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
  1023
	]
14508
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1024
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1025
    "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
  1026
    "Modified (format): / 26-07-2012 / 15:49:11 / cg"
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1027
!
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1028
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1029
annotationsAt: key1 orAt: key2 do: block
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1030
    self annotationsDo:[:annot |
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1031
	(annot key == key1 or:[annot key == key2]) ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1032
	    block value: annot
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1033
	]
14508
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1034
    ]
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
    "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
  1037
    "Modified (format): / 26-07-2012 / 15:49:30 / cg"
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1038
!
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1039
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1040
annotationsDo: aBlock
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1041
    annotations isNil ifTrue:[^nil].
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1042
    1 to: annotations size do: [:i|
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1043
	aBlock value: (self annotationAtIndex: i)
14508
859dca6352f8 class: Method
Claus Gittinger <cg@exept.de>
parents: 14505
diff changeset
  1044
    ].
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
    "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
  1047
    "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
  1048
    "Modified (format): / 18-11-2011 / 14:47:06 / cg"
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
1093
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  1051
!Method methodsFor:'accessing-visibility'!
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  1052
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
  1053
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
  1054
    "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
  1055
     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
  1056
     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
  1057
     it in its message lookup.
747
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1058
     (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
  1059
      leads to either the superclasses implementation to be called,
747
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1060
      or a doesNotUnderstand exception to be raised)
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1061
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
  1062
     Notice: this is a nonstandard feature, not supported
747
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1063
     by other smalltalk implementations and not specified in the ANSI spec.
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1064
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1065
     This is EXPERIMENTAL - and being evaluated for usability.
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1066
     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
  1067
3216
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1068
    ^ self privacy == #ignored
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1069
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1070
    "Modified: / 23.1.1998 / 15:23:02 / stefan"
176
48061f8659aa more queries
claus
parents: 159
diff changeset
  1071
!
48061f8659aa more queries
claus
parents: 159
diff changeset
  1072
48061f8659aa more queries
claus
parents: 159
diff changeset
  1073
isPrivate
48061f8659aa more queries
claus
parents: 159
diff changeset
  1074
    "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
  1075
     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
  1076
     from superclasses or the class itself.
176
48061f8659aa more queries
claus
parents: 159
diff changeset
  1077
     If a private method is called by some other class, a runtime
48061f8659aa more queries
claus
parents: 159
diff changeset
  1078
     error (PrivateMethodSignal) is raised.
48061f8659aa more queries
claus
parents: 159
diff changeset
  1079
     Notice: method privacy is a nonstandard feature, not supported
48061f8659aa more queries
claus
parents: 159
diff changeset
  1080
     by other smalltalk implementations and not specified in the ANSI spec.
747
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1081
176
48061f8659aa more queries
claus
parents: 159
diff changeset
  1082
     This is EXPERIMENTAL - and being evaluated for usability.
48061f8659aa more queries
claus
parents: 159
diff changeset
  1083
     It may change or even vanish (if it shows to be not useful)."
48061f8659aa more queries
claus
parents: 159
diff changeset
  1084
3216
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1085
    ^ self privacy == #private
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1086
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1087
    "Modified: / 23.1.1998 / 15:23:13 / stefan"
68
59faa75185ba *** empty log message ***
claus
parents: 56
diff changeset
  1088
!
59faa75185ba *** empty log message ***
claus
parents: 56
diff changeset
  1089
176
48061f8659aa more queries
claus
parents: 159
diff changeset
  1090
isProtected
48061f8659aa more queries
claus
parents: 159
diff changeset
  1091
    "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
  1092
     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
  1093
     from superclasses, the class itself or subclasse.
176
48061f8659aa more queries
claus
parents: 159
diff changeset
  1094
     If a protected method is called by some other class, a runtime
48061f8659aa more queries
claus
parents: 159
diff changeset
  1095
     error (PrivateMethodSignal) is raised.
747
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1096
176
48061f8659aa more queries
claus
parents: 159
diff changeset
  1097
     Notice: method privacy is a nonstandard feature, not supported
48061f8659aa more queries
claus
parents: 159
diff changeset
  1098
     by other smalltalk implementations and not specified in the ANSI spec.
747
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1099
176
48061f8659aa more queries
claus
parents: 159
diff changeset
  1100
     This is EXPERIMENTAL - and being evaluated for usability.
48061f8659aa more queries
claus
parents: 159
diff changeset
  1101
     It may change or even vanish (if it shows to be not useful)."
48061f8659aa more queries
claus
parents: 159
diff changeset
  1102
3216
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1103
    ^ self privacy == #protected
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1104
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1105
    "Modified: / 23.1.1998 / 15:23:27 / stefan"
176
48061f8659aa more queries
claus
parents: 159
diff changeset
  1106
!
48061f8659aa more queries
claus
parents: 159
diff changeset
  1107
48061f8659aa more queries
claus
parents: 159
diff changeset
  1108
isPublic
48061f8659aa more queries
claus
parents: 159
diff changeset
  1109
    "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
  1110
     This is the default and how other smalltalk implementations treat all methods.
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1111
360
claus
parents: 350
diff changeset
  1112
     Notice: method privacy is a nonstandard feature, not supported
claus
parents: 350
diff changeset
  1113
     by other smalltalk implementations and not specified in the ANSI spec.
747
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1114
360
claus
parents: 350
diff changeset
  1115
     This is EXPERIMENTAL - and being evaluated for usability.
claus
parents: 350
diff changeset
  1116
     It may change or even vanish (if it shows to be not useful)."
176
48061f8659aa more queries
claus
parents: 159
diff changeset
  1117
3216
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1118
    ^ self privacy == #public
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1119
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1120
    "Modified: / 23.1.1998 / 15:23:40 / stefan"
176
48061f8659aa more queries
claus
parents: 159
diff changeset
  1121
!
48061f8659aa more queries
claus
parents: 159
diff changeset
  1122
747
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1123
isRestricted
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1124
    "return the flag bit stating that this method is restricted.
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1125
     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
  1126
     'trap restricted mode' (-->ObjectMemory) otherise a runtime
747
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1127
     error (PrivateMethodSignal) is raised.
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1128
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1129
     Notice: method restriction is a nonstandard feature, not supported
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1130
     by other smalltalk implementations and not specified in the ANSI spec.
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1131
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1132
     This is EXPERIMENTAL - and being evaluated for usability.
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1133
     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
  1134
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1135
%{  /* NOCONTEXT */
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1136
#ifdef F_RESTRICTED
2868
772c890f907c alpha64
Claus Gittinger <cg@exept.de>
parents: 2826
diff changeset
  1137
    INT f = __intVal(__INST(flags));
747
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1138
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1139
    if (f & F_RESTRICTED) {
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1140
	RETURN (true);
747
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1141
    }
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1142
#endif
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1143
%}.
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1144
    ^ false
8526
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1145
! !
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1146
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1147
!Method privateMethodsFor:'accessing-visibility'!
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1148
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1149
primSetPrivacy:aSymbol
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1150
    "set the methods access rights (privacy) from a symbol;
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1151
     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
  1152
     #setPrivacy: simply sets the attribute. When changing methods, that
8526
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1153
     have already been called, #privacy: should be used.
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1154
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1155
     Notice: method privacy is a nonstandard feature, not supported
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1156
     by other smalltalk implementations and not specified in the ANSI spec.
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1157
     If at all, use it for debugging purposes, to catch messagesends
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1158
     which are not supposed to be sent by others.
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1159
     (especially, if working in a team, while integrating other peoples work)
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1160
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1161
     This is EXPERIMENTAL - and being evaluated for usability.
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1162
     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
  1163
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1164
%{  /* NOCONTEXT */
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1165
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1166
#if defined(M_PRIVACY)
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1167
    INT f = __intVal(__INST(flags));
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1168
    INT p;
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1169
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1170
    if (aSymbol == @symbol(public))
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1171
	p = 0;
8526
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1172
    else if (aSymbol == @symbol(protected))
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1173
	p = F_PRIVATE;
8526
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1174
    else if (aSymbol == @symbol(private))
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1175
	p = F_CLASSPRIVATE;
8526
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1176
    else if (aSymbol == @symbol(ignored))
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1177
	p = F_IGNORED;
8526
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1178
    else
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1179
	RETURN(false);  /* illegal symbol */
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  1180
8526
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1181
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1182
    f = (f & ~M_PRIVACY) | p;
8913
b9498d27a554 64bit; mkSmallInteger
Claus Gittinger <cg@exept.de>
parents: 8896
diff changeset
  1183
    __INST(flags) = __mkSmallInteger(f);
8526
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1184
#endif
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1185
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1186
%}.
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1187
    ^ true
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1188
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1189
    "Modified: 27.8.1995 / 22:58:08 / claus"
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1190
! !
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1191
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1192
!Method methodsFor:'accessing-visibility'!
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
  1193
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1194
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
  1195
    "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
  1196
     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
  1197
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1198
     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
  1199
     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
  1200
     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
  1201
     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
  1202
     (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
  1203
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1204
     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
  1205
     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
  1206
3216
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1207
%{  /* NOCONTEXT */
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1208
    /* 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
  1209
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1210
#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
  1211
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1212
    INT f = __intVal(__INST(flags));
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1213
    switch (f & M_PRIVACY) {
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1214
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1215
# ifdef F_PRIVATE
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1216
    case F_PRIVATE:
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1217
	RETURN (@symbol(protected));
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1218
	break;
3216
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1219
# endif
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1220
# ifdef F_CLASSPRIVATE
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1221
    case F_CLASSPRIVATE:
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1222
	RETURN (@symbol(private));
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1223
	break;
3216
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1224
# endif
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1225
# ifdef F_IGNORED
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1226
    case F_IGNORED:
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1227
	RETURN (@symbol(ignored));
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1228
	break;
3216
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1229
# endif
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1230
    }
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1231
#endif
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1232
%}.
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1233
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
  1234
    ^ #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
  1235
!
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1236
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1237
privacy:aSymbol
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1238
    "set the methods access rights (privacy) from a symbol;
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1239
     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
  1240
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1241
     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
  1242
     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
  1243
     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
  1244
     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
  1245
     (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
  1246
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1247
     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
  1248
     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
  1249
8526
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1250
    |oldPrivacy|
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
    oldPrivacy := self privacy.
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1253
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1254
    (self setPrivacy:aSymbol flushCaches:true) ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1255
	|myClass mySelector|
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1256
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1257
	myClass := self mclass.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1258
	mySelector := self selector.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1259
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1260
	self changed:#privacy.                                       "/ will vanish
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1261
	myClass notNil ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1262
	    mySelector notNil ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1263
		myClass changed:#methodPrivacy with:mySelector.      "/ will vanish
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1264
		Smalltalk changed:#privacyOfMethod with:(Array with:myClass with:self with:oldPrivacy).
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1265
		myClass addChangeRecordForMethodPrivacy:self.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1266
	    ]
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1267
	]
3216
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1268
    ]
10196
f72831ddec29 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10156
diff changeset
  1269
f72831ddec29 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10156
diff changeset
  1270
    "Modified: / 23-11-2006 / 17:03:20 / 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
  1271
!
747
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1272
532
2511c99de912 New code to trap restricted (RT) methods.
Stefan Vogel <sv@exept.de>
parents: 530
diff changeset
  1273
restricted:aBoolean
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  1274
    "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
  1275
     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
  1276
     'trap restricted mode' (-->ObjectMemory) otherise a runtime
2511c99de912 New code to trap restricted (RT) methods.
Stefan Vogel <sv@exept.de>
parents: 530
diff changeset
  1277
     error (PrivateMethodSignal) is raised.
747
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1278
532
2511c99de912 New code to trap restricted (RT) methods.
Stefan Vogel <sv@exept.de>
parents: 530
diff changeset
  1279
     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
  1280
     by other smalltalk implementations and not specified in the ANSI spec.
747
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1281
532
2511c99de912 New code to trap restricted (RT) methods.
Stefan Vogel <sv@exept.de>
parents: 530
diff changeset
  1282
     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
  1283
     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
  1284
2511c99de912 New code to trap restricted (RT) methods.
Stefan Vogel <sv@exept.de>
parents: 530
diff changeset
  1285
%{  /* NOCONTEXT */
2511c99de912 New code to trap restricted (RT) methods.
Stefan Vogel <sv@exept.de>
parents: 530
diff changeset
  1286
    /* 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
  1287
2511c99de912 New code to trap restricted (RT) methods.
Stefan Vogel <sv@exept.de>
parents: 530
diff changeset
  1288
#ifdef F_RESTRICTED
2868
772c890f907c alpha64
Claus Gittinger <cg@exept.de>
parents: 2826
diff changeset
  1289
    INT f = __intVal(__INST(flags));
772c890f907c alpha64
Claus Gittinger <cg@exept.de>
parents: 2826
diff changeset
  1290
    INT old;
532
2511c99de912 New code to trap restricted (RT) methods.
Stefan Vogel <sv@exept.de>
parents: 530
diff changeset
  1291
747
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1292
    old = f;
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  1293
    if (aBoolean == true)
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1294
	f |= F_RESTRICTED;
532
2511c99de912 New code to trap restricted (RT) methods.
Stefan Vogel <sv@exept.de>
parents: 530
diff changeset
  1295
    else
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1296
	f &= ~F_RESTRICTED;
8913
b9498d27a554 64bit; mkSmallInteger
Claus Gittinger <cg@exept.de>
parents: 8896
diff changeset
  1297
    __INST(flags) = __mkSmallInteger(f);
532
2511c99de912 New code to trap restricted (RT) methods.
Stefan Vogel <sv@exept.de>
parents: 530
diff changeset
  1298
    if (old & F_RESTRICTED)
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1299
	RETURN(true);
532
2511c99de912 New code to trap restricted (RT) methods.
Stefan Vogel <sv@exept.de>
parents: 530
diff changeset
  1300
#endif
2511c99de912 New code to trap restricted (RT) methods.
Stefan Vogel <sv@exept.de>
parents: 530
diff changeset
  1301
%}.
2511c99de912 New code to trap restricted (RT) methods.
Stefan Vogel <sv@exept.de>
parents: 530
diff changeset
  1302
    ^ false
2511c99de912 New code to trap restricted (RT) methods.
Stefan Vogel <sv@exept.de>
parents: 530
diff changeset
  1303
747
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1304
    "
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1305
     (ObjectMemory class compiledMethodAt:#compressingGarbageCollect) restricted:true
ea3b6f7fd7ce added ignoredMethods
Claus Gittinger <cg@exept.de>
parents: 737
diff changeset
  1306
    "
532
2511c99de912 New code to trap restricted (RT) methods.
Stefan Vogel <sv@exept.de>
parents: 530
diff changeset
  1307
2511c99de912 New code to trap restricted (RT) methods.
Stefan Vogel <sv@exept.de>
parents: 530
diff changeset
  1308
    "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
  1309
!
2511c99de912 New code to trap restricted (RT) methods.
Stefan Vogel <sv@exept.de>
parents: 530
diff changeset
  1310
3216
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1311
setPrivacy:aSymbol
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1312
    "set the methods access rights (privacy) from a symbol;
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1313
     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
  1314
     #setPrivacy: simply sets the attribute. When changing methods, that
3216
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1315
     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
  1316
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1317
     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
  1318
     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
  1319
     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
  1320
     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
  1321
     (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
  1322
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1323
     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
  1324
     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
  1325
8526
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1326
    ^ self setPrivacy:aSymbol flushCaches:true
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1327
!
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1328
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1329
setPrivacy:aSymbol flushCaches:doFlush
17526
cbad04a94bb2 class: Method
Claus Gittinger <cg@exept.de>
parents: 17515
diff changeset
  1330
    "set the method's access rights (privacy) from a symbol;
8526
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1331
     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
  1332
     #setPrivacy: simply sets the attribute. When changing methods, that
8526
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1333
     have already been called, #privacy: should be used.
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1334
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1335
     Notice: method privacy is a nonstandard feature, not supported
17526
cbad04a94bb2 class: Method
Claus Gittinger <cg@exept.de>
parents: 17515
diff changeset
  1336
     by other Smalltalk implementations and not specified in the ANSI spec.
cbad04a94bb2 class: Method
Claus Gittinger <cg@exept.de>
parents: 17515
diff changeset
  1337
     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
  1338
     which are not supposed to be sent by others.
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1339
     (especially, if working in a team, while integrating other peoples work)
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1340
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1341
     This is EXPERIMENTAL - and being evaluated for usability.
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1342
     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
  1343
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1344
    |old sel|
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1345
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1346
    old := self privacy.
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1347
    old == aSymbol ifTrue:[^ false].
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1348
    (self primSetPrivacy:aSymbol) ifFalse:[^ false].
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1349
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1350
    "/
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1351
    "/ no need to flush, if changing from private to public
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1352
    "/
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1353
    doFlush ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1354
	(aSymbol == #public and:[old ~~ #ignored]) ifFalse:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1355
	    (sel := self selector) notNil ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1356
		ObjectMemory flushCachesForSelector:sel numArgs:self argumentCount
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1357
	    ] ifFalse:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1358
		ObjectMemory flushCaches.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1359
	    ].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1360
	].
8526
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  1361
    ].
3216
e0f3f49118ed Simplify privacy stuff to make redirection from WrappedMethod easier.
Stefan Vogel <sv@exept.de>
parents: 3168
diff changeset
  1362
    ^ true
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1363
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1364
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
  1365
!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
  1366
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
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
  1368
    "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
  1369
     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
  1370
     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
  1371
     the methodDictionary of any class - just returned.
2064
68b185fbddb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2063
diff changeset
  1372
     If the method contains primitive code, this may return a method
68b185fbddb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2063
diff changeset
  1373
     without bytecode.
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  1374
     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
  1375
     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
  1376
     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
  1377
9096
84df3b129718 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9075
diff changeset
  1378
    |mthd|
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1379
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
  1380
    byteCode notNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1381
	"
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1382
	 is already a bytecoded method
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1383
	"
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1384
	^ 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
  1385
    ].
9096
84df3b129718 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9075
diff changeset
  1386
84df3b129718 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9075
diff changeset
  1387
    ParserFlags
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1388
	withSTCCompilation:#never
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1389
	do:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1390
	    mthd := self asExecutableMethod.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1391
	].
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
  1392
    ^ mthd
68
59faa75185ba *** empty log message ***
claus
parents: 56
diff changeset
  1393
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
  1394
    "Created: 24.10.1995 / 14:02:32 / cg"
2064
68b185fbddb6 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2063
diff changeset
  1395
    "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
  1396
!
306
365e65400c93 *** empty log message ***
claus
parents: 302
diff changeset
  1397
5405
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  1398
asByteCodeMethodWithSource:newSource
9096
84df3b129718 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9075
diff changeset
  1399
    |mthd|
84df3b129718 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9075
diff changeset
  1400
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  1401
    ParserFlags
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1402
	withSTCCompilation:#never
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1403
	do:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1404
	    mthd := self asExecutableMethodWithSource:newSource.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1405
	].
5405
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  1406
    ^ mthd
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  1407
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  1408
    "Created: 24.10.1995 / 14:02:32 / cg"
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  1409
    "Modified: 5.1.1997 / 01:01:53 / cg"
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  1410
!
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  1411
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
asExecutableMethod
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  1413
    "if the receiver has neither bytecodes nor machinecode, create & return a
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
  1414
     method having semantics as the receivers source. This may be machine 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
  1415
     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
  1416
     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
  1417
     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
  1418
     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
  1419
     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
  1420
5700
ee59aff043c4 asExecutableMethod / asExecutableMethodWith: - code reuse
Claus Gittinger <cg@exept.de>
parents: 5696
diff changeset
  1421
    |temporaryMethod sourceString|
306
365e65400c93 *** empty log message ***
claus
parents: 302
diff changeset
  1422
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
  1423
    byteCode notNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1424
	"
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1425
	 is already a bytecoded method
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1426
	"
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1427
	^ self
5700
ee59aff043c4 asExecutableMethod / asExecutableMethodWith: - code reuse
Claus Gittinger <cg@exept.de>
parents: 5696
diff changeset
  1428
    ].
ee59aff043c4 asExecutableMethod / asExecutableMethodWith: - code reuse
Claus Gittinger <cg@exept.de>
parents: 5696
diff changeset
  1429
ee59aff043c4 asExecutableMethod / asExecutableMethodWith: - code reuse
Claus Gittinger <cg@exept.de>
parents: 5696
diff changeset
  1430
    sourceString := self source.
ee59aff043c4 asExecutableMethod / asExecutableMethodWith: - code reuse
Claus Gittinger <cg@exept.de>
parents: 5696
diff changeset
  1431
    sourceString isNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1432
	'Method [warning]: cannot generate bytecode (no source for compilation)' errorPrintCR.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1433
	^ 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
  1434
    ].
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1435
5700
ee59aff043c4 asExecutableMethod / asExecutableMethodWith: - code reuse
Claus Gittinger <cg@exept.de>
parents: 5696
diff changeset
  1436
    temporaryMethod := self asExecutableMethodWithSource:sourceString.
ee59aff043c4 asExecutableMethod / asExecutableMethodWith: - code reuse
Claus Gittinger <cg@exept.de>
parents: 5696
diff changeset
  1437
ee59aff043c4 asExecutableMethod / asExecutableMethodWith: - code reuse
Claus Gittinger <cg@exept.de>
parents: 5696
diff changeset
  1438
    (temporaryMethod isNil or:[temporaryMethod == #Error]) ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1439
	'Method [warning]: cannot generate bytecode (contains primitive code or error)' errorPrintCR.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1440
	^ nil.
5700
ee59aff043c4 asExecutableMethod / asExecutableMethodWith: - code reuse
Claus Gittinger <cg@exept.de>
parents: 5696
diff changeset
  1441
    ].
ee59aff043c4 asExecutableMethod / asExecutableMethodWith: - code reuse
Claus Gittinger <cg@exept.de>
parents: 5696
diff changeset
  1442
    "/
ee59aff043c4 asExecutableMethod / asExecutableMethodWith: - code reuse
Claus Gittinger <cg@exept.de>
parents: 5696
diff changeset
  1443
    "/ 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
  1444
    "/
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  1445
    temporaryMethod sourceFilename:source position:sourcePosition.
5700
ee59aff043c4 asExecutableMethod / asExecutableMethodWith: - code reuse
Claus Gittinger <cg@exept.de>
parents: 5696
diff changeset
  1446
    ^ temporaryMethod
ee59aff043c4 asExecutableMethod / asExecutableMethodWith: - code reuse
Claus Gittinger <cg@exept.de>
parents: 5696
diff changeset
  1447
!
ee59aff043c4 asExecutableMethod / asExecutableMethodWith: - code reuse
Claus Gittinger <cg@exept.de>
parents: 5696
diff changeset
  1448
ee59aff043c4 asExecutableMethod / asExecutableMethodWith: - code reuse
Claus Gittinger <cg@exept.de>
parents: 5696
diff changeset
  1449
asExecutableMethodWithSource:newSource
ee59aff043c4 asExecutableMethod / asExecutableMethodWith: - code reuse
Claus Gittinger <cg@exept.de>
parents: 5696
diff changeset
  1450
    |temporaryMethod cls|
ee59aff043c4 asExecutableMethod / asExecutableMethodWith: - code reuse
Claus Gittinger <cg@exept.de>
parents: 5696
diff changeset
  1451
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
  1452
    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
  1453
    cls isNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1454
	'Method [warning]: cannot generate bytecode (no class for compilation)' errorPrintCR.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1455
	^ nil
306
365e65400c93 *** empty log message ***
claus
parents: 302
diff changeset
  1456
    ].
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1457
4290
5e43473d7a35 moved recompilation semaphore from LazyMethod to Method
Claus Gittinger <cg@exept.de>
parents: 4015
diff changeset
  1458
    "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
  1459
     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
  1460
     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
  1461
     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
  1462
     (happened when autoloading animation demos)
176
48061f8659aa more queries
claus
parents: 159
diff changeset
  1463
    "
4290
5e43473d7a35 moved recompilation semaphore from LazyMethod to Method
Claus Gittinger <cg@exept.de>
parents: 4015
diff changeset
  1464
    CompilationLock critical:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1465
	"
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1466
	 dont want this to go into the changes file,
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1467
	 dont want output on Transcript and definitely
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1468
	 dont want a lazy method ...
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1469
	"
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1470
	Class withoutUpdatingChangesDo:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1471
	    |silent lazy|
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1472
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1473
	    silent := Smalltalk silentLoading:true.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1474
	    lazy := Compiler compileLazy:false.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1475
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1476
	    [
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1477
		|compiler|
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1478
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1479
		Class nameSpaceQuerySignal answer:(cls nameSpace)
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1480
		do:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1481
		    compiler := cls compilerClass.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1482
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1483
		    "/
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1484
		    "/ kludge - have to make ST/X's compiler protocol
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1485
		    "/ be compatible to ST-80's
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1486
		    "/
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1487
		    (compiler respondsTo:#compile:forClass:inCategory:notifying:install:)
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1488
		    ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1489
			temporaryMethod := compiler
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1490
					     compile:newSource
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1491
					     forClass:cls
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1492
					     inCategory:(self category)
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1493
					     notifying:nil
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1494
					     install:false.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1495
		    ] ifFalse:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1496
			temporaryMethod := compiler new
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1497
					     compile:newSource
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1498
					     in:cls
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1499
					     notifying:nil
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1500
					     ifFail:nil
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1501
		    ].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1502
		].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1503
	    ] ensure:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1504
		Compiler compileLazy:lazy.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1505
		Smalltalk silentLoading:silent.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1506
	    ]
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1507
	].
463
447ead9f870c be silent on transcript when parsing for args, vars and primitiveCode
Claus Gittinger <cg@exept.de>
parents: 444
diff changeset
  1508
    ].
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
  1509
    (temporaryMethod isNil or:[temporaryMethod == #Error]) ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1510
	'Method [warning]: cannot generate bytecode (contains primitive code or error)' errorPrintCR.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1511
	^ nil.
5405
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  1512
    ].
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  1513
    "/
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  1514
    "/ 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
  1515
    "/
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  1516
    temporaryMethod source:newSource.
5405
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  1517
    "/
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  1518
    "/ dont forget the methods class & package ...
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  1519
    "/
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  1520
    temporaryMethod setPackage:package.
17250
a0d78c57d994 class: Method
Claus Gittinger <cg@exept.de>
parents: 17175
diff changeset
  1521
    temporaryMethod mclass:(self getMclass).
5405
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  1522
    ^ temporaryMethod
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1523
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1524
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
  1525
!Method methodsFor:'copying'!
438
claus
parents: 423
diff changeset
  1526
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
  1527
copy
2176
1a24b0cef25a when compressing sources, make certain to avoid later
Claus Gittinger <cg@exept.de>
parents: 2171
diff changeset
  1528
    "redefined to change a source ref into a real string"
438
claus
parents: 423
diff changeset
  1529
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
  1530
    |aCopy|
438
claus
parents: 423
diff changeset
  1531
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
    aCopy := super 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
  1533
    sourcePosition notNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1534
	aCopy source:(self source)
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
  1535
    ].
5676
db728e9fe276 must flush cached mclass, when copying methods around
src
parents: 5665
diff changeset
  1536
    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
  1537
    ^ aCopy
2176
1a24b0cef25a when compressing sources, make certain to avoid later
Claus Gittinger <cg@exept.de>
parents: 2171
diff changeset
  1538
5696
958a0643496d compatibility
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
  1539
    "Modified: 16.1.1997 / 01:27:25 / cg"
958a0643496d compatibility
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
  1540
! !
438
claus
parents: 423
diff changeset
  1541
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1542
!Method methodsFor:'error handling'!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1543
328
claus
parents: 326
diff changeset
  1544
invalidCodeObject
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1545
    "{ Pragma: +optSpace }"
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1546
93
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
  1547
    "this method is triggered by the interpreter when a nil or non method
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
  1548
     is about to be executed.
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
  1549
     In this case, the VM sends this to the bad method (the receiver).
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
  1550
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
  1551
     Also, the Compiler creates methods with their code/bytecode set to
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
  1552
     this method if - after a class change - a method cannot be compiled
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
  1553
     and is therefore no longer executable (for example, after an instvar
68
59faa75185ba *** empty log message ***
claus
parents: 56
diff changeset
  1554
     has been removed, and a method still tries to access this instvar)
44
b262907c93ea *** empty log message ***
claus
parents: 42
diff changeset
  1555
93
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
  1556
     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
  1557
     or compiler/runtime system is broken :-(,
93
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
  1558
     or you ignore the error messages during some recompile."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1559
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1560
%{
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1561
    /*
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1562
     * for reasons too far from being explained here,
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1563
     * this MUST be a compiled method
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1564
     */
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1565
%}.
7601
57c257f1150a Fix race when accessing source
Stefan Vogel <sv@exept.de>
parents: 7457
diff changeset
  1566
    ^ InvalidCodeError
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1567
	raiseErrorString:'invalid method - not executable'.
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1568
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1569
    "Modified: 4.11.1996 / 22:45:06 / cg"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1570
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1571
13693
16c890248840 added: #invalidCodeObjectWith:
sr
parents: 13683
diff changeset
  1572
invalidCodeObjectWith:arg
16c890248840 added: #invalidCodeObjectWith:
sr
parents: 13683
diff changeset
  1573
    "{ Pragma: +optSpace }"
16c890248840 added: #invalidCodeObjectWith:
sr
parents: 13683
diff changeset
  1574
16c890248840 added: #invalidCodeObjectWith:
sr
parents: 13683
diff changeset
  1575
    "When recompiling classes after a definition-change, all
16c890248840 added: #invalidCodeObjectWith:
sr
parents: 13683
diff changeset
  1576
     uncompilable methods (with 2 args) will be bound to this method here,
16c890248840 added: #invalidCodeObjectWith:
sr
parents: 13683
diff changeset
  1577
     so that evaluating such an uncompilable method will trigger an error."
16c890248840 added: #invalidCodeObjectWith:
sr
parents: 13683
diff changeset
  1578
16c890248840 added: #invalidCodeObjectWith:
sr
parents: 13683
diff changeset
  1579
%{
16c890248840 added: #invalidCodeObjectWith:
sr
parents: 13683
diff changeset
  1580
    /*
16c890248840 added: #invalidCodeObjectWith:
sr
parents: 13683
diff changeset
  1581
     * for reasons too far from being explained here,
16c890248840 added: #invalidCodeObjectWith:
sr
parents: 13683
diff changeset
  1582
     * this MUST be a compiled method
16c890248840 added: #invalidCodeObjectWith:
sr
parents: 13683
diff changeset
  1583
     */
16c890248840 added: #invalidCodeObjectWith:
sr
parents: 13683
diff changeset
  1584
%}.
16c890248840 added: #invalidCodeObjectWith:
sr
parents: 13683
diff changeset
  1585
    ^ InvalidCodeError
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1586
	raiseErrorString:'invalid method - not executable'.
13693
16c890248840 added: #invalidCodeObjectWith:
sr
parents: 13683
diff changeset
  1587
16c890248840 added: #invalidCodeObjectWith:
sr
parents: 13683
diff changeset
  1588
    "Created: / 14-09-2011 / 11:23:49 / sr"
16c890248840 added: #invalidCodeObjectWith:
sr
parents: 13683
diff changeset
  1589
!
16c890248840 added: #invalidCodeObjectWith:
sr
parents: 13683
diff changeset
  1590
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1591
invalidCodeObjectWith:arg with:arg2
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1592
    "{ Pragma: +optSpace }"
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1593
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1594
    "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
  1595
     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
  1596
     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
  1597
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1598
%{
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1599
    /*
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1600
     * for reasons too far from being explained here,
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1601
     * this MUST be a compiled method
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1602
     */
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1603
%}.
7601
57c257f1150a Fix race when accessing source
Stefan Vogel <sv@exept.de>
parents: 7457
diff changeset
  1604
    ^ InvalidCodeError
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1605
	raiseErrorString:'invalid method - not executable'.
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1606
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1607
    "Created: 4.11.1996 / 21:16:41 / cg"
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1608
    "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
  1609
!
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1610
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1611
invalidCodeObjectWith:arg with:arg2 with:arg3
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1612
    "{ Pragma: +optSpace }"
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1613
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1614
    "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
  1615
     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
  1616
     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
  1617
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1618
%{
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1619
    /*
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1620
     * for reasons too far from being explained here,
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1621
     * this MUST be a compiled method
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1622
     */
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1623
%}.
7601
57c257f1150a Fix race when accessing source
Stefan Vogel <sv@exept.de>
parents: 7457
diff changeset
  1624
    ^ InvalidCodeError
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1625
	raiseErrorString:'invalid method - not executable'.
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1626
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1627
    "Created: 4.11.1996 / 21:16:51 / cg"
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1628
    "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
  1629
!
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1630
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1631
invalidCodeObjectWith:arg with:arg2 with:arg3 with:arg4
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1632
    "{ Pragma: +optSpace }"
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1633
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1634
    "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
  1635
     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
  1636
     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
  1637
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1638
%{
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1639
    /*
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1640
     * for reasons too far from being explained here,
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1641
     * this MUST be a compiled method
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1642
     */
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1643
%}.
7601
57c257f1150a Fix race when accessing source
Stefan Vogel <sv@exept.de>
parents: 7457
diff changeset
  1644
    ^ InvalidCodeError
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1645
	raiseErrorString:'invalid method - not executable'.
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1646
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1647
    "Created: 4.11.1996 / 21:17:00 / cg"
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1648
    "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
  1649
!
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1650
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1651
invalidCodeObjectWith:arg with:arg2 with:arg3 with:arg4 with:arg5
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1652
    "{ Pragma: +optSpace }"
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1653
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1654
    "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
  1655
     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
  1656
     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
  1657
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1658
%{
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1659
    /*
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1660
     * for reasons too far from being explained here,
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1661
     * this MUST be a compiled method
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1662
     */
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1663
%}.
7601
57c257f1150a Fix race when accessing source
Stefan Vogel <sv@exept.de>
parents: 7457
diff changeset
  1664
    ^ InvalidCodeError
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1665
	raiseErrorString:'invalid method - not executable'.
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1666
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1667
    "Created: 4.11.1996 / 21:17:09 / cg"
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1668
    "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
  1669
!
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1670
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1671
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
  1672
    "{ Pragma: +optSpace }"
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1673
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1674
    "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
  1675
     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
  1676
     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
  1677
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1678
%{
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1679
    /*
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1680
     * for reasons too far from being explained here,
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1681
     * this MUST be a compiled method
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1682
     */
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1683
%}.
7601
57c257f1150a Fix race when accessing source
Stefan Vogel <sv@exept.de>
parents: 7457
diff changeset
  1684
    ^ InvalidCodeError
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1685
	raiseErrorString:'invalid method - not executable'.
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1686
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1687
    "Created: 4.11.1996 / 21:17:17 / cg"
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1688
    "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
  1689
!
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1690
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1691
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
  1692
    "{ Pragma: +optSpace }"
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1693
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1694
    "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
  1695
     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
  1696
     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
  1697
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1698
%{
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1699
    /*
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1700
     * for reasons too far from being explained here,
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1701
     * this MUST be a compiled method
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1702
     */
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1703
%}.
7601
57c257f1150a Fix race when accessing source
Stefan Vogel <sv@exept.de>
parents: 7457
diff changeset
  1704
    ^ InvalidCodeError
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1705
	raiseErrorString:'invalid method - not executable'.
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1706
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1707
    "Created: 4.11.1996 / 21:17:25 / cg"
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1708
    "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
  1709
!
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1710
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1711
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
  1712
    "{ Pragma: +optSpace }"
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1713
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1714
    "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
  1715
     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
  1716
     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
  1717
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1718
%{
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1719
    /*
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1720
     * for reasons too far from being explained here,
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1721
     * this MUST be a compiled method
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1722
     */
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1723
%}.
7601
57c257f1150a Fix race when accessing source
Stefan Vogel <sv@exept.de>
parents: 7457
diff changeset
  1724
    ^ InvalidCodeError
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1725
	raiseErrorString:'invalid method - not executable'.
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1726
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1727
    "Created: 4.11.1996 / 21:17:32 / cg"
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1728
    "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
  1729
!
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1730
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1731
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
  1732
    "{ Pragma: +optSpace }"
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1733
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1734
    "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
  1735
     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
  1736
     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
  1737
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1738
%{
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1739
    /*
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1740
     * for reasons too far from being explained here,
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1741
     * this MUST be a compiled method
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1742
     */
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1743
%}.
7601
57c257f1150a Fix race when accessing source
Stefan Vogel <sv@exept.de>
parents: 7457
diff changeset
  1744
    ^ InvalidCodeError
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1745
	raiseErrorString:'invalid method - not executable'.
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1746
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1747
    "Created: 4.11.1996 / 21:17:37 / cg"
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1748
    "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
  1749
!
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1750
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1751
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
  1752
    "{ Pragma: +optSpace }"
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1753
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1754
    "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
  1755
     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
  1756
     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
  1757
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1758
%{
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1759
    /*
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1760
     * for reasons too far from being explained here,
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1761
     * this MUST be a compiled method
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1762
     */
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1763
%}.
7601
57c257f1150a Fix race when accessing source
Stefan Vogel <sv@exept.de>
parents: 7457
diff changeset
  1764
    ^ InvalidCodeError
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1765
	raiseErrorString:'invalid method - not executable'.
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1766
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1767
    "Created: 4.11.1996 / 21:17:45 / cg"
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1768
    "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
  1769
!
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1770
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1771
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
  1772
    "{ Pragma: +optSpace }"
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1773
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1774
    "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
  1775
     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
  1776
     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
  1777
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1778
%{
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1779
    /*
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1780
     * for reasons too far from being explained here,
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1781
     * this MUST be a compiled method
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1782
     */
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1783
%}.
7601
57c257f1150a Fix race when accessing source
Stefan Vogel <sv@exept.de>
parents: 7457
diff changeset
  1784
    ^ InvalidCodeError
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1785
	raiseErrorString:'invalid method - not executable'.
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1786
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1787
    "Created: 4.11.1996 / 21:17:52 / cg"
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1788
    "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
  1789
!
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1790
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1791
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
  1792
    "{ Pragma: +optSpace }"
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1793
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1794
    "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
  1795
     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
  1796
     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
  1797
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1798
%{
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1799
    /*
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1800
     * for reasons too far from being explained here,
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1801
     * this MUST be a compiled method
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1802
     */
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1803
%}.
7601
57c257f1150a Fix race when accessing source
Stefan Vogel <sv@exept.de>
parents: 7457
diff changeset
  1804
    ^ InvalidCodeError
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1805
	raiseErrorString:'invalid method - not executable'.
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1806
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1807
    "Created: 4.11.1996 / 20:51:28 / cg"
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1808
    "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
  1809
!
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1810
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1811
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
  1812
    "{ Pragma: +optSpace }"
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1813
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1814
    "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
  1815
     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
  1816
     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
  1817
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1818
%{
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1819
    /*
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1820
     * for reasons too far from being explained here,
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1821
     * this MUST be a compiled method
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1822
     */
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1823
%}.
7601
57c257f1150a Fix race when accessing source
Stefan Vogel <sv@exept.de>
parents: 7457
diff changeset
  1824
    ^ InvalidCodeError
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1825
	raiseErrorString:'invalid method - not executable'.
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1826
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1827
    "Created: 4.11.1996 / 21:18:09 / cg"
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1828
    "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
  1829
!
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1830
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1831
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
  1832
    "{ Pragma: +optSpace }"
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1833
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1834
    "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
  1835
     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
  1836
     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
  1837
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1838
%{
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1839
    /*
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1840
     * for reasons too far from being explained here,
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1841
     * this MUST be a compiled method
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1842
     */
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1843
%}.
7601
57c257f1150a Fix race when accessing source
Stefan Vogel <sv@exept.de>
parents: 7457
diff changeset
  1844
    ^ InvalidCodeError
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1845
	raiseErrorString:'invalid method - not executable'.
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1846
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1847
    "Created: 4.11.1996 / 21:18:17 / cg"
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1848
    "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
  1849
!
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1850
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1851
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
  1852
    "{ Pragma: +optSpace }"
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1853
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1854
    "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
  1855
     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
  1856
     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
  1857
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1858
%{
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1859
    /*
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1860
     * for reasons too far from being explained here,
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1861
     * this MUST be a compiled method
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1862
     */
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1863
%}.
7601
57c257f1150a Fix race when accessing source
Stefan Vogel <sv@exept.de>
parents: 7457
diff changeset
  1864
    ^ InvalidCodeError
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1865
	raiseErrorString:'invalid method - not executable'.
1870
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1866
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1867
    "Created: 4.11.1996 / 21:18:22 / cg"
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1868
    "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
  1869
!
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  1870
109
1fae65190b17 errors raise signals; check arg-count in valueWith...
claus
parents: 93
diff changeset
  1871
privateMethodCalled
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1872
    "{ Pragma: +optSpace }"
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1873
980
0ab2f56ecfc7 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 957
diff changeset
  1874
    "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
  1875
360
claus
parents: 350
diff changeset
  1876
     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
  1877
     and further privacy exceptions will NOT be reported at this call location,
360
claus
parents: 350
diff changeset
  1878
     until any new method is compiled, or the privacy of any method changes,
claus
parents: 350
diff changeset
  1879
     or the caches are flushed.
claus
parents: 350
diff changeset
  1880
     (the reason is that after the continue, the method is enterred into the
claus
parents: 350
diff changeset
  1881
      calling cache, for which method privacy is not checked.
claus
parents: 350
diff changeset
  1882
      Any of the above actions flushes this cache and a privacy check
claus
parents: 350
diff changeset
  1883
      is performed again.)
claus
parents: 350
diff changeset
  1884
     Future versions may not enter private methods into the cache, to fix this
claus
parents: 350
diff changeset
  1885
     (unobvious) behavior. However, then you will get an exception for EVERY
claus
parents: 350
diff changeset
  1886
     call to a private method ...
claus
parents: 350
diff changeset
  1887
claus
parents: 350
diff changeset
  1888
     Notice: method privacy is a nonstandard feature, not supported
claus
parents: 350
diff changeset
  1889
     by other smalltalk implementations and not specified in the ANSI spec.
claus
parents: 350
diff changeset
  1890
     This is EXPERIMENTAL - and being evaluated for usability.
claus
parents: 350
diff changeset
  1891
     It may change or even vanish (if it shows to be not useful)."
68
59faa75185ba *** empty log message ***
claus
parents: 56
diff changeset
  1892
8518
7dc3f9909640 Interchanged the meaning of method privacy -
Stefan Vogel <sv@exept.de>
parents: 8465
diff changeset
  1893
    ^ PrivateMethodSignal raiseRequest
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1894
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1895
    "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
  1896
!
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1897
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1898
uncompiledCodeObject
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1899
    "{ Pragma: +optSpace }"
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1900
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
  1901
    "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
  1902
     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
  1903
     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
  1904
     For those methods, the compiler generated a method object consisting
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1905
     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
  1906
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1907
%{
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
     * for reasons too far from being explained here,
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1910
     * this MUST be a compiled method
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1911
     */
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1912
%}.
7601
57c257f1150a Fix race when accessing source
Stefan Vogel <sv@exept.de>
parents: 7457
diff changeset
  1913
    ^ InvalidCodeError
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1914
	raiseRequestWith:self
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1915
	errorString:'invalid method - not compiled'.
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1916
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1917
    "Modified: 4.11.1996 / 22:58:02 / cg"
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1918
!
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1919
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1920
unloadedCodeObject
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1921
    "{ Pragma: +optSpace }"
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1922
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1923
    "this method is invoked by methods which have been binary-unloaded
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1924
     For those the source info consists
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1925
     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
  1926
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1927
%{
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
     * for reasons too far from being explained here,
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1930
     * this MUST be a compiled method
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1931
     */
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1932
%}.
7601
57c257f1150a Fix race when accessing source
Stefan Vogel <sv@exept.de>
parents: 7457
diff changeset
  1933
    ^ InvalidCodeError
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1934
	raiseRequestWith:self
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1935
	errorString:'invalid method - unloaded'.
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1936
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1937
    "Created: 4.11.1996 / 22:57:54 / cg"
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  1938
    "Modified: 4.11.1996 / 22:58:28 / cg"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1939
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1940
9987
2ca75ae430c4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9827
diff changeset
  1941
93
e31220cb391f *** empty log message ***
claus
parents: 88
diff changeset
  1942
!Method methodsFor:'printing & storing'!
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1943
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1944
printOn:aStream
56
be0ed17e6f85 *** empty log message ***
claus
parents: 49
diff changeset
  1945
    "put a printed representation of the receiver onto aStream.
be0ed17e6f85 *** empty log message ***
claus
parents: 49
diff changeset
  1946
     Since methods do not store their class/selector, we have to search
be0ed17e6f85 *** empty log message ***
claus
parents: 49
diff changeset
  1947
     for it here."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1948
227
23b1c4de3402 package & cleanup
claus
parents: 216
diff changeset
  1949
    |classAndSelector m wrapped|
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1950
253
30daee717a53 *** empty log message ***
claus
parents: 227
diff changeset
  1951
    wrapped := false.
30daee717a53 *** empty log message ***
claus
parents: 227
diff changeset
  1952
6234
d8083875f657 fixed pixmap readout for win32, where red and green are exchanged
Claus Gittinger <cg@exept.de>
parents: 6160
diff changeset
  1953
    self basicPrintOn:aStream."/ aStream nextPutAll:(self classNameWithArticle).
159
514c749165c3 *** empty log message ***
claus
parents: 142
diff changeset
  1954
    aStream nextPut:$(.
227
23b1c4de3402 package & cleanup
claus
parents: 216
diff changeset
  1955
176
48061f8659aa more queries
claus
parents: 159
diff changeset
  1956
    classAndSelector := self who.
227
23b1c4de3402 package & cleanup
claus
parents: 216
diff changeset
  1957
    classAndSelector isNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1958
	"
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1959
	 not anchored in any class.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1960
	 check if wrapped (to be more informative in inspectors)
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1961
	"
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1962
	m := self wrapper.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1963
	m notNil ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1964
	    classAndSelector := m who.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1965
	    wrapped := true.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1966
	]
227
23b1c4de3402 package & cleanup
claus
parents: 216
diff changeset
  1967
    ].
176
48061f8659aa more queries
claus
parents: 159
diff changeset
  1968
    classAndSelector notNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1969
	(classAndSelector methodClass) name printOn:aStream.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1970
	aStream nextPutAll:' '.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1971
	(classAndSelector methodSelector) printOn:aStream.
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  1972
    ] ifFalse:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1973
	"
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1974
	 sorry, a method which is nowhere anchored
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1975
	"
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1976
	aStream nextPutAll:'unbound'
56
be0ed17e6f85 *** empty log message ***
claus
parents: 49
diff changeset
  1977
    ].
13101
7dc4234a844d changed: #printOn:
Claus Gittinger <cg@exept.de>
parents: 13100
diff changeset
  1978
    aStream nextPut:$).
7dc4234a844d changed: #printOn:
Claus Gittinger <cg@exept.de>
parents: 13100
diff changeset
  1979
7dc4234a844d changed: #printOn:
Claus Gittinger <cg@exept.de>
parents: 13100
diff changeset
  1980
    wrapped ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  1981
	aStream nextPutAll:'; wrapped'
13101
7dc4234a844d changed: #printOn:
Claus Gittinger <cg@exept.de>
parents: 13100
diff changeset
  1982
    ].
176
48061f8659aa more queries
claus
parents: 159
diff changeset
  1983
48061f8659aa more queries
claus
parents: 159
diff changeset
  1984
    "
253
30daee717a53 *** empty log message ***
claus
parents: 227
diff changeset
  1985
     (Object compiledMethodAt:#at:) printOn:Transcript. Transcript cr.
30daee717a53 *** empty log message ***
claus
parents: 227
diff changeset
  1986
     (Object compiledMethodAt:#at:) copy printOn:Transcript. Transcript cr.
10083
8cec9ab7373e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10044
diff changeset
  1987
8cec9ab7373e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10044
diff changeset
  1988
     (Object compiledMethodAt:#at:) whoString printOn:Transcript. Transcript cr.
8cec9ab7373e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10044
diff changeset
  1989
     (Object compiledMethodAt:#at:) copy whoString printOn:Transcript. Transcript cr.
176
48061f8659aa more queries
claus
parents: 159
diff changeset
  1990
    "
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  1991
13101
7dc4234a844d changed: #printOn:
Claus Gittinger <cg@exept.de>
parents: 13100
diff changeset
  1992
    "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
  1993
!
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1994
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1995
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
  1996
    "return a string as className>>selector, if this is not an unbound
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1997
     method. Otherwise return 'unbound'. Used with debugging."
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  1998
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  1999
    |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
  2000
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  2001
    who := self who.
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  2002
    who notNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2003
	^ 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
  2004
    ].
6071
c10946059080 whoString can be evaluated
Claus Gittinger <cg@exept.de>
parents: 6058
diff changeset
  2005
    ^ '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
  2006
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
    "
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2008
     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
  2009
     (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
  2010
    "
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  2011
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  2012
    "Modified: 1.11.1996 / 16:27:04 / cg"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2013
! !
a27a279701f8 Initial revision
claus
parents:
diff changeset
  2014
8141
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2015
!Method methodsFor:'private'!
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2016
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2017
annotationAtIndex: index
14253
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  2018
    "return the annotation at given index.
18411
e6d26bb9b37b class: Method
Claus Gittinger <cg@exept.de>
parents: 18368
diff changeset
  2019
     any raw annotation array (as generated by the compiler)
e6d26bb9b37b class: Method
Claus Gittinger <cg@exept.de>
parents: 18368
diff changeset
  2020
     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
  2021
     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
  2022
13662
7d7ae1e5f589 changed: #annotationAtIndex:
Claus Gittinger <cg@exept.de>
parents: 13660
diff changeset
  2023
    | annotationOrArray annotation args |
13683
1b6be902030b comment/format in: #annotationAtIndex:
Claus Gittinger <cg@exept.de>
parents: 13679
diff changeset
  2024
13817
7d1e0e8ea364 changed:10 methods
Claus Gittinger <cg@exept.de>
parents: 13805
diff changeset
  2025
    annotations isNil ifTrue:[^nil].
18411
e6d26bb9b37b class: Method
Claus Gittinger <cg@exept.de>
parents: 18368
diff changeset
  2026
13662
7d7ae1e5f589 changed: #annotationAtIndex:
Claus Gittinger <cg@exept.de>
parents: 13660
diff changeset
  2027
    annotationOrArray := annotation := annotations at: index.
7d7ae1e5f589 changed: #annotationAtIndex:
Claus Gittinger <cg@exept.de>
parents: 13660
diff changeset
  2028
    annotationOrArray isArray ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2029
	args := annotationOrArray size == 2
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2030
		    ifTrue:[annotationOrArray second]
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2031
		    ifFalse:[#()].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2032
	args isArray ifFalse:[args := Array with: args].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2033
	annotation := Annotation
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2034
			method:self
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2035
			key: annotationOrArray first
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2036
			arguments: args.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2037
	annotation isUnknown ifFalse:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2038
	    annotations isImmutable ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2039
		annotations := annotations asArray
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2040
	    ].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2041
	    annotations at: index put: annotation.
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2042
"/            annotation annotatesMethod: self
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2043
	].
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2044
    ].
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2045
    ^annotation
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2046
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2047
    "Created: / 02-07-2010 / 22:30:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2048
    "Modified: / 11-07-2010 / 19:39:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
13817
7d1e0e8ea364 changed:10 methods
Claus Gittinger <cg@exept.de>
parents: 13805
diff changeset
  2049
    "Modified: / 18-11-2011 / 14:46:27 / cg"
14253
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  2050
    "Modified (comment): / 26-07-2012 / 15:48:07 / cg"
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2051
!
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2052
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2053
annotationIndexOf: key
14253
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  2054
    "Returns the index of annotation with given key
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2055
     or nil if there is no such annotation"
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2056
13817
7d1e0e8ea364 changed:10 methods
Claus Gittinger <cg@exept.de>
parents: 13805
diff changeset
  2057
    annotations isNil ifTrue:[^nil].
7d1e0e8ea364 changed:10 methods
Claus Gittinger <cg@exept.de>
parents: 13805
diff changeset
  2058
7d1e0e8ea364 changed:10 methods
Claus Gittinger <cg@exept.de>
parents: 13805
diff changeset
  2059
    annotations keysAndValuesDo: [:index :annotationOrArray|
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2060
	annotationOrArray isArray
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2061
	    ifTrue: [annotationOrArray first == key ifTrue:[^index]]
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2062
	    ifFalse:[annotationOrArray key == key ifTrue:[^index]]
13817
7d1e0e8ea364 changed:10 methods
Claus Gittinger <cg@exept.de>
parents: 13805
diff changeset
  2063
    ].
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2064
    ^nil.
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2065
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2066
    "Created: / 19-05-2010 / 16:40:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2067
    "Modified: / 11-07-2010 / 19:23:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
14253
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  2068
    "Modified (comment): / 26-07-2012 / 15:48:14 / cg"
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2069
!
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2070
12695
14b7044c2e4a changed:
Stefan Vogel <sv@exept.de>
parents: 12682
diff changeset
  2071
cacheSourceStream:aStream
14b7044c2e4a changed:
Stefan Vogel <sv@exept.de>
parents: 12682
diff changeset
  2072
    "remember a (raw) source stream for later use"
14b7044c2e4a changed:
Stefan Vogel <sv@exept.de>
parents: 12682
diff changeset
  2073
14b7044c2e4a changed:
Stefan Vogel <sv@exept.de>
parents: 12682
diff changeset
  2074
    |lastStream|
14b7044c2e4a changed:
Stefan Vogel <sv@exept.de>
parents: 12682
diff changeset
  2075
14b7044c2e4a changed:
Stefan Vogel <sv@exept.de>
parents: 12682
diff changeset
  2076
    (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
  2077
	LastFileLock critical:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2078
	    lastStream := LastFileReference at:1.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2079
	    (lastStream notNil
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2080
	      and:[lastStream class ~~ SmallInteger
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2081
	      and:[lastStream isOpen]]) ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2082
		lastStream close.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2083
	    ].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2084
	    LastSourceFileName := package,'/',source.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2085
	    LastFileReference at:1 put:aStream.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2086
	].
12695
14b7044c2e4a changed:
Stefan Vogel <sv@exept.de>
parents: 12682
diff changeset
  2087
    ].
14b7044c2e4a changed:
Stefan Vogel <sv@exept.de>
parents: 12682
diff changeset
  2088
!
14b7044c2e4a changed:
Stefan Vogel <sv@exept.de>
parents: 12682
diff changeset
  2089
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2090
getAnnotations
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2091
    ^annotations
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2092
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2093
    "Created: / 10-07-2010 / 21:55:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2094
    "Modified: / 11-07-2010 / 19:30:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
14253
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  2095
    "Modified (format): / 26-07-2012 / 15:49:38 / cg"
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2096
!
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2097
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2098
getLookupObject
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2099
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2100
    ^lookupObject
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2101
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2102
    "Created: / 10-07-2010 / 21:55:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2103
!
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2104
8141
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2105
localSourceStream
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2106
    "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
  2107
     searching in standard places."
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2108
8216
3b56b52db477 getpackageDir
ca
parents: 8169
diff changeset
  2109
    |dir fileName aStream|
8141
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2110
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2111
    package notNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2112
	"/
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2113
	"/ old: look in 'source/<filename>'
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2114
	"/ this is still kept in order to find user-private
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2115
	"/ classes in her currentDirectory.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2116
	"/
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2117
	fileName := Smalltalk getSourceFileName:(package copyReplaceAll:$: with:$/) , '/' , source.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2118
	fileName notNil ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2119
	    aStream := fileName asFilename readStreamOrNil.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2120
	    aStream notNil ifTrue:[^ aStream].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2121
	].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2122
	"/
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2123
	"/ new: look in package-dir
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2124
	"/
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2125
	dir := Smalltalk getPackageDirectoryForPackage:package.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2126
	dir notNil ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2127
	    fileName := dir construct:source.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2128
	    aStream := fileName asFilename readStreamOrNil.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2129
	    aStream notNil ifTrue:[^ aStream].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2130
	].
8141
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2131
    ].
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2132
    fileName := Smalltalk getSourceFileName:source.
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2133
    fileName notNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2134
	aStream := fileName asFilename readStreamOrNil.
8141
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2135
    ].
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2136
    ^ aStream
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2137
!
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2138
12682
Stefan Vogel <sv@exept.de>
parents: 12620
diff changeset
  2139
rawSourceStreamUsingCache:usingCacheBoolean
Stefan Vogel <sv@exept.de>
parents: 12620
diff changeset
  2140
    "return an open sourceStream (needs positioning).
Stefan Vogel <sv@exept.de>
parents: 12620
diff changeset
  2141
     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
  2142
     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
  2143
     if usingCacheBoolean is true."
8141
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2144
15952
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
  2145
    |aStream fileName who myClass mgr className classNameSymbol dir mod pkgDef |
8141
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2146
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2147
    "
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2148
     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
  2149
     abs(sourcePosition) is the offset.
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2150
     Otherwise, source is the real source
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2151
    "
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2152
    source isNil ifTrue:[^ nil].
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2153
    sourcePosition isNil ifTrue:[^ source readStream].
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2154
12682
Stefan Vogel <sv@exept.de>
parents: 12620
diff changeset
  2155
    usingCacheBoolean ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2156
	(package notNil and:[package ~= PackageId noProjectID]) ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2157
	    "/ keep the last source file open, because open/close
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2158
	    "/ operations maybe slow on NFS-mounted file systems.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2159
	    "/ Since the reference to the file is weak, it will be closed
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2160
	    "/ automatically if the file is not referenced for a while.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2161
	    "/ Neat trick.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2162
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2163
	    LastFileLock critical:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2164
		aStream := LastFileReference at:1.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2165
		(aStream isNil
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2166
		  or:[aStream class == SmallInteger
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2167
		  or:[aStream isOpen not]]) ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2168
		    aStream := nil.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2169
		    LastFileReference at:1 put:nil.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2170
		].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2171
		(aStream notNil and:[LastSourceFileName ~= (package,'/',source)]) ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2172
		    aStream := nil.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2173
		].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2174
	    ].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2175
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2176
	    aStream notNil ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2177
		^ aStream
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2178
	    ].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2179
	].
8141
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2180
    ].
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2181
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2182
    "/ a negative sourcePosition indicates
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2183
    "/ that this is a local file
8141
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2184
    "/ (not to be requested via the sourceCodeManager)
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2185
    "/ 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
  2186
    "/ 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
  2187
    "/ 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
  2188
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2189
    sourcePosition < 0 ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2190
	aStream := source asFilename readStreamOrNil.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2191
	aStream isNil ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2192
	    "/ search in some standard places
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2193
	    fileName := Smalltalk getSourceFileName:source.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2194
	    fileName notNil ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2195
		aStream := fileName asFilename readStreamOrNil.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2196
	    ].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2197
	].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2198
	aStream notNil ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2199
	    usingCacheBoolean ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2200
		self cacheSourceStream:aStream.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2201
	    ].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2202
	    ^ aStream
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2203
	].
8141
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2204
    ].
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2205
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2206
    "/
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2207
    "/ if there is no SourceManager, look in local standard places first
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2208
    "/
17254
053fe5d7fec8 class: Method
Claus Gittinger <cg@exept.de>
parents: 17250
diff changeset
  2209
    (mclass notNil and:[package == mclass package]) ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2210
	mgr := mclass sourceCodeManagerFromBinaryRevision
15952
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
  2211
    ] ifFalse:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2212
	"I'm an extension and we don't have binary revision info (!!)
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2213
	 for extensions, try to guess here"
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2214
	pkgDef := ProjectDefinition definitionClassForPackage: package.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2215
	pkgDef notNil ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2216
	    mgr := pkgDef sourceCodeManagerFromBinaryRevision
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2217
	] ifFalse:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2218
	    "OK, trust the configuration"
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2219
	    mgr := AbstractSourceCodeManager managerForPackage: package
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2220
	]
15952
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
  2221
    ].
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
  2222
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
  2223
    (Class tryLocalSourceFirst or:[mgr isNil]) ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2224
	aStream := self localSourceStream.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2225
	aStream notNil ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2226
	    usingCacheBoolean ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2227
		self cacheSourceStream:aStream.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2228
	    ].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2229
	    ^ aStream
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2230
	].
8141
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2231
    ].
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2232
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2233
    "/
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2234
    "/ nope - ask my class for the source (this also invokes the SCMgr)
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2235
    "/
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2236
    who := self who.
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2237
    who notNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2238
	myClass := who methodClass.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2239
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2240
	(package notNil and:[package ~= myClass package and:[package ~= #'__NoProject__']]) ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2241
	    "/ I am an extension
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2242
	    mgr notNil ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2243
		"/ try to get the source using my package information ...
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2244
		mod := package asPackageId module.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2245
		dir := package asPackageId directory.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2246
		aStream := mgr streamForExtensionFile:source package:package directory:dir module:mod cache:true.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2247
		aStream notNil ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2248
		    usingCacheBoolean ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2249
			self cacheSourceStream:aStream.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2250
		    ].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2251
		    ^ aStream
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2252
		].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2253
	    ].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2254
	    "/ consult the local fileSystem
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2255
	    aStream := self localSourceStream.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2256
	    aStream notNil ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2257
		usingCacheBoolean ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2258
		    self cacheSourceStream:aStream.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2259
		].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2260
		^ aStream
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2261
	    ]
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2262
	].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2263
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2264
	aStream := myClass sourceStreamFor:source.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2265
	aStream notNil ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2266
	    usingCacheBoolean ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2267
		self cacheSourceStream:aStream.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2268
	    ].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2269
	    ^ aStream
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2270
	].
8141
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2271
    ].
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
    "/
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2274
    "/ nope - look in standard places
8141
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2275
    "/ (if there is a source-code manager - otherwise, we already did that)
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2276
    "/
10207
b5ca553d15ad localSourceFirst for extensions.
Claus Gittinger <cg@exept.de>
parents: 10201
diff changeset
  2277
    (mgr notNil and:[Class tryLocalSourceFirst not]) ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2278
	aStream := self localSourceStream.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2279
	aStream notNil ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2280
	    usingCacheBoolean ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2281
		self cacheSourceStream:aStream.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2282
	    ].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2283
	    ^ aStream
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2284
	].
8141
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2285
    ].
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
    "/
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2288
    "/ final chance: try current directory
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2289
    "/
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2290
    aStream isNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2291
	aStream := source asFilename readStreamOrNil.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2292
	aStream notNil ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2293
	    usingCacheBoolean ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2294
		self cacheSourceStream:aStream.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2295
	    ].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2296
	    ^ aStream
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2297
	].
8141
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2298
    ].
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2299
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2300
    (who isNil and:[source notNil]) ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2301
	"/
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2302
	"/ mhmh - seems to be a method which used to be in some
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2303
	"/ class, but has been overwritten by another or removed.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2304
	"/ (i.e. it has no containing class anyMore)
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2305
	"/ try to guess the class from the sourceFileName.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2306
	"/ and retry.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2307
	"/
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2308
	className := Smalltalk classNameForFile:source.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2309
	(classNameSymbol := className asSymbolIfInterned) notNil ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2310
	    myClass := Smalltalk at:classNameSymbol ifAbsent:nil.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2311
	    myClass notNil ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2312
		aStream := myClass sourceStreamFor:source.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2313
		aStream notNil ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2314
		    usingCacheBoolean ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2315
			self cacheSourceStream:aStream.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2316
		    ].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2317
		    ^ aStream
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2318
		].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2319
	    ]
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2320
	]
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2321
    ].
8141
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2322
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2323
    ^ nil
10201
f90568a94903 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10196
diff changeset
  2324
f90568a94903 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10196
diff changeset
  2325
    "Modified: / 26-11-2006 / 22:33:38 / cg"
8141
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2326
!
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2327
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2328
setLookupObject: lookup
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2329
    "set the lookupObject (low level - use lookupObject:)"
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2330
14536
db30b9862370 class: Method
Claus Gittinger <cg@exept.de>
parents: 14508
diff changeset
  2331
    lookupObject ~~ lookup ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2332
	lookupObject := lookup.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2333
	ObjectMemory flushCaches.
14536
db30b9862370 class: Method
Claus Gittinger <cg@exept.de>
parents: 14508
diff changeset
  2334
    ].
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2335
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2336
    "Created: / 11-07-2010 / 19:31:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2337
!
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2338
8141
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2339
sourceChunkFromStream:aStream
10673
05229646ecd7 #source - handle DecodingError when fetching the method's source
Stefan Vogel <sv@exept.de>
parents: 10608
diff changeset
  2340
    PositionError handle:[:ex |
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2341
	^ nil
8141
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2342
    ] do:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2343
	aStream position:(sourcePosition ? 1) abs - 1.
8141
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2344
    ].
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2345
    ^ aStream nextChunk.
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2346
!
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2347
12682
Stefan Vogel <sv@exept.de>
parents: 12620
diff changeset
  2348
sourceStreamUsingCache:usingCacheBoolean
Stefan Vogel <sv@exept.de>
parents: 12620
diff changeset
  2349
    "return an open sourceStream (needs positioning).
Stefan Vogel <sv@exept.de>
parents: 12620
diff changeset
  2350
     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
  2351
     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
  2352
     if usingCacheBoolean is true."
8141
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2353
12695
14b7044c2e4a changed:
Stefan Vogel <sv@exept.de>
parents: 12682
diff changeset
  2354
    |rawStream|
14b7044c2e4a changed:
Stefan Vogel <sv@exept.de>
parents: 12682
diff changeset
  2355
14b7044c2e4a changed:
Stefan Vogel <sv@exept.de>
parents: 12682
diff changeset
  2356
    rawStream := self rawSourceStreamUsingCache:usingCacheBoolean.
14b7044c2e4a changed:
Stefan Vogel <sv@exept.de>
parents: 12682
diff changeset
  2357
    rawStream isNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2358
	^ nil.
8141
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2359
    ].
14090
bb45ad9b6aab changed: #sourceStreamUsingCache:
Stefan Vogel <sv@exept.de>
parents: 14047
diff changeset
  2360
    rawStream position:0.
12695
14b7044c2e4a changed:
Stefan Vogel <sv@exept.de>
parents: 12682
diff changeset
  2361
14b7044c2e4a changed:
Stefan Vogel <sv@exept.de>
parents: 12682
diff changeset
  2362
    "/ see if its utf8 encoded...
14b7044c2e4a changed:
Stefan Vogel <sv@exept.de>
parents: 12682
diff changeset
  2363
    ^ EncodedStream decodedStreamFor:rawStream.
8141
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2364
! !
41b25e5f7532 sourceStream access refactored (preps for utf8 decoding)
Claus Gittinger <cg@exept.de>
parents: 8117
diff changeset
  2365
1093
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  2366
!Method methodsFor:'private-compiler interface'!
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  2367
5405
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2368
primitiveNumber
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2369
    "for stx rel >= 5.x only:
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2370
     return the primitive number."
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2371
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2372
%{  /* NOCONTEXT */
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2373
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2374
#ifdef F_PRIMITIVE
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2375
    INT f = __intVal(__INST(flags));
6014
14acbd7c25d4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6006
diff changeset
  2376
    OBJ nr = 0;
5405
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2377
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2378
    if (f & F_PRIMITIVE) {
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2379
	nr = __INST(code_);
5405
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2380
    }
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2381
    RETURN (nr);
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2382
#endif
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2383
%}.
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2384
    self primitiveFailed
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2385
!
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2386
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2387
setPrimitiveNumber:aNumber
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2388
    "for stx rel >= 5.x only:
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2389
     mark the method as having primitive code."
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2390
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2391
%{  /* NOCONTEXT */
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2392
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2393
#ifdef F_PRIMITIVE
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2394
    INT f = __intVal(__INST(flags));
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2395
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2396
    f |= F_PRIMITIVE;
8913
b9498d27a554 64bit; mkSmallInteger
Claus Gittinger <cg@exept.de>
parents: 8896
diff changeset
  2397
    __INST(flags) = __mkSmallInteger(f);
5405
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2398
    __INST(code_) = aNumber;
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2399
    RETURN (self);
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2400
#endif
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2401
%}.
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2402
    self primitiveFailed
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2403
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2404
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2405
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2406
!
f07c8045ab4e *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5398
diff changeset
  2407
1093
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  2408
setResourceFlag
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  2409
    "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
  2410
     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
  2411
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  2412
%{  /* NOCONTEXT */
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  2413
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  2414
#ifdef F_RESOURCE
2868
772c890f907c alpha64
Claus Gittinger <cg@exept.de>
parents: 2826
diff changeset
  2415
    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
  2416
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  2417
    f |= F_RESOURCE;
8913
b9498d27a554 64bit; mkSmallInteger
Claus Gittinger <cg@exept.de>
parents: 8896
diff changeset
  2418
    __INST(flags) = __mkSmallInteger(f);
1093
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  2419
#endif
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  2420
%}
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  2421
! !
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  2422
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
  2423
!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
  2424
2702
5d6f23d8ee18 more ST80 queries
Claus Gittinger <cg@exept.de>
parents: 2695
diff changeset
  2425
accessedInstVars
5d6f23d8ee18 more ST80 queries
Claus Gittinger <cg@exept.de>
parents: 2695
diff changeset
  2426
    "return a collection of instVarNames, which are accessed by
5d6f23d8ee18 more ST80 queries
Claus Gittinger <cg@exept.de>
parents: 2695
diff changeset
  2427
     the receiver method"
5d6f23d8ee18 more ST80 queries
Claus Gittinger <cg@exept.de>
parents: 2695
diff changeset
  2428
5d6f23d8ee18 more ST80 queries
Claus Gittinger <cg@exept.de>
parents: 2695
diff changeset
  2429
    |src parser|
5d6f23d8ee18 more ST80 queries
Claus Gittinger <cg@exept.de>
parents: 2695
diff changeset
  2430
5d6f23d8ee18 more ST80 queries
Claus Gittinger <cg@exept.de>
parents: 2695
diff changeset
  2431
    src := self source.
5d6f23d8ee18 more ST80 queries
Claus Gittinger <cg@exept.de>
parents: 2695
diff changeset
  2432
    src notNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2433
	parser := Parser
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2434
			parseMethod:src
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2435
			in:self containingClass
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2436
			ignoreErrors:true
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2437
			ignoreWarnings:true.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2438
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2439
	(parser notNil and:[parser ~~ #Error]) ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2440
	    ^ parser usedInstVars
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2441
	].
2702
5d6f23d8ee18 more ST80 queries
Claus Gittinger <cg@exept.de>
parents: 2695
diff changeset
  2442
    ].
5d6f23d8ee18 more ST80 queries
Claus Gittinger <cg@exept.de>
parents: 2695
diff changeset
  2443
    ^ #() "/ actually: unknown
5d6f23d8ee18 more ST80 queries
Claus Gittinger <cg@exept.de>
parents: 2695
diff changeset
  2444
5d6f23d8ee18 more ST80 queries
Claus Gittinger <cg@exept.de>
parents: 2695
diff changeset
  2445
    "Modified: 19.6.1997 / 17:54:09 / cg"
5d6f23d8ee18 more ST80 queries
Claus Gittinger <cg@exept.de>
parents: 2695
diff changeset
  2446
!
5d6f23d8ee18 more ST80 queries
Claus Gittinger <cg@exept.de>
parents: 2695
diff changeset
  2447
14237
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2448
accessesField:instVarIndex
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2449
    "return true, if the instvar at instVarIndex is accessed by the receiver.
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2450
     Uses parser (for now); could look at bytecode as well here..."
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2451
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2452
    |instVarName|
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2453
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2454
    instVarName := (self mclass allInstVarNames) at:instVarIndex.
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2455
    ^ self accessesInstVar:instVarName
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2456
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2457
    "Created: / 23-07-2012 / 11:13:54 / cg"
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2458
!
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2459
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2460
accessesInstVar:instVarName
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2461
    "return true, if the named instvar is accessed by the receiver.
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2462
     Uses parser (for now); could look at bytecode as well here..."
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2463
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2464
    |usedInstVars|
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2465
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2466
    (self source includesString:instVarName) ifFalse:[^ false].     "/ that's much faster than parsing...
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2467
    usedInstVars := self parse:#'parseMethodSilent:in:' with:self mclass  return:#usedInstVars or:#().
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2468
    ^ usedInstVars includes:instVarName.
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2469
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2470
    "Created: / 23-07-2012 / 11:15:02 / cg"
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2471
!
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  2472
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
  2473
containingClass
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2474
    "return the class I am defined in.
17278
7813956ffab4 class: Method
Claus Gittinger <cg@exept.de>
parents: 17254
diff changeset
  2475
     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
  2476
     due to an accept in a browser or debugger.
17278
7813956ffab4 class: Method
Claus Gittinger <cg@exept.de>
parents: 17254
diff changeset
  2477
     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
  2478
     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
  2479
     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
  2480
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2481
    "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
  2482
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  2483
    |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
  2484
5704
aeeece3a93ef flush mclass, if no longer valid
Claus Gittinger <cg@exept.de>
parents: 5700
diff changeset
  2485
    mclass notNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2486
	"/ 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
  2487
	(mclass containsMethod:self) ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2488
	    ^ mclass
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2489
	].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2490
	^ nil.
5704
aeeece3a93ef flush mclass, if no longer valid
Claus Gittinger <cg@exept.de>
parents: 5700
diff changeset
  2491
    ].
5324
5c9959ce98af make use of mclass
Claus Gittinger <cg@exept.de>
parents: 5322
diff changeset
  2492
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  2493
    who := self who.
17254
053fe5d7fec8 class: Method
Claus Gittinger <cg@exept.de>
parents: 17250
diff changeset
  2494
    who notNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2495
	mclass := who methodClass.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2496
	^ mclass
17254
053fe5d7fec8 class: Method
Claus Gittinger <cg@exept.de>
parents: 17250
diff changeset
  2497
    ].
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
  2498
    "
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2499
     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
  2500
    "
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2501
    ^ 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
  2502
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2503
    "
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2504
     (Object compiledMethodAt:#at:) containingClass
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2505
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2506
     (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
  2507
    "
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2508
!
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2509
10482
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2510
externalLibraryFunction
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2511
    "if this is an externalLibraryFunction call, return the externalLibraryFunction.
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2512
     Returns nil otherwise."
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2513
13189
96fe3d9e3f3a changed: #externalLibraryFunction
Claus Gittinger <cg@exept.de>
parents: 13156
diff changeset
  2514
    |newMethod function|
96fe3d9e3f3a changed: #externalLibraryFunction
Claus Gittinger <cg@exept.de>
parents: 13156
diff changeset
  2515
13463
7c98583d98c8 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 13422
diff changeset
  2516
    (self
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2517
	literalsDetect:[:lit |
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2518
	    #(
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2519
		#'invoke'
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2520
		#'invokeWith:'
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2521
		#'invokeWith:with:'
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2522
		#'invokeWith:with:with:'
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2523
		#'invokeWith:with:with:with:'
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2524
		#'invokeWithArguments:'
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2525
		#'invokeCPPVirtualOn:'
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2526
		#'invokeCPPVirtualOn:with:'
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2527
		#'invokeCPPVirtualOn:with:with:'
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2528
		#'invokeCPPVirtualOn:with:with:with:'
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2529
		#'invokeCPPVirtualOn:with:with:with:with:'
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2530
		#'invokeCPPVirtualOn:withArguments:'
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2531
	    ) includes:lit
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2532
	]
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2533
	ifNone:nil) notNil
13189
96fe3d9e3f3a changed: #externalLibraryFunction
Claus Gittinger <cg@exept.de>
parents: 13156
diff changeset
  2534
    ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2535
	"/ sigh - for stc-compiled code, this does not work:
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2536
	function := self literalsDetect:[:lit | lit isExternalLibraryFunction] ifNone:nil.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2537
	function isNil ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2538
	    "/ parse it and ask the parser
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2539
	    newMethod := Compiler compile:self source forClass:self mclass install:false.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2540
	    function := newMethod literalsDetect:[:lit | lit isExternalLibraryFunction] ifNone:nil.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2541
	].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2542
	^ function
13189
96fe3d9e3f3a changed: #externalLibraryFunction
Claus Gittinger <cg@exept.de>
parents: 13156
diff changeset
  2543
    ].
96fe3d9e3f3a changed: #externalLibraryFunction
Claus Gittinger <cg@exept.de>
parents: 13156
diff changeset
  2544
    ^ nil
96fe3d9e3f3a changed: #externalLibraryFunction
Claus Gittinger <cg@exept.de>
parents: 13156
diff changeset
  2545
96fe3d9e3f3a changed: #externalLibraryFunction
Claus Gittinger <cg@exept.de>
parents: 13156
diff changeset
  2546
    "
96fe3d9e3f3a changed: #externalLibraryFunction
Claus Gittinger <cg@exept.de>
parents: 13156
diff changeset
  2547
     (IDispatchPointer compiledMethodAt:#'invokeGetTypeInfo:_:_:')
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2548
	externalLibraryFunction
13189
96fe3d9e3f3a changed: #externalLibraryFunction
Claus Gittinger <cg@exept.de>
parents: 13156
diff changeset
  2549
    "
10482
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2550
!
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2551
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2552
hasAnnotation
14253
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  2553
    "Return true iff the method has any annotation"
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2554
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2555
    ^annotations notNil
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2556
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2557
    "Created: / 11-07-2010 / 19:27:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
14253
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  2558
    "Modified (comment): / 26-07-2012 / 15:49:59 / cg"
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2559
!
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2560
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2561
hasAnnotation: key
14253
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  2562
    "Return true iff the method is annotated with the given key"
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2563
17463
9f3633d1b67e class: Method
Claus Gittinger <cg@exept.de>
parents: 17452
diff changeset
  2564
    annotations isNil ifTrue:[^ false].
9f3633d1b67e class: Method
Claus Gittinger <cg@exept.de>
parents: 17452
diff changeset
  2565
    ^ (self annotationIndexOf: key) notNil
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2566
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2567
    "Created: / 11-07-2010 / 19:28:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
14253
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  2568
    "Modified (comment): / 26-07-2012 / 15:49:54 / cg"
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2569
!
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2570
12913
142c9566a768 added: #hasAnyResource:
Claus Gittinger <cg@exept.de>
parents: 12900
diff changeset
  2571
hasAnyResource:aCollectionOfSymbols
142c9566a768 added: #hasAnyResource:
Claus Gittinger <cg@exept.de>
parents: 12900
diff changeset
  2572
    "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
  2573
142c9566a768 added: #hasAnyResource:
Claus Gittinger <cg@exept.de>
parents: 12900
diff changeset
  2574
    ^ self hasResource and:[ self resources keys includesAny:aCollectionOfSymbols ]
142c9566a768 added: #hasAnyResource:
Claus Gittinger <cg@exept.de>
parents: 12900
diff changeset
  2575
142c9566a768 added: #hasAnyResource:
Claus Gittinger <cg@exept.de>
parents: 12900
diff changeset
  2576
    "
142c9566a768 added: #hasAnyResource:
Claus Gittinger <cg@exept.de>
parents: 12900
diff changeset
  2577
     Method allInstancesDo:[:m |
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2578
	(m hasAnyResource:#(image canvas)) ifTrue:[self halt]
12913
142c9566a768 added: #hasAnyResource:
Claus Gittinger <cg@exept.de>
parents: 12900
diff changeset
  2579
     ].
142c9566a768 added: #hasAnyResource:
Claus Gittinger <cg@exept.de>
parents: 12900
diff changeset
  2580
    "
142c9566a768 added: #hasAnyResource:
Claus Gittinger <cg@exept.de>
parents: 12900
diff changeset
  2581
!
142c9566a768 added: #hasAnyResource:
Claus Gittinger <cg@exept.de>
parents: 12900
diff changeset
  2582
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
  2583
hasPrimitiveCode
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2584
    "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
  2585
     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
  2586
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2587
    |src|
159
514c749165c3 *** empty log message ***
claus
parents: 142
diff changeset
  2588
2218
93c4cb83372a comment
Claus Gittinger <cg@exept.de>
parents: 2201
diff changeset
  2589
    "/ first a trivial reject, if the source does not
5534
bf00d9a2dfd5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5530
diff changeset
  2590
    "/ contain a '% {' sequence
2218
93c4cb83372a comment
Claus Gittinger <cg@exept.de>
parents: 2201
diff changeset
  2591
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
  2592
    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
  2593
    src notNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2594
	(src includesString:(String with:$% with:${) "<- no constant here - to avoid trouble with stupid scanners" ) ifFalse:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2595
	    "/ cannot contain primitive code.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2596
	    ^ false
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2597
	]
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
  2598
    ].
2218
93c4cb83372a comment
Claus Gittinger <cg@exept.de>
parents: 2201
diff changeset
  2599
93c4cb83372a comment
Claus Gittinger <cg@exept.de>
parents: 2201
diff changeset
  2600
    "/ ok; it may or may not ...
93c4cb83372a comment
Claus Gittinger <cg@exept.de>
parents: 2201
diff changeset
  2601
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
  2602
    ^ 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
  2603
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2604
    "
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2605
     (Method compiledMethodAt:#hasPrimitiveCode) hasPrimitiveCode
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2606
     (Object compiledMethodAt:#at:) hasPrimitiveCode
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2607
     (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
  2608
    "
159
514c749165c3 *** empty log message ***
claus
parents: 142
diff changeset
  2609
2218
93c4cb83372a comment
Claus Gittinger <cg@exept.de>
parents: 2201
diff changeset
  2610
    "Modified: 22.1.1997 / 00:03:45 / 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
  2611
!
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2612
1093
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  2613
hasResource
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  2614
    "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
  2615
     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
  2616
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  2617
%{  /* NOCONTEXT */
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  2618
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  2619
#ifdef F_RESOURCE
1133
961f2b095c22 underline cleanup
Claus Gittinger <cg@exept.de>
parents: 1103
diff changeset
  2620
    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
  2621
#endif
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  2622
%}.
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  2623
    ^ false
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  2624
!
1e742016eea0 category rename / added access to RESOURCE and CALLED flags
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
  2625
10482
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2626
indexOfOLECall
14357
08d5b662477a comment/format in: #indexOfOLECall
Claus Gittinger <cg@exept.de>
parents: 14274
diff changeset
  2627
    "return the vtable inedx, if the method contains an ole call; nil if not.
10482
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2628
     Uses Parser to parse methods source and get the information."
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2629
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2630
    |funcOrNil|
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2631
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2632
    funcOrNil := self externalLibraryFunction.
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2633
    (funcOrNil isNil or:[funcOrNil isCallTypeOLE not]) ifTrue:[^ nil].
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2634
    ^ funcOrNil vtableIndex
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2635
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2636
    "
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2637
     (Method compiledMethodAt:#hasPrimitiveCode) isOLECall
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2638
     (Method compiledMethodAt:#hasPrimitiveCode) indexOfOLECall
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2639
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2640
     (Win32OperatingSystem class compiledMethodAt:#primClosePrinter:) isOLECall
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2641
     (Win32OperatingSystem class compiledMethodAt:#primClosePrinter:) indexOfOLECall
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2642
     (Win32OperatingSystem class compiledMethodAt:#primClosePrinter:) isExternalLibraryFunctionCall
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2643
     (Win32OperatingSystem class compiledMethodAt:#primClosePrinter:) externalLibraryFunctionCall
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2644
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2645
     (IUnknownPointer compiledMethodAt:#invokeAddRef) isExternalLibraryFunctionCall
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2646
     (IUnknownPointer compiledMethodAt:#invokeAddRef) externalLibraryFunction
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2647
     (IUnknownPointer compiledMethodAt:#invokeAddRef) isOLECall
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2648
     (IUnknownPointer compiledMethodAt:#invokeAddRef) indexOfOLECall
10482
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2649
    "
14357
08d5b662477a comment/format in: #indexOfOLECall
Claus Gittinger <cg@exept.de>
parents: 14274
diff changeset
  2650
08d5b662477a comment/format in: #indexOfOLECall
Claus Gittinger <cg@exept.de>
parents: 14274
diff changeset
  2651
    "Modified (comment): / 25-09-2012 / 12:01:32 / cg"
10482
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2652
!
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2653
11986
3f2738b9e2c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11985
diff changeset
  2654
isDocumentationMethod
11987
05e30e073541 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11986
diff changeset
  2655
    "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
  2656
     (implies being a metaclass method)"
11986
3f2738b9e2c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11985
diff changeset
  2657
12275
8ca2aabefa4e changed: #isDocumentationMethod
Claus Gittinger <cg@exept.de>
parents: 12216
diff changeset
  2658
    self mclass isMeta ifFalse:[^ false].
12283
54b6f67bcc26 changed: #isDocumentationMethod
Claus Gittinger <cg@exept.de>
parents: 12275
diff changeset
  2659
    self isVersionMethod ifTrue:[^ false].
12159
1768c0019100 compiler interface
fm
parents: 12017
diff changeset
  2660
    ^ self parse:#'parseMethodSilent:' return:#isEmptyMethod or:false.
11986
3f2738b9e2c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11985
diff changeset
  2661
!
3f2738b9e2c3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11985
diff changeset
  2662
13639
01a74c51c29a added: #isExtension
Claus Gittinger <cg@exept.de>
parents: 13638
diff changeset
  2663
isExtension
01a74c51c29a added: #isExtension
Claus Gittinger <cg@exept.de>
parents: 13638
diff changeset
  2664
    "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
  2665
01a74c51c29a added: #isExtension
Claus Gittinger <cg@exept.de>
parents: 13638
diff changeset
  2666
    ^ package ~= self mclass package
01a74c51c29a added: #isExtension
Claus Gittinger <cg@exept.de>
parents: 13638
diff changeset
  2667
01a74c51c29a added: #isExtension
Claus Gittinger <cg@exept.de>
parents: 13638
diff changeset
  2668
    "Created: / 07-09-2011 / 09:29:13 / cg"
01a74c51c29a added: #isExtension
Claus Gittinger <cg@exept.de>
parents: 13638
diff changeset
  2669
!
01a74c51c29a added: #isExtension
Claus Gittinger <cg@exept.de>
parents: 13638
diff changeset
  2670
10482
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2671
isExternalLibraryFunctionCall
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2672
    "Return true, if this is an externalLibraryFunction call."
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2673
12569
b97efbbc1ac7 comment/format in: #isExternalLibraryFunctionCall
Claus Gittinger <cg@exept.de>
parents: 12546
diff changeset
  2674
    "/ 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
  2675
    "/ to be fixed...
b97efbbc1ac7 comment/format in: #isExternalLibraryFunctionCall
Claus Gittinger <cg@exept.de>
parents: 12546
diff changeset
  2676
10482
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2677
    ^ self externalLibraryFunction notNil
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2678
!
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2679
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
  2680
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
  2681
    "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
  2682
     a (re)-compilation error. Since invalidation is by patching the
17452
b97d151f8a34 class: Method
Claus Gittinger <cg@exept.de>
parents: 17402
diff changeset
  2683
     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
  2684
     (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
  2685
2558
07e7d6fef46d removed unused var
Claus Gittinger <cg@exept.de>
parents: 2541
diff changeset
  2686
    |m myCode|
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2687
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2688
    myCode := self code.
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2689
18438
0655839a70f8 class: Method
Stefan Vogel <sv@exept.de>
parents: 18431
diff changeset
  2690
    m := self trapMethodForNumArgs:(self argumentCount).
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2691
    (m notNil and:[self ~~ m]) ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2692
	(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
  2693
	(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
  2694
    ].
159
514c749165c3 *** empty log message ***
claus
parents: 142
diff changeset
  2695
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
  2696
    m := Method compiledMethodAt:#uncompiledCodeObject.
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2697
    (m notNil and:[self ~~ m]) ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2698
	(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
  2699
	(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
  2700
    ].
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2701
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2702
    m := Method compiledMethodAt:#unloadedCodeObject.
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2703
    (m notNil and:[self ~~ m]) ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2704
	(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
  2705
	(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
  2706
    ].
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2707
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
  2708
    ^ false
1194
628abcb5fbb6 moved some protocol from to upper levels
Claus Gittinger <cg@exept.de>
parents: 1190
diff changeset
  2709
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2710
    "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
  2711
!
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2712
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2713
isMethod
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2714
    "return true, if the receiver is some kind of 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
  2715
     true returned here - the method is redefined from Object."
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2716
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2717
    ^ true
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2718
!
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2719
14274
cee19bad32a0 added: #isMethodWithBreakpoints
Claus Gittinger <cg@exept.de>
parents: 14266
diff changeset
  2720
isMethodWithBreakpoints
cee19bad32a0 added: #isMethodWithBreakpoints
Claus Gittinger <cg@exept.de>
parents: 14266
diff changeset
  2721
    "only redefined in MethodWithBreakpoints"
cee19bad32a0 added: #isMethodWithBreakpoints
Claus Gittinger <cg@exept.de>
parents: 14266
diff changeset
  2722
cee19bad32a0 added: #isMethodWithBreakpoints
Claus Gittinger <cg@exept.de>
parents: 14266
diff changeset
  2723
    ^ false
cee19bad32a0 added: #isMethodWithBreakpoints
Claus Gittinger <cg@exept.de>
parents: 14266
diff changeset
  2724
cee19bad32a0 added: #isMethodWithBreakpoints
Claus Gittinger <cg@exept.de>
parents: 14266
diff changeset
  2725
    "Created: / 01-08-2012 / 17:26:43 / cg"
cee19bad32a0 added: #isMethodWithBreakpoints
Claus Gittinger <cg@exept.de>
parents: 14266
diff changeset
  2726
!
cee19bad32a0 added: #isMethodWithBreakpoints
Claus Gittinger <cg@exept.de>
parents: 14266
diff changeset
  2727
10482
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2728
isOLECall
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2729
    "return true, if the method is an ole call; false if not."
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2730
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2731
    |funcOrNil|
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2732
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2733
    funcOrNil := self externalLibraryFunction.
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2734
    ^ funcOrNil notNil and:[funcOrNil isCallTypeOLE]
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2735
!
11b634beb199 +ole queries
fm
parents: 10375
diff changeset
  2736
5894
ed6193fa6040 Define #isObsolete and fix various comments
Stefan Vogel <sv@exept.de>
parents: 5818
diff changeset
  2737
isObsolete
ed6193fa6040 Define #isObsolete and fix various comments
Stefan Vogel <sv@exept.de>
parents: 5818
diff changeset
  2738
    "returns true, if this method is obsolete and should not be used any longer"
ed6193fa6040 Define #isObsolete and fix various comments
Stefan Vogel <sv@exept.de>
parents: 5818
diff changeset
  2739
ed6193fa6040 Define #isObsolete and fix various comments
Stefan Vogel <sv@exept.de>
parents: 5818
diff changeset
  2740
    |res|
ed6193fa6040 Define #isObsolete and fix various comments
Stefan Vogel <sv@exept.de>
parents: 5818
diff changeset
  2741
ed6193fa6040 Define #isObsolete and fix various comments
Stefan Vogel <sv@exept.de>
parents: 5818
diff changeset
  2742
    ^ (res := self resources) notNil and:[res includesKey:#obsolete]
ed6193fa6040 Define #isObsolete and fix various comments
Stefan Vogel <sv@exept.de>
parents: 5818
diff changeset
  2743
!
ed6193fa6040 Define #isObsolete and fix various comments
Stefan Vogel <sv@exept.de>
parents: 5818
diff changeset
  2744
15079
8f16af69c964 class: Method
Claus Gittinger <cg@exept.de>
parents: 15045
diff changeset
  2745
isShadowingExtension
8f16af69c964 class: Method
Claus Gittinger <cg@exept.de>
parents: 15045
diff changeset
  2746
    "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
  2747
     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
  2748
16877
d4a452edacb5 Added Method>>shadowedMethod returning shadowed method or nil.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16847
diff changeset
  2749
    ^ self shadowedMethod notNil.
d4a452edacb5 Added Method>>shadowedMethod returning shadowed method or nil.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16847
diff changeset
  2750
d4a452edacb5 Added Method>>shadowedMethod returning shadowed method or nil.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16847
diff changeset
  2751
    "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
  2752
!
8f16af69c964 class: Method
Claus Gittinger <cg@exept.de>
parents: 15045
diff changeset
  2753
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2754
isSynthetic
13638
c5b12d3594ba changed: #rationale
Claus Gittinger <cg@exept.de>
parents: 13634
diff changeset
  2755
    "a syntheric method does not really exist - it is only shown in a browser's list"
c5b12d3594ba changed: #rationale
Claus Gittinger <cg@exept.de>
parents: 13634
diff changeset
  2756
c5b12d3594ba changed: #rationale
Claus Gittinger <cg@exept.de>
parents: 13634
diff changeset
  2757
    ^ false
c5b12d3594ba changed: #rationale
Claus Gittinger <cg@exept.de>
parents: 13634
diff changeset
  2758
c5b12d3594ba changed: #rationale
Claus Gittinger <cg@exept.de>
parents: 13634
diff changeset
  2759
    "Modified (format): / 07-09-2011 / 09:00:56 / cg"
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2760
!
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  2761
11985
5fb68bfa4648 +isVersionMethod
Claus Gittinger <cg@exept.de>
parents: 11950
diff changeset
  2762
isVersionMethod
12017
908685b92c3e comment/format in: #isVersionMethod
Claus Gittinger <cg@exept.de>
parents: 12016
diff changeset
  2763
    "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
  2764
     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
  2765
     method attribute for that..."
11985
5fb68bfa4648 +isVersionMethod
Claus Gittinger <cg@exept.de>
parents: 11950
diff changeset
  2766
12016
7918f05b2046 changed: #isVersionMethod
Claus Gittinger <cg@exept.de>
parents: 11987
diff changeset
  2767
    ^ self mclass isMeta
12165
ca71a1aba926 changed: #isVersionMethod
fm
parents: 12159
diff changeset
  2768
    and:[(AbstractSourceCodeManager isVersionMethodSelector:self selector)]
11985
5fb68bfa4648 +isVersionMethod
Claus Gittinger <cg@exept.de>
parents: 11950
diff changeset
  2769
5fb68bfa4648 +isVersionMethod
Claus Gittinger <cg@exept.de>
parents: 11950
diff changeset
  2770
    "
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2771
     (Method class compiledMethodAt:#version) isVersionMethod
11985
5fb68bfa4648 +isVersionMethod
Claus Gittinger <cg@exept.de>
parents: 11950
diff changeset
  2772
     (Method class compiledMethodAt:#documentation) isVersionMethod
5fb68bfa4648 +isVersionMethod
Claus Gittinger <cg@exept.de>
parents: 11950
diff changeset
  2773
    "
5fb68bfa4648 +isVersionMethod
Claus Gittinger <cg@exept.de>
parents: 11950
diff changeset
  2774
!
5fb68bfa4648 +isVersionMethod
Claus Gittinger <cg@exept.de>
parents: 11950
diff changeset
  2775
11848
ca89d472f9cf *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11778
diff changeset
  2776
isVisualWorksTypedef
ca89d472f9cf *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11778
diff changeset
  2777
    "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
  2778
ca89d472f9cf *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11778
diff changeset
  2779
    ^ (self literals size > 0)
ca89d472f9cf *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11778
diff changeset
  2780
    and:[ (self literalAt:1) isKindOf:CType ]
ca89d472f9cf *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11778
diff changeset
  2781
!
ca89d472f9cf *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11778
diff changeset
  2782
2695
79229a9ab2da added #mclass for ST80 compatibility
Claus Gittinger <cg@exept.de>
parents: 2694
diff changeset
  2783
mclass
17278
7813956ffab4 class: Method
Claus Gittinger <cg@exept.de>
parents: 17254
diff changeset
  2784
    "return the class in which the receiver is currently contained in.
7813956ffab4 class: Method
Claus Gittinger <cg@exept.de>
parents: 17254
diff changeset
  2785
     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
  2786
     due to an accept in a browser or debugger.
17278
7813956ffab4 class: Method
Claus Gittinger <cg@exept.de>
parents: 17254
diff changeset
  2787
     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
  2788
     via getMclass.
2695
79229a9ab2da added #mclass for ST80 compatibility
Claus Gittinger <cg@exept.de>
parents: 2694
diff changeset
  2789
     Same as #containingClass, for ST80 compatibility."
79229a9ab2da added #mclass for ST80 compatibility
Claus Gittinger <cg@exept.de>
parents: 2694
diff changeset
  2790
79229a9ab2da added #mclass for ST80 compatibility
Claus Gittinger <cg@exept.de>
parents: 2694
diff changeset
  2791
    ^ self containingClass
79229a9ab2da added #mclass for ST80 compatibility
Claus Gittinger <cg@exept.de>
parents: 2694
diff changeset
  2792
79229a9ab2da added #mclass for ST80 compatibility
Claus Gittinger <cg@exept.de>
parents: 2694
diff changeset
  2793
    "Created: 19.6.1997 / 16:26:13 / cg"
79229a9ab2da added #mclass for ST80 compatibility
Claus Gittinger <cg@exept.de>
parents: 2694
diff changeset
  2794
!
79229a9ab2da added #mclass for ST80 compatibility
Claus Gittinger <cg@exept.de>
parents: 2694
diff changeset
  2795
5696
958a0643496d compatibility
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
  2796
messages
958a0643496d compatibility
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
  2797
    "return a collection of message-selectors, sent by this method."
958a0643496d compatibility
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
  2798
958a0643496d compatibility
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
  2799
    ^ self messagesSent
958a0643496d compatibility
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
  2800
!
958a0643496d compatibility
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
  2801
5584
b175797a8c4d #messagesDo: (VW compatibility)
Claus Gittinger <cg@exept.de>
parents: 5582
diff changeset
  2802
messagesDo:aBlock
b175797a8c4d #messagesDo: (VW compatibility)
Claus Gittinger <cg@exept.de>
parents: 5582
diff changeset
  2803
    "evaluate aBlock for each message-selector sent by this method.
b175797a8c4d #messagesDo: (VW compatibility)
Claus Gittinger <cg@exept.de>
parents: 5582
diff changeset
  2804
     Uses Parser to parse methods source and extract the names."
b175797a8c4d #messagesDo: (VW compatibility)
Claus Gittinger <cg@exept.de>
parents: 5582
diff changeset
  2805
b175797a8c4d #messagesDo: (VW compatibility)
Claus Gittinger <cg@exept.de>
parents: 5582
diff changeset
  2806
    ^ self messagesSent do:aBlock
b175797a8c4d #messagesDo: (VW compatibility)
Claus Gittinger <cg@exept.de>
parents: 5582
diff changeset
  2807
!
b175797a8c4d #messagesDo: (VW compatibility)
Claus Gittinger <cg@exept.de>
parents: 5582
diff changeset
  2808
14402
Claus Gittinger <cg@exept.de>
parents: 14375
diff changeset
  2809
messagesPossiblySent
Claus Gittinger <cg@exept.de>
parents: 14375
diff changeset
  2810
    "return a collection with the message selectors possibly sent to by the receiver.
Claus Gittinger <cg@exept.de>
parents: 14375
diff changeset
  2811
     Uses Parser to parse methods source and extract the names.
Claus Gittinger <cg@exept.de>
parents: 14375
diff changeset
  2812
     The returned collection includes perform-like and possibly performed messages"
Claus Gittinger <cg@exept.de>
parents: 14375
diff changeset
  2813
Claus Gittinger <cg@exept.de>
parents: 14375
diff changeset
  2814
    ^ self parse:#'parseMethodSilent:in:' with:self mclass return:#messagesPossiblySent or:#()
Claus Gittinger <cg@exept.de>
parents: 14375
diff changeset
  2815
Claus Gittinger <cg@exept.de>
parents: 14375
diff changeset
  2816
    "
Claus Gittinger <cg@exept.de>
parents: 14375
diff changeset
  2817
     (Method compiledMethodAt:#printOn:) messagesSent
Claus Gittinger <cg@exept.de>
parents: 14375
diff changeset
  2818
     (Point compiledMethodAt:#x:) messagesSent
17173
e8fd5eb30331 class: Method
Claus Gittinger <cg@exept.de>
parents: 17159
diff changeset
  2819
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2820
     (WindowEvent class compiledMethodAt:#focusInView:) messagesSent
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2821
     (WindowEvent class compiledMethodAt:#focusInView:) messagesPossiblySent
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2822
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2823
     (Method compiledMethodAt:#messagesPossiblySent) messagesSent
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2824
     (Method compiledMethodAt:#messagesPossiblySent) messagesPossiblySent
14402
Claus Gittinger <cg@exept.de>
parents: 14375
diff changeset
  2825
    "
Claus Gittinger <cg@exept.de>
parents: 14375
diff changeset
  2826
!
Claus Gittinger <cg@exept.de>
parents: 14375
diff changeset
  2827
5582
737d121ae7de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5564
diff changeset
  2828
messagesSent
737d121ae7de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5564
diff changeset
  2829
    "return a collection with the message selectors sent to by the receiver.
737d121ae7de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5564
diff changeset
  2830
     Uses Parser to parse methods source and extract the names.
737d121ae7de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5564
diff changeset
  2831
     The returned collection includes all used message selectors (i.e. including super-send messages)"
737d121ae7de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5564
diff changeset
  2832
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2833
    ^ self parse:#'parseMethodSilent:in:' with:self mclass return:#messagesSent or:#()
5582
737d121ae7de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5564
diff changeset
  2834
737d121ae7de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5564
diff changeset
  2835
    "
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2836
     (Method compiledMethodAt:#printOn:) messagesSent
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2837
     (Point compiledMethodAt:#x:) messagesSent
5582
737d121ae7de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5564
diff changeset
  2838
    "
737d121ae7de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5564
diff changeset
  2839
!
737d121ae7de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5564
diff changeset
  2840
737d121ae7de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5564
diff changeset
  2841
messagesSentToSelf
737d121ae7de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5564
diff changeset
  2842
    "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
  2843
     Uses Parser to parse methods source and extract the names."
737d121ae7de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5564
diff changeset
  2844
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2845
    ^ self parse:#'parseMethodSilent:in:' with:self mclass return:#messagesSentToSelf or:#()
5652
f832f4c5cfdd messagesSentTo* fixed
Claus Gittinger <cg@exept.de>
parents: 5644
diff changeset
  2846
5582
737d121ae7de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5564
diff changeset
  2847
!
737d121ae7de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5564
diff changeset
  2848
737d121ae7de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5564
diff changeset
  2849
messagesSentToSuper
737d121ae7de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5564
diff changeset
  2850
    "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
  2851
     Uses Parser to parse methods source and extract the names."
737d121ae7de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5564
diff changeset
  2852
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2853
    ^ self parse:#'parseMethodSilent:in:' with:self mclass return:#messagesSentToSuper or:#()
5652
f832f4c5cfdd messagesSentTo* fixed
Claus Gittinger <cg@exept.de>
parents: 5644
diff changeset
  2854
5582
737d121ae7de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5564
diff changeset
  2855
!
737d121ae7de *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5564
diff changeset
  2856
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
  2857
methodArgAndVarNames
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2858
    "return a collection with the methods argument and variable names.
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2859
     Uses Parser to parse methods source and extract the names.
15787
7ea8bff49835 class: Method
Claus Gittinger <cg@exept.de>
parents: 15768
diff changeset
  2860
     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
  2861
     syntax/parse error occurred.
15787
7ea8bff49835 class: Method
Claus Gittinger <cg@exept.de>
parents: 15768
diff changeset
  2862
     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
  2863
8427
bba41f189196 parserClass stuff
ca
parents: 8419
diff changeset
  2864
    |parserClass parser sourceString argNames varNames|
bba41f189196 parserClass stuff
ca
parents: 8419
diff changeset
  2865
bba41f189196 parserClass stuff
ca
parents: 8419
diff changeset
  2866
    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
  2867
    sourceString := self source.
8427
bba41f189196 parserClass stuff
ca
parents: 8419
diff changeset
  2868
    (parserClass notNil and:[sourceString notNil]) ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2869
	parser := parserClass parseMethodArgAndVarSpecificationSilent:sourceString.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2870
	(parser isNil or:[parser == #Error]) ifTrue:[^ #()].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2871
	argNames := parser methodArgs.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2872
	varNames := parser methodVars.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2873
	argNames isNil ifTrue:[^ varNames ? #()].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2874
	varNames isNil ifTrue:[^ argNames ? #()].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2875
	^ (argNames , varNames)
159
514c749165c3 *** empty log message ***
claus
parents: 142
diff changeset
  2876
    ].
15787
7ea8bff49835 class: Method
Claus Gittinger <cg@exept.de>
parents: 15768
diff changeset
  2877
    ^ #()
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
  2878
159
514c749165c3 *** empty log message ***
claus
parents: 142
diff changeset
  2879
    "
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
  2880
     (Method compiledMethodAt:#printOn:) methodArgAndVarNames
159
514c749165c3 *** empty log message ***
claus
parents: 142
diff changeset
  2881
    "
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
  2882
!
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2883
15649
4484fd85cb9e class: Method
Stefan Vogel <sv@exept.de>
parents: 15614
diff changeset
  2884
methodArgAndVarNamesInContext: context
15727
d0ec35ce96fc class: Method
Claus Gittinger <cg@exept.de>
parents: 15649
diff changeset
  2885
    "return a collection with the method's argument and variable names.
15649
4484fd85cb9e class: Method
Stefan Vogel <sv@exept.de>
parents: 15614
diff changeset
  2886
     Uses Parser to parse methods source and extract the names.
4484fd85cb9e class: Method
Stefan Vogel <sv@exept.de>
parents: 15614
diff changeset
  2887
     Returns nil if the source is not available, or some other
4484fd85cb9e class: Method
Stefan Vogel <sv@exept.de>
parents: 15614
diff changeset
  2888
     syntax/parse error occurred. For methods with no args and no vars,
4484fd85cb9e class: Method
Stefan Vogel <sv@exept.de>
parents: 15614
diff changeset
  2889
     an empty collection is returned."
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2890
15649
4484fd85cb9e class: Method
Stefan Vogel <sv@exept.de>
parents: 15614
diff changeset
  2891
     ^self methodArgAndVarNames
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2892
15649
4484fd85cb9e class: Method
Stefan Vogel <sv@exept.de>
parents: 15614
diff changeset
  2893
     "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
  2894
!
4484fd85cb9e class: Method
Stefan Vogel <sv@exept.de>
parents: 15614
diff changeset
  2895
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
  2896
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
  2897
    "return a collection with the methods argument names.
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2898
     Uses Parser to parse methods source and extract the names."
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2899
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2900
    ^ self parse:#'parseMethodSpecificationSilent:' return:#methodArgs 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
  2901
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2902
    "
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2903
     (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
  2904
    "
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2905
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2906
    "Modified: 31.10.1995 / 14:36:46 / cg"
872
af04035b443d binary class storage support
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  2907
!
af04035b443d binary class storage support
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  2908
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
  2909
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
  2910
    "return the methods first comment, nil if there is none.
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2911
     This is a somewhat stupid implementation."
872
af04035b443d binary class storage support
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  2912
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
  2913
    |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
  2914
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2915
    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
  2916
    (text size < 2) ifTrue:[^nil].
872
af04035b443d binary class storage support
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  2917
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
  2918
    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
  2919
    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
  2920
    (nQuote == 2) ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2921
	qIndex := line indexOf:(Character doubleQuote).
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2922
	qIndex2 := line indexOf:(Character doubleQuote) startingAt:(qIndex + 1).
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2923
	^ line copyFrom:(qIndex + 1) to:(qIndex2 - 1)
872
af04035b443d binary class storage support
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  2924
    ].
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
  2925
    (nQuote == 1) ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2926
	qIndex := line indexOf:(Character doubleQuote).
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2927
	comment := line copyFrom:(qIndex + 1).
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2928
	(line indexOf:$/ startingAt:qIndex) == (qIndex+1) ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2929
	    "/ an EOL comment
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2930
	    ^ (comment copyFrom:2) withoutSeparators
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2931
	].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2932
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2933
	"/ not an EOL comment
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2934
	index := 3.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2935
	line := text at:index.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2936
	nQuote := line occurrencesOf:(Character doubleQuote).
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2937
	[nQuote ~~ 1] whileTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2938
	    comment := comment , Character cr asString , line withoutSpaces.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2939
	    index := index + 1.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2940
	    line := text at:index.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2941
	    nQuote := line occurrencesOf:(Character doubleQuote)
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2942
	].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2943
	qIndex := line indexOf:(Character doubleQuote).
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2944
	^ 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
  2945
    ].
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2946
    ^ 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
  2947
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2948
    "
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
     (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
  2950
    "
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2951
!
872
af04035b443d binary class storage support
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  2952
9364
beef5f0aa8bb New: #methodDefinitionTemplate
Stefan Vogel <sv@exept.de>
parents: 9288
diff changeset
  2953
methodDefinitionTemplate
beef5f0aa8bb New: #methodDefinitionTemplate
Stefan Vogel <sv@exept.de>
parents: 9288
diff changeset
  2954
    "return the string that defines the method and the arguments"
beef5f0aa8bb New: #methodDefinitionTemplate
Stefan Vogel <sv@exept.de>
parents: 9288
diff changeset
  2955
16261
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
  2956
    ^ self class
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2957
	methodDefinitionTemplateForSelector:self selector
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  2958
	andArgumentNames:self methodArgNames
9364
beef5f0aa8bb New: #methodDefinitionTemplate
Stefan Vogel <sv@exept.de>
parents: 9288
diff changeset
  2959
beef5f0aa8bb New: #methodDefinitionTemplate
Stefan Vogel <sv@exept.de>
parents: 9288
diff changeset
  2960
    "
beef5f0aa8bb New: #methodDefinitionTemplate
Stefan Vogel <sv@exept.de>
parents: 9288
diff changeset
  2961
      (self compiledMethodAt:#printOn:) methodDefinitionTemplate
beef5f0aa8bb New: #methodDefinitionTemplate
Stefan Vogel <sv@exept.de>
parents: 9288
diff changeset
  2962
    "
beef5f0aa8bb New: #methodDefinitionTemplate
Stefan Vogel <sv@exept.de>
parents: 9288
diff changeset
  2963
!
beef5f0aa8bb New: #methodDefinitionTemplate
Stefan Vogel <sv@exept.de>
parents: 9288
diff changeset
  2964
12900
4cda19285039 category of: #methodInvocationInfo
Claus Gittinger <cg@exept.de>
parents: 12899
diff changeset
  2965
methodInvocationInfo
13567
fe6564553977 comment: #methodInvocationInfo
Claus Gittinger <cg@exept.de>
parents: 13463
diff changeset
  2966
    "redefined by InstrumentedMethod, to return the collected info"
fe6564553977 comment: #methodInvocationInfo
Claus Gittinger <cg@exept.de>
parents: 13463
diff changeset
  2967
12900
4cda19285039 category of: #methodInvocationInfo
Claus Gittinger <cg@exept.de>
parents: 12899
diff changeset
  2968
    ^ nil
4cda19285039 category of: #methodInvocationInfo
Claus Gittinger <cg@exept.de>
parents: 12899
diff changeset
  2969
4cda19285039 category of: #methodInvocationInfo
Claus Gittinger <cg@exept.de>
parents: 12899
diff changeset
  2970
    "Created: / 27-04-2010 / 13:36:12 / cg"
4cda19285039 category of: #methodInvocationInfo
Claus Gittinger <cg@exept.de>
parents: 12899
diff changeset
  2971
!
4cda19285039 category of: #methodInvocationInfo
Claus Gittinger <cg@exept.de>
parents: 12899
diff changeset
  2972
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
  2973
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
  2974
    "return a collection with the methods local-variable names.
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2975
     Uses Parser to parse methods source and extract the names."
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2976
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2977
    ^ 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
  2978
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2979
    "
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2980
     (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
  2981
    "
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2982
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2983
    "Modified: 31.10.1995 / 14:36:49 / cg"
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2984
!
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2985
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2986
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
  2987
    "try to extract the modificationTime as a timeStamp from
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  2988
     the receivers 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
  2989
     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
  2990
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  2991
    |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
  2992
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
  2993
    HistoryManager isNil ifTrue:[^ nil].
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  2994
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
    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
  2996
    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
  2997
    list := HistoryManager getAllHistoriesFrom:s.
16261
52a0604a7b95 class: Method
Stefan Vogel <sv@exept.de>
parents: 16221
diff changeset
  2998
    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
  2999
    histLine := list last.
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  3000
    ^ Timestamp
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3001
	fromDate:histLine date
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3002
	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
  3003
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3004
    "
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
     (Method compiledMethodAt:#modificationTime) modificationTime
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  3006
     (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
  3007
    "
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3008
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
    "Modified: 8.9.1995 / 15:08:22 / claus"
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3010
    "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
  3011
!
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
15424
143d8fdfa609 class: Method
Claus Gittinger <cg@exept.de>
parents: 15416
diff changeset
  3013
modifiedInstVars
143d8fdfa609 class: Method
Claus Gittinger <cg@exept.de>
parents: 15416
diff changeset
  3014
    "returns a collection of instance variables which are modified by this method.
143d8fdfa609 class: Method
Claus Gittinger <cg@exept.de>
parents: 15416
diff changeset
  3015
     Uses parser (for now); could look at bytecode as well here..."
143d8fdfa609 class: Method
Claus Gittinger <cg@exept.de>
parents: 15416
diff changeset
  3016
143d8fdfa609 class: Method
Claus Gittinger <cg@exept.de>
parents: 15416
diff changeset
  3017
    ^ self parse:#'parseMethodSilent:in:' with:self mclass  return:#modifiedInstVars or:#().
143d8fdfa609 class: Method
Claus Gittinger <cg@exept.de>
parents: 15416
diff changeset
  3018
!
143d8fdfa609 class: Method
Claus Gittinger <cg@exept.de>
parents: 15416
diff changeset
  3019
3845
729fda604d59 added #name (for javaMethod compatibility)
Claus Gittinger <cg@exept.de>
parents: 3697
diff changeset
  3020
name
729fda604d59 added #name (for javaMethod compatibility)
Claus Gittinger <cg@exept.de>
parents: 3697
diff changeset
  3021
    "for compatibility with javaMethods"
729fda604d59 added #name (for javaMethod compatibility)
Claus Gittinger <cg@exept.de>
parents: 3697
diff changeset
  3022
729fda604d59 added #name (for javaMethod compatibility)
Claus Gittinger <cg@exept.de>
parents: 3697
diff changeset
  3023
    ^ self selector
729fda604d59 added #name (for javaMethod compatibility)
Claus Gittinger <cg@exept.de>
parents: 3697
diff changeset
  3024
729fda604d59 added #name (for javaMethod compatibility)
Claus Gittinger <cg@exept.de>
parents: 3697
diff changeset
  3025
    "Created: / 9.11.1998 / 06:15:08 / cg"
729fda604d59 added #name (for javaMethod compatibility)
Claus Gittinger <cg@exept.de>
parents: 3697
diff changeset
  3026
!
729fda604d59 added #name (for javaMethod compatibility)
Claus Gittinger <cg@exept.de>
parents: 3697
diff changeset
  3027
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3028
overrides: aMethod
15952
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
  3029
    <resource: #obsolete>
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
  3030
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
  3031
    self obsoleteMethodWarning: 'Use overwrites: instead, stupid naming'.
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
  3032
    self overwrites: aMethod.
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
  3033
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
  3034
    "Modified: / 18-06-2009 / 12:15:53 / Jan Vrany <vranyj1@fel.cvut.cz>"
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
  3035
    "Modified: / 05-07-2012 / 10:52:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
  3036
!
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
  3037
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
  3038
overwrites: aMethod
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3039
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3040
    | mth |
15952
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
  3041
    mth := self overwrittenMethod.
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3042
    [ mth notNil ] whileTrue:
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3043
	[mth == aMethod ifTrue:[^true].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3044
	mth := mth overwrittenMethod].
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3045
    ^false
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3046
15952
e55b89f8d241 class: Method
Claus Gittinger <cg@exept.de>
parents: 15787
diff changeset
  3047
    "Created: / 05-07-2012 / 10:52:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3048
!
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3049
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  3050
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
  3051
    "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
  3052
     Get the source, let parser parse it using parseSelector,
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3053
     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
  3054
5633
15b028ad5e03 #usedGlobals check was wrong sometimes
Claus Gittinger <cg@exept.de>
parents: 5584
diff changeset
  3055
    ^ self parse:parseSelector with:nil return:accessSelector or:valueIfNoSource
15b028ad5e03 #usedGlobals check was wrong sometimes
Claus Gittinger <cg@exept.de>
parents: 5584
diff changeset
  3056
15b028ad5e03 #usedGlobals check was wrong sometimes
Claus Gittinger <cg@exept.de>
parents: 5584
diff changeset
  3057
    "
15b028ad5e03 #usedGlobals check was wrong sometimes
Claus Gittinger <cg@exept.de>
parents: 5584
diff changeset
  3058
     (Method compiledMethodAt:#parse:return:or:)
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3059
	parse:#'parseMethodSilent:' return:#sentMessages or:#()
5633
15b028ad5e03 #usedGlobals check was wrong sometimes
Claus Gittinger <cg@exept.de>
parents: 5584
diff changeset
  3060
    "
15b028ad5e03 #usedGlobals check was wrong sometimes
Claus Gittinger <cg@exept.de>
parents: 5584
diff changeset
  3061
!
15b028ad5e03 #usedGlobals check was wrong sometimes
Claus Gittinger <cg@exept.de>
parents: 5584
diff changeset
  3062
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  3063
parse:parseSelector with:arg2 return:accessSelector or:valueIfNoSource
5633
15b028ad5e03 #usedGlobals check was wrong sometimes
Claus Gittinger <cg@exept.de>
parents: 5584
diff changeset
  3064
    "helper for methodArgNames, methodVarNames etc.
15b028ad5e03 #usedGlobals check was wrong sometimes
Claus Gittinger <cg@exept.de>
parents: 5584
diff changeset
  3065
     Get the source, let parser parse it using parseSelector,
15b028ad5e03 #usedGlobals check was wrong sometimes
Claus Gittinger <cg@exept.de>
parents: 5584
diff changeset
  3066
     return parser-info using accessSelector"
15b028ad5e03 #usedGlobals check was wrong sometimes
Claus Gittinger <cg@exept.de>
parents: 5584
diff changeset
  3067
13570
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3068
    |parser parserClass sourceString cachedInfo|
8427
bba41f189196 parserClass stuff
ca
parents: 8419
diff changeset
  3069
bba41f189196 parserClass stuff
ca
parents: 8419
diff changeset
  3070
    parserClass := self parserClass.
13570
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3071
14039
30251b45156a added: #flushParseTreeCache
Claus Gittinger <cg@exept.de>
parents: 13847
diff changeset
  3072
    "/ 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
  3073
    "/ 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
  3074
    "/ of them. If the same is parsed soon after, we do not have to parse again.
13570
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3075
    LastParseTreeCache notNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3076
	"/ to flush: LastParseTreeCache removeAll.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3077
	cachedInfo := LastParseTreeCache at:self ifAbsent:nil.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3078
	cachedInfo notNil ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3079
	    cachedInfo method == self ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3080
		cachedInfo parserClass == parserClass ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3081
		    "/ Transcript show:'hit '; showCR:self.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3082
		    ^ cachedInfo parser perform:accessSelector
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3083
		]
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3084
	    ].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3085
	    LastParseTreeCache removeKey:self
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3086
	]
13570
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3087
    ].
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3088
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
  3089
    sourceString := self source.
8427
bba41f189196 parserClass stuff
ca
parents: 8419
diff changeset
  3090
    (parserClass notNil and:[sourceString notNil]) ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3091
	parseSelector argumentCount == 2 ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3092
	    parser := parserClass perform:parseSelector with:sourceString with:arg2.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3093
	] ifFalse:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3094
	    parser := parserClass perform:parseSelector with:sourceString.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3095
	].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3096
	(parser isNil or:[parser == #Error]) ifTrue:[^ valueIfNoSource].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3097
	"do not cache the parser, if it was parsing for code - a lot of information is missing then"
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3098
	(self mclass notNil and:[parser wasParsedForCode not]) ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3099
	    LastParseTreeCache isNil ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3100
		LastParseTreeCache := CacheDictionary new:500.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3101
	    ].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3102
	    LastParseTreeCache at:self put:(ParserCacheEntry new parserClass:parserClass method:self parser:parser).
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3103
	].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3104
	^ 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
  3105
    ].
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3106
    ^ valueIfNoSource
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3107
5500
8bc3b30296ae more queries (sentMessages ...)
Claus Gittinger <cg@exept.de>
parents: 5406
diff changeset
  3108
    "
15579
cc4c6bae6927 class: Method
Claus Gittinger <cg@exept.de>
parents: 15445
diff changeset
  3109
     LastParseTreeCache removeAll.
cc4c6bae6927 class: Method
Claus Gittinger <cg@exept.de>
parents: 15445
diff changeset
  3110
5500
8bc3b30296ae more queries (sentMessages ...)
Claus Gittinger <cg@exept.de>
parents: 5406
diff changeset
  3111
     (Method compiledMethodAt:#parse:return:or:)
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3112
	parse:#'parseMethodSilent:' return:#sentMessages or:#()
5500
8bc3b30296ae more queries (sentMessages ...)
Claus Gittinger <cg@exept.de>
parents: 5406
diff changeset
  3113
    "
13570
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3114
14039
30251b45156a added: #flushParseTreeCache
Claus Gittinger <cg@exept.de>
parents: 13847
diff changeset
  3115
    "Modified: / 01-03-2012 / 14:30:50 / cg"
15579
cc4c6bae6927 class: Method
Claus Gittinger <cg@exept.de>
parents: 15445
diff changeset
  3116
    "Modified (comment): / 30-07-2013 / 15:53:41 / 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
  3117
!
159
514c749165c3 *** empty log message ***
claus
parents: 142
diff changeset
  3118
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3119
parseAnnotations
17361
ab3b25502ca4 class: Method
Claus Gittinger <cg@exept.de>
parents: 17278
diff changeset
  3120
    "return the method's annotations."
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3121
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3122
    |src parser|
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3123
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3124
    src := self source.
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3125
    src isNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3126
	^ nil "/ actually: dont know
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3127
    ].
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3128
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3129
    self parserClass isNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3130
	^ nil
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3131
    ].
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3132
    parser := self parserClass parseMethod: src.
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3133
    (parser isNil or: [parser == #Error]) ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3134
	^ nil "/ actually error
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3135
    ].
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3136
    ^ annotations := parser annotations.
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3137
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3138
    "Created: / 10-07-2010 / 21:16:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3139
!
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3140
5721
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
  3141
parseResources
16218
5e87a242990b class: Method
Claus Gittinger <cg@exept.de>
parents: 16193
diff changeset
  3142
    "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
  3143
     Resources are a special kind of annotation, of the form:
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3144
	<resource: #symbol...>
16218
5e87a242990b class: Method
Claus Gittinger <cg@exept.de>
parents: 16193
diff changeset
  3145
     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
  3146
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
  3147
    |src parser|
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
  3148
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
  3149
    src := self source.
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
  3150
    src isNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3151
	^ nil "/ actually: dont know
5721
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
  3152
    ].
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
  3153
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
  3154
    (src findString:'resource:') == 0 ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3155
	^ nil "/ actually: error
5721
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
  3156
    ].
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
  3157
    "/ no need to parse all - only interested in resource-info
8427
bba41f189196 parserClass stuff
ca
parents: 8419
diff changeset
  3158
    self parserClass isNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3159
	^ nil
8427
bba41f189196 parserClass stuff
ca
parents: 8419
diff changeset
  3160
    ].
8419
42a6fd0ef3bd allow for subclasses to redefine the parserClass
ca
parents: 8364
diff changeset
  3161
    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
  3162
    parser isNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3163
	^ nil "/ actually error
5721
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
  3164
    ].
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
  3165
    ^ parser primitiveResources.
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
  3166
!
5f97733ff519 methods now send change-notifications when the category changes
Claus Gittinger <cg@exept.de>
parents: 5704
diff changeset
  3167
14402
Claus Gittinger <cg@exept.de>
parents: 14375
diff changeset
  3168
possiblySends:aSelectorSymbol
Claus Gittinger <cg@exept.de>
parents: 14375
diff changeset
  3169
    "return true, if this method contains an indirect message-send
Claus Gittinger <cg@exept.de>
parents: 14375
diff changeset
  3170
     (such as perform) with aSelectorSymbol as selector."
Claus Gittinger <cg@exept.de>
parents: 14375
diff changeset
  3171
Claus Gittinger <cg@exept.de>
parents: 14375
diff changeset
  3172
    (self referencesLiteral:aSelectorSymbol) ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3173
	^ self messagesPossiblySent includesIdentical:aSelectorSymbol
14402
Claus Gittinger <cg@exept.de>
parents: 14375
diff changeset
  3174
    ].
Claus Gittinger <cg@exept.de>
parents: 14375
diff changeset
  3175
    ^ false
Claus Gittinger <cg@exept.de>
parents: 14375
diff changeset
  3176
!
Claus Gittinger <cg@exept.de>
parents: 14375
diff changeset
  3177
1923
97b099fef985 optionally keep a history of changed methods
Claus Gittinger <cg@exept.de>
parents: 1873
diff changeset
  3178
previousVersion
14251
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3179
    "return the receivers previous version's source code"
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3180
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3181
    |previous|
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3182
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3183
    previous := self previousVersions:2.
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3184
    previous isEmptyOrNil ifTrue:[^ nil].
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3185
    ^ previous first.
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3186
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3187
"/    |sel cls previous|
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3188
"/
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3189
"/    sel := self selector.
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3190
"/    sel isNil ifTrue:[ ^ nil ].
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3191
"/
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3192
"/    cls := self mclass.
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3193
"/    cls isNil ifTrue:[ ^ nil ].
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3194
"/
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3195
"/    ChangeSet current reverseDo:[:change |
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3196
"/        (change isMethodChange
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3197
"/            and:[ (change selector == sel)
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3198
"/            and:[ change changeClass == cls ]])
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3199
"/        ifTrue:[
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3200
"/            previous := change previousVersion.
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3201
"/            previous notNil ifTrue:[
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3202
"/                ^ previous
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3203
"/            ]
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3204
"/        ]
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3205
"/    ].
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3206
"/    ^ nil.
6644
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3207
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3208
"/    history := Class methodHistory.
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3209
"/    history isNil ifTrue:[^ nil].
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3210
"/
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3211
"/    entry := history detect:[:entry | |type old new|
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3212
"/                                    type := entry first.
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3213
"/                                    type == #methodChange ifTrue:[
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3214
"/                                        old := entry second.
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3215
"/                                        new := entry third.
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3216
"/                                        new == self
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3217
"/                                    ] ifFalse:[
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3218
"/                                        false
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3219
"/                                    ]
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  3220
"/                             ]
6644
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3221
"/                     ifNone:nil.
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3222
"/    entry isNil ifTrue:[^nil].
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3223
"/    ^ entry second.
5339
c922450b57b5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5324
diff changeset
  3224
"/    ^ history at:self ifAbsent:nil
1923
97b099fef985 optionally keep a history of changed methods
Claus Gittinger <cg@exept.de>
parents: 1873
diff changeset
  3225
14251
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3226
    "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
  3227
!
97b099fef985 optionally keep a history of changed methods
Claus Gittinger <cg@exept.de>
parents: 1873
diff changeset
  3228
7210
80bb33c02780 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7085
diff changeset
  3229
previousVersionCode
80bb33c02780 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7085
diff changeset
  3230
    "return the receivers previous versions source code"
80bb33c02780 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7085
diff changeset
  3231
80bb33c02780 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7085
diff changeset
  3232
    |previous|
80bb33c02780 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7085
diff changeset
  3233
80bb33c02780 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7085
diff changeset
  3234
    previous := self previousVersion.
80bb33c02780 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7085
diff changeset
  3235
    previous isNil ifTrue:[ ^ nil ].
80bb33c02780 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7085
diff changeset
  3236
80bb33c02780 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7085
diff changeset
  3237
    ^ previous source
80bb33c02780 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7085
diff changeset
  3238
!
80bb33c02780 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7085
diff changeset
  3239
6644
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3240
previousVersions
14251
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3241
    "return a collection of the receiver's previous versions (sources)"
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3242
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3243
    ^ self previousVersions:nil
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3244
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3245
    "Modified (comment): / 26-07-2012 / 12:04:15 / cg"
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3246
!
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3247
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3248
previousVersions:count
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3249
    "return a collection of the receiver's count previous versions (sources).
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3250
     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
  3251
7453
48c427d125f4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7328
diff changeset
  3252
    |sel cls versions lastChange firstSrc last|
6644
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3253
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3254
    sel := self selector.
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3255
    sel isNil ifTrue:[^ #()].
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3256
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3257
    cls := self mclass.
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3258
    cls isNil ifTrue:[^ #()].
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3259
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3260
    versions := OrderedCollection new.
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3261
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  3262
    ChangeSet current reverseDo:[:change |
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3263
	(change isMethodChange
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3264
	    and:[ (change selector == sel)
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3265
	    and:[ change changeClass == cls ]])
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3266
	ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3267
	    versions addFirst:change.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3268
	    lastChange := change.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3269
	    (count notNil and:[versions size == count]) ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3270
		^ versions
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3271
	    ]
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3272
	]
6644
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3273
    ].
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3274
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3275
    lastChange notNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3276
	last := lastChange previousVersion.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3277
	last notNil ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3278
	    firstSrc := last source.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3279
	    (firstSrc notEmptyOrNil
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3280
	    and:[ firstSrc ~= lastChange source]) ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3281
		versions addFirst:(MethodDefinitionChange
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3282
				    className:lastChange className
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3283
				    selector:lastChange selector
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3284
				    source:firstSrc
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3285
				    category:lastChange category).
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3286
	    ]
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3287
	]
6644
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3288
    ].
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3289
    ^ versions
14251
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3290
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3291
    "
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3292
     (Method compiledMethodAt:#previousVersions:) previousVersions:nil
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3293
    "
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3294
c0d549a59039 added: #previousVersions:
Claus Gittinger <cg@exept.de>
parents: 14237
diff changeset
  3295
    "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
  3296
!
141198d9b865 previousVersions stuff moved from NewSystemBrowser to here
Claus Gittinger <cg@exept.de>
parents: 6541
diff changeset
  3297
5564
0f513f04c50f #readsFields: and #writesField: for st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 5562
diff changeset
  3298
readsField:instVarIndex
0f513f04c50f #readsFields: and #writesField: for st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 5562
diff changeset
  3299
    "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
  3300
     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
  3301
14237
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3302
    |instVarName|
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3303
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3304
    instVarName := (self mclass allInstVarNames) at:instVarIndex.
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3305
    ^ self readsInstVar:instVarName
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3306
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3307
    "Modified: / 23-07-2012 / 11:16:08 / cg"
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3308
!
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3309
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3310
readsInstVar:instVarName
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3311
    "return true, if the named instvar is read by the receiver.
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3312
     Uses parser (for now); could look at bytecode as well here..."
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3313
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3314
    |readInstVars|
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3315
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3316
    (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
  3317
    readInstVars := self parse:#'parseMethodSilent:in:' with:self mclass  return:#readInstVars or:#().
14237
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3318
    ^ readInstVars includes:instVarName.
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3319
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3320
    "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
  3321
!
0f513f04c50f #readsFields: and #writesField: for st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 5562
diff changeset
  3322
14253
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  3323
refersToLiteral: anObject
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  3324
    "redefined to search in annotations"
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  3325
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  3326
    (super refersToLiteral: anObject) ifTrue:[^ true].
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  3327
15387
f8f6247b071f class: Method
Claus Gittinger <cg@exept.de>
parents: 15346
diff changeset
  3328
    self annotationsDo:[:annot |
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3329
	(annot refersToLiteral: anObject) ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3330
	    "/ self halt.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3331
	    ^ true
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3332
	].
14253
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  3333
    ].
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  3334
    ^ false
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  3335
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  3336
    "Created: / 26-07-2012 / 15:51:14 / cg"
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  3337
!
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  3338
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  3339
refersToLiteralMatching: aMatchString
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  3340
    (super refersToLiteralMatching: aMatchString) ifTrue:[^ true].
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  3341
15387
f8f6247b071f class: Method
Claus Gittinger <cg@exept.de>
parents: 15346
diff changeset
  3342
    self annotationsDo:[:annot |
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3343
	(annot refersToLiteralMatching: aMatchString) ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3344
	    "/ self halt.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3345
	    ^ true
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3346
	].
14253
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  3347
    ].
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  3348
    ^ false
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  3349
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  3350
    "Created: / 26-07-2012 / 15:51:36 / cg"
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  3351
!
Claus Gittinger <cg@exept.de>
parents: 14251
diff changeset
  3352
3052
f384e7082ee9 more resource stuff (VW compatibility)
Claus Gittinger <cg@exept.de>
parents: 3030
diff changeset
  3353
resourceType
f384e7082ee9 more resource stuff (VW compatibility)
Claus Gittinger <cg@exept.de>
parents: 3030
diff changeset
  3354
    "ST-80 compatibility:
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  3355
     return the methods first resource specs key.
8526
326e7dcb212a *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 8518
diff changeset
  3356
     Returns either nil, or a single symbol."
3052
f384e7082ee9 more resource stuff (VW compatibility)
Claus Gittinger <cg@exept.de>
parents: 3030
diff changeset
  3357
3387
dbe1b3cf7b83 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3372
diff changeset
  3358
    |resources|
dbe1b3cf7b83 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3372
diff changeset
  3359
dbe1b3cf7b83 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3372
diff changeset
  3360
    (resources := self resources) notNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3361
	resources keysAndValuesDo:[:key :val|
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3362
	    ^ key
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3363
	].
3341
c5773eb96bd2 resource icons moved to class BrowserView
tz
parents: 3297
diff changeset
  3364
    ].
3387
dbe1b3cf7b83 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3372
diff changeset
  3365
    ^ nil
3052
f384e7082ee9 more resource stuff (VW compatibility)
Claus Gittinger <cg@exept.de>
parents: 3030
diff changeset
  3366
!
f384e7082ee9 more resource stuff (VW compatibility)
Claus Gittinger <cg@exept.de>
parents: 3030
diff changeset
  3367
f384e7082ee9 more resource stuff (VW compatibility)
Claus Gittinger <cg@exept.de>
parents: 3030
diff changeset
  3368
resources
5894
ed6193fa6040 Define #isObsolete and fix various comments
Stefan Vogel <sv@exept.de>
parents: 5818
diff changeset
  3369
    "return the methods resource spec; either nil or a collection of symbols."
3052
f384e7082ee9 more resource stuff (VW compatibility)
Claus Gittinger <cg@exept.de>
parents: 3030
diff changeset
  3370
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3371
    | resources |
13817
7d1e0e8ea364 changed:10 methods
Claus Gittinger <cg@exept.de>
parents: 13805
diff changeset
  3372
3052
f384e7082ee9 more resource stuff (VW compatibility)
Claus Gittinger <cg@exept.de>
parents: 3030
diff changeset
  3373
    self hasResource ifFalse:[^ nil].
13817
7d1e0e8ea364 changed:10 methods
Claus Gittinger <cg@exept.de>
parents: 13805
diff changeset
  3374
    annotations isNil ifTrue:[^ self parseResources].
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3375
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3376
    resources := IdentityDictionary new.
18753
941d99755164 #BUGFIX
Stefan Vogel <sv@exept.de>
parents: 18620
diff changeset
  3377
    self annotationsAt: #resource: orAt: #resource:values: do:[:annot|
941d99755164 #BUGFIX
Stefan Vogel <sv@exept.de>
parents: 18620
diff changeset
  3378
        resources at: annot type put: annot value ? true
13817
7d1e0e8ea364 changed:10 methods
Claus Gittinger <cg@exept.de>
parents: 13805
diff changeset
  3379
    ].
7d1e0e8ea364 changed:10 methods
Claus Gittinger <cg@exept.de>
parents: 13805
diff changeset
  3380
    ^ resources
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3381
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3382
    "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
  3383
    "Modified: / 18-11-2011 / 14:48:41 / cg"
3052
f384e7082ee9 more resource stuff (VW compatibility)
Claus Gittinger <cg@exept.de>
parents: 3030
diff changeset
  3384
!
f384e7082ee9 more resource stuff (VW compatibility)
Claus Gittinger <cg@exept.de>
parents: 3030
diff changeset
  3385
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
  3386
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
  3387
    "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
  3388
     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
  3389
     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
  3390
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3391
    "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
  3392
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3393
    |who|
68
59faa75185ba *** empty log message ***
claus
parents: 56
diff changeset
  3394
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3395
    who := self who.
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3396
    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
  3397
    "
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3398
     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
  3399
    "
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3400
    ^ 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
  3401
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3402
    "
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3403
     |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
  3404
     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
  3405
     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
  3406
    "
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3407
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3408
    "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
  3409
!
68
59faa75185ba *** empty log message ***
claus
parents: 56
diff changeset
  3410
5534
bf00d9a2dfd5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5530
diff changeset
  3411
sends:aSelectorSymbol
bf00d9a2dfd5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5530
diff changeset
  3412
    "return true, if this method contains a message-send
bf00d9a2dfd5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5530
diff changeset
  3413
     with aSelectorSymbol as selector."
bf00d9a2dfd5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5530
diff changeset
  3414
bf00d9a2dfd5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5530
diff changeset
  3415
    (self referencesLiteral:aSelectorSymbol) ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3416
	"/ cg: was temporarily disabled to speed up some searches.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3417
	"/ I think, we have to change the caller's to call referencesLiteral: instead,
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3418
	"/ if there is any speed problem there. Not here.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3419
	"/ ^ true.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3420
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3421
	^ self messagesSent includesIdentical:aSelectorSymbol
5534
bf00d9a2dfd5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5530
diff changeset
  3422
    ].
bf00d9a2dfd5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5530
diff changeset
  3423
    ^ false
bf00d9a2dfd5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5530
diff changeset
  3424
!
bf00d9a2dfd5 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5530
diff changeset
  3425
12363
a7251dc427bd added: #sends:or:
Claus Gittinger <cg@exept.de>
parents: 12324
diff changeset
  3426
sends:selectorSymbol1 or:selectorSymbol2
a7251dc427bd added: #sends:or:
Claus Gittinger <cg@exept.de>
parents: 12324
diff changeset
  3427
    "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
  3428
     to either selectorSymbol1 or selectorSymbol2.
82bcca38e855 comment/format in: #sends:or:
Claus Gittinger <cg@exept.de>
parents: 13567
diff changeset
  3429
     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
  3430
17514
eb4568cb00ba class: Method
Claus Gittinger <cg@exept.de>
parents: 17463
diff changeset
  3431
    ^ self sendsAny:{ selectorSymbol1 selectorSymbol2 }
13569
82bcca38e855 comment/format in: #sends:or:
Claus Gittinger <cg@exept.de>
parents: 13567
diff changeset
  3432
82bcca38e855 comment/format in: #sends:or:
Claus Gittinger <cg@exept.de>
parents: 13567
diff changeset
  3433
    "Modified (comment): / 08-08-2011 / 18:43:04 / cg"
12363
a7251dc427bd added: #sends:or:
Claus Gittinger <cg@exept.de>
parents: 12324
diff changeset
  3434
!
a7251dc427bd added: #sends:or:
Claus Gittinger <cg@exept.de>
parents: 12324
diff changeset
  3435
13570
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3436
sendsAny:aCollectionOfSelectorSymbols
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3437
    "return true, if this method contains a message-send
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3438
     to any of aCollectionOfSelectorSymbols."
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3439
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3440
    |msgs|
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3441
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3442
    (aCollectionOfSelectorSymbols contains:[:sym | self referencesLiteral:sym]) ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3443
	"/ cg: was temporarily disabled to speed up some searches.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3444
	"/ I think, we have to change the caller's to call referencesLiteral: instead,
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3445
	"/ if there is any speed problem there. Not here.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3446
	"/ ^ true.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3447
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3448
	msgs := self messagesSent.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3449
	^ aCollectionOfSelectorSymbols contains:[:sym | msgs includesIdentical:sym]
13570
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3450
    ].
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3451
    ^ false
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3452
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3453
    "Created: / 08-08-2011 / 18:53:24 / cg"
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3454
!
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3455
16877
d4a452edacb5 Added Method>>shadowedMethod returning shadowed method or nil.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16847
diff changeset
  3456
shadowedMethod
17562
ee6d827bd625 class: Method
Claus Gittinger <cg@exept.de>
parents: 17547
diff changeset
  3457
    "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
  3458
     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
  3459
     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
  3460
17562
ee6d827bd625 class: Method
Claus Gittinger <cg@exept.de>
parents: 17547
diff changeset
  3461
    | 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
  3462
d4a452edacb5 Added Method>>shadowedMethod returning shadowed method or nil.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16847
diff changeset
  3463
    myClass := self mclass.
d4a452edacb5 Added Method>>shadowedMethod returning shadowed method or nil.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16847
diff changeset
  3464
    myClass isNil ifTrue:[^ nil].
17562
ee6d827bd625 class: Method
Claus Gittinger <cg@exept.de>
parents: 17547
diff changeset
  3465
    nonMetaClass := myClass theNonMetaclass.
ee6d827bd625 class: Method
Claus Gittinger <cg@exept.de>
parents: 17547
diff changeset
  3466
ee6d827bd625 class: Method
Claus Gittinger <cg@exept.de>
parents: 17547
diff changeset
  3467
    (package ~= nonMetaClass package
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3468
	and:[ package ~= PackageId noProjectID
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3469
	and:[ (myProjectDefinition := nonMetaClass projectDefinitionClass) notNil ]])
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3470
    ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3471
	originalMethod := myProjectDefinition savedOverwrittenMethodForClass:myClass selector:self selector.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3472
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3473
	"/ 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
  3474
	"/ (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
  3475
	"/    "/ self halt. ^ nil
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3476
	"/ ].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3477
	^ originalMethod
17562
ee6d827bd625 class: Method
Claus Gittinger <cg@exept.de>
parents: 17547
diff changeset
  3478
    ].
16877
d4a452edacb5 Added Method>>shadowedMethod returning shadowed method or nil.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16847
diff changeset
  3479
    ^ nil
d4a452edacb5 Added Method>>shadowedMethod returning shadowed method or nil.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16847
diff changeset
  3480
d4a452edacb5 Added Method>>shadowedMethod returning shadowed method or nil.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16847
diff changeset
  3481
    "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
  3482
!
d4a452edacb5 Added Method>>shadowedMethod returning shadowed method or nil.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 16847
diff changeset
  3483
11022
8dd9f699915f +shouldBeSkippedInDebuggersWalkBack
Claus Gittinger <cg@exept.de>
parents: 11016
diff changeset
  3484
shouldBeSkippedInDebuggersWalkBack
8dd9f699915f +shouldBeSkippedInDebuggersWalkBack
Claus Gittinger <cg@exept.de>
parents: 11016
diff changeset
  3485
    "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
  3486
     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
  3487
8dd9f699915f +shouldBeSkippedInDebuggersWalkBack
Claus Gittinger <cg@exept.de>
parents: 11016
diff changeset
  3488
    |resources|
8dd9f699915f +shouldBeSkippedInDebuggersWalkBack
Claus Gittinger <cg@exept.de>
parents: 11016
diff changeset
  3489
8dd9f699915f +shouldBeSkippedInDebuggersWalkBack
Claus Gittinger <cg@exept.de>
parents: 11016
diff changeset
  3490
    resources := self resources.
8dd9f699915f +shouldBeSkippedInDebuggersWalkBack
Claus Gittinger <cg@exept.de>
parents: 11016
diff changeset
  3491
    ^ resources notNil and:[ resources includesKey:#skipInDebuggersWalkBack ].
8dd9f699915f +shouldBeSkippedInDebuggersWalkBack
Claus Gittinger <cg@exept.de>
parents: 11016
diff changeset
  3492
!
8dd9f699915f +shouldBeSkippedInDebuggersWalkBack
Claus Gittinger <cg@exept.de>
parents: 11016
diff changeset
  3493
5696
958a0643496d compatibility
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
  3494
superMessages
958a0643496d compatibility
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
  3495
    "return a collection of message-selectors, sent to super by this method."
958a0643496d compatibility
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
  3496
958a0643496d compatibility
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
  3497
    ^ self messagesSentToSuper
958a0643496d compatibility
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
  3498
!
958a0643496d compatibility
Claus Gittinger <cg@exept.de>
parents: 5676
diff changeset
  3499
5523
86ad12f4afc9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5509
diff changeset
  3500
usedGlobals
86ad12f4afc9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5509
diff changeset
  3501
    "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
  3502
     Uses Parser to parse methods source and extract them."
86ad12f4afc9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5509
diff changeset
  3503
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  3504
    ^ self parse:#'parseMethodSilent:in:' with:self mclass return:#usedGlobals or:#()
5523
86ad12f4afc9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5509
diff changeset
  3505
86ad12f4afc9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5509
diff changeset
  3506
    "
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  3507
     (Method compiledMethodAt:#resources) usedGlobals
5523
86ad12f4afc9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5509
diff changeset
  3508
    "
86ad12f4afc9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5509
diff changeset
  3509
!
86ad12f4afc9 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 5509
diff changeset
  3510
5509
c0277123fe4a added #usedSymbols query
Claus Gittinger <cg@exept.de>
parents: 5500
diff changeset
  3511
usedSymbols
c0277123fe4a added #usedSymbols query
Claus Gittinger <cg@exept.de>
parents: 5500
diff changeset
  3512
    "return a collection with the symbols referred to by the receiver.
c0277123fe4a added #usedSymbols query
Claus Gittinger <cg@exept.de>
parents: 5500
diff changeset
  3513
     Uses Parser to parse methods source and extract them.
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  3514
     This collection only includes implicit symbols references
8895
81e4e78ef244 comment
Claus Gittinger <cg@exept.de>
parents: 8854
diff changeset
  3515
     (i.e. not messages sent)"
5509
c0277123fe4a added #usedSymbols query
Claus Gittinger <cg@exept.de>
parents: 5500
diff changeset
  3516
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  3517
    ^ self parse:#'parseMethodSilent:in:' with:self mclass return:#usedSymbols or:#()
5509
c0277123fe4a added #usedSymbols query
Claus Gittinger <cg@exept.de>
parents: 5500
diff changeset
  3518
c0277123fe4a added #usedSymbols query
Claus Gittinger <cg@exept.de>
parents: 5500
diff changeset
  3519
    "
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  3520
     (Method compiledMethodAt:#usedSymbols) usedSymbols
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  3521
     (Method compiledMethodAt:#usedSymbols) messagesSent
5509
c0277123fe4a added #usedSymbols query
Claus Gittinger <cg@exept.de>
parents: 5500
diff changeset
  3522
    "
c0277123fe4a added #usedSymbols query
Claus Gittinger <cg@exept.de>
parents: 5500
diff changeset
  3523
!
c0277123fe4a added #usedSymbols query
Claus Gittinger <cg@exept.de>
parents: 5500
diff changeset
  3524
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
who
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3526
    "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
  3527
     nil is returned for unbound methods.
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3528
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  3529
     ST/X special notice:
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3530
	returns an instance of MethodWhoInfo, which
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3531
	responds to #methodClass and #methodSelector query messages.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3532
	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
  3533
	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
  3534
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3535
     Implementation notice:
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3536
	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
  3537
	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
  3538
	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
  3539
	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
  3540
	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
  3541
	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
  3542
17250
a0d78c57d994 class: Method
Claus Gittinger <cg@exept.de>
parents: 17175
diff changeset
  3543
    |cls sel fn clsName checkBlock|
a0d78c57d994 class: Method
Claus Gittinger <cg@exept.de>
parents: 17175
diff changeset
  3544
5324
5c9959ce98af make use of mclass
Claus Gittinger <cg@exept.de>
parents: 5322
diff changeset
  3545
    mclass notNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3546
	"/ 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
  3547
	sel := mclass selectorAtMethod:self.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3548
	sel notNil ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3549
	    ^ MethodWhoInfo class:mclass selector:sel
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3550
	].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3551
	^ nil.
5324
5c9959ce98af make use of mclass
Claus Gittinger <cg@exept.de>
parents: 5322
diff changeset
  3552
    ].
5c9959ce98af make use of mclass
Claus Gittinger <cg@exept.de>
parents: 5322
diff changeset
  3553
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3554
    checkBlock :=
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3555
	[:cls |
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3556
	    |sel|
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3557
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3558
	    sel := cls selectorAtMethod:self.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3559
	    sel notNil ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3560
		LastWhoClass := cls theNonMetaclass name.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3561
		mclass := cls.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3562
		^ MethodWhoInfo class:cls selector:sel
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3563
	    ].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3564
	].
17250
a0d78c57d994 class: Method
Claus Gittinger <cg@exept.de>
parents: 17175
diff changeset
  3565
a0d78c57d994 class: Method
Claus Gittinger <cg@exept.de>
parents: 17175
diff changeset
  3566
    "
a0d78c57d994 class: Method
Claus Gittinger <cg@exept.de>
parents: 17175
diff changeset
  3567
     first, look in the class we found something the last time
a0d78c57d994 class: Method
Claus Gittinger <cg@exept.de>
parents: 17175
diff changeset
  3568
     this may often give a hit, when asking who repeatingly for
a0d78c57d994 class: Method
Claus Gittinger <cg@exept.de>
parents: 17175
diff changeset
  3569
     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
  3570
     being garbage collected)
a0d78c57d994 class: Method
Claus Gittinger <cg@exept.de>
parents: 17175
diff changeset
  3571
    "
a0d78c57d994 class: Method
Claus Gittinger <cg@exept.de>
parents: 17175
diff changeset
  3572
    LastWhoClass notNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3573
	cls := Smalltalk at:LastWhoClass ifAbsent:nil.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3574
	cls notNil ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3575
	    checkBlock value:cls theNonMetaclass.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3576
	    checkBlock value:cls theMetaclass.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3577
	]
6420
ba05391a71af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6397
diff changeset
  3578
    ].
ba05391a71af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6397
diff changeset
  3579
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
  3580
    "
5294
f2d689cf7be4 speedup #who (guess className from sourceFileName)
Claus Gittinger <cg@exept.de>
parents: 5284
diff changeset
  3581
     speedup kludge: if my sourceFileName is valid,
f2d689cf7be4 speedup #who (guess className from sourceFileName)
Claus Gittinger <cg@exept.de>
parents: 5284
diff changeset
  3582
     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
  3583
    "
f2d689cf7be4 speedup #who (guess className from sourceFileName)
Claus Gittinger <cg@exept.de>
parents: 5284
diff changeset
  3584
    (fn := self sourceFilename) notNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3585
	clsName := fn asFilename nameWithoutSuffix.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3586
	clsName := clsName asSymbolIfInterned.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3587
	clsName notNil ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3588
	    cls := Smalltalk at:clsName ifAbsent:nil.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3589
	    cls notNil ifTrue:[
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3590
		checkBlock value:cls theNonMetaclass.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3591
		checkBlock value:cls theMetaclass.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3592
	    ]
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3593
	].
5294
f2d689cf7be4 speedup #who (guess className from sourceFileName)
Claus Gittinger <cg@exept.de>
parents: 5284
diff changeset
  3594
    ].
f2d689cf7be4 speedup #who (guess className from sourceFileName)
Claus Gittinger <cg@exept.de>
parents: 5284
diff changeset
  3595
f2d689cf7be4 speedup #who (guess className from sourceFileName)
Claus Gittinger <cg@exept.de>
parents: 5284
diff changeset
  3596
    "
17250
a0d78c57d994 class: Method
Claus Gittinger <cg@exept.de>
parents: 17175
diff changeset
  3597
     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
  3598
     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
  3599
    "
17250
a0d78c57d994 class: Method
Claus Gittinger <cg@exept.de>
parents: 17175
diff changeset
  3600
    Smalltalk allClassesDo:[:cls |
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3601
	checkBlock value:cls theNonMetaclass.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3602
	checkBlock value:cls theMetaclass.
142
c7844287bddf *** empty log message ***
claus
parents: 109
diff changeset
  3603
    ].
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
  3604
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3605
    LastWhoClass := nil.
6397
311358bdeed6 do not search for anonymous classes in #who
Claus Gittinger <cg@exept.de>
parents: 6365
diff changeset
  3606
"/    "
311358bdeed6 do not search for anonymous classes in #who
Claus Gittinger <cg@exept.de>
parents: 6365
diff changeset
  3607
"/     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
  3608
"/     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
  3609
"/    "
6420
ba05391a71af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6397
diff changeset
  3610
"/    Behavior allSubInstancesDo:[:someClassLikeThingy |
ba05391a71af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6397
diff changeset
  3611
"/        (classes includes:someClassLikeThingy) ifFalse:[
ba05391a71af *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6397
diff changeset
  3612
"/            checkBlock value:someClassLikeThingy.
6397
311358bdeed6 do not search for anonymous classes in #who
Claus Gittinger <cg@exept.de>
parents: 6365
diff changeset
  3613
"/        ]
311358bdeed6 do not search for anonymous classes in #who
Claus Gittinger <cg@exept.de>
parents: 6365
diff changeset
  3614
"/    ].
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
  3615
    "
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3616
     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
  3617
    "
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3618
    ^ nil
444
071b4f32272c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 443
diff changeset
  3619
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
  3620
    "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
  3621
    "
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3622
     |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
  3623
     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
  3624
     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
  3625
    "
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3626
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3627
    "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
  3628
    "
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3629
     |m cls|
444
071b4f32272c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 443
diff changeset
  3630
12854
3a3d3c02c3bd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 12695
diff changeset
  3631
     Object
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3632
	subclass:#FunnyClass
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3633
	instanceVariableNames:'foo'
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3634
	classVariableNames:''
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3635
	poolDictionaries:''
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3636
	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
  3637
     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
  3638
     Smalltalk removeClass:cls.
444
071b4f32272c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 443
diff changeset
  3639
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
  3640
     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
  3641
     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
  3642
     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
  3643
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3644
     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
  3645
    "
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3646
10156
d35f30a7fde5 changed #who
Claus Gittinger <cg@exept.de>
parents: 10083
diff changeset
  3647
    "Modified: / 07-11-2006 / 13:58:50 / cg"
68
59faa75185ba *** empty log message ***
claus
parents: 56
diff changeset
  3648
!
59faa75185ba *** empty log message ***
claus
parents: 56
diff changeset
  3649
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
  3650
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
  3651
    "only for wrapped methods: return the wrapper.
14419
eef0be88cb60 comment/format in: #wrapper
Claus Gittinger <cg@exept.de>
parents: 14402
diff changeset
  3652
     That's the WrapperMethod which contains myself."
159
514c749165c3 *** empty log message ***
claus
parents: 142
diff changeset
  3653
13847
c1552e51c27a changed: #wrapper
Claus Gittinger <cg@exept.de>
parents: 13817
diff changeset
  3654
    WrappedMethod notNil ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3655
	WrappedMethod allInstancesDo:[:m |
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3656
	    m originalMethod == self ifTrue:[^ m].
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3657
	].
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
  3658
    ].
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3659
    ^ nil
13847
c1552e51c27a changed: #wrapper
Claus Gittinger <cg@exept.de>
parents: 13817
diff changeset
  3660
c1552e51c27a changed: #wrapper
Claus Gittinger <cg@exept.de>
parents: 13817
diff changeset
  3661
    "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
  3662
!
0f513f04c50f #readsFields: and #writesField: for st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 5562
diff changeset
  3663
0f513f04c50f #readsFields: and #writesField: for st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 5562
diff changeset
  3664
writesField:instVarIndex
0f513f04c50f #readsFields: and #writesField: for st80 compatibility
Claus Gittinger <cg@exept.de>
parents: 5562
diff changeset
  3665
    "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
  3666
     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
  3667
14237
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3668
    |instVarName|
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3669
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3670
    instVarName := (self mclass allInstVarNames) at:instVarIndex.
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3671
    ^ self writesInstVar:instVarName
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3672
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3673
    "Modified: / 23-07-2012 / 11:16:51 / cg"
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3674
!
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3675
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3676
writesInstVar:instVarName
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3677
    "return true, if the named instvar is written (modified) by the receiver.
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3678
     Uses parser (for now); could look at bytecode as well here..."
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3679
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3680
    |modifiedInstVars|
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3681
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3682
    (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
  3683
    modifiedInstVars := self parse:#'parseMethodSilent:in:' with:self mclass return:#modifiedInstVars or:#().
14237
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3684
    ^ modifiedInstVars includes:instVarName.
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3685
Claus Gittinger <cg@exept.de>
parents: 14236
diff changeset
  3686
    "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
  3687
! !
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  3688
14863
49e50305f097 class: Method
Claus Gittinger <cg@exept.de>
parents: 14595
diff changeset
  3689
!Method methodsFor:'source management'!
49e50305f097 class: Method
Claus Gittinger <cg@exept.de>
parents: 14595
diff changeset
  3690
49e50305f097 class: Method
Claus Gittinger <cg@exept.de>
parents: 14595
diff changeset
  3691
revisionInfo
17402
821369b223e8 class: Method
Claus Gittinger <cg@exept.de>
parents: 17361
diff changeset
  3692
    "cg: is this correct for extensions? (shouldn't this be the revisionInfo from the extensions container?)"
14863
49e50305f097 class: Method
Claus Gittinger <cg@exept.de>
parents: 14595
diff changeset
  3693
49e50305f097 class: Method
Claus Gittinger <cg@exept.de>
parents: 14595
diff changeset
  3694
    ^self containingClass theNonMetaclass revisionInfo
49e50305f097 class: Method
Claus Gittinger <cg@exept.de>
parents: 14595
diff changeset
  3695
49e50305f097 class: Method
Claus Gittinger <cg@exept.de>
parents: 14595
diff changeset
  3696
    "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
  3697
    "Modified: / 12-09-2010 / 16:38:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
49e50305f097 class: Method
Claus Gittinger <cg@exept.de>
parents: 14595
diff changeset
  3698
! !
49e50305f097 class: Method
Claus Gittinger <cg@exept.de>
parents: 14595
diff changeset
  3699
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
  3700
!Method methodsFor:'trap methods'!
13
62303f84ff5f *** empty log message ***
claus
parents: 10
diff changeset
  3701
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
  3702
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
  3703
    "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
  3704
     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
  3705
     the objectFileLoader to invalidate methods whose code is unloaded."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3706
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
  3707
    |invldMethod|
159
514c749165c3 *** empty log message ***
claus
parents: 142
diff changeset
  3708
18438
0655839a70f8 class: Method
Stefan Vogel <sv@exept.de>
parents: 18431
diff changeset
  3709
    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
  3710
    self code:invldMethod code.
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3711
    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
  3712
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3713
    "Created: 17.9.1995 / 15:00:52 / claus"
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3714
    "Modified: 4.11.1996 / 23:04:34 / cg"
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3715
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3716
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
  3717
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
  3718
    "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
  3719
     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
  3720
     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
  3721
     after a class definition change (for example: instvars are no longer there)."
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3722
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
  3723
    |invldMethod|
872
af04035b443d binary class storage support
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  3724
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
  3725
    invldMethod := self class compiledMethodAt:#uncompiledCodeObject.
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3726
    self code:invldMethod code.
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3727
    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
  3728
d600e08a5936 handle the case where a method has a sourceFileInfo, but the class has not
Claus Gittinger <cg@exept.de>
parents: 934
diff changeset
  3729
    "Created: 17.9.1995 / 15:01:14 / claus"
1873
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3730
    "Modified: 4.11.1996 / 23:04:46 / cg"
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3731
!
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3732
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3733
makeUnloaded
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3734
    "make the receiver an unloaded method, which raises an invalidCodeObject
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3735
     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
  3736
     the objectFileLoader to invalidate methods for which a shared library has
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3737
     been removed."
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3738
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3739
    |invldMethod|
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3740
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3741
    invldMethod := self class compiledMethodAt:#unloadedCodeObject.
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3742
    self code:invldMethod code.
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3743
    self byteCode:nil.
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3744
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3745
    "Created: 4.11.1996 / 22:59:21 / cg"
3544a4a94a2a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1870
diff changeset
  3746
    "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
  3747
!
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  3748
2623b60c27e1 lifted numVars; added access for invalidCodeObject-trappers
Claus Gittinger <cg@exept.de>
parents: 1855
diff changeset
  3749
trapMethodForNumArgs:numArgs
13657
206c6696707b added: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13651
diff changeset
  3750
    ^ self class trapMethodForNumArgs:numArgs
206c6696707b added: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13651
diff changeset
  3751
206c6696707b added: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13651
diff changeset
  3752
    "Created: / 04-11-1996 / 21:58:58 / cg"
206c6696707b added: #trapMethodForNumArgs:
Claus Gittinger <cg@exept.de>
parents: 13651
diff changeset
  3753
    "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
  3754
! !
872
af04035b443d binary class storage support
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  3755
2022
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3756
!Method::MethodWhoInfo class methodsFor:'documentation'!
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3757
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3758
documentation
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3759
"
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3760
    In earlier times, Method>>who returned an array filled
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3761
    with the methods class and selector.
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3762
    This was done, since a smalltalk method cannot return multiple
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3763
    values, but 2 values had to be returned from that method.
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3764
    Thus, the who-interface was used as:
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3765
	info := <someMethod> who.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3766
	class := info at:1.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3767
	sel := info at:2.
2022
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3768
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3769
    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
  3770
    an object (an instance of MethodWhoInfo) which responds to the two
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3771
    messages: #methodClass and #methodSelector.
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3772
    This allows to write things much more intuitive:
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3773
	info := <someMethod> who.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3774
	class := info methodClass.
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3775
	sel := info methodSelector.
2022
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3776
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3777
    However, to be backward compatible, the returned object still responds to
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3778
    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
  3779
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3780
    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
  3781
    classes.
2242
5037033b8002 commentary
Claus Gittinger <cg@exept.de>
parents: 2218
diff changeset
  3782
5037033b8002 commentary
Claus Gittinger <cg@exept.de>
parents: 2218
diff changeset
  3783
    [author:]
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3784
	Claus Gittinger
2242
5037033b8002 commentary
Claus Gittinger <cg@exept.de>
parents: 2218
diff changeset
  3785
5037033b8002 commentary
Claus Gittinger <cg@exept.de>
parents: 2218
diff changeset
  3786
    [see also:]
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3787
	Method
2022
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3788
"
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3789
! !
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3790
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3791
!Method::MethodWhoInfo class methodsFor:'instance creation'!
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3792
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3793
class:cls selector:sel
2023
4c6416d1a54d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2022
diff changeset
  3794
    "return a new MethodWhoInfo object;
4c6416d1a54d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2022
diff changeset
  3795
     this is a private interface for Method"
4c6416d1a54d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2022
diff changeset
  3796
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3797
    ^ self basicNew class:cls selector:sel
2023
4c6416d1a54d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2022
diff changeset
  3798
4c6416d1a54d checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2022
diff changeset
  3799
    "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
  3800
! !
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3801
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3802
!Method::MethodWhoInfo methodsFor:'accessing'!
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3803
4669
828addb1c376 source code access - care for package different from my classes
Claus Gittinger <cg@exept.de>
parents: 4595
diff changeset
  3804
method
828addb1c376 source code access - care for package different from my classes
Claus Gittinger <cg@exept.de>
parents: 4595
diff changeset
  3805
    ^ myClass compiledMethodAt:mySelector
828addb1c376 source code access - care for package different from my classes
Claus Gittinger <cg@exept.de>
parents: 4595
diff changeset
  3806
!
828addb1c376 source code access - care for package different from my classes
Claus Gittinger <cg@exept.de>
parents: 4595
diff changeset
  3807
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3808
methodClass
2022
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3809
    "return the class which contains the method represented by myself"
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3810
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3811
    ^ myClass
2022
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3812
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3813
    "
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3814
     (Method compiledMethodAt:#who) who methodClass
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3815
     (Method::MethodWhoInfo compiledMethodAt:#methodClass) who methodClass
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3816
    "
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3817
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3818
    "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
  3819
!
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3820
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3821
methodSelector
2022
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3822
    "return the selector under which the the method represented by myself
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3823
     is found in the class"
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3824
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3825
    ^ mySelector
2022
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3826
24529e2b7cee commentary for MethodWhoInfo
Claus Gittinger <cg@exept.de>
parents: 1995
diff changeset
  3827
    "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
  3828
! !
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3829
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3830
!Method::MethodWhoInfo methodsFor:'compatibility'!
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3831
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3832
at:index
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3833
    "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
  3834
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3835
    index == 1 ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3836
	^ myClass
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3837
    ].
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3838
    index == 2 ifTrue:[
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3839
	^ mySelector
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3840
    ].
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3841
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3842
    "/ sigh - full compatibility ?
7219
7c7b9d76af21 subscriptBoundsError -> subscriptBoundsError:
Claus Gittinger <cg@exept.de>
parents: 7210
diff changeset
  3843
    ^ self indexNotIntegerOrOutOfBounds:index
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3844
! !
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3845
7258
9ccdbee7d1ad method category rename
Claus Gittinger <cg@exept.de>
parents: 7219
diff changeset
  3846
!Method::MethodWhoInfo methodsFor:'private-accessing'!
1851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3847
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3848
class:cls selector:sel
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3849
    myClass := cls.
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3850
    mySelector := sel
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3851
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3852
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3853
! !
4accc9fafd19 change #who to return a proper object
Claus Gittinger <cg@exept.de>
parents: 1813
diff changeset
  3854
13570
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3855
!Method::ParseTreeCacheEntry methodsFor:'accessing'!
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3856
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3857
method
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3858
    ^ method
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3859
!
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3860
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3861
method:something
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3862
    method := something.
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3863
!
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3864
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3865
parser
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3866
    ^ parser
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3867
!
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3868
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3869
parser:something
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3870
    parser := something.
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3871
!
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3872
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3873
parserClass
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3874
    ^ parserClass
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3875
!
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3876
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3877
parserClass:something
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3878
    parserClass := something.
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3879
!
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3880
13660
Claus Gittinger <cg@exept.de>
parents: 13659
diff changeset
  3881
parserClass:parserClassArg method:methodArg
13570
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3882
    parserClass := parserClassArg.
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3883
    method := methodArg.
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3884
!
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3885
13660
Claus Gittinger <cg@exept.de>
parents: 13659
diff changeset
  3886
parserClass:parserClassArg method:methodArg parser:parserArg
13570
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3887
    parserClass := parserClassArg.
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3888
    method := methodArg.
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3889
    parser := parserArg.
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3890
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3891
    "Created: / 08-08-2011 / 19:05:02 / cg"
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3892
! !
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3893
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3894
!Method::ParserCacheEntry methodsFor:'accessing'!
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3895
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3896
method
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3897
    ^ method
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3898
!
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3899
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3900
method:something
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3901
    method := something.
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3902
!
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3903
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3904
parser
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3905
    ^ parser
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3906
!
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3907
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3908
parser:something
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3909
    parser := something.
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3910
!
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3911
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3912
parserClass
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3913
    ^ parserClass
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3914
!
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3915
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3916
parserClass:something
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3917
    parserClass := something.
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3918
!
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3919
13660
Claus Gittinger <cg@exept.de>
parents: 13659
diff changeset
  3920
parserClass:parserClassArg method:methodArg
13570
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3921
    parserClass := parserClassArg.
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3922
    method := methodArg.
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3923
!
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3924
13660
Claus Gittinger <cg@exept.de>
parents: 13659
diff changeset
  3925
parserClass:parserClassArg method:methodArg parser:parserArg
13570
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3926
    parserClass := parserClassArg.
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3927
    method := methodArg.
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3928
    parser := parserArg.
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3929
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3930
    "Created: / 08-08-2011 / 19:05:02 / cg"
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3931
! !
382db10e848d changed: #parse:with:return:or:
Claus Gittinger <cg@exept.de>
parents: 13569
diff changeset
  3932
1775
6892b91ddc0b F_CALLED flag is no longer present
Claus Gittinger <cg@exept.de>
parents: 1692
diff changeset
  3933
!Method class methodsFor:'documentation'!
872
af04035b443d binary class storage support
Claus Gittinger <cg@exept.de>
parents: 829
diff changeset
  3934
13569
82bcca38e855 comment/format in: #sends:or:
Claus Gittinger <cg@exept.de>
parents: 13567
diff changeset
  3935
version
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3936
    ^ '$Header$'
13569
82bcca38e855 comment/format in: #sends:or:
Claus Gittinger <cg@exept.de>
parents: 13567
diff changeset
  3937
!
82bcca38e855 comment/format in: #sends:or:
Claus Gittinger <cg@exept.de>
parents: 13567
diff changeset
  3938
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3939
version_CVS
18620
b4e9f25d6ce6 preparations for lined index list in WeakArray
Claus Gittinger <cg@exept.de>
parents: 18462
diff changeset
  3940
    ^ '$Header$'
12159
1768c0019100 compiler interface
fm
parents: 12017
diff changeset
  3941
!
1768c0019100 compiler interface
fm
parents: 12017
diff changeset
  3942
13422
b43a8a47037c Jan's changes
vrany
parents: 13390
diff changeset
  3943
version_SVN
15245
84fe46f42c9f class: Method
Claus Gittinger <cg@exept.de>
parents: 15109
diff changeset
  3944
    ^ '$ Id: Method.st 10648 2011-06-23 15:55:10Z vranyj1 $'
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
  3945
! !
6956
23f0066163ff oops - EOL comments were handled wrong
Claus Gittinger <cg@exept.de>
parents: 6725
diff changeset
  3946
14863
49e50305f097 class: Method
Claus Gittinger <cg@exept.de>
parents: 14595
diff changeset
  3947
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
  3948
Method initialize!